软件工程

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

3
C ++ 11统一初始化是否可以替代旧式语法?
我知道C ++ 11的统一初始化解决了该语言在语法上的歧义,但是在许多Bjarne Stroustrup的演示文稿中(尤其是在GoingNative 2012演讲期间的那些演示文稿中),他的示例现在在构造对象时主要使用此语法。 现在是否建议在所有情况下都使用统一初始化?就编码风格和一般用法而言,此新功能应采用的一般方法是什么?什么原因不使用它? 请注意,在我的脑海中,我主要以对象构造作为用例,但是如果要考虑其他场景,请告诉我。
172 c++  c++11 

15
开发人员坚持认为,语句不应具有否定条件,而应始终具有else块
我有一个相识的人,一个比我经验丰富的开发人员。我们在谈论编程实践,而他对“ if”语句的处理方式让我感到惊讶。他坚持一些关于if陈述的做法,我觉得这很奇怪。 首先,在if语句后应加上else语句,无论是否要放入其中。导致代码如下所示: if(condition) { doStuff(); return whatever; } else { } 其次,最好测试真值而不是假值。这意味着最好测试“ doorClosed”变量而不是“!doorOpened”变量 他的观点是,这使代码的工作更加清晰。 这让我很困惑,因为如果他想在不满足条件的情况下执行某些操作,那么这两个规则的组合会使他编写此类代码。 if(condition) { } else { doStuff(); return whatever; } 我对此的感觉是,它确实很丑陋和/或质量改进(如果有)可忽略不计。但是作为一个大三学生,我很容易怀疑自己的直觉。 所以我的问题是:这是好/坏/“无关紧要”的做法吗?这是惯例吗?

23
编写科学代码时干净编程
我不是真的写大型项目。我不是在维护庞大的数据库,也不是在处理数百万行代码。 我的代码主要是“脚本”类型的东西-测试数学功能或模拟某些东西的东西-“科学编程”。到目前为止,我从事的最长程序是几百行代码,而我从事的大多数程序都在150左右。 我的代码也很烂。前几天,当我试图找到我之前写的一个文件时,我意识到了这一点,但是我可能改写了,并且我没有使用版本控制,这可能使大量的您对我的愚蠢感到痛苦。 我的代码风格令人费解,并填充了过时的注释,这些注释指出了执行某项操作的替代方法或复制了几行代码。尽管变量名总是以非常好的描述性开始,但是当我按照某人想要测试的新内容进行添加或更改时,代码却被覆盖在顶部并被覆盖,因为我觉得这件事应该立即进行测试。有一个框架,我开始使用糟糕的变量名,并且文件进入了pot。 在我现在正在从事的项目中,我正处在所有这些阶段都重新吸引我的阶段。但是问题是(除了使用版本控制,以及为每个新迭代创建一个新文件并将其全部记录在某个地方的文本文件中,这可能会极大地改善这种情况)我真的不知道如何进行改进我实际的编码风格。 编写较小的代码是否需要单元测试?OOP怎么样?相对于处理较大的项目,什么样的方法适合在进行“科学编程”时快速编写优质,清晰的代码? 我之所以问这些问题,是因为编程本身通常并不复杂。它更多地是关于我正在通过编程测试或研究的数学或科学。例如,当两个变量和一个函数可能需要处理时,是否需要一个类?(考虑到一般情况下,程序的速度也应优先考虑更快的情况-当您运行25,000,000+个仿真时间步长时,您一定会希望它是这样。) 也许范围太广了,如果是的话,我对此表示歉意,但是从编程书籍的角度来看,它们似乎经常在大型项目中得到解决。我的代码不需要 OOP,而且已经很短了,所以它不像“哦,但是如果这样做的话,文件将减少一千行!” 我想知道如何在这些较小,更快的项目上“重新开始”并进行干净的编程。 我很乐意提供更多具体细节,但是我认为建议越笼统,就越有用。我正在用Python 3编程。 有人建议重复。让我明确地说,我并不是在谈论完全忽略标准编程标准。显然,存在这些标准是有原因的。但是,另一方面,如果可以完成一些标准的工作,写出说OOP的代码真的有意义吗?程序? 有例外。此外,除了简单的标准外,可能还有科学编程的标准。我也在问那些。这与编写科学代码时是否应忽略常规编码标准无关,而与编写干净的科学代码有关! 更新资料 只是以为我会添加“不超过一个星期以后”的更新。您的所有建议都非常有帮助。我现在使用版本控制-git,其中git kraken用于图形界面。它非常易于使用,并且彻底清理了我的文件-不再需要保留旧文件,也不再需要旧版本的代码“以防万一”。 我还安装了pylint并在所有代码上运行了它。最初,一个文件的分数为负。我什至不知道那怎么可能。我的主文件开始于〜1.83 / 10,现在为〜9.1 / 10。现在,所有代码都非常符合标准。我还用自己的眼睛跑过去,更新了已经消失的变量名,嗯,很糟糕,正在寻找要重构的部分。 特别是,我在这个网站上最近问了一个有关重构我的主要功能的问题,它现在更加整洁和短了很多:它不再是一个冗长,肿的if / else填充功能,现在不到一半的大小,更容易弄清楚发生了什么。 我的下一步是实施各种“单元测试”。我的意思是一个可以在主文件上运行的文件,该文件使用assert语句和try / excepts来查看其中的所有功能,这可能不是最好的方法,并且会导致重复的代码很多,但我会继续阅读并尝试找出如何做得更好。 我还对我已经编写的文档进行了重大更新,并向github存储库添加了补充文件,例如excel电子表格,文档和相关论文。现在看起来有点像一个真正的编程项目。 所以...我想这就是要说的:谢谢。

10
为什么“清洁代码”建议避免使用受保护的变量?
干净代码建议在“格式”一章的“垂直距离”部分中避免使用受保护的变量: 紧密相关的概念应在垂直方向上彼此靠近。显然,此规则不适用于属于单独文件的概念。但是,除非您有充分的理由,否则不应将紧密相关的概念分成不同的文件。确实,这是应避免使用受保护变量的原因之一。 这是什么原因?

6
REST和CRUD之间的区别
我学习了REST,感觉很像CRUD(根据我对CRUD的了解)。 我知道它们是不同的,并且我想知道是否认为它们相似意味着我不理解它们。 REST是CRUD的“超集”吗?CRUD所做的一切以及更多吗?
168 rest  crud 

3
MIT许可证的含义
假设我使用根据MIT许可发布的ActionScript API来构建软件:http : //www.cove.org/ape/docs/api/ 我可以出售该软件吗? 我需要放弃软件的源代码吗? 接收我软件的任何人都可以转售该软件吗?

10
Mono通常被用来表示“是的,.NET是跨平台的”。该要求的有效性如何?[关闭]
在此时,您将为.NET和Java之间的项目选择什么?我说我会考虑“您将始终部署到Windows吗?” 在新的Web项目中占据先机的最重要的技术决定,如果答案为“否”,我建议使用Java而不是.NET。 一个非常普遍的反论点是“如果我们要在Linux / OS X /任何平台上运行,我们将只运行Mono” 1,这是表面上一个非常引人注目的论点,但我不同意原因。 OpenJDK和所有供应商提供的JVM已通过官方的Sun TCK,以确保一切正常。我不知道Mono通过Microsoft TCK。 Mono落后于.NET版本。当前完全支持什么.NET级别? 所有GUI元素(WinForms?)在Mono中都能正常工作吗? 企业可能不希望将开源框架作为官方计划B。 我知道随着Oracle对Java的新管理,未来并不安全,但是例如IBM为许多平台(包括Linux)提供了JDK。他们只是不是开源的。 那么,在哪种情况下Mono是.NET应用程序的有效业务策略? 1 Mark H总结为:“如果声称“我有一个用.NET编写的Windows应用程序,则应在mono上运行”,则不是,这不是有效的声明-但Mono已努力进行此类应用程序的移植更简单。”
168 java  .net  mono 

28
如何成为零缺陷程序员?[关闭]
我的老板总是告诉我,一个好的程序员应该能够确保他或她更改的代码是可靠,正确和彻底的自我验证的;您应该完全了解所有结果以及更改将导致的影响。我已经尽力成为这样的程序员-通过一次又一次的测试-但是错误仍然存​​在。 我如何才能成为一个零错误的程序员,并且知道我的代码的每个字符都会引起什么影响?
168 code-quality 


12
操作系统如何运行……而无需运行操作系统?
我现在真的很好奇。我是Python程序员,这个问题令我感到困惑:您编写了一个OS。您如何运行它?它必须以某种方式运行,并且这样可以在另一个OS中运行吗? 没有OS的情况下如何运行应用程序?如果没有要运行的操作系统,如何告诉计算机运行C,并在屏幕上执行这些命令? 它与UNIX内核有关吗?如果是这样,什么是Unix内核,或者一般来说是一个内核? 我敢肯定,操作系统比这更复杂,但是它如何工作?

9
我更改了一种方法签名,现在有25,000多个错误。现在怎么办?
我最近开始了新工作,正在处理一个非常大的应用程序(15M loc)。在我之前的工作中,我们有一个类似的大型应用程序,但是(不管是好是坏)我们使用OSGi,这意味着该应用程序被分解为许多微服务,这些微服务可以独立地更改,编译和部署。新的应用程序只是一个大型代码库,可能包含几个.dll。 所以我需要更改此类的界面,因为这是老板要求我执行的操作。最初,他们在编写时就采用了一些假设,但并不能很好地概括其概论,并且有一段时间以来,他们一直在避免重构问题,因为它是如此紧密地耦合在一起。我更改了界面,现在有25000多个错误。有些错误是在具有重要发音的类(如“ XYZPriceCalculator”)中重新产生的不应该打破。但是在解决所有错误之前,我无法启动应用程序来检查其是否正常运行。而且许多单元测试要么直接引用该接口,要么耦合到引用该接口的基类,因此,仅对其进行修复本身就是一项巨大的任务。另外,我真的不知道所有这些部分是如何组合在一起的,因此即使我可以开始学习,但我真的不知道如果事情破裂了会是什么样。 在上一份工作中,我从未真正遇到过这样的问题。我该怎么办?

30
有没有著名的单兵程序员?
最近,我学习到越来越多的程序员,他们认为,如果他们一个人工作,他们会更快,并且质量更高。通常,这种感觉与他们在团队中进行最好的编程的感觉有关,总而言之,这个想法似乎很合理。如果他们正在做最好的编程,并且独自工作(也许更多),那么最终结果将是更好的软件。 我知道,只有您有足够的热情在规定的期限内按时完成24/7,并且纪律严明,这个想法才会奏效。 因此,在考虑了这个想法并试图学到更多知识之后,我想知道过去是否有著名的单臂程序员提供过任何(有用的)软件?

21
快速又肮脏的程序员如何知道他们做对了?
如果您问程序员为什么他们应该编写简洁的代码,那么获得的第一答案就是可维护性。尽管这是我的清单,但我的主要原因是更直接,更无私的:如果太脏,我无法确定我的新代码是否正确。我发现我已经非常专注于单个函数和代码行,以至于当我完成初稿并再次查看大图时,有时并不能很好地融合在一起。花一两个小时进行清洁重构通常会发现在草稿中很难检测到的复制/粘贴错误或边界条件。 但是,有些人认为为了运输软件的利益,有意偶尔检查脏代码是可以的,并计划“稍后对其进行清理”。当可读性不理想时,是否有某种可行的技术可以使他们对代码的正确性充满信心?这是值得尝试发展的技能吗?还是人们对代码缺乏信心会使某些人容易接受?
166 design 

7
魔术弦有什么问题?
作为经验丰富的软件开发人员,我学会了避免使用魔术字符串。 我的问题是,自从我使用它们已经有这么长时间了,我已经忘记了大多数原因。结果,我无法向经验不足的同事们解释为什么它们是一个问题。 有什么客观原因可以避免它们?它们会导致什么问题?

11
“神话人月”的“手术团队”模式发生了什么?
几年前,当我读《神话人月》时,我发现了很多我已经从其他来源知道的东西。但是,尽管那本书是1975年的,但那里还是有新事物。其中之一是: 手术团队 Mills建议将大型工作的每个部分都安排到一个团队中,但该团队的组织应像外科手术团队一样,而不是生猪屠宰团队。就是说,不是每个成员都去解决问题,而是一个人去削减,其他人给他提供一切支持,这将提高他的效率和生产力。 对于组织软件开发团队来说,这是一个非常有趣的模式,但是我从未在任何其他软件工程书中找到它,甚至在任何地方都没有提及。 这是为什么? 当时的“手术团队”是否还很特别? 还是尝试过并失败了? 如果是这样,它是怎么失败的? 如果不是,为什么我们今天的软件项目中看不到这种模式呢?

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.