软件工程

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

8
私有变量与财产?
在大多数情况下,在类内部为变量设置值时,我们会看到两种选择: private string myValue; public string MyValue { get { return myValue; } set { myValue = value; } } 是否有一个约定可以确定如何为类内部的变量赋值?例如,如果我在同一个类中有一个方法,我应该使用属性还是使用私有变量来分配它。我已经看过这两种方法,所以我想知道这是一个选择还是性能是一个因素(可能很小)。

12
代码kata的缺点
代码kata是一个概念,旨在通过多次尝试在每次迭代中改进代码的小问题来磨练程序员的技能。这个名称源于武术kata的类比,其中形式(aka kata)是一种反复进行的练习,可导致改进。 从我对这个问题的最后一个问题的反应中,我想知道这种方法的缺点是什么?
41 code-kata 

10
是第一个用机器代码编写的汇编程序吗?
我正在阅读《计算系统的元素:从第一原理构建现代计算机》一书,其中包含的项目涉及从布尔门到高级应用程序(按此顺序)的计算机构建。我正在处理的当前项目是使用我选择的高级语言编写汇编程序,以将Hack汇编代码转换为Hack机器代码(Hack是前几章中构建的硬件平台的名称)。尽管所有硬件都是在模拟器中构建的,但我试图假装我实际上在实际过程中仅使用当时可用的工具来构建每个级别。 就是说,这让我开始思考。使用高级语言编写我的汇编程序当然很方便,但是对于有史以来第一个(即历史上)编写的汇编程序,它不需要用机器代码编写,因为那时已经存在了? 还有一个相关的问题...今天怎么样?如果出现了全新的CPU体系结构,全新的指令集和全新的汇编语法,则如何构造汇编器?我假设您仍然可以使用现有的高级语言来为汇编程序生成二进制文件,因为如果您知道新平台的汇编语言和机器语言的语法,那么编写汇编程序的任务实际上就是文本分析任务,并且与该平台没有内在联系(即需要以该平台的机器语言编写)...这就是我能够在2012年编写我的Hack汇编程序时“作弊”并使用一些预先存在的原因的原因高级语言可以帮助我。

1
如何组织功能程序[关闭]
可能重复: 函数式编程与OOP 如何使用函数式编程编写可管理的代码? 在OOP中,代码的基本组织单位是类。Java,C#和类似语言的一种常用方法是围绕每个类使用一个文件,文件名紧随类名之后来组织代码。 您可以将这些类别中的每一个视为组织的单位,以对单个概念进行分组。 这些类位于名称空间中,该名称空间通常遵循解决方案/项目中文件的目录结构。命名空间是另一个组织层次。 功能语言的大型项目通常是如何组织的? 如何确定如何将功能拆分为不同的文件? 是否在文件旁边使用其他分组单位? 通常在单个文件中如何组织代码?

14
固有随机/非确定性算法的单元测试
简而言之,我当前的项目涉及“约束随机事件”的创建。我基本上是在制定检查时间表。其中一些是基于严格的计划约束;您每周星期五10:00 AM进行一次检查。其他检查是“随机的”;有一些基本的可配置要求,例如“每周必须进行3次检查”,“必须在9 AM-9PM的时间之间进行检查”以及“在同一8小时内不应进行两次检查”,但是在为一组特定的检查配置的任何限制内,得出的日期和时间均不可预测。 单元测试和TDD,IMO在此系统中具有巨大的价值,因为它们可以用于按增量方式构建它,而整套需求仍然不完整,并确保我不会“过度设计”它来做我不喜欢的事情目前不知道我需要。严格的时间表对TDD来说是小菜一碟。但是,当我为系统的随机部分编写测试时,我发现很难真正定义要测试的内容。我可以断言调度程序产生的所有时间都必须在约束范围内,但是我可以实现通过所有此类测试的算法,而实际时间却不是很“随机”。实际上,这正是发生的事情。我发现了一个问题,尽管时间无法精确预测,但它属于允许的日期/时间范围的一小部分。该算法仍然通过了我认为我可以合理做出的所有断言,并且我无法设计在这种情况下会失败的自动测试,但是在给出“更​​多随机”结果时通过。我必须证明该问题是通过重组一些现有测试以重复多次来解决的,并目视检查生成的时间是否在整个允许范围内。 有没有人提供设计非预期行为的提示? 感谢所有的建议。主要观点似乎是,我需要进行确定性测试才能获得确定性,可重复性和可肯定的结果。说得通。 我创建了一组“沙盒”测试,其中包含用于约束过程(可能为任意长的字节数组在最小值和最大值之间变长的过程)的候选算法。然后,我通过一个FOR循环运行该代码,该循环为该算法提供了几个已知的字节数组(刚开始时从1到10,000,000的值),并使该算法将每个值限制为1009到7919之间的值(我使用质数来确保算法不会在输入和输出范围之间经过一些偶然的GCF)。计算得到的约束值,并生成直方图。要“通过”,所有输入都必须反映在直方图中(为了确保我们不会“丢失”任何值),直方图中任意两个存储桶之间的差不能大于2(实际上应小于等于1) ,但请继续关注)。获胜的算法(如果有)可以直接剪切并粘贴到生产代码中,并进行永久测试以进行回归。 这是代码: private void TestConstraintAlgorithm(int min, int max, Func<byte[], long, long, long> constraintAlgorithm) { var histogram = new int[max-min+1]; for (int i = 1; i <= 10000000; i++) { //This is the stand-in for the PRNG; produces a known byte array var buffer …

10
为什么在面试中问我一些一般性的非技术性问题?[关闭]
我上周在亚马逊进行了第一次电话采访,他们在采访中问了一些基本的技术问题。 今天,我进行了第二次电话采访,我准备好期待下一次技术面试,但那根本不是技术性的。 我们自我介绍之后,他问了一些问题: 你为什么喜欢编程? 您不喜欢编程什么? 您对新工作有什么期望? 在您上一个工作的项目中,您如何确保该项目已按照客户的要求实施? 是否有任何项目,在开发过程中您感觉设计很糟糕,如果是这样,您如何解决该问题? 作为工程师,您将如何掌握新技术? 另外,当我向他解释我最近从事的项目时,他问我为什么我们决定做出特定的设计决定,以及这是否是我的决定。 我想知道他为什么问我这些问题。由于英语不是我的母语,因此我认为原因之一是测试我对该语言的了解。 而且我给他的大多数答案都非常简短,因为我觉得他期望更多,所以我想出一些要说的话,最终变得b废。总的来说,我认为面试真的很糟糕,因为我无法清楚地向他传达我的观点。 为什么我问这些类型的问题,面试官期望什么样的答案?
41 interview 

6
何时使用工作流引擎?
过去,我曾以程序员的身份工作于某些工作流引擎,但从未明确说明为什么我们首先选择工作流引擎。作为程序员,我知道编写代码时至少有100种方法可以执行任何操作,但是只有少数几种是最好的! 我仍然不了解工作流引擎(或更确切地说是它们的概念)能最好地解决哪些用例,而不是设计一个支持DI的应用程序。我正在寻找与领域无关的用例的任何一般特征,其中工作流引擎是最好的选择之一。 所以我的问题是:需求的一般特征是什么,可以作为选择一个好的工作流引擎并对其进行编码的信号?
41 workflows 

8
开发机器应该在VM内吗?[关闭]
Rob Conery的这篇文章(请注意)表示开发环境应在虚拟机中运行。我明白他在说什么,并且倾向于同意,但仍然有些不安。既然虚拟化已经非常成熟,甚至生产系统都可以在VM内运行,那么这几乎不是问题,但是正如我所说的那样,这让我很困扰。 您如何虚拟化开发计算机?你已经这样做了吗?如果这样做的话,路上有什么陷阱或陷阱吗?

19
雇用小公司的程序员?[关闭]
我经营一家公司已有近10年的历史,而这一直只是我自己,另一个程序员(他是一个好朋友和共同创始人)和一个推销员(他也是一个朋友)。在一起,我们设法做得不错,并且所有人都谋生了,但是现在我们一直在努力扩展。 不幸的是,有一些问题: 我们使用的技术不是过时的,但是与其他Web开发选项(例如PHP)相比,它也不受欢迎 我们在竞争激烈的市场中工作,与数百万美元的公司竞争 我们负担不起付给新程序员或推销员的酬劳。我们为自己赚了足够的钱,但是除非我们有大量的新客户,否则我们将无法支付太多。 由于我们支付的费用不高,我们使用了一种较为稀有的技术,而且我们与大型公司竞争,因此很难找到新的程序员或推销员。 我们迫切需要扩展,但是当我们试图吸引更多的客户时,我们无法以很少的人来支持他们(或者他们的需求超出了我们的专业知识范围),并且当我们尝试雇用新的程序员和销售员时,我们通常没有获得高质量的产品,而且通常不会给我们公司带来重大的好处。 有人对我们如何扩展有任何建议或提示吗?
41 business 

5
依赖倒置与高阶函数有何关系?
今天我刚刚看到这篇文章,它描述了SOLID原理在F#开发中的相关性- F#和设计原则– SOLID 在谈到最后一个问题时-“依赖倒置原则”,作者说: 从功能的角度来看,这些容器和注入概念可以通过简单的高阶函数或内置在语言中的“中间钻孔”模式来解决。 但是他没有进一步解释。因此,我的问题是,依赖项反转与高阶函数有何关系?

3
今天C ++的作用是什么?
目前,我是一名IT学生,我想知道当今C ++中仍然重要的是什么,它的用途是什么?我在大学里完成了基础C ++课程,但是我无法想象我可以在哪里使用我的知识以及应该朝哪个方向学习C ++。 换句话说,我应该学会成为一名成功的C ++程序员? 目前,我正在学习Java只是因为我不清楚C ++在当今哪个领域有用,但是我清楚地知道作为Java程序员我将从事哪种工作。但是我仍然希望C ++不会死。
41 c++ 

3
学习Erlang与学习Node.js [关闭]
我在线上看到很多关于Erlang如何在几乎所有可能的类别中踢出node.js屁股的废话。所以我想学习Erlang并试一试,但这就是问题所在。我发现拿起Erlang比拿起node.js困难得多。使用node.js,我可以选择一个相对复杂的项目,并且一天之内就能完成工作。使用Erlang,我遇到了障碍,并且发展得不那么快。 因此,对于那些有更多经验的人来说,Erlang学习起来是否很复杂,或者我只是想念一些东西?Node.js可能不是完美的,但是我似乎能够用它完成工作。
41 erlang  node.js 

13
Python对换行符的处理与JavaScript的自动分号有何不同?
Javascript具有一种称为“自动分号插入”的功能,基本上,如果解析器遇到无效的令牌,而该令牌之前的最后一个令牌是换行符,则解析器将在换行符所在的位置插入分号。这样一来,您基本上可以编写所有不带分号的javascript代码,但是您必须了解一些边缘情况,主要是如果您有return关键字,然后要在新行中返回的值。 function test(){ // This will return 'undefined', because return is a valid statement // and "john" is a valid statement on its own. return "john" } 由于存在这些陷阱,因此有数十篇文章的标题为“自动分号插入是邪恶的”,“始终在Javascript中使用分号”等。 但是在Python中,没有人曾经使用过分号,并且它具有完全相同的陷阱。 def test(): # This will return 'undefined', because return is a valid statement # and "john" is a valid statement on …

8
程序员对高级程序员的主要期望是什么?
最近,我阅读了以下5种老板类型以及如何与他们打交道 ,其中介绍了最糟糕的老板的着装。我刚刚开始领导一小组软件开发人员。 我想知道程序员对高级程序员的期望是什么,或者在管理团队时应该避免的事情。 另外,我想知道如何使程序员满意,并为我的团队创建一个高效和完整的环境。

5
C和C ++之间的根本区别是什么?[关闭]
许多人倾向于写“ C / C ++”,好像他们是同一回事。尽管它们具有许多相似之处,但是显然它们并不相同。 但是C和C ++之间真正的根本区别是什么?C ++是C的增强版本,还是C中有C ++中不存在的功能?
41 c++  c 

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.