软件工程

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

7
为什么要知道并发编程?
并发编程对我来说相当困难:即使看一张基本幻灯片对我来说也充满挑战。看来太抽象了。 很好地了解并发编程概念有什么好处?它对定期进行顺序编程有帮助吗?我知道了解我们的程序如何工作很满意,但是还有什么呢?

8
初学者常见的数据结构有麻烦吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我正在上第二门Java课程。我们正在进入数据结构。我已经在一个链表上做了一个分配,现在是一个堆栈。我在链接列表上遇到了麻烦。堆栈给我带来了一些麻烦,但要容易得多。 我应该担心使用这些算法和数据结构时遇到困难吗?我只是觉得我不太了解它。

8
什么使代码中的“数据库请求太多”?
这是我本人和我的一些同事所进行的讨论,并认为我会来到这里,看看是否对此达成了普遍共识。 关于数据库调用,基本上可以归结为以下两种观点:1.进行一次大型调用以获取减少数据库调用数量所需的一切信息。2.根据请求的尺寸进行较小的单独调用以减小数据库的大小。数据库调用 这在通用代码中特别有用。我们将使用Employee类的示例,因为这很简单。 假设您的Employee类具有10个值属性(名字,姓氏,雇用日期等),然后具有2个类属性... 1个指向Department类,然后1个主管指向另一个Employee对象。 在心态1中,您将进行一次调用,以返回Employee数据以及填充Department和Supervisor属性所需的字段……或者至少返回那些子对象中最常使用的字段。 在思维方式2中,首先只填充Employee对象,然后仅在实际需要时以及在实际需要时才填充Department和Supervisor对象。 2的态度非常简单明了...最小化请求的大小以及每次发出这些请求中的一个时都要命中多少个数据库对象。#1的立场是,即使可以正确实施,代码必须进行多个连接的纯粹事实也将导致Web服务器和数据库之间的连接受到更大的压力,而不是减少连接。 研究此问题的推动力是我们的Web服务器和数据库服务器之间的通信量已失控。

9
如何将客户端从UI原型转移到一组实际需求?
假设您得到了一个由25个屏幕组成的应用程序视觉状态的模型。期望这足以使我们确信我们可以将其开发并作为最终应用程序移交给原始利益相关者或客户,他们将对此感到满意。自然,您最终将要再次向利益相关者询问很多用于UI的问题,这很浪费。 但是,我有很多次发现这还远远不够,在开发应用程序的过程中,由于我们正在复制一个接口,最终使客户不像他们最初看起来的那样满意,这一要求变得模糊不清当我们要求他们提供创建UI的所有信息时。 我只是不确定要提出什么要求,我试图做到具体,要求要求和对总体目标的理解,但是我不知道我应该提出什么要求。如果我现在才开始,那么重新散布导致进入UI的所有信息将浪费大量时间,在此阶段,客户最初失去的许多重要原因将丢失。 我如何让人们理解我们无法通过要求用户为我创建可操作的东西来锁定基于UI模型的需求? 为了正确执行为最终用户开发应用程序的任务,理想情况下从什么开始?

4
在使用不可变对象时,是否有一种特定的设计策略可用于解决大多数“鸡与蛋”问题?
来自OOP背景(Java),我自己学习Scala。虽然我很容易看到单独使用不可变对象的优点,但我很难理解如何设计这样的整个应用程序。我举一个例子: 假设我有代表“材料”及其属性的对象(我在设计游戏,所以我实际上确实有这个问题),例如水和冰。我将拥有一个拥有所有此类材料实例的“经理”。一种特性是凝固点和熔点,以及材料冻结或融化的温度。 [编辑]所有的实例都是“单例”,有点像Java枚举。 我想让“水”说在0C时冻结成“冰”,而“冰”说在1C时熔化成“水”。但是,如果水和冰是不可变的,则它们不能作为构造函数参数相互引用,因为其中一个必须首先创建,并且不能将尚未存在的另一个作为构造函数参数进行引用。我可以通过给他们两个都提供给经理的参考来解决这个问题,以便他们每次查询冻结/融化属性时都可以查询它以找到他们需要的其他材料实例,但是随后经理之间也遇到了同样的问题和材料,它们需要相互引用,但是只能在构造函数中为它们之一提供引用,因此管理器或材料不能是不变的。 他们只是无法解决这个问题,还是我需要使用“功能”编程技术或其他某种模式来解决它?

14
克服开发人员普遍缺乏的UI设计技能[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我被告知并为自己发现,很多开发人员都不擅长UI设计(我不知道这是多么真实),但至少对我来说是真实的。 在Web开发中,如果没有UI设计方面的精湛技能,仅凭良好的代码开发技能是不够的。 因此,对我和像我这样的许多开发人员来说,只有一半的东西(良好的开发技能),除了付钱给设计师之外,我们应该如何完成另一半? 使用经过少量修改的开源Web模板是对此的最佳解决方案,还是有其他选择?

2
IronScheme是否完整或稳定到值得学习?
维基百科上提到IronScheme是失败项目IronLisp的继承者,该项目将Lisp引入CLR和.NET,就像Clojure为JVM所做的那样。有人有使用这种语言的经验吗?它看起来相当完整(99%),但是我不确定如何判断是否值得花时间摆弄它。稳定或完整,我的意思是将其用于实际项目,而不仅仅是摆弄工具和Project Euler风格问题。
17 .net  lisp  scheme  clr 

3
敏捷意味着什么?
我们有一个项目,每个人都说我们将以敏捷的方式进行,但是我怀疑我们已经清楚地了解了什么是敏捷。 在以前的项目中,我们召开了计划会议,然后定义了产品积压日志,并在2至3周的冲刺中将工作分配给了开发人员。每天早晨,我们都会召开Scrum会议(每次似乎要进行1/2小时的时间),然后每个开发人员都继续进行。在sprint结束之前几乎没有人编写任何测试,并且未完成的工作被添加到下一个sprint。 开发人员几乎没有互相交谈,开发也没有涉及TDD。实际上,大多数开发人员在开始时就有一个规范,并且只是在为冲刺计划的2或3周内着手进行。与客户/利益相关者几乎没有任何沟通。 质量检查通常在几个月后才参与,到那时,我们发现缺少要求,这进一步增加了我们必须做的工作量。显然没有反馈回路。 所以我的问题是,我们哪里出错了,如何防止团队犯同样的错误。
17 agile 

4
梯形逻辑程序的源代码控制是否有现实/有用的解决方案
似乎几乎不存在用于可编程逻辑控制器(PLC)的梯形逻辑(LL)程序的版本控制。可能是因为LL是一种视觉语言,并且倾向于存储在二进制文件中,或者可能是因为源代码控制尚未在过程控制工程界“流行”-或今晚我的Google-Fu表现不佳。 您知道用于此类系统的版本控制的任何现实且有用的解决方案吗? 定义: 实际=对程序的更改由用户跟踪,并且可以还原和合并 有用=系统与可视化LL设计器集成在一起,不仅限于单个PLC制造商提供的LL,而且不花费可观的金钱吗? 注意:我听说有人使用SVN或Mercurial等来跟踪二进制文件,但是我不认为diff / merge功能会显示可读性差异。 附录: 最初,我们只需要支持Allen-Bradley PLC。现在,我们还有西门子和MicroLogix PLC。仍在寻找可行的解决方案...

5
艾达真的走了吗?
人们仍然使用Ada吗?(主要用于国防部) 是否所有应用程序都使用Ada“旧版”编写? Ada知识是否仍在销售
17 legacy  ada 

11
公司希望在面试时对他们的网站有想法[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我对一家公司担任高级Web开发人员职位的公司进行了初步电话采访,并在他们要求通过在其网站上注册来准备的电子邮件中,因为他们希望听到我对此的想法和改进建议。 我以前听过有关这样做的公司的故事。他们采访了10个人,然后,如果每个人都提供建议,那么他们会有很多免费的咨询。 我相信这是我第一次被要求做这样的事情,所以我想听听别人对这是免费咨询还是我只是偏执的想法。

5
SRP(单一责任原则)是客观的吗?
考虑两个想要设计“吸引用户”设计的UI设计师。“吸引用户”是一个不客观的概念,仅存在于设计师的脑海中。因此,设计师A可以选择红色,而设计师B可以选择蓝色。设计器A创建的布局与设计器B完全不同,依此类推。 我读到有关SRP(单一责任原则)的知识,我理解的是一种主观分析或对职责的分解,这些职责可能因OO设计者而异。我对吗?换句话说,是否有可能有两个优秀的面向对象的分析器和设计人员针对一个基于SRP原理的系统提出两种不同的设计?

5
向经验丰富的C ++工程师团队“引入” OOP / OOD的最佳方法
我正在寻找一种有效的方法来向现有团队成员介绍OOP概念,但这并不是侮辱。我的队友对OO语言并不陌生。我们从事C ++ / C#已有很长时间了,因此对技术本身很熟悉。 但是,我环顾四周,并且没有付出很大的努力(主要是以代码审查的形式),似乎我们正在生成的是恰巧在类内部的C代码。仅举几例,几乎没有使用单一责任原则,抽象或试图最小化耦合的尝试。我见过没有构造函数的类,但每次实例化时将memset设置为0。 但是每次我提起OOP时,每个人都会点头并让他们看起来好像完全知道我在说什么。知道这些概念是件好事,但在交付实际工作时,我们(比其他人更多)似乎很难应用它们。 代码审查非常有帮助,但是代码审查的问题在于它们仅在事实发生之后发生,因此对于某些人来说,我们似乎最终重写了刚刚编写的代码(它大部分是重构的,但仍然要花费很多时间)。另外,代码审查仅提供反馈给单个工程师,而不是整个团队。 我正在做一个演示文稿(或一系列)的想法,然后尝试再次提出OOP以及一些本来可以编写得更好并且可以重构的现有代码示例。我可以使用一些没有人拥有的非常老的项目,因此至少那部分不应该是一个敏感的问题。但是,这行得通吗?正如我所说的,大多数人已经做过C ++很久了,所以我的猜测是:a)他们会坐在那里思考为什么我要告诉他们他们已经知道的东西; b)他们实际上可能会将它当作侮辱,因为我告诉他们他们不知道如何做他们已经从事多年甚至数十年的工作。 是否有另一种方法可以比代码审查更广泛地吸引读者,但同时又不会像惩罚性演讲那样? 我不是一个刚大学毕业的孩子,他对理想的代码设计有着乌托邦式的理想,我不希望任何人都能做到。我之所以写这本书,是因为我只是对一个实际上在纸上有不错的高级设计的人进行了评论。但是,如果您描绘类:A-> B-> C-> D,则在代码B,C和D中都实现几乎相同的公共接口,并且B / C具有一个内联函数,因此最高级的A类绝对在做所有工作(包括内存管理,字符串解析,设置协商...)主要以4种mongo方法进行,并且出于所有目的和目的,几乎都直接调用了D。 更新:我是一名技术负责人(担任该职位六个月),并得到了小组经理的全力支持。我们正在开发非常成熟的产品,并且维护成本绝对是众所周知的。

5
如何在办公室有效地度过“空闲时间” [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 8年前关闭。 发行版本后,每两到三个月一次,我可以获得10到15天的空闲时间。空闲时间,我的意思是没有工作,没有人在乎您在做什么,但是您必须到办公室去。 你有这样的空闲时间吗?您这次如何利用? 我倾向于阅读,但是我觉得越来越多的信息并不是花钱的最好方法。

13
哪些特征有助于Pascal的发展?
我正在编译Pascal语言的详细历史记录,而我缺少一些细节。 今天有太多功能让我们理所当然。哪些功能对Pascal的发展做出了重大贡献,为什么它们如此重要? 我在寻找语言功能,而不是平台或框架功能。因此,例如运算符重载或默认参数,而不是Linux支持或新的Rich Text小部件。 我知道Pascal有几种不同的口味(Delphi,Free Pascal,Oxygene,Quick Pascal,Apple Pascal等),它们在不同的时间并行地引入了相同的功能。那没问题。我期待在Pascal语言作为一个整体,并当了显著的里程碑发生(日期,版本等)
17 history  delphi  pascal 

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.