软件工程

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

17
进行过程中编译代码是否有好处?
我最近接受了一次面试,他们给了我一个小时的时间来编写一些真实的代码。这不是一个很大的数目,可能少于100行。大约45分钟后,我进行了编译,运行并开始运行。我可能花了5到10分钟的时间来解决编译错误和一些小错误,但总体来说还是很顺利的。(顺便说一句,我确实从他们那里得到了报价。) 但是,令我感到困惑的是,在我交出完整的代码后,面试官告诉我,我做错的唯一一件事就是“在进行过程中没有进行编译”。我问他有什么区别,他说:“如果您完成了代码并且没有及时编译,您将怎么做”。 以我的理解,这是一个无效的参数,因为对于给定长度的代码,“获取代码进行编译”通常涉及固定数目的编译错误,并且花费的时间也相当恒定,无论之后是否这样做,这应该是相同的完成编写代码,或者如果您将其与编码时间交织在一起。如果有的话,中断您的编码以搜索丢失的分号可能会损害您的效率。除非在极端情况下,当我尝试对派生类中的虚函数等事物的边缘情况进行模糊处理时,可以合理地预期由有经验的开发人员编写的代码将进行编译,减去偶然的输入错误,甚至如果没有,那就是 在另一起类似的事件中,在一次采访中给我一个不完整的代码库,要求我完成它并进行必要的修改以使其运行。我从阅读现有代码开始,然后过了几分钟(甚至在我看完代码之前),面试官告诉我就足够了。当我问他会做些什么(即“我做错了什么”)时,他告诉我他本来会立即获取代码进行编译。 为什么这甚至有意义?以我的观点和经验来看,一段代码的编译本质上是随机的,涉及诸如分号是否丢失之类的事情,并且与底层程序的正确性无关。(对我来说,专注于编译就像通过拼写检查来运行文章,而无需进行校对来检查语法。) 如果您给我一段不完整的代码,我要做的第一件事就是阅读它。在我不知道代码在做什么并且算法正确之前,我什至不会尝试编译它。 无论如何,这些只是最近发生的几起事件,但总的来说,我听说许多开发人员都在谈论他们在进行代码编译的过程,但是没人能告诉我这样做的好处。我了解在进行代码测试的好处,但是为什么要编译? 所以我的问题是:我错过了什么吗?进行编译实际上有好处吗?还是由软件社区传播的某种神话,您必须经常编译代码?


23
我该如何与不喜欢用代码发表评论的团队成员打交道?
我的团队成员之一一直避免在自己的代码中发表评论。 他的代码不是自记录文档,其他程序员很难理解他的代码。 我已经问过他几次以评论他的代码,但是他只是借口或声称他以后会这样做。他担心的是,添加评论将花费太多时间,并会延迟项目。 我可以向他提出什么论据以说服他正确记录他的代码? 关于这一点,我错在专注于代码注释吗?或者这表明应该解决更大的问题吗?
182 teamwork  team  comments 


8
每种语言都是用C编写的吗?
有时,当使用不同的语言(C / C ++,C#)进行编程时,我想到了这种想法: 每种语言都用C编程语言编写吗? C语言是所有语言的母亲/父亲吗? 每个概念(OOP等)是否都在C中实现? 我的方向正确吗?

17
在日常工作中,您如何在“做到正确”和“尽快做到”之间取得平衡?[关闭]
我发现自己不时地反复思考这个问题。我想以正确的方式做事:编写易于维护的干净,可理解和正确的代码。但是,我最终要做的是在一个补丁上写一个补丁。仅仅因为没有时间,客户在等待,应该一夜之间解决错误,公司在这个问题上赔钱,经理在努力争取等等,等等。 我完全清楚,从长远来看,我在这些补丁上浪费了更多时间,但是由于这段时间要花几个月的时间,所以没人在乎。而且,正如我的一位经理曾经说过的那样:“如果我们现在不解决这个问题,我们不知道是否会长期存在。” 我确信我不是唯一一个陷入无尽的真实/理想选择周期的人。那么,我的程序员同伴如何应对呢? 更新:谢谢大家的有趣的讨论。令人遗憾的是,如此之多的人每天不得不在代码的数量和质量之间进行选择。仍然令人惊讶的是,许多人仍然认为有可能赢得这场战斗,所以谢谢大家的鼓励。

16
为什么自动化测试在我的公司中总是失败?
我们试图在我的公司中多次引入开发人员自动化测试。我们的质量检查团队使用Selenium来自动化UI测试,但是我一直想介绍单元测试和集成测试。过去,每次我们尝试时,每个月的第一个月或第二个月每个人都会感到兴奋。然后,几个月后,人们只是停止这样做。 一些观察和问题: 自动化测试是否有效?我曾经在其他公司工作的大多数同事都尝试过并未能实施自动测试策略。我仍然没有看到一个实际使用它并且不仅仅谈论它的现实软件公司。因此,许多开发人员将自动化测试视为理论上很棒的东西,但实际上却行不通。我们的业务团队希望开发人员即使花费30%的额外时间来做到这一点(至少他们这样说)。但是开发商对此表示怀疑。 没有人真正知道如何正确地进行自动化测试。是的,我们都已经在互联网上阅读了单元测试示例,但是将它们用于大型项目则完全是另外一回事。罪魁祸首是嘲笑/存根数据库或其他不平凡的事情。与编写实际测试相比,您最终花了更多的时间进行模拟。然后,当编写测试花费的时间比编写代码花费的时间长时,就是您放弃了。 在复杂的以数据为中心的Web应用程序中,有没有很好的使用单元测试/系统集成测试的例子?有开源项目吗?我们的应用程序以数据为中心,但也具有大量的域逻辑。我在某个时候尝试了存储库方法,发现它对于单元测试相当不错,但是它是以能够轻松优化数据访问为代价的,它增加了另一层复杂性。 我们有一个由20个经验丰富的开发人员进行的大型项目。这似乎是引入单元测试/集成测试的理想环境。 为什么对我们不起作用?您是如何在公司工作的?

30
编码时微优化重要吗?
最近,我问堆栈溢出问题,找出原因isset()函数比的strlen()快于PHP。这引发了关于可读代码的重要性以及是否值得考虑提高代码中微秒级性能的问题。 我父亲是一位退休的程序员,我给他看了答案。他绝对确定,即使是程序员,即使在微级别上也没有考虑其代码的性能,那么他们就不是优秀的程序员。 我不太确定-也许计算能力的提高意味着我们不再需要考虑这些微性能的改进?也许这种考虑取决于编写实际语言代码的人?(在上述情况下为PHP)。 环境因素可能很重要-互联网消耗了世界能源的10%。我想知道在数百万个网站上万亿次复制时,浪费几微秒的代码是多少? 我想最好根据有关编程的事实来了解答案。 编码时微优化重要吗? 我个人对25个答案的总结,谢谢大家。 有时我们确实需要担心微优化,但仅在极少数情况下才需要担心。在大多数情况下,可靠性和可读性更为重要。但是,不时考虑进行微优化并没有什么坏处。基本的理解可以帮助我们在编码时不要做出明显的错误选择,例如 if (expensiveFunction() || counter < X) 应该 if (counter < X || expensiveFunction()) (来自@ zidarsk8的示例)这可能是一个便宜的函数,因此更改代码将是微优化。但是,有了基本的了解,您就不必这样做了,因为您一开始就可以正确地编写它。

19
如何查看自己的代码?[关闭]
我正在单独进行项目,必须维护自己的代码。通常,代码审阅不是由代码作者完成的,因此审阅者可以以崭新的眼光看代码-但是,我没有那么奢侈。我可以采用哪些实践来更有效地查看自己的代码?

3
实体框架是否适合高流量网站?
对于可能具有1000次点击/秒的公共网站,Entity Framework 4是否是一个好的解决方案? 以我的理解,EF对于大多数小型网站或Intranet网站都是可行的解决方案,但对于像流行的社区网站这样的应用来说,EF并不容易扩展(我知道SO正在使用LINQ to SQL,但是..我想提供更多示例/证明。 ..) 现在,我正处于选择纯ADO.NET方法或EF4的十字路口。您是否认为使用EF提高开发人员的生产力值得失去ADO.NET的性能和细粒度访问(使用存储过程)?高流量网站可能会遇到任何严重问题,是否使用EF? 先感谢您。

30
如何利用编程能力来帮助贫困人口?
作为在大学学习计算机科学的学生,我经常听到朋友们从事各种人道主义项目的工作,我想自己做点什么。但是似乎程序员没有像医生或老师那样多的明显途径来提供帮助。程序员可以通过哪些方式将其才能用于贫困人口?
176 skills 

16
Getter和Setters何时合理
getter和setter经常被批评为不合适的OO。另一方面,我见过的大多数OO代码都有大量的getter和setter方法。 何时使用吸气剂和塞特剂?您是否尝试避免使用它们?他们是否普遍滥用? 如果您最喜欢的语言具有属性(我的语言),那么此类问题也被视为此问题的获取者和准备者。从面向对象方法论的角度来看,它们是同一回事。他们只是语法更好。 Getter / Setter批评的来源(部分摘自评论以使他们更清晰可见): http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html http://typicalprogrammer.com/?p=23 http://c2.com/cgi/wiki?AccessorsAreEvil http://www.darronschall.com/weblog/2005/03/no-brain-getter-and-setters.cfm http://www.adam-bien.com/roller/abien/entry/encapsulation_violation_with_getters_and http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html 简单地说一下批评:Getters和Setters允许您从对象外部操纵对象的内部状态。这违反了封装。只有对象本身应该关心其内部状态。 以及示例程序版本的代码。 struct Fridge { int cheese; } void go_shopping(Fridge fridge) { fridge.cheese += 5; } Mutator版本的代码: class Fridge { int cheese; void set_cheese(int _cheese) { cheese = _cheese; } int get_cheese() { return cheese; } } void …

4
git的两阶段提交过程(登台)有什么好处?
我正在学习git,我注意到它有两步提交过程: git add <files> git commit 第一步是将修订内容放入所谓的“临时区域”或“索引”。 我感兴趣的是为什么要做出此设计决定,其好处是什么? 另外,作为git用户,您可以这样做还是只使用git commit -a? 我问这个问题,因为我来自不具备此功能的bzr(集市)。

5
什么时候使用结构而不是类?[关闭]
您何时使用结构与类的经验法则是什么?我正在考虑这些术语的C#定义,但是如果您的语言具有类似的概念,我也想听听您的意见。 我倾向于对几乎所有东西使用类,并且仅在某些东西非常简单并且应该是值类型(例如PhoneNumber或类似的东西)时才使用structs。但这似乎是一个相对较小的用途,我希望有更多有趣的用例。
174 c#  design  class  struct 

12
API和SDK有什么区别?
当我意识到无法真正分辨出API和SDK之间的区别时,我正在研究各种API和SDK。 从概念上讲,这两种方法都是您的程序与另一种软件进行交互并控制另一种软件提供的资源的一种方式,而无论该其他软件是Web服务,最终用户应用程序,OS服务或守护程序还是内核设备驱动。 那么,SDK和API在语义上有什么区别?

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.