软件工程

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

11
尽管时间紧迫,如何编写有效的代码
我在一个环境中工作,在这个环境中,我们有许多项目都对交付物有严格的期限。我们甚至直接与客户交谈,因此必须快速完成工作。 我的问题是,我总是会为想到的第一个解决方案编写代码,当然我当时认为这是最好的。尽管它总是以丑陋而告终,但我后来才意识到,有更好的方法可以做到这一点,但由于时间限制,它无法承担任何更改。 有什么技巧可以使我的代码高效而又准时交付?

6
学习一种功能语言是否会使一个更好的OOP程序员变得更好?[关闭]
作为Java / C#/ C ++程序员,我听到了很多关于函数式语言的讨论,但从未发现有必要学习一种。我还听说过,功能语言中引入的更高层次的思维使您成为更好的OOP /过程语言程序员。 有人可以确认吗?它以什么方式提高了您的编程技能? 为了提高不那么复杂的语言的技能,学习语言的最佳选择是什么?

7
我应该继续投资于数据结构和算法吗?[关闭]
这些天来,我在数据结构和算法上投入了大量资金,并试图解决一些编程难题。 我正在尝试使用Java和Clojure进行编码和解决。 我在浪费时间吗?我是否应该在我已经知道的技术和框架上进行更多的投资,以便获得更深入的知识(内幕和外幕)并能够更快地使用它们进行编码? 通过研究数据结构和算法,我是否将成为一名更好的程序员,或者这些学科仅在大学期间才重要?

13
如果您的程序员中奖,如何确保您的公司不会破产?
我下面有几个程序员,显然他们都很出色,非常聪明。非常感谢你。 但是问题在于,每个人都对一个核心领域负责,而团队中的其他人对此一无所知。这意味着,如果将他们中的任何一个带走,我的公司将因为无法替代而破产。 我正在考虑引进新的程序员来掩盖他们,以防万一他们被公交车,辞职或其他任何事情所打击。但是我怕 老式的程序员可能会主动抵制知识转移的想法,担心备份会降低其价值。 我没有一个可促进不同开发人员之间的技术转让的系统,因此即使我要求他们这样做,也无法保证他们会正确执行。 我的问题是 如何将它们交给老程序员,使他们同意 您使用什么系统来促进这种“备份”?我知道您可以进行代码审查,但是有没有简单的方法来执行此操作?我认为我们还没有准备好通过检入代码审查来进行全面检入。

10
在编写简单网站(例如通讯录)时,什么是好的(简洁的)架构?
当我建立一个简单的网站(例如可以在其中添加,删除和更新联系人的通讯录)时,我会创建一个index.php文件,在该文件中,如果用户未登录,则要求用户输入密码,如果用户输入正确的密码,则分配了会话,并可以与联系人进行某些操作。 我有两个文件: 第一个(contacts.php)用于显示HTML代码。在HTML代码上方,我包括第二个文件并创建类。 第二个(contacts_class.php)包含添加,删除和更新的所有方法。 我认为可以,但是在实施大型项目时,我应该怎么做?我是否必须为每个页面创建文件夹并将文件放入其中(如上面的HTML和类),我应该怎么做?什么是一个好的且整洁的体系结构,用于构建其他程序员都能完全理解的大型项目?

5
利用开发人员的技能回馈社区/慈善机构的方法
最近,我遇到了一个名为GiveCamp的社区活动。 GiveCamp是一个为期一周的活动,从设计人员,开发人员和数据库管理员到营销人员和网络策略师的技术专业人员都献出自己的时间为非营利组织提供解决方案。自2007年成立以来,GiveCamp计划已为150多家慈善机构提供了好处,开发人员和设计师的时间价值超过1,000,000美元! 来自该国非常偏远的农村地区,那里有很多此类慈善活动的机会,这让我感到奇怪。还有其他诸如GiveCamp之类的大型运动吗?GiveCamp由Microsoft赞助,因此大多数当然都是通过.NET用户组运行的。还有其他味道吗?不同种类?Java / Python /其他开源慈善运动?如果没有,您如何退还?
28 skills 

8
“故障驱动开发”怎么办?
在我们的商店,我们努力做到敏捷。我想说我们正在取得长足进步。就是说,我们中的一些人发现了一种模式,我们已经开始将其称为“故障驱动开发”。 基本上,可以将失败驱动开发描述为一个敏捷的发布/迭代周期,其中的错误/功能不是由具有接受标准的任务和故事来指导,而是由缺陷跟踪软件中输入的缺陷来指导。 我们的团队有一个出色的项目经理,他努力从客户那里获得验收标准,但这并不总是可能的。从我的开发主席那里,这是由于客户要么不完全知道他们想要什么,要么是(这是踢球者)客户总公司的两个不同“营地”与故事的实现方式冲突。营A将松散决定了功能X的作品像这样,那么营B就失败,这是由于不喜欢运行的是。因此,术语“ FDD”。该过程是由“故障”驱动的。 这引出我的问题:是否还有其他人遇到过这种情况? 当然,我们已经尽力让A和B营地达成一致,但每个人都知道并非总是如此。 谢谢

2
MVC体系结构的最佳做法
我的问题更多是关于如何构建MVC应用程序。例如,鼓励我们使用带有存储库模式的DI来分离控制器的数据访问,但是在HOW上很少提到专门针对MVC做到这一点。例如,我们将存储库类放在哪里?它们似乎与模型无关,因为模型也应该与实际的数据访问技术相对分离。 第二个问题涉及如何构造层或层。大多数示例应用程序(书呆子晚餐,音乐商店等)似乎都使用单层2层方法(不计算测试),通常具有直接调用L2S或EF代码的控制器。 如果要创建多层/层应用程序,那么关于MVC的最佳实践是什么?

12
哪种设计模式定义最差或定义最窄?[关闭]
对于每个编程项目,都有过编程经验的管理人员会在为您的项目推荐一些设计模式时大放异彩。当设计模式有意义或您需要可扩展的解决方案时,我喜欢它们。例如,我以积极的方式使用了代理,观察员和命令模式,并且每天都这样做。但是,如果只有一种创建对象的方法,我真的很犹豫地说出Factory模式,因为工厂将来可能会使一切变得更容易,但是却使代码复杂且纯属开销。 因此,我的问题是关于我的未来职业以及我对经理类型的回答,这些类型周围会出现随机的模式名称: 您使用了哪些设计模式,这使您整体退缩?哪些是最糟糕的设计模式,除了在一种有意义的单一情况下,您应该考虑哪些(请阅读:哪些设计模式定义非常狭窄)?(这就像我在寻找对亚马逊整体产品的负面评价,以了解使用设计模式的人最讨厌的东西。)而且我在这里不是在谈论反模式,而是通常被认为是“好的”模式。 编辑:正如一些回答所言,问题通常是模式不是“不良”而是“使用错误”。如果您知道一些经常被滥用甚至难以使用的模式,那么它们也可以作为答案。

7
反对复活节彩蛋有哪些论点?是否有任何论点甚至支持复活节彩蛋?[关闭]
我有点开玩笑,所以复活节彩蛋的念头仍然吸引着我。我之前已经在代码中添加了它们,但是我的一群朋友开玩笑说使用CTRL-FU来触发鸡蛋。 现在,我对性能也有些偏执,因此我希望尽可能消除多余的性能。这与复活节彩蛋非常矛盾,因为它们是100%多余的代码。 反对复活节彩蛋有哪些论点?另外,是否有任何论点甚至支持复活节彩蛋?

16
编程语言可以采取什么措施来避免浮点陷阱?
对浮点算术及其缺点的误解是编程中令人吃惊和困惑的主要原因(请考虑与Stack Overflow有关的“数字未正确添加”的问题数)。考虑到许多程序员尚未了解其含义,因此它有可能引入许多细微的错误(尤其是在财务软件中)。有什么可以编程语言做,以避免其对那些不熟悉的概念陷阱,同时还提供了高速时的精度是不是为那些关键的做明白的概念?

18
为何还有这么多编程工作?[关闭]
我不知道为什么由于软件的发展,编程工作还没有“枯竭”。例如,我本人是一名开发人员,这意味着我确实在乎软件(我的意思是我不是那种只需要计算机才能浏览Internet的人),但我仍然不介意我从不在我的Ubuntu计算机上接收更多更新。 我发现它提供了我需要的一切,而更新提供了各种错误修复/改进,但是我一辈子都不会介意将其与当前状态一起使用。在使用Ubuntu的两年中,我从未遇到过严重的错误/问题。 另一个例子是Windows。它几乎一半的用户仍使用Windows XP,这实际上是古老的,但他们发现Windows XP可以满足他们的所有需求(我也同意)。 我可以列举更多示例,但是到目前为止,您已经理解了我的观点和问题。尽管新的“趋势”(如新的移动操作系统)一直出现在新平台上并需要一些新的开发工作,但大部分软件工作仍在我认为是“已完成的项目”或至少足以视为已完成的项目状态。 你有解释吗?
28 business 

14
避免成为“理论家”程序员
我在SO的几篇文章中找到了这篇文章。我发现自己属于第六原型。“理论家”。 它将“理论家”定义为: 理论家知道有关编程的所有知识。他或她可以花4个小时来讲解一门晦涩的编程语言的历史,或者提供证明您编写的代码的效果不是十分理想,并且可能还要花费三纳秒才能运行。问题是,理论家对软件开发一无所知。当理论学家编写代码时,它是如此“优雅”,以至于凡人都无法理解。他或她最喜欢的技术是递归,并且每个代码块都经过了最大程度的调整,以牺牲及时性和可读性为代价。 理论家也容易分心。一个简单的任务需要一个小时才能完成,因此理论家需要三个月的时间,因为他们认为现有工具还不够用,因此他们必须构建新工具来构建新库,以构建符合其高标准的全新系统。如果您可以让Theoretician成为您最好的球员之一,则可以让他或她在项目本身的范围内发挥作用,而不必花时间在“终极排序算法”上。 即使在做一个简单的项目时,我也总是会因试图从头开始过度设计所有东西而感到困惑(这也许可以解释为什么我浪费了大约两年的时间来尝试从头开始构建一个操作系统。但是即使我看到了,最终毫无意义)。 有什么可以帮助我避免这样做的?并坚持使用KISS原则吗? 谢谢

6
使用EC2实例作为主要开发平台
我的问题 我正在为多家公司担任顾问。每个公司都会为我提供一台笔记本电脑,上面装有他们的软件,我也有自己的电脑,在那里有我的开发环境。我倾向于每隔两年购买一台新笔记本电脑,发现自己花费大量时间配置和安装软件。我还花费大量时间等待笔记本电脑处理事情。 为了解决所有这些问题,我现在正在考虑使用EC2(运行Windows实例)作为我的主要开发平台,并且可以从我碰巧使用的任何PC上进行访问。我计算出,每年运行大型实例(最便宜的64位)一天8小时,每年花费我960美元,这是可以接受的。 我想像一下,每天到工作场所时,我都会在手机上轻按一下以启动该实例,因此准备上班就可以了。我应该在手机上使用不同的图标来启动各种实例类型。当然,同一软件应该自动加载到各种硬件上(有时我什至需要它们的实例具有68.4 GB的内存)。 另一个优点是,如果我的实例遇到特定问题,则可以启动另一个实例,并让某人调查该问题并更新映像。 我的问题: 是否有人在EC2上进行过此类设置?您预见到什么样的问题?

13
为什么选择“错误的”语言学习时似乎会有很多恐惧?[关闭]
也许仅仅是我一个人,但是作为一名现役CS学生,我已经在该网站和其他地方遇到了很多问题,不仅仅是“我应该使用哪种语言表示x?”。而且还有“有人还在使用Y语言吗?” 我的第一个CS课是用Scheme讲授的,如果我没记错的话,它没有得到广泛使用(至少与Java,PHP,Python等语言相比)。我的许多同学对必须学习一门他们永远不必再使用的语言的想法感到沮丧,但我不太了解这种学习较少流行语言的恐惧源于何处。不,我可能不会在所从事的任何工作中使用Scheme,但是我当然不后悔学会使用它(尽管在一个学期中是一个非常初学者,但不是很深入的方式)。这个学期我要上搜索引擎课程,这是在Perl中完成的,而我又一次看到同学抱怨语言的选择。我可以理解拥有一种喜欢的语言而讨厌其他语言,但是为什么有些人在学习它时就变得烦躁不安了?您真的可以学习“错误”语言吗?如果没有别的东西,不是不是学习Scheme或Haskell的良好的心理锻炼方法,至少对接触解决问题的不同方式有用吗?

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.