软件工程

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

11
对于一般的系统来说,废除堆栈而仅使用堆进行内存管理会更有效吗?
在我看来,可以用堆栈完成的所有事情都可以用堆来完成,但是不能用堆栈完成的所有事情都可以用堆栈来完成。那是对的吗?然后,为了简单起见,即使我们在某些工作负载下确实损失了少量性能,仅采用一个标准(即堆)难道不是更好吗? 考虑一下模块化和性能之间的权衡。我知道这不是描述这种情况的最佳方法,但是总的来说,即使有可能获得更好的性能,理解和设计的简单性似乎也是一个更好的选择。
14 memory 

5
习惯FP思维的人应该如何阅读命令性代码?
我大约五个月前从大学毕业,并且已经在一家本地初创公司工作了四个月。在大学期间,我独自学习了Haskell,F#等。我们在大学里学过Java,但是我很快就接触了函数式编程,并且花了更多的时间在命令式编程上。结果,我的大脑开始思考功能性思维。我加入的公司使用Python,并且代码非常重要。我很难阅读命令式代码。我无法追踪突变。当“如果……否则……”嵌套的深度超过四个级别时,我将完全失去对代码中所发生情况的跟踪。另外,Python是一种动态语言,因此代码中没有类型。它' 自从我试图理解我们代码库的一部分(据称是“中等复杂”)以来已经有几个星期了,但是到目前为止,我在理解它方面还没有取得任何明显的进展。请向我提供一些实用的技巧,以帮助我理解该代码。提前致谢! 编辑: 也许我还应该提到代码中没有很多注释,而且名称也不是很直观。

6
为什么在Web服务器上如此频繁地使用PHP?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 根据W3Techs,我的Web服务器使用PHP的比例高达76.9%的Web服务器: http://w3techs.com/technologies/overview/programming_language/all 我使用PHP的原因是惯于看到其他人在Web服务器上使用它。PHP到底是什么使它在Web服务器上无处不在? (请注意,此问题与以下问题类似,但朝着不同的方向:为什么Java不用于现代Web应用程序开发?)

12
使用条件句是否是反模式?
我在工作中的遗留系统中看到了很多东西-这些功能如下所示: bool todo = false; if(cond1) { ... // lots of code here if(cond2) todo = true; ... // some other code here } if(todo) { ... } 换句话说,功能有两个部分。第一部分进行某种处理(可能包含循环,副作用等),并沿途设置“ todo”标志。仅当已设置“ todo”标志时才执行第二部分。 这似乎是一种非常丑陋的处理方式,而且我认为我花了很多时间去理解的大多数情况都可以重构,以避免使用该标志。但这是一个实际的反模式,一个坏主意还是完全可以接受? 第一个明显的重构是将其分为两种方法。但是,我的问题更多是关于是否有必要(在现代的OO语言中)创建一个局部标志变量,可能将其设置在多个位置,然后在以后使用它来决定是否执行下一个代码块。

8
编写优质JavaScript的五个或以下技巧?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 JavaScript显然已变得不可缺少。但是,我仍然是新手,而且我发现很难克服那种感觉似乎很混乱的感觉,我现在不想处理它。与JavaScript相比,我对其他语言的理解更加深入,因为我似乎无法解决这种恐惧。我有一种感觉,当我编写JavaScript时,我试图画一幅Weimaraner幼犬的肖像​​。 通常,这可以帮助我牢记一些最重要的指令,以便我对自己的一举一动进行自我询问。(在我看来,只有五个或更少。) 您能列出五个(或更少)特定于JavaScript的问题吗?在编码JavaScript时,我应该问自己的每一步?他们会是什么? 更新:澄清一下,我并不是在学习JavaScript时要记住五件事;我要问的五个问题总是要问自己,每个人都应该一直问。像这样的高级问题:“我可能会在其他地方重复吗?” 或“此变量/函数名称是否足够具体(或太具体)” <==,除了这些示例问题不是JavaScript特有的。我正在寻找JavaScript特有的指令。
14 javascript 

5
为什么'final'关键字在业界很少使用?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 自从final几年前我发现Java关键字的强大功能以来,它帮助我提高了代码的可读性,因为人们可以轻松地看到什么是只读变量。它也可能对JIT有所帮助,尽管这是非常有限的,但不会造成伤害,尤其是在针对嵌入式设备(例如android平台)时。 但是最重​​要的是,它有助于使设计对更改更健壮,并在其他提交者需要修改代码库时为其提供指导。 但是,在浏览某些JDK源代码时,我从未偶然发现过该关键字,无论是用于类,方法还是变量。这同样适用于我必须审查的各种系统。 有什么原因吗?让一切都从内部变通是常见的设计范式吗?
14 java  final 

11
我怎么知道编译器是否破坏了我的代码?如果是编译器,我该怎么办?
偶尔进行某些级别的优化时,C ++代码将无法工作。可能是编译器进行了优化而破坏了代码,也可能是包含未定义行为的代码,这些行为使编译器可以做任何感觉。 假设我有一些仅在使用更高的优化级别进行编译时会中断的代码。我怎么知道是代码还是编译器,如果是编译器怎么办?

3
Halstead复杂度度量的应用程序是否有任何工作可用来确定软件质量?
1977年,莫里斯·霍华德·霍尔斯特德(Maurice Howard Halstead)推出了他的软件系统复杂性度量标准,其中包括对程序词汇量,程序长度,数量,难度,工作量以及模块中错误数量的估计。根据Wikipedia所说,困难与阅读或编写程序时理解程序的难度有关,可以将精力转化为​​编写应用程序所需的时间,其中Time =(Effort / 18)seconds。 除非数据和计算与软件开发的某些方面有关,否则测量是没有用的。但是,我还没有发现任何能够说明某个值或更高难度的缺陷会导致统计上的缺陷增加或难度与读取代码的时间之间的关系的工作(N的难度平均产生M个小时的花费)理解代码库)或在确定质量有用的事实之后进行任何能够计算时间的分析(尤其是因为应该将写入时间记录为度量)。我对Halstead的错误估计(维基百科上没有提及)特别感兴趣-应用程序中的错误数量可以通过Volume / 3000或Effort ^(2/3)/ 3000进行估计。 我在寻找两件事: 是否有人在实际应用中使用Halstead的软件复杂性度量来评估软件质量?如果是这样,您如何应用它们,结果证明它们是有用,有效和/或可靠的度量? 是否有任何调查,分析或案例研究形式的学术研究,讨论了Halstead复杂性度量应用于软件质量时的有效性(或无效性)? 是否有任何调查,分析或案例研究形式的学术研究证明使用代码源代码行(SLOC)来计算类似于量,难度,工作量,时间和错误的Halstead度量标准?我怀疑“体积”可能仅对应于SLOC计数,“难度”可能对应于圈复杂度(可能还有其他度量)。我也很清楚,在SLOC中衡量工作量,生产率或时间可能会产生误导。

8
工作经验而不是教育?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 我想将此主题命名为“教育与经验”,但是该主题已经存在。我已经阅读了该讨论,尽管我想问的内容与该主题有关,但问题却大不相同。 我大约12年前开始学习编程。在过去的四年中,我一直在软件外包开发人员(位于俄罗斯)工作。我正在考虑离开俄罗斯并搬到其他地方,例如澳大利亚(基本上没有关系)。我有许多示例说明了一般的能力和成功案例,但所有这些人和我的案例仍然有所不同。 我有很好的技术经验-主要领域是C ++和.NET。我已经参加了基于不同技术/平台(Windows,Linux,Android,Qt,.NET等)的7个项目。因此,我相信我有能力担任软件开发人员。我们来看一下-“从技术角度来看,这个人绝对可以”。 唯一的问题是,我没有任何教育。所以,这是一个问题: 在大多数情况下,我是否可以将“具有CS经验,同等学历或更高学历”的单词读作“ N年的经验”? 更新:获得像MCSD(用于.NET)这样的证书是否有意义?我知道这个问题有一个单独的主题,但仍然要求没有教育但有证书和经验的情况。

8
在什么情况下流程图仍然是有价值和有用的工具?
刚开始编程时,我非常依赖流程图(和打印机间距图)。当我在COBOL课堂上时,直到我的流程图被教员批准后,我才能开始编写任何代码。那时,我必须为所有内容制作流程图。 今天,二十五年后,我发现自己只绘制了两种情况。逻辑很棘手的非常具体的算法或非常笼统的概念,以确保我按正确的顺序定义了所有重要步骤。 我只是忽略了流程图的其他用例吗?

5
导出从Haskell获得的知识和技能的最兼容,使用最广泛的生产语言是什么?
我喜欢Haskell,简洁明了。虽然Haskell用于生产软件中,但根据我所见,它并未得到特别广泛的部署。在生产项目方面,最相似且仍被广泛使用的语言是什么,这样我可能会有滚雪球般的机会在行业中使用类似的出色产品? 大量平台上是否也提供了与第一部分相同的语言?如果没有,那么具有广泛平台部署的最佳替代方案是什么?我希望将一种语言放入待办事项清单,而不是庞大的人群或家庭。确凿的证据将是一个加号。

2
最佳开源ASP.NET MVC电子商务项目[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我需要启动并运行一个电子商务站点,但是如果不需要,我真的不想从头开始进行编程。我想使用ASP.NET MVC对其进行编程。 我正在寻找一种很好的开源替代品(如果它足够模块化,则可以购买),可以用作基础并通过所需的功能进行增强? 它必须具有所有“常规”电子商务功能,并且还可以与我选择的信用卡API集成。 如果有人在这里对我有任何建议,我将不胜感激:)

3
为什么c系列是LISP系列而不是数学/ CS计划的标准CS学习团?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为了自我改善,我一直在熟悉LISP。我注意到的一件事是LISP在数学范式中比在C语言中更重要。语法和设计结构似乎直接反映了算法的实际数学模型。对我来说,为什么即使是基于数学的优秀CS程序也学习C而不是LISP,这对我来说都没有道理。我认为LISP比C更直接采用更高的数学概念。我并不是说您不能在C中对数学结构进行建模。我只是注意到LISP对于数学家来说似乎是一成不变的。 我已经在JAVA学校中阅读了许多Joel Spolsky的咆哮,而没有读到(我同意他的评价),但是我的学校并没有因此而教JAVA。他们在教授诸如指针,算法设计,递归甚至汇编指令之类的基本概念方面非常严格。但是,他们在C和c ++中都完成了这一切。有谁知道原因和/或其历史?

8
编译器是否在开发之外使用?
据我所知,编译器旨在供开发人员将其代码编译为可执行(机器代码)文件。编译器不会扩展到客户端的计算机或最终用户系统。 相反,开发人员仅使用编译器将其代码转换为机器代码,然后将其传输到其他机器以用作应用程序。 编译器是否具有此过程之外的功能?如果是这样,什么时候使用它们?
14 compiler 

6
您如何学习语言的标准框架/ API /功能?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我了解如何编码。我知道如何解决我经常使用的语言的基础知识。我知道如何编写略高于基本的正则表达式,可以与数据库对话,可以接受输入,打印输出,处理文件等。我或多或少地确信我可以吐出源代码的基本能力中等复杂的程序。 我的问题是我永远都觉得不够。我觉得我只了解我的语言的标准库的一小部分,在我完全理解之前,至少是顺便说一句,我什至无权尝试使用它。我刚离开(社区/初级/ whathaveyou)大学,而我的朋友正在从事该行业的工作,但是我仍然感觉像是假货或装腔作势者,而且我还不够出色。 是否有一个不错的标记“我足够了解”,我可以用来向自己保证可以编码?我是否应该认为我至少有能力编写FizzBu​​zz作为可以申请的指标?如何相对轻松地了解更多这些标准库,框架和/或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.