软件工程

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

6
开源而不是自由软件(反之亦然)[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 自由软件基金会对“自由软件”的定义: “免费软件重在自由,而非价格。要理解这个概念,您应该将“自由”视为“言论自由”,而不是“免费啤酒”。 自由软件是用户自由运行,复制,分发,学习,更改和改进软件的问题。更准确地说,这意味着程序的用户拥有四个基本自由: 出于任何目的运行程序的自由度(自由度0)。 自由学习程序的工作原理,并对其进行更改以使其按您的意愿进行操作(自由1)。前提条件是访问源代码。 重新分发副本的自由,以便您可以帮助邻居(自由2)。 将修改版本的副本分发给他人的自由(自由3)。通过这样做,您可以使整个社区都有机会从您的更改中受益。前提条件是访问源代码。 如果用户拥有所有这些自由,则该程序是免费软件。因此,无论有无修改,您都可以自由地将副本重新分发给任何地方的任何人,既可以免费获得,也可以收取发行费用。自由地做这些事情意味着(其中包括)您不必征求这样做的许可或同意。 来自开源计划的“开源软件”的定义: 开源不仅意味着可以访问源代码。开源软件的发行条款必须符合以下条件: 免费重新分发许可证不得限制任何一方出售或赠送软件,该软件是包含多个不同来源程序的总体软件分发的一部分。许可证不要求此类销售的特许权使用费或其他费用。 源代码该程序必须包括源代码,并且必须允许以源代码和编译形式进行分发。在某种形式的产品未附带源代码的情况下,必须有一种广为人知的获取源代码的方法,价格最好不超过合理的复制成本,最好是通过Internet免费下载。源代码必须是程序员用来修改程序的首选形式。不允许故意混淆的源代码。不允许使用中间形式,例如预处理器或翻译器的输出。 衍生作品许可必须允许修改和衍生作品,并且必须允许它们按照与原始软件许可相同的条款进行分发。 作者源代码的完整性仅当许可证允许分发带有源代码的“补丁文件”以便在构建时修改程序时,许可证才可以限制源代码以修改形式分发。该许可证必须明确允许分发由修改后的源代码构建的软件。许可证可能要求衍生作品带有与原始软件不同的名称或版本号。 不得歧视个人或团体许可证不得歧视任何个人或团体。 不得歧视任何领域许可证不得限制任何人在特定领域内使用该程序。例如,它可能不会限制该程序在企业中使用或在遗传研究中使用。 许可证的分发程序附带的权利必须适用于向其重新分发了程序的所有人员,而无需那些当事方执行其他许可证。 许可证不得特定于产品程序附带的权利不得取决于程序是否属于特定软件发行版。如果从该发行版本中提取程序,并在该程序的许可范围内使用或分发该程序,则重新发行该程序的所有各方均应具有与原始软件发行版本一起授予的权利。 许可证不得限制其他软件许可证不得限制与许可软件一起分发的其他软件。例如,许可证不得坚持要求在同一介质上分发的所有其他程序都必须是开源软件。 许可证必须是技术中立的。不得以任何单独的技术或界面风格为依据提供许可证。 这些定义尽管来自不同的意识形态,但具有广泛的兼容性,并且大多数自由软件也是开源软件,反之亦然。但是,我相信情况并非如此:软件有可能在没有免费的情况下成为开源,或者有可能在没有开源的情况下成为自由。 问题 我的信念正确吗?软件是否有可能陷入一个阵营,而不是另一个阵营? 真的有这样的软件吗?请举例子。 澄清度 我现在已经接受了答案,但是我似乎使很多人感到困惑,所以也许有必要进行澄清。我不是在问copyleft(或“病毒”,尽管我不喜欢该术语)与非copyleft(“许可”)许可证之间的区别。我也没有问过您对“免费”和“开放”的个性化定义。我在问“ FSF定义的自由软件”和“ OSI定义的开源软件”。两者总是一样吗?有可能没有一个就成为一个? 答案似乎是,没有开放就不可能免费,但是没有自由就可能开放。谢谢所有实际回答问题的人。

5
分配给代码审查的时间
如果您正在执行代码审查 与实施相比,您在代码审查上花费了多少时间? 有多少更改需要进行代码审查? 您认为应该很多/应该更多吗? 是否有关于有效性的研究? [edit]谢谢大家的回答,很难为这样的问题选择“赢家”,其他答复中也有很多有价值的信息。

10
您如何进行数据库设计?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我主要是一名Web开发人员,并且我要启动几个个人项目。 让我烦恼的一件事是数据库设计。我已经完成了学校的db规范化和类似工作,但是已经有两年了,除了学校,我从未有过关系数据库设计的经验。 那么,您如何从Web应用程序的角度来处理数据库呢?您如何开始?寻找什么?什么是警告标志?

8
在Java中,检查异常有什么用处?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 多年来,Java的受检查异常受到了一些负面报道。一个明显的迹象是,它实际上是世界上唯一拥有它们的语言(甚至不是其他JVM语言,例如Groovy和Scala)。诸如Spring和Hibernate之类的著名Java库也不使用它们。 我个人已经发现了它们的一种用途(在层之间的业务逻辑中),但除此之外,我还是非常反对检查的异常。 还有其他我没有意识到的用途吗?

7
您是否会使用在线技术技能测试来雇用高级开发人员?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 有一些在线服务,例如IKM,可以在许多领域提供技能测试,包括编程。 雇用高级开发人员职位时,您会使用这类测试吗? 仅在呼叫候选人面试之前客观地对他们进行基准测试呢?您会在面试后筛选候选人之后使用它吗? 与其他情况相比,这种方法在某些情况下是否更合适?您是否亲自使用过这种服务或认识某人?
14 hiring  interview 

12
早期创业公司如何雇用忍者程序员[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我是刚开始研究启动创意的程序员。目前,我想邀请至少一名程序员加入。该程序员应该是忍者-10倍工程师。 由于早期对于初创公司来说可能是最危险的,所以我想确保尽我所能来解决这个问题。 我如何找到这些人?以及我如何说服他们加入? 我很想听听那些创办自己的公司的人以及他们对招聘的看法 更新:我想让忍者成为联合创始人,所以除了要成为忍者(即具有计算机科学背景的优秀程序员),他/她还必须有健康的冒险欲望(对于优秀的程序员来说,这没什么大不了的因为如果初创公司无法运作,他们可以随时被聘为主流职位)
14 hiring  startup 

10
在大型会议中如何有效地“销售”好的设计
我多次目睹悲惨的悲剧。这是发生了什么: 新项目的团队设计审查。 我看到一个简单的设计,其中有很多孔。 我随便提一下漏洞和避免漏洞的方法。 这些警告被诸如“在现实生活中从未发生过”之类的评论所忽略。 最终“永远不会发生”的事情发生了 紧急团队对已损坏项目的设计审查。 那我该怎么办?保持“我告诉过你”的态度不会赢得朋友和影响人。有时候,岁月流逝,而第3步中的评论却被遗忘了。我绝对不想成为让世界想起麻烦的烦人的害虫。我经常坐下来,看着泰坦尼克号驶向欧洲。 看到糟糕的设计前进很令人沮丧。同样令人沮丧的是,我似乎无法说服其他人当前路径的未决危险。我在团队会议上做得很差,每个人都有不同的理解不同术语的方式。同样,自负倾向于赢得理性和思想。我正在寻找能够说服小组成员使用一些新的复杂想法的好的策略。
14 design  team 

4
单元测试内部组件
您在多大程度上对类/模块/包/等的内部/私有组件进行单元测试?您是否对它们进行了测试,还是仅测试了与外界的接口?这些内部方法的一个示例是私有方法。 例如,想象一下递归下降解析器,它具有从一个中央过程调用的几个内部过程(函数/方法)。到外部世界的唯一接口是中央过程,该过程采用字符串并返回已解析的信息。其他过程解析字符串的不同部分,可以从中央过程或其他过程中调用它们。 当然,您应该通过使用示例字符串调用外部接口并将其与手动分析的输出进行比较来测试外部接口。但是其他程序呢?您是否会分别测试它们以检查它们是否正确解析了其子字符串? 我可以想到一些论点: 优点: 测试越多越好,这可以帮助增加代码覆盖率 通过向外部接口提供输入,某些内部组件可能很难提供特定的输入(例如,边缘情况) 更清晰的测试。如果内部组件具有(已修复的)错误,则该组件的测试用例可以清楚地表明该错误位于该特定组件中 缺点: 重构变得非常痛苦和耗时。要更改任何内容,即使外部接口的用户不受影响,也需要重写单元测试。 某些语言和测试框架不允许这样做 您对此有何看法?

8
编程语言如何受益于基于英语?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我认为,当今世界使用基于英语的编程语言进行编程,不仅是因为历史/经济情况,而且还因为英语形态尤其具有某些最适合算法思维的特性。但是无论如何,听到您对此的看法会很有趣,特别是如果您自己会说多种语言。 我已经提到过一些基于德语的语言(例如,请参阅Plankalkul,事实上,由于第二次世界大战,我们对第一门编程语言了解甚少),这也是一种基于俄罗斯的Algol风格,其历史可追溯至80年代至少在纸上,不确定它是否曾经以二进制形式存在。两者看起来都比较呆滞,因为与基于EN的语言相比,完整单词的缩写和怪异缩写要多。因此,如果您知道任何其他基于国家语言的PL,即使今天完全是过时的和无关紧要的,无论是理论上的还是其他方面的知识,对它们进行查看都会很有趣。 回到主要问题:那么,使莎士比亚的语言如此出色地进行编程的是什么(如果有的话)? (实际上在Wikipedia上有一个基于非英语的编程语言列表(当然,还有其他地方吗?),但是听到那些母语的人对给定的“国家”编程语言的真实感受会很有趣。喜欢。)

4
您会在面试中向候选人展示您的生产代码吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我已经多次看到这种情况: 候选人喜欢公司,成功通过面试。然后开始工作,在第一天结束时,他确定代码库/项目不是他想要花费的时间。所以他很快就离开了。 我认为在面试时向代码库介绍候选人可能会解决此问题。甚至更好:将其与诸如“您将如何改进代码的这一部分?”之类的面试问题相结合。这样,如果候选人很适合“代码库”,这将是显而易见的。 您看到这种方法在任何地方都适用吗?您是否会在面试时向候选人展示自己的代码库:他们是否在面试过程中询问/作为面试过程的一部分?

4
没有明显抽象的代码重复
您是否曾经遇到过代码重复的案例,在这种情况下,在查看代码行时,您无法对其进行专题描述以忠实地描述其在逻辑中的作用?您做了什么处理呢? 这是代码重复,因此理想情况下,我们需要进行一些折光处理,例如使其具有自己的功能。但是由于代码没有一个很好的抽象来描述它,所以结果将是一个奇怪的函数,我们甚至无法为其找到一个好名字,而且从逻辑上看,它在逻辑中的作用并不明显。对我来说,这损害了代码的清晰度。我们可以保留清晰度并保持原样,但随后会损害可维护性。 您认为解决此类问题的最佳方法是什么?

16
在过去的12个月中,您学到的最重要,最有用或最有意义的事情是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 编码社区中的很多人都在谈论持续改进,深思熟虑的实践等等,但是当他们谈论当前的实践时,就像是“从宙斯的腰部完全形成”一样,因为您不知道如何做。他们的观点随着时间或最近学到的东西而改变。 尽管我时不时地去演讲,看书或与某人交谈,然后他们打开了更多的书,我发现我从这些见解中学到了很多东西。 那么,如果您不得不在过去的12个月中选择一件事情,那么您会学到什么呢?

3
TDD用于批处理:如何做?
我喜欢RoR等的“红色/绿色/重构”等。 我的日常工作涉及使用python和其他自定义工具批量处理来自第三方的超大文件。 这些文件的属性的流失率很高,因此很多修正/增强功能都经常被应用。 不存在通过具有预期结果的已知测试数据进行回归测试。最近的事情是对最后一批进行手工编码的新测试用例运行,请确保它不会爆炸,然后应用抽查和统计测试来查看数据是否仍然正常。 问>>如何将TDD原理引入这种环境?
14 testing  tdd 

5
非营利性大学可以在线提供计算机科学的本科学位吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有许多知名组织提供的在线计算机科学硕士学位课程。但是,我发现非营利性机构提供的仅有学士学位的学位课程很少。 我正在寻找计算机科学的学位,也正在寻找企业家/管理或算法交易的任何程序。 到目前为止,我只找到2个适合的程序: http://www.regis.edu/regis.asp?sctn=cpcis&p1=ap&p2=cs&p3=ol http://depaul.edu 要求: 100%在线本科非营利组织 选项:理学学士学位文学学士学位 奖励:加速认可的ABET具有成本效益 更新:我已经用清单回答了我的问题。如果有人知道一个在线程序,该程序将企业家精神(获取资金,创业)或算法交易与理想的计算机程序相结合,那么可能就太多了。
14 education 

6
有超级程序员这样的东西吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 您遇到过超级程序员吗?与“普通”的经验丰富/杰出的程序员相比,他或她的身份如何? 也。您如何与团队中一个认为自己是超级程序员的人打交道?两者都是万一他真的是,还是他不是? 编辑:全面有趣的输入,谢谢。可以收集一些信息: 出现了一些定义。忽略过于本地化的定义(将作者或其熟人标识为超级程序员),我喜欢以下几个定义: Thorbjørn的定义:长期以来始终如一地表现出色的团队的人。 自由电子,与亨利的答案有关。一个非常有生产力的人,具有非凡的能力。该说明是一本好书。 当涉及到代码时,自由电子可以做任何事情。他们可以从头开始编写完整的应用程序,在周末学习语言,而且最重要的是,他们可以深入研究大量的意粉代码,弄清楚它,并使其真正起作用。您可以围绕Free Electron建立整个业务。他们真好。 与最后一个定义相反,是James与天才程序员的神话(视频)有关的观点。在rwong的评论中,无意识编程也表达了同样的想法。他们对是否针对这样一个独特的程序员或团队进行优化提出了相反的意见。 这些定义肯定是不同的,因此,如果您有更好的输入,我将不胜感激。当然,也可以添加自己的名称,尽管这将有助于说明为什么它与那些有所不同。

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.