软件工程

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

27
源代码生成是否是反模式?
如果可以生成某些东西,那么那是数据,而不是代码。 鉴于此,对源代码生成的整个想法不是一种误解吗?也就是说,如果有某个东西的代码生成器,那么为什么不将该东西变成一个可以接收所需参数并执行“将要生成的”代码将要执行的正确操作的适当函数呢? 如果这样做是出于性能原因,那么这听起来像是编译器的缺点。 如果要完成两种语言之间的桥梁,那么这听起来像缺少接口库。 我在这里想念什么吗? 我知道代码也是数据。我不明白的是,为什么要生成源代码?为什么不使其成为可以接受参数并对其执行操作的函数呢?

5
使用分支作为单独开发人员有什么优势?
首先,我知道已经问过许多关于VCS作为单独开发人员的问题,但是它们通常过于广泛。这仅涉及分支,并且仍然被标记为重复...假定的重复再次被标记为另一个问题的另一个重复,该问题过于广泛且与分支无关。这就是我的问题的独特之处。 使用分支作为单独开发人员有什么优势(如果有)?即使在单独开发环境中,我也经常看到它的建议,但是据我所见,除了使用“主”主干进行开发,并分支工作以准备发布版本的代码外,我还看不到我可以利用分支的力量(例如,划分新功能),而不会使整个开发过程过于复杂。


15
LISP在当今世界仍然有用吗?哪个版本最常用?
我尝试每隔一定的时间自学一种新的编程语言。最近,我已经阅读了Lisp及其方言在C / C ++之类的语言中处于完全相反的一端的过程,这使我感到好奇,足以了解更多有关它的信息。但是,我不清楚两件事,我正在寻找有关它们的指导: LISP是否在当今世界仍在实践/使用,还是像FORTRAN / COBOL这样的传统语言?我的意思是,除了维护现有代码外,它是否还用于新项目? 什么是最广泛使用的方言?我遇到了Scheme和Common Lisp这两种最流行的方言,并希望您对哪种是最受青睐/最有用的方言发表意见,如果您能为初学者提供任何建议的资源,将不胜感激。 虽然渴望学习一种与我习惯上的程序语言根本不同的语言,但我不想为某种完全过时的东西投入过多的精力-如果它是专业上的“死胡同”,我仍然会学习它,但只有学术角度...

8
为什么尾随空格很大?[关闭]
对于程序员来说,尾随空白就足够了,因为像Emacs这样的编辑器具有特殊功能来突出显示或自动删除它,并且许多编码标准都要求您消除它的所有实例。我不确定为什么。我可以想到一个避免不必要的空格的实际原因,那就是如果人们不小心避免使用空格,那么他们可能会在两次提交之间进行更改,然后,由于某些人删除或删除了一些差异,因此我们发现它们之间存在差异添加了一个空间。 听起来这是避免它的一个很好的理由,但是我确实想看看是否还有更多的理由。那么,为什么尾随空格这么大呢?

8
如果提交供代码检查的代码看起来太复杂了,该怎么办?
该代码很难遵循,但至少在表面测试下,它似乎(大部分)运行良好。可能到处都有小错误,但是很难通过阅读代码来判断它们是否是更深层问题或简单修复的症状。但是,即使有可能,通过代码审查手动验证总体正确性也是非常困难且耗时的。 在这种情况下最好的行动方案是什么?坚持要重做吗?部分重做?首先重构?仅修复错误并接受技术债务?对这些选项进行风险评估,然后决定吗?还有吗
115 code-reviews 

6
真正的“业务逻辑”是什么?
自2009年开始使用PHP以来,我一直从事Web开发。当我搬到ASP.NET时,我听到了很多有关DDD和OOAD的信息,其中很多重点都放在了这种“业务逻辑”和“业务规则”上。关键是,到目前为止,我开发的所有应用程序都与CRUD操作有关,而我在实践中从未见过这些东西。 我简直无法想象这些东西在实践中到底会是什么。那么,这个业务逻辑到底是什么?它如何适合应用程序?我知道这些方法是作为领域模型中的方法实现的,但是这些方法可能是什么,以及它们在应用程序中的可能位置?

5
在这些比较中,Swift如何比Objective-C快得多?
苹果在WWDC14上发布了其新的编程语言Swift。在演示中,他们对Objective-C和Python进行了一些性能比较。以下是其中一张幻灯片的图片,比较了执行某种复杂对象排序的这三种语言: 关于使用RC4加密算法的性能比较,还有一个更加令人难以置信的图表。 显然,这是一次市场营销讲座,他们没有详细介绍如何在每种情况下实施。我让我想知道: 一种新的编程语言怎么能这么快? Objective-C的结果是由错误的编译器引起的还是在客观上比Swift效率低? 您如何解释性能提高40%?我知道垃圾回收/自动引用控制可能会产生一些额外的开销,但是要多少呢?

2
如何检测文件的编码?
在我的文件系统上(Windows 7),我有一些文本文件(如果需要的话,这些是SQL脚本文件)。 当使用Notepad ++打开时,在“编码”菜单中报告其中一些编码为“ UCS-2 Little Endian”,而某些编码为“ UTF-8不带BOM”。 这里有什么区别?它们似乎都是完全有效的脚本。没有Notepad ++的情况下,我如何分辨文件的编码?

20
“永远不要重新发明轮子”这个短语适合学生吗?
当我对SO提出一些问题时,我发现自己经常遇到“不要重新发明轮子”或“从不重新发明轮子”这样的表达方式。他们告诉您使用某些框架或现有软件包。我知道这种态度是从哪里来的,因为浪费时间在别人已经解决的事情上是不明智的。还是那样? 作为一名学生,我发现通过使用其他人编写的一些代码来解决我的问题,我无法学到很多我想得到的东西,而且我获得的见识也较少。有时我认为这句话主要是针对面临最后期限的在职程序员,而不是像我这样的学生。 “重新发明轮子”不好吗?也许我在想错了吗?也许我可以避免重新发明轮子,同时又学到很多东西?

17
我应该告诉某人他们的提交导致了回归吗?
当您跟踪并修复回归时(即导致以前工作的代码停止工作的错误),版本控制使您完全可以查找谁提交了破坏它的更改。 值得这样做吗?向做出承诺的人指出这一点是否具有建设性?错误的性质(在对更改的代码的基本误解上没有引起注意),这是否是一个好主意? 如果告诉他们一个好主意,那么有什么好的方法可以做到而又不会引起进攻或引起他们的防守呢? 出于争论的考虑,假设该错误非常微妙,CI服务器的自动测试无法对其进行识别。

14
为什么0为假?
这个问题听起来很愚蠢,但是为什么大多数编程语言都将0求值false和其他任何[整数]值true呢? 字符串比较 由于问题似乎太简单了,所以我将对自己进行一些解释:首先,对于任何程序员来说,这似乎都是显而易见的,但是为什么没有编程语言呢?实际上可能是,但是没有我用了-在哪0求和true,所有其他[整数]值都在false?这句话似乎是随机的,但我举了一些例子,可能是个好主意。首先,让我们以字符串三向比较为例,以C strcmp为例:任何以C为第一语言的程序员都可能会编写以下代码: if (strcmp(str1, str2)) { // Do something... } 由于strcmp返回的0结果是评估false字符串何时相等,因此初阶程序员尝试执行的操作很失败,而且他通常一开始并不理解为什么。曾0评估,以true代替,这个功能可能已在其最简单的表达式中使用-上面的一员-平等的比较时,以及适当的检查-1,并1在需要时将已只是做。bool在大多数情况下,我们会认为返回类型是(在我们看来)。 此外,我们引入一个新的类型,sign即只需要值-1,0和1。那可能很方便。想象一下,在C ++中有一个太空飞船运算符,我们想要它std::string(好吧,已经有compare函数了,但是太空飞船运算符更有趣)。该声明当前将是以下声明: sign operator<=>(const std::string& lhs, const std::string& rhs); 已经0被评估为true,飞船运营商甚至不存在的,我们可以宣称operator==这种方式: sign operator==(const std::string& lhs, const std::string& rhs); 这operator==将立即处理三向比较,并且仍然可以用于执行以下检查,同时在需要时仍能够检查哪个字符串在字典上优于另一个字符串: if (str1 == str2) { // Do something... } 旧错误处理 现在我们有了例外,因此本部分仅适用于不存在此类旧语言的旧语言(例如C)。如果我们看一下C的标准库(还有POSIX),我们可以肯定地看到maaaaany函数0在成功时返回,否则返回任何整数。我可悲地看到有些人做这种事情: #define TRUE 0 // ... if (some_function() == …

8
为什么许多程序员将其代码移至github?
在过去的6个月或更长时间里,我已经看到很多代码托管在sourceforge.net以及其他托管网站“移至GitHub”上。仅使用短语“ Moved to Github”的Google搜索会返回多个结果,其中包含已移至github的文本。这对我来说非常令人困惑,我想知道,为什么人们要移动?这是否意味着GitHub更好,还是有我没有看到的一些特殊优势?

12
为什么在一种产品或软件的开发中使用多种编程语言?
我是一名刚毕业的研究生,旨在攻读计算机科学硕士学位。我遇到了多个真正吸引我并鼓励我为它们做出贡献的开源项目(CloudStack,OpenStack,moby和Kubernetes仅举几例)。我发现它们中的大多数有一个共同点,就是使用多种编程语言(例如Java + Python + Go或Python + C ++ + Ruby)。我已经看过另一个问题,它涉及如何使多种编程语言相互通信:如何使两种不同的编程与两种不同的语言交互? 我想了解提示企业使用多种编程语言的要求。什么样的要求或要求类型使软件架构师或项目负责人说:“我建议对于任务1使用语言X,对于任务2使用语言Y”?我似乎无法理解在同一产品或软件中使用多种编程语言的原因。

11
是否有关于函数应接受多少个参数的准则?
我注意到我使用的一些函数有6个或更多参数,而在大多数我使用的库中,很少会找到一个需要3个以上参数的函数。 通常,这些额外的参数中有很多是二进制选项,可以更改功能行为。我认为其中一些参数设置的函数可能应该重构。有多少个数字的准则吗?

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.