软件工程

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

18
与经常离职的工程师打交道
我的朋友是一家软件公司的项目经理。对他来说,最令人沮丧的是他的工程师经常离职。该公司努力招募新工程师,转移项目并保持稳定的高质量产品。人们离开时,这使我的朋友发疯。 这些工程师还很年轻,有野心,他们想要更高的薪水和更好的职位。大老板只是从财务角度考虑问题,他的理论是“ 三个新手总是比一个老手好 ”(作为一名经验丰富的工程师,我知道这是错误的)。我的朋友讨厌那个理论。 对他有什么建议吗?

16
我是否应该现在添加冗余代码,以防将来可能需要?
对与错,我目前认为我应该始终尝试使我的代码尽可能地健壮,即使这意味着添加我知道现在将无用的冗余代码/检查,但是它们可能是下线的x年。 例如,我目前正在开发具有以下代码的移动应用程序: public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - This will be the case if …

30
太老了是多老”?[关闭]
有人告诉我,要认真对待自己的求职者,我应该放弃自己的履历,或者取消获得学位的那年,或者两者兼而有之。甚至不必费心申请,因为没有人愿意雇用比他们大的程序员。1个 或者,我应该找到一家公司,不是因为我想要,或者因为我拥有一种我关心的产品,而是因为这样,如果/当我的公司被收购时,我可以找到工作。 还是我应该更多地专注于管理工作(我过去曾成功完成过),因为……嗯,他们无法真正解释这一点,只是暗示在一定年龄段内,如果您是重新编写代码。但是我喜欢编写代码。 你见过这个吗?这仅仅是本地(北加利福尼亚)问题吗? 如果您曾经雇用过程序员:2 在您收到的简历中,最大的申请人几岁? 您采访过的年龄最大的人几岁? 您雇用的年龄最大的人(雇用时)多大? 被聘为程序员的“年龄太大”了? 1 我假设所有申请人都具有同等的适用经验。这与拥有三十年的COBOL申请Java专家工作的人无关。 2 是的,我知道(至少在美国)您不应该问申请人的年龄。但是,以我的经验,您可以从简历中获得一般性想法。
114 experience 

10
我的同事在没有测试的情况下进行提交和推送
当我的同事认为不需要在PC上进行测试时,他进行更改,提交然后进行推送。然后,他在生产服务器上进行测试,并意识到自己犯了一个错误。它每周发生一次。现在我看到他进行了3次提交,并在5分钟内将其推送到生产服务器。 我几次告诉他,这不是做好工作的方式。我不想再对他无礼,他在公司中的地位与我相同,他在这里的工作比我还要多。 我希望以某种方式惩罚这种行为,或使其尽可能不愉快。 在我开始之前,该公司使用诸如FTP之类的老式方法进行部署,并且没有版本控制。 我强迫他们/我们使用Git,Bitbucket,Dploy.io和HipChat。部署不是自动的,必须有人登录dply.io并按deploy按钮。 现在,如何强制他们不要在生产服务器上进行测试?像HipChat bot这样的东西可以感觉到同一行上有重复的编辑,并向程序员发送通知。

4
飞机使用什么操作系统,以及使用什么编程语言开发?[关闭]
我想知道是否有人知道商用飞机使用什么操作系统(例如波音或空中客车公司)。 另外,什么是(首选)实时编程语言?我听说波音公司使用了Ada,所以我的问题是-为什么要使用Ada?波音人选择该语言的标准是什么?(我猜想Java并不是一个不错的选择,如果恰好在垃圾收集器启动时唤醒它)。

16
如何避免出现“您是否危害CODEZ”的情况?
我在工作中遇到一个奇怪的情况,我的一位同事经常要我和其他同事提供工作代码。 我想帮助他,但是对小片段的不断要求打断了我的思想,有时使他难以集中精力。 另外,我的印象是(...)此请求是由于缺乏能力而不是懒惰而产生的。实际上,他经常问自己假装知道答案的事情,因为当我解决问题时,他通常会说“确定”,“是,这就是我的想法”之类的东西,给我的印象是我的答案不值得。 我该如何解决这种尴尬局面? 我应该在其他同事面前更清楚地表明他缺乏知识(通过说“如果可以,请自己做”这样的话)还是继续给他他想要的东西? 我认为他应该将所有问题汇总到一起,以便我可以给他一部分时间,他可以全力以赴地完成自己的工作。 团队中没有等级制度,我必须说我们都有差不多五年的资历。基于同样的原因,我相信我无法向管理层报告,因为琐碎的问题经常被忽略。 我与另外两个成员讨论过,他们也同意我的看法:实际上,他经常问通过同事循环的事情。

16
如果他不期望为空,是否应该检查为空?
上周,我们就在应用程序的服务层中处理null产生了激烈的争论。问题是在.NET上下文中,但在Java和许多其他技术中将是相同的。 问题是:无论什么情况,您是否应该始终检查null并使代码正常工作,还是当意外收到null时让异常冒出? 在我看来,一方面,在您不期望它的地方检查空值(即,没有用户界面来处理它)与编写带有空catch的try块相同。您只是隐藏一个错误。错误可能是代码中的某些内容已更改,并且null现在是预期值,或者存在其他错误,并且将错误的ID传递给该方法。 另一方面,检查空值通常是一个好习惯。此外,如果进行检查,则应用程序可能会继续运行,而只有一小部分功能无效。然后,客户可能会报告一个小错误(例如“无法删除评论”),而不是更严重的错误(例如“无法打开页面X”)。 您遵循哪种做法,您对这两种方法的论点是什么? 更新: 我想添加一些有关我们特殊情况的细节。我们正在从数据库中检索一些对象,并对它们进行了一些处理(比如,建立一个集合)。编写代码的开发人员并不预期该对象可以为null,因此他不包含任何检查,并且在加载页面时出现错误,并且整个页面都没有加载。 显然,在这种情况下,应该进行检查。然后,我们讨论了是否应该检查每个处理的对象(即使不会丢失),以及是否应该静默中止最终的处理。 假设的好处是该页面将继续工作。考虑一下Stack Exchange上不同组(用户,评论,问题)的搜索结果。该方法可以检查是否为空,并中止用户的处理(由于错误为空),但返回“评论”和“问题”部分。该页面将继续工作,只是缺少“用户”部分(这是一个错误)。我们应该尽早失败并中断整个页面,还是继续工作并等待有人注意到“用户”部分丢失了?


20
想要通过签订的合同锁定时间估算的项目经理
在以前的工作中,项目经理(PM)对我所在的项目中的代码交付时间不满意。项目负责人告诉我,项目经理正在考虑让我签署一份合同,以锁定我为任务和交付日期提供的时间估计。 该项目的情况是我们正在使用新技术,代码库,编码标准以及非常容易更改的要求。我正在学习新事物,并根据不断变化的需求尽最大可能应用它们。整个迭代过程中的需求增长了2-3倍,而我估计要完成的需求增长了约5-8倍。唯一不变的是估算和交货日期。 是的,我确实错过了大多数截止日期。我正在研究一些非常新的技术,整个开发团队中没有其他人可以真正提供帮助,因为他们对此并不熟悉。至少不容易。 在我看来,项目经理希望将他的数字加起来,因此希望我签署一份合同以“确保”我将始终按时交付工作代码。我想如果我不能按时交货,PM可以通过签订的合同对我不利。 我相信接下来发生的事情是其他项目经理和/或项目负责人为我辩护,并且没有让这种情况发生。 我的问题是,这是否应该引起经理的危险信号?经理通过签署的合同锁定软件开发人员的时间估计是否是惯例?或者在这种情况下,请尝试。 请注意,我是全职员工,而不是独立顾问。 更新:我想补充一下,我确实每周都会提供新的估算值,但是看来原始的估算值和交货日期正是PM所确定的。

4
example.org的电话号码等于多少?
RFC 2606标准保留了example.org,example.net和example.com域名,以用作文档中的示例。 可以用作示例的电话号码(包括国家代码)的等效项是什么,例如,为用户提供以哪种格式输入电话号码的示例? 在最佳情况下,它将是由相关标准指定的虚拟号码作为示例电话号码,并且不会归属于任何真实订户。

3
为什么用GIL编写Python?
全局解释器锁(GIL)似乎经常被引用为Python中线程之类的操作比较棘手的主要原因-这就提出了一个问题:“为什么首先要这样做?” 不是程序员,我不知道为什么会这样-放入GIL的逻辑是什么?

17
为了提高生产率而愚蠢吗?
我已经花了很多时间阅读有关“好的设计”,“设计模式”等的不同书籍。我是SOLID方法的忠实拥护者,每当我需要编写简单的代码时,我都会考虑未来。因此,如果要实现新功能或错误修复,只需添加以下三行代码即可: if(xxx) { doSomething(); } 这并不意味着我会这样做。如果我觉得这段代码在不久的将来可能会变得更大,那么我会考虑添加抽象,将此功能移到其他地方等等。我追求的目标是保持平均复杂度与更改前相同。 我相信,从代码的角度来看,这是一个好主意-我的代码永远不够长,而且很容易理解不同实体的含义,例如类,方法以及类与对象之间的关系。 问题是,这花费了太多时间,而且我经常觉得如果我按原样实现该功能会更好。它仅是“三行代码”与“新接口+两个用于实现该接口的类”。 从产品的角度(当我们谈论结果时),我所做的事情是毫无意义的。我知道,如果我们要开发下一个版本,那么拥有良好的代码真的很棒。但另一方面,您可能花费了使代码“良好”的时间来实现一些有用的功能。 我经常对结果感到不满意-仅能执行A的好代码要比能执行A,B,C和D的不好的代码差。 这种方法是否可能为软件项目带来正的净收益,还是浪费时间?
112 productivity 

14
是什么触发了lambda函数在现代主流编程语言中的流行?
在过去的几年中,匿名函数(又名lambda函数)已成为一种非常流行的语言结构,几乎每种主流/主流编程语言都已经引入了它们,或计划在即将发布的标准修订版中引入它们。 但是,匿名函数是数学和计算机科学中一个非常古老且非常著名的概念(由数学家Alonzo Church于1936年左右发明,并自1958年以来被Lisp编程语言使用,请参见此处)。 那么,为什么今天的主流编程语言(其中许多起源于15至20年前)从一开始就不支持lambda函数,而仅在后来才引入它们呢? 在过去的几年中,是什么导致了匿名功能的广泛采用?是否有某种特定的事件,新的要求或编程技术引发了这种现象? 重要的提示 这个问题的重点是在现代主流(因此,除了少数例外,非功能性)语言中引入匿名功能。另外,请注意,匿名函数(块)存在于Smalltalk中,这不是一种功能语言,并且标准命名函数甚至在程序语言(如C和Pascal)中已经存在很长时间了。 请不要通过谈论“采用功能范式及其好处”来概括您的答案,因为这不是问题的主题。

30
每个程序员在工作时需要的东西
我一直被要求创造一个有趣和放松的环境,我知道我想要的一件事是符合人体工程学的鼠标和键盘,其他人则建议使用健身球和乐队。 每个程序员在工作时需要什么?什么可能不是必需的,但无论如何都会很高兴? 注意:之前曾问过此问题,但建议在此处发布。请参阅此链接以获取先前的响应:https : //stackoverflow.com/questions/3911911/stuff-every-programmer-needs-while-working-closed

30
为什么从零开始的数组是常态?
这里提出的一个问题使我想起了我与一位程序员的讨论。他认为,从零开始的数组应该替换为从一开始的数组,因为从零开始的数组是一个实现细节,它起源于数组和指针以及计算机硬件的工作方式,但是这些东西不应在更高层次上反映出来。语言。 现在我不是很擅长辩论,所以除了提供感觉更合适之外,我无法提供任何充分的理由坚持使用从零开始的数组。为什么是零的共同出发点阵列?
112 array 

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.