软件工程

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

11
软件开发-项目,一名程序员-如果被公交撞到怎么办?
我目前正在工作的公司让我开发了许多内部关键任务软件。我还有一个为我工作的人,但他更多是测试人员,而不是真正的开发人员。该公司担心其中一些项目,以及如果我被公交车撞到怎么办。当只有一个人知道代码库时,公司如何在类似的情况下恢复工作。一个知道项目当前状态的人。 我解释说,有了我的文档以及代码中的文档,他们实际上只需要雇用另一位能够理解所使用语言的程序员,这样他们就可以很快提高速度。 他们建议一家外部公司每月进行一次“更新”,以防万一发生某事。我只是不明白,除了为某人付款而付钱之外,这还没有什么帮助。更糟糕的是,我设想每月要浪费一天与该咨询公司讨论该项目。我看到这可能会有帮助,我只是不认为它比我过早去世后雇用一名程序员不再有用。 有什么想法吗?类似的情况以及您目前在哪里工作如何处理?
19 business 

9
设计模式在编程中有多重要?
我是一名大学生,我刚刚开始学习设计模式,并努力了解它们的目的。我尝试研究它们,但是我发现的所有资源似乎都是以学术而非专业的方式谈论它们。 他们的目的是什么,对学习重要吗?

3
F#性能vs Erlang性能,是否证明Erlang的VM更快?
我一直在花时间学习函数式编程,现在我想开始编写项目,而不只是涉猎教程/示例。 在进行研究时,我发现Erlang在编写并发软件方面似乎非常强大(这是我的目标),但是用于开发的资源和工具并不像Microsoft开发产品那样成熟。 F#可以在Linux(Mono)上运行,因此可以满足要求,但是在Internet上四处寻找时,我找不到F#与Erlang的任何比较。现在,我倾向于Erlang只是因为它似乎拥有最多的压力,但是我很好奇两个系统之间是否确实存在性能差异。 由于我习惯于在.NET中进行开发,因此使用F#的速度可能比使用Erlang快很多,但是我找不到任何资源可以说服F#与Erlang一样可伸缩。 我对仿真最感兴趣,它将把大量快速处理的消息发送到持久节点。 如果我的要求做得不好,请要求更多验证。
19 f#  erlang 

8
有没有足够简单的操作系统可供学习?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我真的很想了解操作系统在幕后的工作方式。但是,我认为大多数开源OS的内核对于学习目的来说过于复杂,即使是专职程序员也无法学习。是否有仅用于学习目的的“简单”操作系统?

19
免费的游戏开发语言?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 因此,我正在尝试向我的堂兄传授一些编程方面的知识。我最初的想法是像Scratch或Alice之类的,但是有一些缺点。 每个人似乎都非常喜欢游戏编程和开发视频游戏(因为每个人都喜欢玩视频游戏,而且就玩视频游戏而言,玩自己的游戏可能是最有意义的)-但是Alice和Scratch似乎都不能适应游戏发展 爱丽丝(Alice)和斯克拉奇(Scratch)似乎太幼稚了,虽然我敢肯定我的表弟会喜欢它,但我想他会很快厌倦它的 我想要一种可以用来开发非常酷的东西的语言,以打动他的朋友们。我记得那天回写BASIC并邀请我所有的朋友来炫耀我的创作,我觉得Alice和Scratch不会以同样的方式吸引人 我想要一种需要我堂兄编写代码的语言。现在,这不仅是因为我认为输入代码是其他编程语言的良好准备,而且还因为它使他有机会实际练习打字,并且可能习惯了键盘上一些较深奥的字符 现在,这就是为什么我不想选择Alice或Scratch。 我也不想为此选择一种语言,例如C或Java,甚至Python或Ruby。我的堂兄已经向我表明,他喜欢玩视频游戏,想自己做,他喜欢使用计算机。在我看来,即使是像Python或Ruby这样的简单语言,也要花费很长时间才能构建出色的东西。理想情况下,他会坐下来,花费大约一两天(甚至可能长达一周的时间,但希望少于一周),并拥有一个可以正常工作的二维游戏。我并不是说您无法在Python或Ruby中做到这一点,而是对新手程序员来说很难。另外,我不想让他沉迷于所有计算机科学知识,因为以后可能会出现。我只想帮助他制造火花,然后让他继续进行其余的工作。 我研究过类似Lua的语言,虽然在游戏编程中似乎很常见,但我不确定这是否是最佳选择-但是如果你们认为不是,请告诉我。 我也看过像Blitz这样的语言,它看起来非常有前途(再加上,几年前我尝试过,确实很棒)。缺点是我必须付钱,这是我绝对反对的。 我已经看过SmallBasic,它看起来很有前途,我将继续研究。但是我并没有做很多事情(实际上,我在输入安装程序时正在运行安装程序,因此我将在短期内报告我的想法)。 更新:我快速尝试了SmallBasic,它似乎很有趣,但是与某些其他语言相比,它似乎也有很大不同-这不是一件坏事,但这是不寻常的。从我看过的东西中,闪电战仍然是我的最爱,但由于费用原因,我拒绝去那里。 但是基本上,你们如何看待我到目前为止所说的话,以及我所看过的语言,您是否知道其他任何不错的选择? 更新:这是我选择要做的... 我已经意识到,尽管我很想帮助我的表弟,但我不能一直和他在一起,并且每次他需要帮助时我都无法帮助他。因此,我想选择具有良好文档说明,良好社区和他可以遵循的好书的东西。 无论如何,我选择了Python和Pygame。Python是我相当熟悉的一种语言,而且我知道Python周围有一个相当不错的社区(而且很大)。此外,我知道Python文档相当完整且易于浏览。Pygame还提供了出色的文档和教程集。我还让他使用/跟随使用Python发明自己的计算机游戏,这似乎是一本非常不错的书,我给他买了一份印刷版作为圣诞节礼物,而且我知道他的显示器并不大,而且不方便在文本和编辑器之间不断切换。 我认为应该顺利! 编辑:我不想暗示我的选择是最终的或正确的。我只是认为这是最适合这种情况的方法。我认为每个想要教年轻人的人都应该浏览选择内容,并考虑到年龄,技能水平和兴趣等因素,为每个人找到最佳解决方案。


6
为什么在MongoDB和CouchDB中使用Javascript而不是Java,C ++等其他语言?
我在SO上问了这个问题,但建议在这里尝试。因此,它去了: 到目前为止,我对Javascript的理解是,它是一种客户端语言,可以捕获事件并使网页动态化。 但是在阅读MongoDB和CouchDB之间的比较时,我注意到它们都使用Javascript。这使我想知道为什么选择JavaScript而不是其他常规语言的原因。 我想我想了解JavaScript的作用及其相对于其他语言的优势。 更新:我不是在问两个数据库支持的语言/驱动程序。比较表明: CouchDB和MongoDB都使用Javascript。CouchDB在视图的构建中广泛使用Javascript 。 MongoDB还支持在服务器端运行任意javascript函数,并将javascript用于map / reduce操作。 我缺乏理解是关于为什么在后端工作中完全使用Javascript。为什么首选在CouchDB中构建视图或使用map / reduce操作?为什么不使用C / C ++或Java?使用Javascript进行此类后端工作有什么优势?
19 java  javascript 

4
我应该如何从经验不足的程序员那里修复代码?
一点背景:我是我们10人部门的两名程序员之一(其余是艺术家和管理人员)。我们两个人完成了使事情顺利进行所需的所有编码,并开发了所有即将出现的项目。我从事编程已有4年了,这是他的第一份“实际”工作(如他所说)。我们通常在任何时间点都在从事不同的项目。 几个月前,我开发了一组(绝不是完美的)类,这些类将用于以后的项目。该项目的很大一部分(出于计费原因)委托给他来设计和编程GUI界面。由于他是新手,所以我在设计上提供了一些帮助,并说如果他需要其他的帮助,请寻求帮助。几周前,他完成了该界面的演示,以演示该界面是否有效,尽管有点慢。 该项目的下一部分已经开始,我正在努力。我打开了界面,从下一步开始,然后立即遇到了问题(有点慢是有点轻描淡写,常见操作有错误等)。我查看了代码中的一些问题,并发现O(n^n)应该是的调用,O(n)没有错误检查的类型假设(在Python中),对原始代码添加的对GUI的引用等等。 现在,我绝对想教他什么地方出了问题以及如何解决它,但是他已经开始进行下一个项目,而这是在几周前。恐怕我说:“回去做对吧!” (当然有帮助)太苛刻了,与此同时,我们还有其他项目需要完成。我是否应该现在自己修复代码并在将来尝试捕获问题?
19 code-reviews  bug 

7
C程序的OO最佳实践
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 “如果您真的想要OO糖-请使用C ++” –当我问到这一点时,我立即从我的一位朋友那里得到了答复。我知道这里有两件事是完全错误的。首先,OO不是“糖”,其次,C ++没有吸收C。 我们需要用C语言编写服务器(前端将使用Python),因此我正在探索更好的方法来管理大型C程序。 根据对象和对象交互对大型系统进行建模,使其更具可管理性,可维护性和可扩展性。但是,当您尝试将此模型转换为不包含对象(及其所有其他对象)的C语言时,您将面临一些重要的决策。 您是否创建了自定义库来提供系统所需的OO抽象?诸如对象,封装,继承,多态性,异常,发布/订阅(事件/信号),名称空间,自省等(例如GObject或COS)。 或者,您仅使用基本的C构造(struct和函数)以即席方式近似所有对象类(和其他抽象)。(例如,关于SO的此问题的一些答案) 第一种方法为您提供了一种结构化的方法,用于在C中实现整个模型。但是,这也增加了您必须维护的复杂性。(请记住,首先要通过使用对象来减少复杂性)。 我不知道第二种方法,以及它在逼近您可能需要的所有抽象方面的效果如何。 因此,我的简单问题是:在C语言中实现面向对象设计的最佳实践是什么。记住,我并不是在问如何做到这一点。这个和这个问题都在谈论,甚至有一本书。我更感兴趣的是一些现实的建议/示例,这些示例/示例解决了此问题时出现的实际问题。 注意:请不要建议为什么不应该使用C来支持C ++。我们已经超越了那个阶段。

9
Windows从来没有像样的外壳的原因是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我正在阅读有关SO的主题:为什么脚本语言(例如...)不适合作为Shell语言?。特别是,我喜欢JörgW Mittag的回答,从中我学到了一些有趣的东西Windows PowerShell。因此,经过20多年的努力,Windows终于有了一个经过精心设计的外壳程序(Windows 1.0-1985,PowerShell稳定版-2009)。另一方面,自1978年以来,Unix系统就拥有大量的外壳。我读过一些有关MS求职面试的文章,给我留下了非常“怪异”的印象。我想知道为什么与使用这些工具进行所有工作的Unix人员相比,他们不需要命令行工具。
19 windows  history  shell 

7
何时更新jQuery?
当您建议更新jQuery / jQuery UI时?换句话说:更新jQuery / jQuery UI的最佳实践是什么? 我正在进行一个长期的项目,至少需要一年。在那段时间内,我确定jQuery / jQuery UI将被多次更新。 您是否建议每次发布更新时都更新我的jQuery / jQuery UI文件?还是坚持使用特定版本直到项目结束? 我担心“破坏”代码更改,并且每次发布更新时,我都必须测试所有内容。这需要太多时间。但是,另一方面,如果我不进行更新,则我担心以后会被我咬伤的错误。 该项目是一个ASP.MVC,我经常使用jQuery。 有什么想法吗?

7
出色的程序员生产力-差异10,000倍?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 一位出色的车床操作员的薪水是普通车床操作员的几倍,但是一位出色的软件代码编写者的价值是普通软件编写者价格的10,000倍。- 比尔盖茨 假设在同一团队中有一位“优秀”软件工程师和一位“普通”软件工程师。您怎样才能使一名工程师的生产率提高一万倍?鉴于他们俩都承担着各自的功能,错误和调查工作,并且始终如一地交付高质量产品,因此我对此并不十分了解。我的描述可能会证明它们高于“平均水平”吗?“大”?

3
Java和.NET:为什么默认情况下使用不同的排序算法?
只是想知道为什么,Java并且.NET Framework默认情况下使用不同的排序算法。 在Java中 ,默认情况下Array.Sort()使用合并排序算法,如Wikipedia.com所述: 在Java中,Arrays.sort()方法根据数据类型使用合并排序或调整后的快速排序,当排序少于七个数组元素时,为了实现转换为插入排序的实现效率 在.NET Framework中, Array.Sort/List.Sort()使用“ 快速排序”作为默认排序算法(MSDN): List.Sort()使用Array.Sort,后者使用QuickSort算法。此实现执行不稳定的排序;也就是说,如果两个元素相等,则可能不会保留其顺序。相反,稳定排序保留了元素相等的顺序。 通过查看出色的“算法比较”表,我们可以发现两种算法在最坏情况和内存使用情况方面的行为都大不相同: 这两个Java和.NET是企业解决方案发展的巨大框架,既有嵌入式开发平台。那么为什么他们默认使用不同的排序算法,有什么想法呢?

8
抽象的反面是什么?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 据我了解,抽象是我们使用的术语,它是指从更简单的事物中创建更多含义而不改变它的情况。它源自拉丁语动词abstrahere(“移开”)。例如,文本和二进制图只是二进制数据的一种抽象。因此,在计算机中,文本和位图存在于二进制数据之上(以二进制数据实现)。 我的问题是:相反的术语是什么?如果我想知道位图除了二进制数据以外还可以实现的其他更基本的东西(例如镶嵌的瓷砖或拼布被子的织物补丁),我需要什么?有话要说吗? 抽象具有泛化的内涵,而相反的过程就是泛化。IDK是否有帮助。

5
为什么C ++不能在其概念实现中采用D的方法?
众所周知,概念,C ++约束模板参数可能类型的方法未能包含在C ++ 11中。 我了解到D编程语言2.0的通用编程具有类似的功能。在我看来,其解决方案非常优雅和简单。 所以我的问题是,为什么C ++无法使用类似的方法。 C ++概念的目标可能大于D的实现所提供的目标? 还是C ++的传统使它无法采用这种方法? 还是其他? 感谢您的回答。 ps要查看D的通用编程能力的一些示例,请参阅:https : //stackoverflow.com/questions/7300298/metaprogramming-in-c-and-in-d/7303534#7303534
19 c++  templates  d 

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.