软件工程

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

2
什么时候不使用Google Web Toolkit?[关闭]
我正在考虑在一个主要的内部Web应用程序开发项目中使用GWT,即在我眼中,它的主要优势是与Javascript的交叉编译,这将(至少从理论上讲)帮助我的团队将技术堆栈的大小减少一倍。 。 但是,像以前一样(像大多数开发人员一样)被烧掉了,我想听听那些确实在GWT的任何问题上实际使用过它的程序员,这些问题可能会阻碍或限制它在某个问题领域内的使用。 反对使用GWT的理由是什么?为什么?
55 java  javascript  ajax  gwt 

17
什么是骇客?[关闭]
我经常听到同事互相说:“这是一个可怕的骇客。” 我可以摆脱的是那不是很好。当我问他们是否可行时,他们说“是的,但是不好”。这是否意味着它不是一个好的解决方案?如果可行,解决方案有多糟糕?是由于良好的做法吗?还是无法维护?它是否将代码的副作用用作解决方案的一部分? 当某物被归类为骇客时,这对我来说很有趣。您如何识别它?

17
OO编程真的和招聘公司一样重要吗?[关闭]
我正在完成我的硕士学位(计算机)并申请工作。我注意到许多公司专门要求了解面向对象。流行的访谈问题涉及继承,多态性,访问器等。 OO真的那么重要吗?我什至接受了C语言编程工作的面试,面试的一半是面向对象的。 在现实世界中,开发实际应用程序时,几乎总是使用面向对象吗?诸如多态性之类的关键功能是否大量使用? 我认为我的问题来自我的弱点之一。尽管我了解OO,但是似乎无法将其大量集成到我的程序中。

12
MAJOR.MINOR.BUILDNUMBER.REVISION中的内部版本号到底是什么
我对内部版本号的看法是,每当创建一个新的每晚内部版本时,都会生成一个新的BUILDNUMBER并将其分配给该内部版本。因此,对于我的7.0版本应用程序,夜间版本将为7.0.1、7.0.2等。是这样吗?那么在内部版本号之后REVISION的用途是什么?还是在每个夜间构建后增加REVISION部分?我在这里有点困惑...我们是否将每个每晚的建筑都称为BUILD? 此处提到了格式:AssemblyVersion-MSDN

15
为什么我们有后缀增量?
免责声明:我完全清楚前缀和后缀增量的语义。因此,请不要向我解释它们的工作原理。 阅读有关堆栈溢出的问题,我不禁注意到程序员一遍又一遍地被后缀增量运算符弄糊涂了。由此产生以下问题:是否存在用例后缀增量在代码质量方面真正受益的用例? 让我用一个例子来澄清我的问题。这是以下内容的超级简洁实现strcpy: while (*dst++ = *src++); 但这并不是我书中最能自我记录的代码(它会在理智的编译器上产生两个烦人的警告)。那么以下替代方案有什么问题呢? while (*dst = *src) { ++src; ++dst; } 然后,我们可以摆脱条件中令人困惑的分配,并获得完全无警告的代码: while (*src != '\0') { *dst = *src; ++src; ++dst; } *dst = '\0'; (是的,我知道,src并且dst在这些替代解决方案中将具有不同的结束值,但是由于strcpy在循环之后立即返回,因此在这种情况下无关紧要。) 后缀增加的目的似乎是使代码尽可能简洁。我只是看不到我们应该如何努力。如果这最初是关于性能的,那么今天它仍然有意义吗?
55 c++  c  postfix 

13
您是否曾经参与过BIG Rewrite?[关闭]
乔尔·斯波斯基(Joel Spolsky)在他的一篇著名文章中说: 任何软件公司都会犯的最严重的战略错误:从头开始重写代码。 乍得·福勒写道: 您已经看过视频,博客文章和炒作,并且决定将在Rails(或Java,.NET或Erlang等)中重新实现产品。 谨防。这是比您期望的更长,更难,更容易出现故障的路径。 您是否曾经参与过BIG Rewrite? 我对您在这个悲剧性主题方面的经验特别是对成功完成的任何大重写(如果有)感兴趣,都感兴趣。
55 rewrite 


17
代码审查是主观的还是客观的(可量化的)?
我正在整理一些代码审查指南。我们还没有一个正式的流程,并且正在尝试使其正式化。而且我们的团队分布在各地。 我们使用TFS进行源代码控制(我们也使用TFS进行任务/错误跟踪/项目管理,但将其迁移到JIRA)与Visual Studio 2008一起进行开发。 您在进行代码审查时会寻找什么? 这些是我想出的东西 强制执行FxCop规则(我们是Microsoft商店) 检查性能(是否使用任何工具?)和安全性(考虑使用 OWASP-代码搜寻器)和线程安全性 遵守命名约定 该代码应涵盖边缘情况和边界条件 应该正确处理异常(不要吞下异常) 检查功能是否在其他地方重复 方法主体应该很小(20-30行),并且方法只能做一件事情和一件事情(无副作用,避免时间耦合-) 不要在方法中传递/返回空值 避免死代码 记录公共和受保护的方法/属性/变量 我们通常还要注意什么? 我正在尝试看看我们是否可以量化审核过程(当由不同人员审核时,它会产生相同的输出)示例:说“方法主体应不超过20-30行代码”,而不是说“方法”身体应该很小”。 还是代码审查非常主观(一个审查者与另一个审查者会有所不同)? 目的是要有一个标记系统(例如,对于每个违反FxCop的规则,得分为-1分;对于不遵循命名约定的得分为-2分;对于重构,则得分为2分,等等),以便开发人员在检入代码时会更加小心。这样,我们可以识别出始终在编写好/不好代码的开发人员。目标是让审阅者最多花费30分钟左右的时间进行审阅(考虑到变更集/修订版可能包含多个文件/对现有体系结构的巨大更改等事实,我知道这是主观的,但是您得到了总体而言,审阅者不应花几天时间审查某人的代码)。 您遵循什么其他目标/可量化系统来识别开发人员编写的好/坏代码? 参考书:清洁代码:Robert Martin撰写的敏捷软件工艺手册。

12
在您的JavaScript中使用PHP是否被视为不良做法
在这个网站上,有很多次我看到有人试图做这样的事情: <script type="text/javascript"> $(document).ready(function(){ $('<?php echo $divID ?>').click(funtion(){ alert('do something'); }); }); </script> 我认为这不是人们自然会陷入的某种模式。必须有某种形式的教程或学习材料来说明这一点,否则我们不会看到太多。我要问的是,我在这方面做得太大了吗,或者这真的是不好的做法吗? 编辑: 正在和我的一个朋友谈论这件事,他经常在他的JavaScript中放入红宝石,他提出了这一点。 是否可以在JavaScript中动态放置应用程序范围的常量,这样就不必编辑两个文件。例如... MYAPP.constants = <php echo json_encode($constants) ?>; 还可以直接对计划在库中使用的数据进行编码 ChartLibrary.datapoints = <php echo json_encode($chartData) ?>; 还是我们应该每次都拨打AJAX?

3
在您的简历上放编程语言吗?[关闭]
在将其写在简历上之前,您需要多少语言经验?我肯定会熟练使用一种语言(Java),我肯定会把这种语言写在简历上,但是说我在大学上了两个学期的课程,涉及广泛的C语言编程或自学C#,但没有编写任何有意义的项目在其中,我是否可以将这些语言放入简历中而不让雇主嘲笑它或将其视为简历膨胀?

11
在纸上写我的解决问题的方法?[关闭]
我是计算机科学专业的大一学生,我们刚刚开始用Python做一些实际的项目。我发现使用教授在课堂上建议的笔和纸的方法时,我的效率很高。但是当我无法写下问题并在纸上解决算法时,我真的很慢。在实验期间,我似乎总是不得不将作业带回我的宿舍。当我到达那里并把它写出来时,我解决了让我全班学习仅5分钟的问题。 也许是因为我感到压力重重,看到人们在我之前解决了实验室。也许这是笔和纸的方法。 我在论坛上浏览,有人写道,如果您必须在纸上编写程序,那么您不应该是程序员。我真的很担心,因为当我看到程序在做什么并且在键入实际代码之前跟踪程序运行的过程时,我会好得多。难道我做错了什么? 编辑:很抱歉,不清楚,但是当我说在纸上写时,我的意思是我的问题解决方法(例如,编写示例,使用值创建表等)不是我的实际代码。我只是用纸来表达我的想法。

6
如何应对依赖依赖的恐惧
我所在的团队创建了可供公司合作伙伴用来与我们的平台集成的组件。 因此,我同意在引入(第三方)依赖项时应格外小心。当前,我们没有第三方依赖项,我们必须保持框架的最低API级别。 一些例子: 我们被迫停留在框架的最低API级别(.NET标准)上。其背后的原因是,有一天可能会出现一个仅支持非常低的API级别的新平台。 我们已经实现了自己的用于(反)序列化JSON的组件,并且正在对JWT进行同样的处理。在更高级别的框架API上可用。 我们已经围绕标准库的HTTP框架实现了包装器,因为我们不想依赖于标准库的HTTP实现。 同样,出于同样的原因,所有用于映射到XML或从XML映射的代码都是“手工”编写的。 我觉得我们走得太远了。我想知道如何处理这个问题,因为这会极大影响我们的速度。


8
术语(或“模式”?)是“如果还没有做的话就做”
听起来很基本,我知道,但是最近我有一位同事告诉我,这种方法startHttpServer太复杂了,难以理解,因为它只会在服务器尚未运行时启动服务器。当我回答“严重吗?我已经这样做数十年了-这是编程中的常见模式”时,我发现自己很麻烦。我经常不愿意承认他带回来的一些有据可查的证据表明,整个编程社区都在支持他的观点,而我最终感到很讨厌。 问题:如果所需的措施已经生效,则在无操作方法的概念背后是否存在文档化的设计模式?或者,如果不是模式,它是否也有名称?如果不是,是否有任何理由认为考虑以这种方式编写方法太复杂了?

6
函数无意中使参考参数无效-出了什么问题?
今天,我们发现了仅在某些平台上间歇性发生的讨厌的错误的原因。归结起来,我们的代码看起来像这样: class Foo { map<string,string> m; void A(const string& key) { m.erase(key); cout << "Erased: " << key; // oops } void B() { while (!m.empty()) { auto toDelete = m.begin(); A(toDelete->first); } } } 在这种简化的情况下,问题似乎很明显:B将键的引用传递给A,这会在尝试打印之前删除地图条目。(在我们的示例中,它不是打印出来的,而是以更复杂的方式使用),这当然是未定义的行为,因为key在调用之后是一个悬空的引用erase。 解决这个问题很简单-我们只是将参数类型从更改const string&为string。问题是:首先如何避免这个错误?似乎两个函数都做对了: A没有办法知道是key指它即将销毁的东西。 B可以在将副本传递给之前进行复制A,但是被调用者的工作不是决定按值还是按引用获取参数吗? 有没有我们不能遵循的规则?
54 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.