软件工程

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

30
如何处理那些躺在简历上的人
我正在进行技术采访,以填补一些.NET职位。很多我采访时真正的人都知道.NET非常好,但我觉得至少90%美化之间的任何地方他们的技能“三多一少”到“非常显着”。有时他们会编造与申请职位相关的技能,有时却不会。 我采访的大多数人,甚至是最卑鄙的骗子,都不是骗子。他们只是想在人群中脱颖而出,所以他们在简历中用“ JBoss”,“ LINQ”,“ web services”,“ Django”之类的时髦词汇或其他只是为了增强技能并保持竞争力的词汇。 (您可能想知道,那些具有这些技能的人是否只是在技术面试中虚张声势。我的面试涉及大量动手编码和解决问题的方法–试图虚张声势的人会炸毁动手编码部分在前3分钟内。) 这是两个开放性问题,但是当我向招聘经理提出建议时,这确实会对我有所帮助: 关于面试礼节,我是否应该尝试确定一个人是否真的拥有他们声称拥有的所有技能?我可以这样做而不会使候选人感到不舒服吗? 关于最终决定,我是否应该推荐真正具备其所申请职位资格的候选人,即使他们已经捏造了自己的技能组合?

5
头文件中应该包含什么,不应该包含什么?[关闭]
头文件绝对不应包含哪些内容? 例如,如果我正在使用具有许多常量的已记录的行业标准格式,那么在头文件中定义它们(如果我正在为该格式编写解析器)是否是一种好习惯? 头文件应包含哪些功能? 什么功能不应该?
71 c  headers 

7
Null的姓氏如何在许多数据库中引起问题?
我读了一篇关于英国广播公司的文章。他们说的一个例子是,姓“ Null”的人在某些网站上输入详细信息时遇到问题。 没有给出关于他们面临的错误的解释。 但据我所知,字符串“ Null”和实际的Null值完全不同(从数据库的角度来看)。 为什么这会在数据库中引起问题?
71 database  null 

4
为什么git pull默认执行合并而不是变基?
请考虑以下情况: 您有一个git存储库的克隆 您有一些本地提交(尚未推送到任何地方的提交) 远程存储库中有尚未提交的新提交 所以像这样: 如果git pull使用默认设置执行,则会得到以下内容: 这是因为git执行了合并。 不过,还有另一种选择。您可以告诉pull做一个rebase: git pull --rebase 然后您会得到: 在我看来,经过重新设计的版本具有许多优势,主要集中在保持代码和历史记录的整洁方面,因此我对git默认情况下进行合并感到震惊。是的,您本地提交的哈希值将被更改,但这似乎为您获得较简单的历史记录付出了很小的代价。 但是,我绝不建议这某种程度上是错误的或错误的默认值。我只是在想为什么可能首选默认合并的原因而已。我们是否对为什么选择它有任何见识?有没有使其更适合用作默认设置的好处? 这个问题的主要动机是,我的公司正在尝试建立一些关于如何组织和管理存储库的基线标准(希望更像是准则),以使开发人员更容易地访问以前从未使用过的存储库。我有兴趣提出一个案例,我们通常应该在这种情况下进行基准调整(并可能建议开发人员将其全局配置默认设置为进行基准调整),但是如果我反对这样做,我肯定会问为什么要进行基准调整?如果太好了,则使用默认值。所以我想知道我是否缺少某些东西。 有人提出这个问题是重复的,为什么这么多的网站更喜欢“ git rebase”而不是“ git merge”?; 但是,这个问题与这个问题有些相反。它讨论了在合并基础上进行重组的优点,而该问题询问了在合并基础上进行合并的好处。那里的答案反映了这一点,着重于合并问题和资产重组的好处。
71 git 

9
我们可以在测试软件时假设用户不会对软件执行此类愚蠢的操作吗?
例如:在Web应用程序中执行表单的功能测试时,我们将通过输入不同种类的随机输入值来测试字段。 通常,作为Web应用程序的用户,我们实际上并未在字段中输入随机值。 那么,当生产中出现此类问题的可能性较小时,合并所有可能/可能不会导致错误的测试用例有什么用呢? 注意:上面的示例仅是示例案例;此类问题可能发生在任何种类的功能/模块中。 我问这个问题只是为了知道是否要遵循任何标准做法,或者它完全取决于产品,领域和所有其他因素。

5
为什么不在C#中使用'using'指令?
大型C#项目上的现有编码标准包括以下规则:所有类型名称均应完全限定,从而禁止使用“ using”指令。因此,而不是熟悉的: using System.Collections.Generic; .... other stuff .... List<string> myList = new List<string>(); (这var也就不足为奇了。) 我最终得到: System.Collections.Generic.List<string> myList = new System.Collections.Generic.List<string>(); 打字量增加了134%,但没有提供任何有用的信息。在我看来,增加的100%是实际上阻碍理解的噪音(杂波)。 在30多年的编程中,我看到过一次或两次提出这样的标准,但从未实施过。它背后的原理使我无所适从。实施标准的人并不愚蠢,我认为他不是恶意的。除非我遗漏了一些东西,否则这会导致误导是唯一的其他选择。 您听说过这样的标准吗?如果是这样,其背后的原因是什么?除了“这很愚蠢”或“其他人都雇用using”之外,您还能想到其他可能说服此人取消该禁令的论点吗? 推理 禁止的原因有: 将鼠标悬停在名称上以获得完全限定的类型很麻烦。最好始终始终显示完全合格的类型。 电子邮件代码段没有完全限定的名称,因此可能很难理解。 在Visual Studio(例如Notepad ++)之外查看或编辑代码时,不可能获得完全限定的类型名称。 我的论点是,这三种情况都是很少见的,而让每个人都为解决一些罕见情况而付出混乱且难以理解的代码的代价是错误的。 我什至没有提到潜在的名称空间冲突问题,而我希望这是最主要的问题。这特别令人惊讶,因为我们有一个名称空间MyCompany.MyProject.Core,这是一个特别糟糕的主意。我很早就学会这东西命名System或Core在C#是一个快速路径的疯狂。 正如其他人指出的那样,通过重构,名称空间别名或部分限定条件可以轻松解决名称空间冲突。

7
当同事在未通知的情况下进行不必要的改进时,如何对我的代码负责?
我的队友之一是我们IT部门所有行业的杰作,我尊重他的见识。 但是,有时他会不加提示地查看我的代码(他是我们团队负责人的第二命令,所以可以预期)。因此有时他会在我完成最终目标并立即进行更改之前查看我的更改,甚至破坏了我的工作一次。 其他时候,他对我的3个月以上的代码进行了不必要的改进。 这让我很烦,原因有几个: 我并非总是有机会改正我的错误 当他感到困惑时,他没有花时间问我要做什么,这可能会影响他的测试或更改 我并不总是认为他的代码可读 截止日期不是问题,他的当前工作量除了查看我的代码更改外,不需要在我的项目中进行任何工作。 无论如何,我过去曾告诉过他,如果他在我的工作中看到一些他想更改的东西,以便我可以拥有我的代码(也许我应该说“缺点”),并且他没有回应,请把我保持在工作状态。 。 当我问他向我解释他的改变时,我担心我可能会变得冒犯别人。 他只是一个沉默寡言的人,坚持不懈,但他的行为仍在继续。我不想阻止他进行代码更改(不是像我能做到的那样),因为我们是一个团队,但是我想尽自己的一份力量来帮助我们的团队。 补充说明: 我们共享1个开发分支。我不会等到所有更改都完成一个任务后再做,因为我可能会失去一些重要的工作-因此,我确保我的更改可以建立并且不会破坏任何内容。 我担心的是,我的队友没有解释其更改背后的原因或目的。我认为他不需要我的祝福,但是如果我们不同意我的做法,我认为最好是在我们都了解发生了什么之后再讨论利弊并做出决定。 我尚未与团队负责人讨论此事,因为除非有必要,否则我宁愿在不让管理层介入的情况下解决个人分歧。由于我的担忧似乎更多是个人问题,而​​不是对我们工作的威胁,因此我选择不打扰团队领导。我正在研究代码审查过程的想法,以帮助促进组织更有组织性的代码审查的好处,而又不至于使我烦恼。

15
大型软件是否有可能达到绝对零错误状态?
我说的是20-30 +百万行代码,例如Autodesk Maya规模和复杂性的软件。 如果您只要需要就冻结开发,就可以实际修复所有错误,直到没有一个单独的错误为止(如果可以通过计算机验证此错误)?支持和反对无错误系统的存在是什么? 因为有人认为您所做的每个修复都会产生更多的错误,但是我认为那不是真的。 错误是指从用户界面中最简单的错字,到没有解决方法的更严重的预防性错误。例如,特定的脚本功能无法正确计算法线。同样,即使有解决方法,该问题仍必须解决。因此,您可以说可以手动执行此特定操作,而不使用提供的功能,但是该功能仍必须修复。

13
具有多个环境的简单原因
在我的整个职业生涯中,我曾在各种公司中工作,这些公司为不同的目的而收集了不同的环境。我们总是拥有或多或少的桌面环境,测试环境,QA环境,登台环境和生产环境。这适用于服务器/应用程序以及我们正在使用的任何数据源。 当我在现任公司任职时,我发现90%的应用程序要么在桌面环境中针对生产数据源开发,要么直接在生产服务器上开发,具体取决于平台。这并不特别令人惊讶,因为我被录用了一部分以进行更改以改善开发团队的运作方式,这在我的面试过程中很明显。我们逐渐开始转变理念,很快,大多数应用程序可以在台式机,测试或生产环境中运行。不久之后分阶段进行。 现在,我们的大多数开发人员都看到了这种方法的好处,并保持警惕。但是,我们有许多从未迁移过的旧版应用程序。我们也有许多传统程序员,他们认为这是浪费时间。不幸的是,我们得到了口头服务,但从未得到管理层的全力支持。大约一年前,我们得到了我们认为在此基础上进行大量投资的承诺,但是尽管我们进行了相当大的计划,但仍未实现。现在,我们发现我们需要越来越多的环境。我们需要服务器/网络管理团队的帮助来进行设置,并且需要业务利益相关者的参与以支持发布周期。我们现在处于一个项目可以正常运作的地方,合理的开发人员会考虑“正常” 我很想提出一个完整的论据,但是在出现关键问题之前,管理层真的没有时间和兴趣听我讲话。我无法简单地说明收益,因为对我而言,收益似乎总是天生的。我想知道是否存在分离环境的良好,简单,无可辩驳的理由,这会使管理人员缺乏开发经验来支持这一想法?。是否有关于该主题的良好资源/文献?

19
在提交代码之前或之后进行检查,哪个更好?
传统上,我们在提交之前进行代码审查,而今天我和我的同事争论,后者喜欢在提交之后进行代码审查。 首先,这是一些背景 我们有一些经验丰富的开发人员,我们也有几乎零编程经验的新员工。 我们希望执行快速且简短的迭代以发布我们的产品。 所有团队成员都位于同一地点。 我学过的提交前代码审查的优势: 指导新员工 在开发周期的早期尝试防止错误,故障,不良设计 向他人学习 有人退出时的知识备份 但是我也有一些不好的经历: 效率低下,有些更改可能需要几天的时间才能进行审核 速度和质量很难兼顾,特别是对于新手 一位团队成员感到不信任 至于提交后的审查,我对此一无所知,但我最担心的是由于缺乏审查而失去控制的风险。有什么意见吗? 更新: 我们正在将Perforce用于VCS 我们在相同的分支(trunk或bug修复分支)中进行编码和提交 为了提高效率,我们尝试将代码分成小的更改。我们还尝试了一些实时对话框审查,但并不是每个人都遵循规则。但是,这是另一个问题。

15
我已经停止编码了,这是一个不好的信号吗?[关闭]
在某个时间点,我只是为了好玩而停止编码。我曾经去上班,完成任务,然后回到家,我就去一边写东西以取乐。但是,我现在回家,尝试避开计算机。我宁愿看报纸,看电视,去酒吧等。 这是一个不好的迹象吗?我的意思是我仍然会努力跟上最新趋势,访问开发者论坛/博客/ etc,但我没有说过:“我想学习X语言-我想知道是否可以在其中编写应用程序Y”。 这有发生在其他人身上吗?
71 coding 

19
我为什么要关心微观性能和效率?
C / C ++页面上的许多问题和答案,特别是或间接地讨论了微性能问题(例如,间接函数,直接函数与内联函数的开销),或者使用O(N 2)vs O(N log N)算法100个项目列表。 除非或直到我知道我有问题,否则我始终不关心微性能,也不关心宏性能,而是专注于易于维护的可靠代码。 我的问题是,为什么很多程序员这么在乎呢?对于大多数开发人员来说,这真的是一个问题吗?我是否只是幸运地不必为此担心太多,还是我是一个糟糕的程序员?

13
进行代码审查的最有效方法是什么?[关闭]
我从来没有找到执行代码审查的理想方法,但是我的客户经常需要它们。每个客户似乎都以不同的方式来做他们,而我从未对其中的任何一个感到满意。 您执行代码审查的最有效方法是什么? 例如: 是一个人被认为是质量的守门员并审查代码,还是团队拥有该标准? 您是否使用投影仪作为团队练习来检查代码? 是亲自完成,通过电子邮件还是使用工具完成的? 您是否避免使用代码编程和集体代码所有权等评论来确保代码质量?

9
XXX在评论中是什么意思?[关闭]
人们XXX在评论中看到的一般含义是什么。有时,我会看到这样的评论: # XXX - This widget really should frobulate the whatsit 当然,我可以说出评论的含义,但是XXX通常是什么意思?是说“这是黑客”还是“也许我们以后应该重温”?还是完全说了其他话?

4
遵循SOLID是否会导致在技术堆栈之上编写框架?
我喜欢SOLID,并且在开发时会尽力使用和应用它。但是我不禁感到SOLID方法似乎将您的代码变成了“框架”代码-即,如果您要创建供其他开发人员使用的框架或库,则可以设计代码。 我通常练习两种编程模式-或多或少地准确创建通过需求和KISS(典型编程)提出的要求,或者创建非常通用且可重用的逻辑,服务等,从而提供其他开发人员可能需要的灵活性(框架编程) 。 如果用户确实只希望应用程序执行x和y事情,那么当您甚至都不知道这是否是一个有效的问题时,遵循SOLID并添加一堆抽象入口点是否有意义?与?如果确实添加了这些抽象的入口点,是您真的满足了用户的要求,还是在现有框架和技术堆栈之上创建了一个框架,以使将来的添加变得更加容易?在哪种情况下,您是在为客户或开发人员的利益服务? 这在Java Enterprise世界中似乎很常见,感觉好像您是在J2EE或Spring之上设计自己的框架,以便它对开发人员来说是更好的UX,而不是针对用户的UX?
70 frameworks  solid 

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.