软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

8
客户想要源代码,但是它包含许多我在其他项目中重复使用的共享代码
我有一个客户希望我提供带有开发的应用程序二进制文件的源代码。他们最初对源代码什么也没说,但是最近他们说他们需要它。合同尚未最终确定。他们同意这项工作,没有签字,然后又提出了这一条款。 问题是:我拥有多年来创建的代码库,并用作我编写的大多数应用程序的模板。它远远超出了项目范围。 我也打算将其用于产品,所以我真的不希望为相对较小的项目提供它。 我猜这不是这个行业第一次发生这种情况。规避此问题的最佳方法是什么?我猜想共享库之类的东西可能会有所帮助。

3
为什么编程语言(尤其是C)使用大括号而不是方括号?
实际上,“ C样式语言”的定义可以简化为“使用花括号({})”。我们为什么要使用该特定字符(为什么不使用更合理的字符(如[],至少在美国键盘上不需要Shift键)? 这些花括号会给程序员的生产力带来实际的好处,还是新的语言设计师应该寻找替代品(例如,Python背后的人)? Wikipedia告诉我们C 使用大括号,但不是为什么。Wikipedia上有关基于C的编程语言列表的一篇文章表明,此语法元素有些特殊: 广义上讲,C系列语言是使用类似C的块语法的语言(包括大括号来开始和结束块)。

8
如何仅为受信任的移动应用程序维护REST API
如何确保我的REST API仅响应受信任客户端(对于我自己的移动应用程序)生成的请求?我想防止来自其他来源的不必要的请求。我不希望用户填写序列号或其他任何东西,它应该在安装后在后台进行,并且不需要任何用户交互。 据我所知,HTTPS仅用于验证与之通信的服务器的身份。我当然要使用HTTPS加密数据。 有没有办法做到这一点? 更新: 用户可以执行只读操作,这些操作不需要用户登录,但可以执行写操作,这些操作也需要用户登录(通过访问令牌进行身份验证)。在这两种情况下,我都希望API响应仅来自受信任的移动应用程序的请求。 该API也将用于通过移动应用程序注册新帐户。 更新2:似乎有多个答案,但是老实说,我不知道将哪个标记为答案。有人说可以做到,有人说不能做到。
96 security  rest  mobile 

13
如何警告其他程序员类的实现
我正在编写“必须以特定方式使用”的类(我想所有类都必须...)。 例如,我创建了一个fooManager类,该类需要调用Initialize(string,string)。而且,为了进一步推动该示例,如果我们不听其ThisHappened行为,则该类将无用。 我的意思是,我正在编写的类需要方法调用。但是,如果您不调用这些方法,它将编译得很好,并且最终将得到一个空的新FooManager。在某些时候,根据类及其作用,它要么不起作用,要么崩溃。实现我的类的程序员显然会在其中查找并意识到“哦,我没有调用Initialize!”,这很好。 但是我不喜欢那样。我理想的情况是,如果不调用该方法,则不编译该代码。我猜这根本不可能。或立即可见清晰的事物。 我发现自己对这里的当前方法感到困扰,具体方法如下: 在类中添加一个私有布尔值,并检查类是否已初始化;如果不是,我将抛出一个异常,说“该类尚未初始化,您确定要调用.Initialize(string,string)吗?”。 我对这种方法还可以,但是它会导致很多代码被编译,最终对于最终用户来说是不必要的。 另外,当有更多方法Initiliaze要调用时,有时甚至会有更多的代码。我试图让我的课程没有太多的公共方法/动作,但这并不能解决问题,只是使其合理。 我在这里寻找的是: 我的方法正确吗? 有更好的吗? 你们做什么/建议? 我是否要解决非问题?同事们告诉我,程序员在尝试使用该类之前应先检查该类。我谨对此表示不同意见,但这是我相信的另一件事。 简而言之,我试图找到一种永远不会忘记在以后重用该类或被其他人重用时实现调用的方法。 澄清说明: 要在此处澄清许多问题: 我绝对不仅在谈论类的初始化部分,而且还涉及整个生命周期。防止同事两次调用一个方法,确保他们在Y之前先调用X,以此类推。任何最终成为强制性的要求和文档中的东西,但我希望在代码中尽可能地简化和缩小。我确实很喜欢Asserts的想法,尽管我很确定我将需要混合其他一些想法,因为Asserts并非总是可能的。 我正在使用C#语言!我怎么没提到呢?我在Xamarin环境中,通常在解决方案中使用大约6到9个项目来构建移动应用程序,包括PCL,iOS,Android和Windows项目。我已经从事开发工作大约一年半(包括学校和工作在内),因此有时我会提出荒谬的陈述\问题。所有这一切可能都无关紧要,但是太多的信息并不总是一件坏事。 由于平台的限制和依赖注入的使用,我不能总是将所有必需的东西都放在构造函数中,因为除了Interfaces之外的其他参数都没有了。也许我的知识不足,这很有可能。在大多数情况下,这不是初始化问题,而是更多 我如何确定他注册了该活动? 我如何确保他不会忘记“在某个时候停止该过程” 在这里,我记得一个广告获取类。只要可见“广告”的视图,该类就会每分钟获取一个新广告。该类在构造时需要一个可以显示广告的视图,该视图显然可以包含在参数中。但是,一旦视图消失,必须调用StopFetching()。否则,该类将继续为甚至不在该视图中的视图获取广告,这很糟糕。 同样,该类具有必须被监听的事件,例如“ AdClicked”。如果不听,一切都会很好,但是如果未注册水龙头,我们将失去对分析的跟踪。不过,该广告仍然可以正常运行,因此用户和开发人员不会发现任何差异,并且分析将仅包含错误的数据。需要避免这种情况,但是我不确定开发人员如何知道他们必须注册到tao事件。虽然这是一个简化的示例,但是这里有一个想法,“确保他使用可用的公共动作”,而且当然在正确的时间!

8
浏览器指纹识别是一种用于识别匿名用户的可行技术吗?
浏览器指纹识别是唯一识别匿名用户的足够方法吗?如果您合并了诸如鼠标手势或键入模式之类的生物特征数据,该怎么办? 前几天,我遇到了Panopticlick实验EFF在浏览器指纹上运行。 当然,我立即想到了隐私权的影响以及如何将其用于邪恶。但另一方面,这可以用于极大的好处,至少,这是一个诱人的问题。 在研究该主题时,我发现一些公司使用浏览器指纹来攻击欺诈行为。发送完几封电子邮件后,我可以确认至少有一个主要的约会网站正在使用浏览器指纹作为一种检测假帐户的机制。(注意:他们发现,当扩展到数百万个用户时,它还不够独特,无法充当身份。但是,我的程序员的大脑不想相信他们。) 这是一家使用浏览器指纹进行欺诈检测和预防的公司:http : //www.bluecava.com/ 这是您可以在浏览器中用作唯一标识符的内容的非常全面的列表:http : //browserspy.dk/

10
为什么“从表中选择*”被视为不良做法
昨天我正在与“业余”程序员讨论(我自己是专业程序员)。我们遇到了他的一些工作,他说他总是查询数据库中的所有列(即使在生产服务器上/代码中)。 我试图说服他不要这样做,但是还没有那么成功。在我看来,程序员仅应查询“简洁”,效率和流量方面实际需要的内容。我误会我的观点了吗?
96 database  sql  mysql  bad-code 

14
仍然使用C编程语言吗?
我是C#程序员,我的大部分开发工作都是针对网站以及一些Windows应用程序。就C而言,由于没有必要,我已经很长时间没有使用它了。当我的一个朋友说她在学习C#时需要学习C来测试工作时,我感到惊讶。 我认为,只有有人用C进行开发,才会有人学习C进行测试。据我所知,所有与COM和硬件设计有关的开发也都用C ++进行。因此,如果您需要使用C ++,则学习C毫无意义。我也不相信历史意义,那么为什么要花时间和金钱来学习C? C仍用于任何新软件开发或其他任何形式吗?

25
程序员如何辞职?[关闭]
我正在考虑离开我目前的雇主,想知道在编程领域该如何进行。目前,我们正在进行许多项目,而且我是唯一的开发人员。我们有4-5个相当大的项目,需要在接下来的几个月中完成,甚至需要更长的时间。 我离开是因为我是唯一的雇员,这对我没有好处。我很年轻,想学习,所以一支团队会很棒。这也是太多的工作,并且公司受到可怕的管理。 我没有合约可担心,因此从理论上讲我可以辞职,只是不通知就不要回来。只是想知道这通常是如何处理的。 我应该写辞职信吗 我应该给多少通知 我应该给个理由离开吗 我应该去我要离开的主要原因的老板还是去他的老板? 答复概述 从这里的反馈看来,最好是给2-4个星期的通知,并提出书面辞职。不要详细解释大多数情况下为什么要离开。不要烧桥梁。要专业。

13
如何处理初级开发人员的“差不多好”的代码?[关闭]
我有一个有关团队管理的问题。现在,我正在与一个初级开发人员打交道,该人员正在编码工厂远程工作。这个家伙很容易受到批评并且乐于学习,但是我有些怀疑我应该投入多少。 现在,当某些事情变得直截了当且显而易见时,就会违反良好做法:例如违反SRP,上帝反对,方法或变量的无意义名称;我指出他必须解决的问题,并尝试解释为什么这是错误的。 我的问题是:何时停止?现在,如果存在一些轻微的违反编码风格的行为,例如变量名使用了错误的语言(以前的团队使用西班牙语和英语混合,并且我试图解决该问题),或者如果我遇到一些结构性的小问题,我可以放手进行修复,如果我有任何空闲时间或碰巧需要修改有问题的课程。我觉得这对团队士气是有好处的,所以我不会不断地向初学者介绍代码,这些细节看起来像是很小的细节,这可能会令人沮丧,但是我也担心过于“软化”会阻止这个家伙从学习如何做一些事情。 我如何在教这个人与不因不断批评而把他烧光之间平衡?对于一个大三学生来说,如果您告诉他重做一些他眼中正在工作的东西,那可能会令人沮丧。

12
什么时候函数调用成本在现代编译器中仍然很重要?
我是一个虔诚的人,并努力不犯罪。这就是为什么我倾向于编写较小的函数(小于此值以重写Robert C. Martin)以符合Clean Code圣经所定的几条诫命。但是在检查一些东西的同时,我登陆了这篇文章,在下面我读到这个评论: 请记住,方法调用的成本可能很高,具体取决于语言。在编写可读代码和编写性能代码之间几乎总是要权衡取舍。 考虑到高性能现代编译器行业的丰富性,如今在什么条件下该引用语句仍然有效? 那是我唯一的问题。这与我应该编写长函数还是小函数无关。我只是强调,您的反馈可能会或不会有助于改变我的态度,使我无法抗拒亵渎神灵的诱惑。

9
为什么要使用依赖注入?
我很难找到有关为什么应该使用依赖项注入的资源。我看到的大多数资源都说明它只是将一个对象的实例传递给另一个对象的实例,但是为什么呢?这是仅用于更干净的体系结构/代码,还是会整体上影响性能? 为什么要执行以下操作? class Profile { public function deactivateProfile(Setting $setting) { $setting->isActive = false; } } 而不是以下? class Profile { public function deactivateProfile() { $setting = new Setting(); $setting->isActive = false; } }

13
如果可以,是否应该消除局部变量?
例如,要在Android中保持CPU开启,我可以使用以下代码: PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc"); wakeLock.acquire(); 但我认为局部变量powerManager和wakeLock可以消除: ((PowerManager)getSystemService(POWER_SERVICE)) .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag") .acquire(); 类似的场景出现在iOS警报视图中,例如:from UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ [alertView release]; } 至: [[[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil] show]; -(void)alertView:(UIAlertView *)alertView …

2
到底是什么JavaScript?
这一切始于我正在寻找一种方法来测试我的网页的JavaScript一致性,例如W3C HTML Validator。我还没有找到。所以让我知道你是否知道任何... 我在JavaScript的官方页面中找到了ECMA Script。这些人已经将脚本语言标准化(我不再喜欢用JavaScript!),并将其称为ECMA-262(维基百科)。他们的最新作品是5.1版 JavaScript由Mozilla Corporation开发,其最后一个稳定版本是1.8.5(请参阅此),它基于ECMA的5.1版。 链接的Wikipedia页面提到了方言。Mozilla的JavaScript 1.8.5与JScript 9(IE)和JavaScript(Chrome的V8 [ Wiki ])以及许多其他语言一起被列为方言。我是否知道JavaScript 1.8.5是ECMA-262的派生产品,而SpiderMonkey [ Wiki ]是运行它的引擎?Chrome拥有自己的方言,而运行它的程序是V8引擎? 基于所有基于ECMA-262的方言,我再也无法理解“什么是JavaScript ”?有没有真正的跨浏览器脚本语言?各种实现者是否齐心协力就方言交叉兼容性达成共识?这是ECMA的努力吗?



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.