软件工程

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


9
估算旧版代码库中的时间成本
最近,我开始从事一个项目,该项目将一个非常古老的单片应用程序迁移到基于微服务的体系结构中。 遗留的代码库非常混乱(“意大利面条代码”),并且通常一个看似简单的函数(例如,命名为“ multiplyValueByTen”)随后将自身显示为“涉及3个不同模式的10个表的数千行验证代码”。 现在,我的老板(正确地)要求我估计在新架构中编写功能X所需的时间。但是我很难提出一个现实的估计。由于上述原因,我常常大大低估了任务,并因为无法及时完成而感到尴尬。 明智的做法似乎确实进入了代码,注意到每个分支并调用了其他函数,然后估算了时间成本。但是在记录旧代码与实际写下新版本之间确实有微小的区别。 我应该如何处理这样的情况? 尽管我完全理解了遗留代码重构的工作原理,但我的问题不是关于“如何进行重构/重写?”。但是要给出一个现实的答案:“重构/重写X部分需要多长时间?”

5
UTF-8是否能够支持将广泛的外语与数百万个新字符结合在一起?
如果发生外星人入侵,我们被迫在我们所有现有的计算机系统中支持他们的语言,那么UTF-8的设计是否允许他们容纳大量字符? (当然,我们不知道外星人是否真的有语言,他们是否或如何交流,但是为了争辩,请想象他们确实如此。) 例如,如果它们的语言由数百万个新发现的字形,符号和/或组合字符组成,那么从理论上讲,UTF-8能否以不间断的方式扩展为包括这些新字形,并且仍支持所有现有软件? 我对字形是否远远超过当前的大小限制并需要更多字节来表示单个字形感兴趣。如果无法扩展UTF-8 ,是否证明相对于UTF-32的唯一优势仅仅是小写字符的大小?
86 unicode  utf-8 

11
单元测试是否可以帮助花旗避免这种昂贵的错误?
我读到了这句话:在合法交易被误认为测试数据15年之后,花在编程上的错误使花旗集团损失了700万美元。 在1990年代中期引入该系统时,程序代码过滤掉了从089到100的三位数分支代码的所有交易,并将这些前缀用于测试目的。 但是在1998年,公司在扩展业务时开始使用字母数字分支代码。其中包括代码10B,10C等,系统将该代码视为在排除范围内,因此,它们的交易已从发送给SEC的所有报告中删除。 (我认为这说明使用非显式数据指示符是次优的。填充并使用语义上显式的Branch.IsLive属性要好得多。) 除此之外,我的第一个反应是“单元测试会在这里有所帮助”……但是他们会吗? 我最近读了《为什么大多数单元测试会引起人们的兴趣浪费》,所以我的问题是:在引入字母数字分支代码后失败的单元测试会是什么样?

10
为什么艾伦·凯(Alan Kay)说:“互联网做得很好,但是网络是由业余爱好者提供的”?
好的,我这样解释。完整报价: 互联网做得如此之好,以至于大多数人将其视为像太平洋这样的自然资源,而不是人造的。上一次具有如此规模的技术如此无误的是什么时候?相比之下,网络是个玩笑。网络是由业余爱好者完成的。-艾伦·凯(Alan Kay)。 我正在尝试了解Internet和Web的历史,并且这种说法很难理解。我在其他地方读到过,互联网现在所使用的东西与设计时所用的东西截然不同,也许是其中的原因。 是什么使互联网如此出色,什么使网络如此业余? (当然,艾伦·凯很容易犯错,这里没有人是艾伦·凯,所以我们无法确切知道他为什么这么说,但是有什么可能的解释?) *另请参见原始采访 *。

10
为什么在2010-01年度Debian popcon图上Git提交者的数量突然增加?
几乎所有的文章我读过1比较Git和水银好像水银具有较好的命令行UX每个命令仅限于只有一个想法(不像说git checkout)。 但是在某个时候,Git突然变得超级流行,并且Debian popcon图上的Git提交者数量激增(见下图)。 资料来源:Debian 2010-01年发生的事情突然发生了变化。看起来GitHub早于2008年成立。
86 git  history  mercurial 

5
for vs.foreach与LINQ
当我在Visual Studio中编写代码时,ReSharper(上帝保佑它!)经常建议我以更紧凑的foreach形式更改旧式的for循环。 通常,当我接受此更改时,ReSharper会往前走一步,建议我以闪亮的LINQ形式再次更改它。 因此,我想知道:这些改进是否有真正的优势?在非常简单的代码执行中,我看不到任何速度提升(显然),但是我可以看到代码变得越来越不可读...所以我想知道:值得吗?
86 c#  linq 

6
使用纯JavaScript优于JQuery的优势
与仅使用JQuery相比,仅使用Javascript有何优势? 我对JavaScript和JQuery编码的经验有限。我已经在HTML页面中添加了每个代码的片段,但是我主要使用其他语言对服务器端的东西进行了编码。我注意到,虽然理论上您可以使用两种方法中的任何一种来做相同的事情(当然,您甚至可以将它们混合在同一项目中),但似乎总是有从一开始就始终使用JQuery的趋势。没什么,项目需求是什么。 因此,我只是想知道,不使用仅JQuery而是仅使用普通的旧JavaScript有任何准时的好处吗? 我知道这看起来像是一个毫无疑问的问题,因为可以说“没有确定的答案”或“可以永远争论不休”,但是我实际上希望能如“您可以在一种方法,而另一种则不能。” 根据scrwtp的评论,我并不是仅指DOM处理部分。我的问题是:JQuery是一个库。对于Javascript。与该库相对于其他语言的其他库相比,我觉得奇怪的是,在JQyery的情况下,它似乎被设计为能够专门使用它,而无需直接接触Javascript。这与Hibernate和SQL相对,尽管库(或框架,在这种情况下,但我认为类推仍然适用)在很多方面都可以使用,但在使用SQL时仍然可以使用SQL ,至少在某些情况下如此。但是,在JQuery和Javascript的情况下,您可以只使用JQuery来处理Javascript(或者至少对我来说是如此)。 根据Stargazer712的评论:是的,我同意您的意见,这里的问题是,正如您所说的那样,“仅取决于您将如何使用JavaScript”。那就是我真正想问的,但是我做了一些不好的表述。这是另一个比喻:Spring Expression Language。这是一个Java库。没有Java,您将无法使用它,它基于Java,直到您仍然使用Java为止。但是实际上,您可以做的是将该库添加到Java项目中,然后使用Spring EL的表达式语言编写所有代码,这实际上使您的代码根本不类似于Java,甚至发生了范式转换(例如,您不再拥有使用此类型时强类型强制执行)。虽然我确实知道JQuery只是一个JS库,但在我看来,它实际上与Spring EL对于Java具有相同的效果,即,您只能在整个项目中使用它的API,而避免使用JavaScript的API。我想知道这是否是一件好事,可能有什么陷阱等。 (是的,在阅读了每个人的答案后,我确实了解到: 一种。我的问题在某种程度上有点荒谬 b。即使该问题完全正确,其答案也将是“不,您不能一直只使用JQuery”

2
边缘情况,拐角情况,基础情况和边界情况之间有什么区别?
我不是英语母语人士。在我的母语中,我知道一些术语用来表示检查条件以停止递归,以及用于极端,不太可能或非常简单的情况的条件。在英语中,我遇到过“边缘情况”,“拐角情况”,“边界情况”和“基本情况”,但是我不太清楚它们之间的区别,以及用来指代什么。我很想总结一下它们之间的区别。 特别是,如果有人可以为以下代码示例中的行提供注释,我将非常高兴: int transmogrify(int n) { 1. assert(n <= 1000000); 2. if (n < 0) return -1; 3. if (n == 1000000) return PRE_CALC; 4. if (n == 0) return n+1; // For stopping the recursion 5. if (n == 1251) return 3077; return transmogrify(n-1); } 我认为是: 完整性检查 输入检查 边界情况?边缘情况?角箱? …

12
我的项目需要多大才能进行单元测试?[关闭]
我认为我的项目已解耦到足以进行单元测试的程度。但是,就笔迹和功能而言,我的项目到底需要多大才能使单元测试值得? 我们都会犯错,没有人能做到完美,但是我认为自己是一个体面的程序员,可以逐步解决小项目的错误。还是您的项目规模不限,都必须进行单元测试?

21
如果有人告诉您您的代码一团糟,您将如何反应?
我是一个很好的程序员,或者我以前就这么想过。我一直喜欢编程。我想学习很多有关编程的知识,以使我成为一名更好的程序员。我学习了1年的编程知识,现在我从事程序员工作将近2年。简而言之,我有将近3年的编程经验。 我们的团队由5位程序员组成,其中我们4位是新手,其中1位具有3年以上的经验。我们已经为一个程序工作了将近一年,没有人审查过我的代码,并且给了我一个可以使用的页面。我们从未进行过代码审查,而且我们都是新手,所以我们不知道干净的代码是什么样。我认为程序员可以自己学习? 我们在没有进行全面测试的情况下将程序部署到了程序中。现在已经很严格了,在对代码进行更改之前,我们需要首先获得批准和代码审查。有人第一次审查我的代码,他说这是一团糟。 我感到很难过和受伤。我真的很喜欢编程,让他们说这样的话真的很伤害我。我真的很想提高自己。但似乎我不是电影中的天才程序员。您能给我建议如何做得更好吗?您是否曾经遇到过批评您的代码的事情并且感到非常受伤?你在那些事件上做什么?

17
TODO注释有意义吗?[关闭]
我正在做一个相当大的项目,并承担了为它做一些翻译的任务。有很多标签没有被翻译,当我浏览代码时,我发现了这小段代码 //TODO translations 这让我想到了对自己(和其他人?)的这些评论的意义,因为我感觉到大多数开发人员在完成某些代码后,就会按照原本应该做的去做,直到他们拥有完为止进行维护或添加新功能。因此,这TODO将丢失很长时间。 编写此注释是否有意义,还是应该将其写在白板/纸上/其他仍以开发人员为重点的地方?

7
为什么字节为八位的历史是什么?
在决定使用八位组作为基本单位时,历史力量在起作用,需要进行权衡吗? 曾经有一些机器使用其他字长,但是今天对于非八位制,您必须寻找博物馆作品,用于嵌入式应用的专用芯片和DSP。字节是如何从计算机设计早期的混乱和创造力中演变出来的? 我可以想象,更少的位对处理足够的数据以使计算可行无效,而太多的位将导致昂贵的硬件。比赛中还有其他影响吗?为什么这些力量平衡到八位? (顺便说一句,如果我可以花时间旅行,我会回到“字节”被声明为8位的时候,并说服每个人将其变成12位,并用21世纪初期的小饰品贿赂他们。)
86 history  hardware  byte  bit 

6
有状态和无状态有什么区别?
MVC上的书籍和文档只是使用有状态和无状态术语而堆积。老实说,我只是无法理解它的意思,书在说什么。他们没有提供一个示例来了解这两种状态中的任何一种,而不是仅仅告诉HTTP是无状态的,并且使用ASP.NET MVC时,Microsoft会与之相伴。我是否缺少一些基本知识,因为我无法理解什么是有状态的,为什么是有状态的,无状态也是如此? 我想通过一个简单而简短的示例来讨论按钮或文本框之类的控件。

5
用于Objective-C开发的警告标志
作为C和Objective-C程序员,我对编译器警告标志有些偏执。 我通常会尝试为我使用的编译器找到完整的警告标志列表,并打开大多数警告标志,除非我确实有很好的理由不打开它。 我个人认为,这实际上可能会提高编码技能以及潜在的代码可移植性,防止出现某些问题,因为它迫使您意识到每个小细节,潜在的实现和体系结构问题,等等。 我认为,即使您是经验丰富的程序员,它也是一种很好的日常学习工具。 对于此问题的主观部分,我有兴趣听取其他有关此主题的开发人员(主要是C,Objective-C和C ++)的信息。 您是否真的在乎诸如脚步警告之类的东西?如果是或否,为什么? 现在关于Objective-C,我最近完全切换到了LLVM工具链(使用Clang),而不是GCC。 在生产代码中,通常会设置以下警告标志(明确地,即使其中一些可能被-Wall覆盖): -壁 -坏功能广播 -Wcast-align -W转换 -W声明后声明 -W弃用的实现 -Wextra -浮子等于 -Wformat = 2 -Wformat-非文字 -Wfour-char-constants -隐式原子性质 -大括号 -遗失声明 -Wmissing-Field初始化程序 -遗漏格式属性 -不愿回报 -遗忘原型 -Wnested-externs -Wnewline-eof -老式风格的定义 -长弦 -希望 -Wpointer-arith -多余的决定 -返回类型 -序列点 -影子 -将64缩短到32 -Wsign比较 -Wsign转换 -严格的原型 -严格选择匹配 -W开关 -Wswitch-默认 -Wswitch枚举 -绝对选择器 -未初始化 -Wonknown-pragmas …

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.