软件工程

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

6
SOLID原则和代码结构
在最近的一次工作面试中,除了提供各种原理的基本含义之外,我无法回答有关SOLID的问题。这真的让我很烦。我做了几天值得深入研究的工作,但还没有得出令人满意的总结。 面试问题是: 如果您要看一个我严格遵循SOLID原则的.Net项目,那么您期望在项目和代码结构方面看到什么? 我挣扎了一下,没有真正回答问题,然后轰炸了。 我如何更好地处理这个问题?
149 c#  .net  solid 

2
最佳现有封闭源代码许可证[关闭]
我正在自己创建一些封闭源应用程序(我身后没有大公司),并且想知道到底如何保护它们。在所有源代码文件的顶部,我具有以下基本的版权声明: /******************************************************* * Copyright (C) 2010-2011 {name} <{email}> * * This file is part of {project}. * * {project} can not be copied and/or distributed without the express * permission of {name} *******************************************************/ 但是我真的开始认为这还不够。没有钱去找律师,我对任何封闭式许可证都感兴趣,该许可证实际上说“您可以使用它,仅此而已”。找到一个人非常困难,因为我只能找到开放源代码许可证比较或“寻找律师”的答案。 有没有我可以使用的类似于以下内容的开源许可证?

13
我应该重构标记为“请勿更改”的代码吗?
我正在处理一个相当大的代码库,并且给了我几个月时间来重构现有代码。需要进行重构过程,因为很快我们将需要在产品中添加许多新功能,而就目前而言,我们将无法在不破坏其他功能的情况下添加任何功能。简而言之:我们许多人在他们的职业生涯中都看到过的凌乱,庞大,错误的代码。 在重构过程中,我有时会遇到类,方法或代码行,它们的注释如下: 设置了超时时间,以便给模块A一些时间做事。如果未按时计时,它将损坏。 要么 请勿更改。相信我,你会破裂的。 要么 我知道使用setTimeout不是一个好习惯,但是在这种情况下,我不得不使用它 我的问题是:遇到作者的此类警告时,我应该重构代码吗(不,我无法与作者联系)?

8
您如何组织项目?[关闭]
您是否有任何特殊的组织项目风格? 例如,目前我正在为玻利维亚的几所学校创建一个项目,这是我的组织方式: TutoMentor (Solution) TutoMentor.UI (Winforms project) TutoMentor.Data (Class library project) 您如何精确地组织项目?您是否有自己组织并为之自豪的事例?您可以共享“解决方案”窗格的屏幕截图吗? 在我的应用程序的UI区域中,我无法确定一个好的架构来组织不同的表单及其所属位置。 编辑: 如何在.UI项目中组织不同的形式?我应该在哪里/如何分组其他形式?将它们全部置于项目的根目录是一个坏主意。

22
存储过程是全球最大的IT软件咨询公司之一的不良做法?
我在全球三大IT咨询公司之一的一个项目中工作,一名DBA告诉我,公司的最佳实践的状态存储过程不是“最佳实践”。这与我学到的一切都太相反了。 存储过程为您提供代码重用和封装(软件开发的两个支柱),安全性(您可以为单个存储的proc授予/撤消权限),保护您免受SQL注入攻击并还有助于提高速度(尽管DBA表示从SQL Server 2008开始,即使常规SQL查询运行了足够的时间,它们也会被编译。 我们正在使用敏捷软件开发方法开发复杂的应用程序。任何人都可以考虑为什么不想使用存储的proc的充分理由吗?我的猜测是,DBA不想维护那些存储的proc,但是似乎有太多负面因素无法证明这种设计决策是正确的。

11
您何时在TDD中编写“真实”代码?
我在培训视频上阅读和看到的所有示例都具有简单的示例。但是我看不到绿色后如何执行“真实”代码。这是“重构”部分吗? 如果我有一个使用复杂方法的相当复杂的对象,并且编写了测试和最低要求以使其通过(在它第一次失败后为红色)。我什么时候回去写真实的代码?在重新测试之前我要写多少实际代码?我猜最后一个是直觉。 编辑: 感谢所有回答。您的所有回答都极大地帮助了我。关于我所问或困惑的事情似乎有不同的想法,也许有,但是我所要问的是,说我有建校的申请。 在我的设计中,我有一个要开始的架构,即“用户故事”,依此类推。在这里,我将获取这些用户故事,然后创建一个测试以测试用户故事。用户说,我们有人入学并支付注册费。因此,我想一种使失败的方法。为此,我为X类(可能是学生)设计了一个测试类,该类将失败。然后,我创建“学生”类。也许我不知道“学校”。 但是,无论如何,TD 设计迫使我思考整个故事。如果我可以使测试失败,那么我知道为什么会失败,但这以我可以通过测试为前提。这与设计有关。 我将此比作考虑递归。递归并不是一个很难的概念。可能很难真正掌握在脑海中,但是实际上,最难的部分是知道递归何时“中断”,何时停止(当然,我的看法。)因此,我必须考虑停止什么递归优先。这只是一个不完美的类比,它假定每个递归迭代都是一次“通过”。再次,只是一个意见。 在实施中,学校很难见到。在可以使用简单算术的意义上,数字分类帐和银行分类帐是“容易的”。我可以看到a + b并返回0,依此类推。对于一个人系统来说,我必须更加思考如何实现它。我有失败,通过,重构的概念(主要是由于学习和这个问题。) 我认为,我不知道的原因是缺乏经验。我不知道如何无法注册新学生。我不知道如何使某人输入姓氏并将其保存到数据库中。我知道如何为简单的数学做一个+1,但是对于像一个人这样的实体,我不知道我是否只是在测试是否有人返回一个数据库的唯一ID或其他东西。数据库或两者兼而有之。 或者,也许这表明我仍然感到困惑。
147 tdd 

22
因“知道太多”而陷入困境
请在http://news.ycombinator.com/item?id=4037794注意更多讨论 我有一个相对简单的开发任务,但是每次尝试攻击它时,我都会陷入深刻的思绪-它如何扩展未来,第二代客户将需要什么,它将如何影响“无功能”方面(例如性能,授权...),如何最好地架构师允许更改... 我记得自己有一阵子,更年轻,也许更渴望。那时我当时不会想到的“我”-他会继续写一些东西,然后重写,然后再次重写(再一次……)。今天的“我”更加犹豫,更加谨慎。 我发现今天坐下来并计划和指导他人如何做比实际自己去做要容易得多-不是因为我不喜欢编码-相反,我喜欢这样做!-但是因为每次我坐在键盘上时,我都会到那个烦人的地方。 这是错的吗?这是自然的演变,还是我让自己陷入了困境? 公开披露-过去我是一名开发人员,今天我的职务是“系统架构师”。祝你好运,弄清楚它的意思-但这就是标题。 哇。老实说,我没想到这个问题会引起如此多的答复。我会尝试总结一下。 原因: 分析瘫痪/过度工程/镀金/(其他“过多的思考可能会伤害您”)。 给定任务的经验过多。 不专注于重要的事情。 没有足够的经验(并意识到这一点)。 解决方案(与原因不匹配): 首先测试。 开始编码(+表示乐趣) 一个扔掉(+一个API扔掉)。 设置时间限制。 剥去绒毛,留在里面。 编写灵活的代码(有点像“一个扔掉”,不是吗?)。 多亏了所有人-我认为这里的主要好处是认识到我并不孤单。实际上,我已经开始编码了,有些太大的事情自然就消失了。 由于该问题已经关闭,因此,我将以今天最多的票数接受答案。当/如果它发生变化-我将尽力遵循。

6
为什么没有比C更快,更好的语言出现呢?[关闭]
如今,随着所有新的“现代”语言问世,C为何仍被誉为最快和“最接近机器”?我真的不相信只有一种正确的做事方式,而C语言已经存在很长时间了(自60年代以来!)。我们真的没有想出比50年前更好的东西了吗? 我知道现代语言是高级语言,可以处理某些任务,例如垃圾收集和内存分配,并利用库等。我只是问为什么C从来没有真正的第二选择。 难道C太完美了,以至于没有其他方法可以操作计算机(除开发人员采用之外)? 编辑看,我不是想敲C或任何您喜欢的语言。我想知道为什么C成为标准,为什么其他替代方案从未出现,而C只是被“接受”。
147 c 

24
Python的缺点是什么?[关闭]
如今,Python似乎风行一时,而且并非不值得-因为它确实是一种语言,几乎有人喜欢用它来解决新问题。但是,正如一个智者曾经说过的(称他为智者,仅是因为我不知道是谁说的;不知道他是否真的是那个智者),真正懂一门语言的人不仅会知道它的语言,语法,设计等优点,但也有缺点。没有一种语言是完美的,有些只是比其他更好。 因此,您认为Python的客观缺点是什么。 注意:我不是在这里要求进行语言比较(即C#比Python更好,因为... yadda yadda yadda)-客观(某种程度上)认为哪些语言功能设计不当,是否,可能是什么?一些您在其中缺少的东西,依此类推。如果必须使用另一种语言作为比较,而仅仅是为了说明一个要点,否则很难对此进行详细说明(即,为了易于理解)

15
是9到5个程序员被看不起吗?
我认为自己是9到5的程序员。我的意思是说,我有一份编程工作,但是离开工作后,我就把工作留在那儿,不要带回家。我非常喜欢自己的职业选择,也喜欢自己目前的工作。我也喜欢学习自己领域中的新事物,例如新技术和编程行业的进步。仅仅是我的工作之外,我还有其他的兴趣爱好,我认为这些爱好更重要,我想将更多的时间和精力投入其中。我还觉得每周花40多个小时专注于一个主题有点累,所以真的有很多程序员想从编程工作中回过头来做更多的编程吗? 也许这只是我目前的雇主,但我觉得他们留给职业发展的时间很少。我要紧跟最新技术和编程技术的唯一方法就是自己动手,因为我的雇主没有在工作时间内分配时间来做这些事情(期限== $$$)。其他人对雇主有同样的感觉吗? 根据您的经验,管理人员和雇用程序员的人员是否将9到5个程序员视为价值较低的资源?我知道我可以通过参与开源项目等来提高自己的履历,但是我只是觉得自己没有时间闲暇。 可以说相反的话,这样将您的业余时间用于艺术等其他主题会表现出全面的感觉,这可能是公司的理想特征?

14
为什么鲍勃叔叔建议如果可以避免的话,不应该写下编码标准?
当我阅读此问题时,投票得最高的答案引用了Bob叔叔的编码标准,但这个提示使我感到困惑: 如果可以避免,请不要写下来。相反,让代码成为捕获标准的方式。 这在我的大脑中反弹,但是我找不到合适的地方。如果有新成员加入团队,或者编码标准发生了变化,信息会不会混乱? 我为什么不应该写下编码标准?

30
您每天可以真正工作几个小时?怎么样?[关闭]
我发现每天要保持8个小时的警报时间很麻烦。我听说有人每天只谈判4个小时的工作合同,他们争辩说他们在8个小时内将无法做更多的事情。 我经常感到困倦,无聊,分心。有时候,我似乎经历了八个小时的生产力狂暴爆炸。其他日子,我几乎什么也做不了。在大多数日子里,这是介于两者之间的时间,我为浪费很多时间而感到难过,因为我无法整日集中精力达到最佳状态。 我想听听您的经历(告诉我,我并不孤单!),并且,如果找到了,您将解决这个难题。 您几乎每天都能工作8个小时/天吗?怎么样?
145 productivity 

30
您如何进入大型代码库?
您使用什么工具和技术来探索和学习未知的代码库? 我在考虑诸如grep,,ctags单元测试,功能测试,类图生成器,调用图,代码度量之类的工具sloccount,等等。我会对您的经验,您使用或编写的助手以及您使用的代码库的大小感兴趣。 我意识到熟悉代码库是一个随时间推移而发生的过程,熟悉度可以表示从“我能够总结代码”到“我可以将其重构并缩小到其大小的30%”之类的任何内容。但是,如何开始呢?

16
如果代码审查太难了,您该怎么办?
好的,所以很多代码检查都是相当常规的。但是,有时会发生更改,这些更改会广泛影响现有的复杂,易碎的代码。在这种情况下,验证更改的安全性,缺少回归等所需的时间过长。也许甚至超过了完成开发本身所花费的时间。 在这种情况下该怎么办?合并,希望一切顺利?(不主张这样做!)最好的方法可以并且仅尝试发现任何明显的缺陷(也许这是代码审查应针对的最大问题吗?)完全合并和测试,这是比代码审查更好的替代方法吗? 这不是一个特别的问题,是否应该在代码审查中进行测试。这是一个问题,询问在上述情况下最好的选择是什么,尤其是在紧迫的截止日期,没有可用的全面单元测试套件或单元测试对零碎的代码不可行的情况下。 编辑:我给人的印象是,到目前为止,我的短语“广泛影响”已经得到了一些答案/评论,并可能认为这意味着更改涉及大量的代码行。我能理解这是一种解释,但这并不是我的意图。所谓“广泛影响”,是指例如由于代码库的互连性或连锁效应的范围而导致回归的可能性很高,而未必一定会使更改本身很大。例如,开发人员可能会找到一种方法,方法是调用一个现有的高级例程,该例程将调用级联到许多较低级别的例程,从而用一行代码修复错误。测试和验证该错误修复程序很容易。手动验证(通过代码审查)所有连锁效应的影响要困难得多。

14
四人帮是否彻底探索了“模式空间”?
自从我至少在10年前首次了解四人一组(GoF)设计模式以来,我一直以为这23种模式应该只是更大的东西的小样本,我称之为模式空间。假设的模式空间包括针对常见的面向对象软件设计问题的所有推荐解决方案(已知或未知)。 因此,我期望已知和记录在案的设计模式数量会大大增加。 它没有发生。GoF书问世20多年来,Wikipedia文章中仅列出了12种其他模式,其中大多数都不如原始模式流行。(我未在此处包括并发模式,因为它们涉及特定主题。) 是什么原因 GoF模式集实际上是否比我想象的更全面? 寻找新模式的兴趣下降了吗,也许是因为发现它们在软件设计中并不是那么有用? 还有吗

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.