软件工程

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

4
开发一项功能的唯一目的是将其删除?[关闭]
各个贡献者(程序员/设计人员)仅出于一种目的而开发工件的模式的名称是用作转移,以便管理层可以在最终产品中删除该功能? 这是我从曾经在一家大型游戏开发公司工作的前同事那里听到的民间传说。在该公司,众所周知,中层管理人员被迫向产品“投入”并“做出更改”,否则他们就有被视为对项目没有贡献的风险。由于这些多余的“管理输入”,这种情况已延迟了许多项目。 在上述公司的一个项目中,艺术家和开发人员创建了一个多余的动画角色,该角色出现在每个过场动画中,并且像拇指一样伸出来。他们设计的方式是可以在游戏发售之前轻松将其删除(当时游戏仍然是通过实体媒体而非可下载的产品出售的)。显然,管理层随后投票决定删除动画。从积极的方面来看,管理层并未进行任何不必要的变更,因为这些变更表明他们为产品提供了建设性的投入,这些变更会延迟项目。 在公司工作的游戏程序员中,这个过程模式有一个名字,但是我忘记了实际的名字。我相信这是duck- 东西。任何人都可以帮助指出名称,以及有关模式如何发展的可靠参考。

16
我们有责任改进旧代码吗?
我正在查看我编写的一些旧代码。它可以工作,但不是很好的代码。我现在比那时知道的更多,所以我可以改善它。这不是当前的项目,而是当前的,有效的生产代码。我们是否有责任退一步来改进我们过去编写的代码,还是正确的态度“如果没有破裂,就不要修复”?几年前,我公司赞助了一次代码审查课程,其中一项主要收获是,有时它已经足够了。继续。 因此,在某个时候您应该只称其足够好并继续前进,还是应该在认为可能更好的情况下尝试推动项目以改进旧代码?

10
在轻松的氛围中寻找具有挑战性的工作?[关闭]
我是其中一家知名科技公司的开发人员。我喜欢这份工作有很多原因: 我在很酷的产品上做有趣的工作 我解决了具有挑战性的问题,并使用了许多高级技能(量化,创造力,写作,演讲) 很好 问题是我觉得我需要一个更轻松的氛围(更短的时间,更少的性能压力和更大的灵活性),以便腾出时间从事其他活动并减轻压力。理想的工作是每周大约30-35小时的工作,在给定的一周内可以灵活地工作或多或少。谁能建议在哪里找这样的工作,而我在上述几点上不必牺牲太多?(显然,我不得不牺牲工资。)我的雇主通常不提供兼职工作。 我能想到的最接近的事情是当我在大学的CS系进行暑期实习时。这项工作在智力上非常具有挑战性,但是如果我需要提前几个小时回家或在规定的日期前获得灵活性,没人会鞭打睫毛。但是,我想了解学术界是否有其他选择,因为从我所看到的薪水来看,我目前的薪水已经大大降低了。 我以前做过自由职业开发,但是作为大公司的一名员工,我确实喜欢做很多事情(例如福利和保证稳定的工作)。

4
非英语域中的编程和通用语言(DDD)
我知道这里已经有一些与该主题紧密相关的问题,但是没有一个以泛在语言为起点,因此我认为这是合理的。 对于那些不知道的人:泛在语言是定义(口头和书面)语言的概念,该语言在开发人员和领域专家中均会使用,以避免因翻译问题和误解而引起的不一致和误传。您将看到相同的术语出现在代码中,任何团队成员之间的对话,功能规范以及诸如此类的内容中。 因此,我想知道的是如何处理非英语领域中的泛在语言。 就个人而言,我极力主张完全用英语编写编程代码,包括注释,但当然不包括常量和资源。 但是,在非英语域中,我不得不做出以下决定: 用域的自然语言编写反映通用语言的代码。 将无处不在的语言翻译成英语,并停止以该领域的自然语言进行交流。 定义一个表,该表定义无所不在的语言如何翻译成英语。 这是基于这些选项的一些想法: 1)我强烈反对混合语言代码,即使用非英语的类型/成员/变量名称等进行编码。大多数编程语言都在很大程度上“促进”英语,并且大多数技术文献,设计模式名称等也是英语。因此,在大多数情况下,根本无法完全使用非英语语言编写代码,因此您最终还是会使用多种语言。 2)这将迫使领域专家开始以与UL等效的英语进行思考和交谈,这对他们而言可能并非自然而然,因此会严重阻碍沟通。 3)在这种情况下,开发人员以其母语与领域专家进行交流,而开发人员则以英语进行相互交流,最重要的是,他们使用UL的英语翻译编写代码。 我确定我不想选择第一个选项,并且我认为选项3比选项2更好。我是否缺少其他选择? 更新 今天,大约一年之后,我每天都在处理这个问题,我不得不说,选择3对我来说非常有效。 这并没有我最初担心的那么乏味,在与客户交谈时进行实时翻译也不是问题。 根据我的经验,我还发现以下优点是对的。 翻译UL使您更加关注定义UL甚至域本身,尤其是当您不知道如何翻译术语并且必须开始浏览词典等时。这甚至使我重新考虑了域建模决策几次。 它可以帮助您使您对英语的了解更加深刻。 显然,您的代码看起来更令人愉悦,而不是让人讨厌。

10
我不能只使用所有静态方法吗?
下面的两个UpdateSubject方法有什么区别?我觉得如果只想对实体进行操作,使用静态方法会更好。在什么情况下应该使用非静态方法? public class Subject { public int Id {get; set;} public string Name { get; set; } public static bool UpdateSubject(Subject subject) { //Do something and return result return true; } public bool UpdateSubject() { //Do something on 'this' and return result return true; } } 我知道,对于这个非常烦人的问题,我会从社区中得到很多帮助,但我无法阻止自己提出这个问题。 在处理继承时,这变得不切实际吗? 更新: 它正在我们的工作场所中发生。我们正在与5位开发人员一起开发6个月的asp.net …

19
您希望初级软件工程师具备哪些技能?[关闭]
我最近完成了软件工程理学硕士学位,而我将在几周内开始我的职业生涯。我将担任一家使用Java及相关技术(包括Spring和Hibernate)开发软件的公司的初级开发人员。老实说,我对即将发生的事情感到非常兴奋,尤其是因为我想发展自己作为Java开发人员的职业。我也对获得该领域的经验非常感兴趣。此外,这将是我作为专业开发人员的第一次工作经验,因此我真的很想从一开始就努力做到最好。 我想知道哪些软硬件和技术方面的技能和能力会成为可能成为您团队的一部分的新专业人员(初级开发人员)得到的最赞赏,以及我应该专注于哪些技能来实现软件事业的成功工程师。


11
阐明单一责任原则
单一责任原则规定,一个班级只能做一件事情。有些情况很明确。但是,其他方法则很困难,因为在给定的抽象级别上查看时看起来像“一件事”,而在较低级别上查看时可能是多个事物。我还担心,如果在较低级别上遵循“单一责任原则”,则会导致过度分离,冗长的馄饨代码,而不是实际解决手头的问题,因为花更多的时间在所有内容上创建微型类并收集信息。 您将如何描述“一件事”的含义?有什么具体迹象表明一个班级确实比“一件事情”做得更多?

17
Lisp为什么有用?[关闭]
Lisp显然是AI方面的优势,但是对我而言,Lisp的速度似乎不比Java,C#甚至C都快。我不是Lisp的高手,但我发现很难理解它的优势人们会用Lisp编写商业软件。 但是,它被认为是黑客的语言。 保罗·格雷厄姆(Paul Graham)为什么提倡Lisp?为什么ITA Software选择Lisp而不是其他高级语言?这些语言有什么价值?
64 lisp 


5
为什么CSS和SVG可以接受大量的幻数?
很多时候,我看到了热网的问题列表像问题这个,基本上问“我怎么画这个任意形状的CSS”。答案总是是几个CSS或SVG数据块,它们带有一堆看似随机的硬编码值,这些值构成了所需的形状。 当我看着这个时,我会想:“好极了!多么丑陋的代码块。我希望我在项目中再也不会看到这种类型的东西。但是,我经常看到这类问答,并且投票数很高,因此很明显,社区并不认为这很糟糕。 但是为什么可以接受呢?从我的后端经验来看,这对我来说毫无意义。那么为什么CSS / SVG可以呢?

4
是因为我编写不同的东西还是因为编译的方式不同,所以函数编程在多线程中是否更快?
我将深入研究函数式编程的世界,并且不断阅读有关函数式语言更适合多线程/多核程序的内容。我了解函数式语言如何做很多不同的事情,例如递归,随机数等,但是我似乎无法弄清楚函数式语言中的多线程是否更快,因为它的编译方式不同或因为我编写的方式不同。 例如,我已经用Java编写了实现某种协议的程序。在此协议中,双方互相发送和接收数千条消息,它们对这些消息进行加密并一次又一次地重新发送(并接收)。不出所料,当处理成千上万的规模时,多线程是关键。在此程序中,没有锁定。 如果我在Scala(使用JVM)中编写相同的程序,这种实现会更快吗?如果是,为什么?是因为写作风格吗?如果是因为写作风格,现在Java包含了lambda表达式,我不能将Java与lambda一起使用来达到相同的结果吗?还是因为Scala将以不同的方式编译事物而更快?

11
大布尔表达式比分解成谓词方法的同一个表达式更具可读性吗?[关闭]
什么更容易理解,一个大的布尔语句(相当复杂),或同一语句分解为谓词方法(很多额外的代码需要阅读)? 选项1,大布尔表达式: private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal) { return propVal.PropertyId == context.Definition.Id && !repo.ParentId.HasValue || repo.ParentId == propVal.ParentId && ((propVal.SecondaryFilter.HasValue && context.SecondaryFilter.HasValue && propVal.SecondaryFilter.Value == context.SecondaryFilter) || (!context.SecondaryFilter.HasValue && !propVal.SecondaryFilter.HasValue)); } 选项2,条件分为谓词方法: private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal) { return MatchesDefinitionId(context, propVal) && MatchesParentId(propVal) && (MatchedSecondaryFilter(context, propVal) …
63 c#  readability 



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.