软件工程

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

12
为什么HTML和CSS不是编程语言很重要?
这里的例子: 如果我对构建Web应用程序感兴趣,应该知道哪些语言? 是的,我了解HTML和CSS并不完整。是的,我知道它们是说明性语言,而不是命令性语言。但是,为什么人们在询问有关这些语言的问题时总是总是被这个学问(可能是显而易见的)事实所吸引呢?
158 terminology 

8
例外:为什么要早丢?为什么要迟到?
关于隔离中的异常处理,有许多众所周知的最佳实践。我知道“做与不做”已经足够了,但是在大型环境中的最佳实践或模式方面,事情变得复杂了。“早点扔,迟到”-我已经听过很多次了,但仍然让我感到困惑。 如果在低层发生了空指针异常,为什么还要提早抛出并迟到?为什么要在更高层次上进行捕获?对于我来说,在较高级别(例如业务层)捕获低级异常对我来说没有任何意义。这似乎违反了每一层的关注。 想象一下以下情况: 我有一个计算数字的服务。为了计算图形,服务访问存储库以获取原始数据,并访问其他一些服务以准备计算。如果在数据检索层出现问题,为什么我应该将DataRetrievalException抛出更高级别?相反,我希望将异常包装为有意义的异常,例如CalculationServiceException。 为什么要早扔,为什么要迟到?

13
如果我的团队技能低下,我应该降低代码的技能吗?[关闭]
例如,在JS中有一个通用代码段可以获取默认值: function f(x) { x = x || 'default_value'; } 我的团队的所有成员都不容易理解这种代码片段,因为他们的JS等级很低。 那我不应该使用这个把戏吗?根据任何JS开发人员的说法,它使代码更不易被同级人员读取,但比以下代码更具可读性: function f(x) { if (!x) { x = 'default_value'; } } 当然,如果我使用这个技巧并且同事看到了它,那么他们可以学习一些东西。但是通常情况是,他们认为这是“试图变得聪明”。 那么,如果我的队友的级别低于我,我应该降低代码级别吗?

10
Ken Thompson的编译器黑客仍然是威胁吗?
肯·汤普森·哈克(1984) 肯·汤普森(Ken Thompson)于1984年概述了一种破坏编译器二进制文件(和其他已编译软件,例如* nix系统上的登录脚本)的方法。我很想知道现代编译是否解决了此安全漏洞。 简短的介绍: 重新编写编译器代码以包含2个缺陷: 在编译自己的二进制文件时,编译器必须编译这些缺陷 在编译其他一些预选的代码(登录功能)时,它必须编译一些任意的后门 因此,编译器可以正常工作-编译登录脚本或类似文件时,可以创建安全后门,并且将来在编译自身的较新版本时,它仍保留以前的缺陷- 并且这些缺陷仅存在于编译器中二进制文件,因此很难检测。 问题: 我在网上找不到任何答案: 这与即时编译有什么关系? 运行诸如* nix系统上的登录名的程序之类的功能在运行时是否已编译? 这仍然是一个有效的威胁吗?或者自1984年以来在编译安全性方面的发展阻止了它成为一个重大问题? 这会影响所有语言吗? 我为什么想知道? 我在做作业时遇到了这个问题,这看起来很有趣,但是我缺乏具体了解这个问题是解决当前问题还是解决问题的背景。 参考资料 总览 一些代码
156 linux  unix  compiler  hacking 

20
多年来如何保持大型复杂软件产品的可维护性?
我已经从事软件开发工作多年了。我的经验是,随着越来越多的开发人员参与产品开发,项目变得更加复杂和难以维护。 似乎在开发的某个阶段,软件趋向于变得“骇客”和“骇客”,尤其是当没有一个定义架构的团队成员在公司工作时。 我感到沮丧的是,必须更改某些内容的开发人员很难了解架构的概况。因此,存在解决问题或以与原始体系结构相适应的方式进行更改的趋势。结果是代码变得越来越复杂,甚至变得难以理解。 关于如何保持源代码多年来的可维护性,是否有任何有用的建议?

5
Scheme vs Common Lisp:哪些特征在您的项目中有所作为?[关闭]
在StackOverflow和此站点上都不乏含糊的“方案与通用Lisp”问题,因此,我想使这一问题更加集中。问题是针对使用两种语言进行编码的人: 在使用Scheme编码时,您最想念Common Lisp编码经验的哪些特定元素?或者,相反,在使用Common Lisp进行编码时,您从Scheme编码中错过了什么? 我不一定只是语言功能。就问题而言,以下是所有值得错过的东西: 特定的库。 开发环境的特定功能,例如SLIME,DrRacket等。 特定实现的功能,例如Gambit将C代码块直接写入您的Scheme源的功能。 当然还有语言功能。 我希望得到的答案的示例: “我试图在Common Lisp中实现X,如果我拥有Scheme的一流延续性,我完全会做Y,但是我必须做Z,这更痛苦。” “随着我的源代码树的增长以及我链接到越来越多的C库,在Scheme项目中编写构建过程的脚本变得越来越痛苦。在下一个项目中,我回到了Common Lisp。” “我现有一个庞大的C ++代码库,对我而言,能够将C ++调用直接嵌入到我的Gambit Scheme代码中,这完全是Scheme与Common Lisp相比可能存在的任何缺点,甚至包括缺乏SWIG支持。” 因此,我希望获得战争故事,而不是诸如“方案是一种更简单的语言”之类的一般观点。
155 lisp  scheme 

30
我的老板希望对我们的代码进行逐行叙述的英语解释
我被特别要求我逐行(或适当地-例如逐个图像等)给出我的老板希望能够阅读和遵循的解释或评论。 由于他不是程序员,所以他无法遵循代码,因此希望将其全部翻译成英文。 有人被要求这样做吗? 我已经对所有源代码进行了评论,并使用JSDoc生成了所有函数,变量等的完整文档,并包括一个实现示例和完整的带有演示的演示程序。 我还能为非程序员注释代码吗? 这不是一个合理的要求,对吗? 更新 最后,我设法解释了为什么没有充分利用时间来完成他的要求。他是一个理性的人,只是对我的工作不了解。一旦他看到了这个帖子,我想他很快就会明白这不是正常的要求。 我确实提供了适合其他程序员遵循的文档(JSDoc和内联注释-以及有关技术问题的一些附加说明),以及该程序主要逻辑的非常宽泛的流程图,供老板参考。 最后,各方都感到满意,我们继续前进。


11
我的开发人员测试工作被利用了吗?[关闭]
我正在寻找工作,并且已经申请了许多职位。一位雇主回应。我进行了很长时间的电话采访(可能需要一个小时以上),然后他们为我进行了开发人员测试。有人告诉我,该测试预计需要6到8个小时,并且只要结果得到他们的认可,我将得到我的工作报酬。 那让我停了一下,但我努力了。开发人员测试在通过RDP访问的VM上进行。任务是在Web项目中实现一个搜索页面,该页面从服务器请求数据,将其显示在表格的屏幕上,并具有非常复杂的搜索过滤方案(大约有15种状态,并且在将搜索发送到服务器时,除了可以在字符串/字段中进行搜索外,还可以按这些状态进行搜索。此外,他们希望SVG图标更改某些数据值的颜色,并且某些数据的表示方式与数据库中的结构方式不同。 Loooong的故事很短,这花费了比6-8个小时更长的时间。这在很大程度上是由于我运行的虚拟机非常差(Visual Studio 2013加载需要10分钟,而打开3 GB巨大解决方案则需要15分钟)。 有人告诉我,完成测试后,我应该将更改提交到源代码管理中……嗯,好。我遵循指示。提交更改后,我收到了一封回复电子邮件。SVG的颜色不正确,在这种情况下有一个错误,这是我从未经历过的其他事情的偶发性问题,等等。所以我现在已经13-14个小时了,我必须修正错误。我这样做了,雇主又提出了更多的错误修复请求。 我所有的工作显然都在进入生产应用程序。我注意到代码中的一些异常之处,看起来好像其他异常已对一种功能进行了编码,但没有涉及其他任何内容。 我只是被用来做廉价劳动力吗?即使他们向我承诺的每小时6小时的50美元的报酬,我现在也已经花了大约18个小时来做​​。如果我修正了他们不断提出的所有问题,我将至少免费工作16个小时。 我已经进行了许多开发人员测试,但从未进行过用于生产的代码的测试。我从未进行过测试,无法实现正在开发中的功能,也从未进行过四轮共20个小时以上的测试。我给他们的印象是他们正在使用他们的开发人员测试来廉价地提供一些功能。 我有错误的印象吗?这个测试协议合适吗?
154 interview 

15
currying有什么好处?
我刚刚学习了有关curry的知识,尽管我认为我理解了curry的概念,但在使用它方面并没有看到任何大的优势。 作为一个简单的示例,我使用一个将两个值相加的函数(用ML编写)。该版本不使用curry fun add(x, y) = x + y 并称为 add(3, 5) 而咖喱版本是 fun add x y = x + y (* short for val add = fn x => fn y=> x + y *) 并称为 add 3 5 在我看来,这只是语法糖,它从定义和调用函数中除去了一组括号。我已经看到currying被列为功能语言的重要功能之一,但现在我对此有点不知所措。创建只使用每个参数的函数链而不是使用元组的函数的概念对于语法的简单更改而言似乎相当复杂。 稍微简单的语法是否是引起混乱的唯一动机,还是我错过了一些在我非常简单的示例中并不明显的其他优点?只是语法糖吗?

13
只是我还是这令人困惑的技术面试问题?[关闭]
背景 我只是在一次技术采访中被要求写一个遍历“对象”(注意引号)的算法,其中A等于B且B等于C且A等于C。 而已。那就是我得到的所有信息。 我问面试官的目标是什么,但显然没有目标,只是“遍历”“目标”。 我对其他人一无所知,但这对我来说似乎是一个愚蠢的问题。我再次问,“我在寻找价值吗?”。不。只是“遍历”它。 为什么我要无休止地遍历这个“对象”?可能融化我的处理器? 面试官的回答是我应该写一个递归函数。 好的,为什么不简单地要求我编写一个递归函数呢?谁会写一个永无止境的递归函数? 我的问题: 这对其他人是否是一个有效的问题,如果可以,那么您是否可以暗示我可能会缺少的东西?也许我在解决现实世界问题上考虑得太辛苦了。我已经成功编码了很长时间了,但是这个技术面试过程让我感到自己一无所知。

11
我如何找到一个好的开源项目加入?[关闭]
我一年前才刚刚开始工作,出于与其他人相同的原因,我想加入一个开源项目:帮助创造有用的东西并进一步发展我的技能。 我的问题是,我不知道如何找到适合的项目。 如何找到适合初学者的项目?我应该搜索什么属性?什么是警告标志,一个项目可能不会是合适人选?有没有什么工具可以帮助人们与开源项目匹配? 有一个类似的问题在这里,但这个问题与就业做的,仅限于PHP / Drupal的。

30
对于一家小公司(15个开发人员)来说,不使用托管的源代码/版本控制是否很不寻常?[关闭]
这并不是一个真正的技术问题,但是这里还有一些其他有关源代码控制和最佳实践的问题。 我工作的公司(将保持匿名)使用网络共享来托管其源代码和发布的代码。开发人员或管理人员的责任是根据源代码是否已发布以及版本和内容将其手动移动到正确的文件夹中。我们围绕着记录文件名和版本以及更改内容的地方散布着各种电子表格,并且一些团队还在每个文件的顶部放置了不同版本的详细信息。每个团队(2-3个团队)在公司内部的做法似乎有所不同。可以想象,这是一个有组织的混乱-有组织,因为“正确的人”知道他们的东西在哪里,但是却一团糟,因为它们完全不同,并且依赖于人们随时记住要做的事情。 一段时间以来,我一直在努力寻求某种托管源代码控制,但在公司内部似乎无法获得足够的支持。我的主要论据是: 我们目前很脆弱;在任何时候,任何人都可能忘记执行我们必须执行的许多发布操作之一,这可能意味着未正确存储整个版本。如有必要,可能需要数小时甚至数天的时间才能将版本拼凑在一起 我们正在开发新功能以及错误修复,并且由于某些工作尚未完成,因此常常不得不延迟发布其中一个。我们还必须强迫客户采用包含新功能的版本,即使他们只想修复错误也是如此,因为我们实际上只在开发一个版本。 我们遇到了Visual Studio问题,因为多个开发人员正在同时使用相同的项目(不是相同的文件,但是仍然会引起问题) 只有15个开发人员,但我们的工作方式有所不同。我们都必须遵循一种标准的全公司范围的方法,这会更好吗? 我的问题是: 如此规模的小组没有源代码管理是正常的吗? 到目前为止,我仅获得了没有源代码控制的模糊原因- 考虑到上述信息,您认为哪些原因对于不实施源代码控制可能是有效的? 我可以将更多的源代码控制理由添加到我的武器库中吗? 我主要是想了解为什么我受到如此多的抵制,所以请诚实地回答。 我将给我相信采用最平衡方法并回答了所有三个问题的人的答案。 提前致谢

4
什么是反腐败层?如何使用?
我正在尝试弄清“反腐败”层的真正含义。我知道这是一种过渡/解决旧代码或错误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.