软件工程

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

2
为什么按位运算符的优先级比比较低?
有人可以解释其原理,为什么在一堆最流行的语言中(请参见下面的注释),比较运算符(==,!=,<,>,<=,> =)的优先级要高于按位运算符(&,|,^ ,〜)? 我认为我从未遇到过这种优先次序自然的用途。总是这样的: if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed if( (x & REQUIRED) < REQUIRED ) // Not all conditions satisfied 我要使用的情况: flags = …

11
该类设计是否违反单一责任原则?
今天我和某人吵架。 我正在解释使用富域模型相对于贫血域模型的好处。我用一个简单的类演示了我的观点: public class Employee { public Employee(string firstName, string lastName) { FirstName = firstName; LastName = lastname; } public string FirstName { get private set; } public string LastName { get; private set;} public int CountPaidDaysOffGranted { get; private set;} public void AddPaidDaysOffGranted(int numberOfdays) { // Do stuff } …

5
在函数式编程中,具有大多数不变的数据结构是否需要更多的内存使用?
在函数式编程中,由于几乎所有数据结构都是不可变的,因此当必须更改状态时,会创建一个新的结构。这是否意味着更多的内存使用量?我非常了解面向对象的编程范例,现在我正在尝试学习功能编程范例。一切不变的概念使我感到困惑。与使用可变结构的程序相比,使用不可变结构的程序似乎需要更多的内存。我什至以正确的方式看着这个吗?

9
每天提交/签入代码是一种好习惯吗?
我一直在阅读Martin Fowler关于持续集成的说明,他将其列为“每个人每天都致力于主线”。 我不喜欢提交代码,除非正在处理的部分完成并且在实践中我每三天提交一次代码:一天用于调查/重现任务并进行一些初步更改,第二天完成更改,以及第三天编写测试并清理^以提交。我不愿意早日提交代码。 现在,我通常每天两次从存储库中提取更改并将其集成到本地,但是除非我能完成较小的工作,否则我不会经常提交更改。 问题:每天做这样一个好习惯,是否应该更改工作流程以适应它,还是不建议这样做? 编辑:我想我应该澄清一下,我在CVS中的意思是“提交”(也称为“推送”),因为这可能是Fowler在2006年撰写此书时的意思。 ^顺序更加随意,并取决于任务,我的意思是说明时间跨度和活动,而不是确切的顺序。

22
为什么有些程序员认为理论与实践之间存在差异?[关闭]
将软件工程与土木工程进行比较时,我惊讶地发现了另一种思维方式:任何土木工程师都知道,如果您想在花园中建造一个小木屋,则只需获取材料并进行建造,而如果您要建造一栋10层高的房子(或类似这样的房子),您需要做一些数学运算以确保它不会崩溃。 相反,在与一些程序员交谈或阅读博客或论坛时,我经常发现一种广泛的观点,可以或多或少地提出如下观点:理论和形式方法适用于数学家/科学家,而编程则更多地是要把事情做好。 这里通常暗示的是编程是非常实用的东西,即使形式方法,数学,算法理论,简洁/连贯的编程语言等可能是有趣的主题,但如果所有人都想得到东西,通常就不需要它们了。完成。 根据我的经验,我想说的是,虽然您不需要太多理论来编写100行脚本(小屋),但是要开发复杂的应用程序(10层建筑),则需要结构化的设计,定义的方法,良好的编程语言,可在其中查找算法的良好教科书等。 因此,IMO(适量的)理论是完成任务的工具之一。 我的问题是,为什么有些程序员认为理论(形式方法)与实践(完成任务)之间存在差异? 与土木工程(房屋)相比,软件工程(房屋软件)是否被许多人认为 容易? 还是这两个学科真的不同(除了关键任务软件,软件故障比构建故障更容易接受)? 我尝试总结一下,到目前为止,我已经从答案中了解了什么。 与软件工程相反,在土木工程中,对于特定任务需要多少理论量(建模,设计)更加清楚。 部分原因是因为土木工程与人类一样古老,而软件工程仅存在了几十年。 另一个原因是软件是一种更具可变性的人工产品,具有更灵活的要求(可能会崩溃),不同的营销策略(可以牺牲良好的设计以便快速将其投放市场)等。 结果,要确定在软件工程中合适的设计/理论量是非常困难的(太少->凌乱的代码,太多->我永远无法完成),因为没有通用规则,而只有(很多)经验可以提供帮助。 因此,如果我正确地解释了您的答案,那么 对于真正需要多少理论的不确定性会导致一些程序员对理论的爱恨交加。

5
音乐符号图灵完成了吗?
我想知道音乐符号语言是图灵完成吗? 我的第一个想法是乐谱中存在循环,但是无法编写条件分支,对吗? 我不是音乐家,所以也许有人可以帮忙填补空白?


16
通常,在大多数编程工作中,全新软件的创建是否都是主要的一部分?[关闭]
我从事软件开发工作已有10多年了,但我却很少能创建任何“新”东西,这使我感到惊奇。我意识到“新”是一个模糊的术语,但是我将其定义为从明显的新大型项目到现有项目中的新大型功能的任何内容(例如,需要对其设计进行一些思考,并且可能需要2周或更长时间才能完成)。如果需要书面说明,粗略的指导也许是新的东西。我认为大多数程序员都知道我在说什么-您正在开发中,正在快速编写大量代码。 无论如何,回想我所做的事情,我估计我只有不到10%的时间花在“新”工作上。诸如“使现有系统适应在新环境中工作”之类的事情当然需要进行大量规划,但是实际的编码和“新事物”归结为在整个代码中的许多地方进行了微小的更改。同样,对于小型功能请求-如果我知道该怎么做,通常可以在一个小时内完成,如果我不知道,那么很多阅读代码并弄清楚该做什么(这使我感到沮丧,因为我学习了做的更好,而不是阅读)。 总的来说,我觉得我大部分时间都没有创造任何东西。我以为大多数地方都是这种情况-新产品会很快推出,到那时每个人都会很兴奋,并以快速的速度发布代码,但是一旦上线,它就会进入维护模式,随后的更改很少被认为是“新的和创造性的”。 我错了吗?我是准确地描述了大多数编程工作,还是大多数程序员都觉得自己经常在创造新事物?

11
当公司想要经验不足的人时,如何找到自己的替代者?[关闭]
我告诉我为之工作的公司,我想逐步淘汰自己,但是我会待上几个月,然后再申请任何地方以帮助招募我的替代人。我之所以提供此服务,是因为我是唯一的Web开发人员,并且我不想让他们感到无助。 问题是,他们想雇用一个非常有资格的人,以避免不得不支付高薪。 就我而言,这是他们的公司,他们可以按自己的意愿经营。但是,在我出发之前帮助我寻找和培训某人时,我处于一个我不知道该怎么做的位置。 为了给您一点视角,我使用MVC框架构建了一个中等规模的电子商务系统。还有更多,但我会保留它。他们找到我要审查的候选人是从未使用过程序员的人,他们使用所见即所得程序制作了几个真正糟糕的静态网站,并自称是网页设计师。 我知道这些人没有成功的机会。我试图向公司解释,但是他们不想听。他们认为其中一个人可以接受培训,并在大约一年的时间内达到我的水平。现实是,如果他们走这条路,我认为他们的网站不会持续一年。 我认为也许他们认为我只是想让自己看起来不错,而新应聘者则出于某种原因而看上去很糟糕,而事实并非如此。我想把自己一直在努力的工作留给有能力的人。 那么,在这里做道德和专业的事情是什么?只是不断告诉他们,这些候选人直到他们真正找到一个体面的人才是好事,直到我该离开的时候为止,那时我没有人离开他们?或者只是接受他们将要摧毁自己并尽我所能,从候选人中选出最优秀的,并在去之前教给他/她我可以做的事情? 我真的只是想在这里做正确的事,所以我可以按条件离开。如果一年下来他们失败了,我可以有一个清醒的良心。

15
什么时候从简历中删除旧技术?[关闭]
我一直在审查一些新职位的简历。我注意到其中的一些简历上有许多旧的编程语言版本和旧的应用程序(例如SQL 4.2,VB5,Lotus 123,Novell)。这使他们的计算机体验列表排得很长。你保持新鲜吗?即使您将不再使用该技术,您是否也会展示自己的经验深度? 什么时候应该在简历上放弃旧技术?通过在简历上保留旧技术,这对录用有害吗?
63 resume 

10
代码什么时候是“旧版”?[关闭]
我们都完成了,我们已经将一些代码(通常是我们继承的东西)标记为“旧版”?但是它仍然在生产系统中使用-真的是遗留的吗?什么使它成为遗产?我们应该回避这种毫无用处的代码吗?标签的纯粹意义在于让我们不断尝试新事物并保持高层管理人员的愉快和快乐? 答案摘要 通过回答,我看到了四个总体主题。这是我看到的细分: 已交付的任何代码:6 失效系统:2.5 无单元测试:2 开发人员不在周围:1.5

15
同事重命名了我所有的查询[关闭]
我不知道我是否应该很生气或什么。我单手为大型数据库构建了300多个查询,并制定了命名约定,以便以后找到它们。我办公室里没有其他人甚至不知道如何建立查询,但是昨天我来找他们都被重命名了。我现在很难找到事情,并且试图弄清楚该怎么做。 我和负责人交谈,她只是轻描淡写了整个事情。她说她重命名了它们,以便可以更轻松地找到它们。不幸的是,我是唯一一个知道如何构建,编辑和维护它们的人,而她找到它们的唯一原因就是测试查询。新的命名约定根本没有意义,我觉得我们在开发过程中倒退了一步。 我想找出的是: 1)我反应过度了吗? 2)处理此问题的最佳方法是什么?我不愿意向老板提起这件事,但是在昨天与同事交谈之后,我已经可以告诉她感觉自己做错了什么。
63 database  sql  access 

16
第一人称评论是否分心且不专业?
我只是发现自己在我正在编写的某些代码(旧式Visual Basic 6.0)中写了以下评论: If WindowState <> 1 Then 'The form's not minimized, so we can resize it safely '... End if 我不确定为什么在评论中下意识地使用“我们”。我怀疑这是因为我想象有人在逐步执行代码,就像他们实际上在“执行”每一行上的所有命令一样,而不是仅仅看着它们发生了。以这种心态,我本可以使用I can resize it,因为我是目前正在“做”的那个人,或者you can resize it好像我正在与将来正在“做”的那个人说话,但是由于这两种情况最有可能碰巧,我使用“我们”,就好像我在引导别人通过我的代码一样。 我可以简单地将其重写为it can be resized并避免出现此问题,但这激起了我的好奇心:在评论中使用这样的第一人称是常见的,还是被认为分散了注意力和/或不专业?

11
在处理极其糟糕的代码时,如何保持生产力?
我没有在软件行业工作的经验,没有自学成才的经验,并且在决定工作之前参加过开源。现在,我为钱而工作,我还必须处理一些不愉快的事情,这当然是正常的。 最近,我被分配将日志记录添加到一个大型SharePoint项目中,该项目是由一些显然正在学习编写工作代码的程序员编写的。经过2年的合作,客户转到了我们公司,但是造成了损害,现在我需要以某种方式维护此代码。 并不是说代码太难读。尽管存在问题-每个项目都有一个类,其中包含几种复制粘贴的方法,大量的if嵌套,匈牙利语的系统,未处理的连接-但它仍然可读。 但是,尽管进行诸如添加日志记录之类的简单操作,但我发现自己绝对没有生产力。基本上,我只需要逐步完成代码并添加一些跟踪调用。但是,代码的愚蠢到令人讨厌,以至于在开始的10分钟之内我就感到疲倦。最初,我曾经添加using结构,通过反转来减少嵌套if,将变量重命名为可读的名称,但是该项目很大,最终我放弃了。我知道这不是我应该做的任务,但是至少减少混乱使我获得了某种心理上的回报,所以我可以继续前进。现在,这个技巧停止了工作,我还有60%的工作要做。 我下班后开始头痛,而且不再有以前的满足感,通常这使我可以连续10个小时编写代码,但仍然感到新鲜。 这不仅是一个大麻烦,因为我确实有一个实际的问题: 有没有办法保持生产力而不与风车战斗? 是否有某种心理把戏保持专注的任务,而不是想着“如何愚蠢的是那个?”每次我在以前的程序员看到另外一个巧招时间?添加日志记录的问题在于,我实际上必须了解代码的作用,而这样做却以令人不快的方式伤害了我的大脑。

9
1个或2个开发人员可以使用Agile / Scrum吗?
到目前为止,我一直在阅读和研究的所有内容都描述了敏捷/ Scrum如何与大约4至6名成员甚至更多的团队合作。 在我目前的商店中,我们大约有8个开发人员,但是考虑到项目数量的性质和我们支持的部门数量,给一个项目分配的人员永远不会超过1或2。 我仍然可以与1个或2个开发人员团队一起使用Agile / Scrum吗?我正在努力向经理推销,以开始使用这种方法,但是我需要能够解释如何为一小部分开发人员缩减规模,或者说服他们确保我们在给定的数量上拥有更多的成员。项目。

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.