软件工程

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


10
如何避免被DailyWTF故事候选人的公司雇用?[关闭]
我正在阅读The Daily WTF存档,尤其是那些与IT相关公司有关的故事,这些公司采用完全错误的软件开发方法,开发人员的工作等等。 有些故事是完全可怕的:出于安全原因,一家公司没有本地网络,另一家公司拥有只能由经理访问的源代码控制服务器,等等。在其中添加了所有有关不知道经理的故事关于他们工作的任何事情并做出愚蠢的决定,而无需听取任何人的意见。 问题是,我不知道如何在面试中知道您是否会被该公司雇用。当然,有时候,面试官会讲些奇怪的事情,这使您觉得公司出了点问题(以我为例,最后一位经理说我应该100%的时间通过远程桌面工作,并连接到旧的slooooow机器,因为“它避免了几个人修改相同的源代码”;也许我应该向他解释SVN是什么)。 但是在大多数情况下,面试过程中您将无法获得足够的信息来获得公司的确切形象。 那么如何避免被这类公司雇用呢? 我考虑过要看一些文档,例如文档指南或代码样式指南。问题是我住在法国,在这里,大多数公司根本没有这些文件,在极少数情况下(这些文件存在的情况下)它们已经过时,书写不佳,从未使用过,或者迫使您这样做。做出毫无意义的事情。 我还考虑过要问一下程序员是如何工作的。但是,看到他们有双屏风或“后现代艺术风格的家具”,并不意味着他们没有人做出奇怪的决定,因此无法在那里工作。 你有没有遇到过这种情况?你尝试了什么?它奏效了吗?

9
Web开发与桌面开发-Web开发是否更糟?[关闭]
作为长期的桌面开发人员,正在研究我们的第一个大型Web应用程序,进行Web开发的利弊是什么? 开发Web应用程序比开发桌面应用程序差吗?例如,这是更乏味还是烦人?上市时间会更糟吗?Web平台是否过度限制?如果对这些问题的回答都是肯定的,那为什么呢? (与开发Flash或Silverlight应用程序相比如何?)

12
有用的错误消息会给开发人员带来什么问题?[关闭]
至今令我震惊的是,在如今的今天,由专业团队开发的至今仍在使用多年的产品一直未能提供给用户有用的错误消息。在某些情况下,仅添加少量额外信息就可以节省用户数小时的麻烦。 产生错误的程序,是有原因的。它拥有一切可用的信息,可以尽一切可能地通知用户,为什么会失败。但是,提供信息以帮助用户的优先级较低。我认为这是一个巨大的失败。 一个示例来自SQL Server。当您尝试还原正在使用的数据库时,它绝对不会让您这样做。SQL Server 知道哪些进程和应用程序正在访问它。为什么它不能包含有关正在使用数据库的进程的信息?我知道并不是每个人都Applicatio_Name在其连接字符串上传递属性,但是即使是有关所涉及机器的提示也可能会有所帮助。 另一个选择,也是SQL Server(和mySQL)是可爱的string or binary data would be truncated错误消息和等效项。很多时候,只需仔细阅读生成的SQL语句,表格就会显示出哪一列是罪魁祸首。情况并非总是如此,如果数据库引擎发现了错误,为什么它不能节省我们的时间,而只是告诉我们那是该死的列呢?在此示例中,您可能认为检查它可能会对性能造成影响,并且这会妨碍编写者。好我买 怎么样,一旦数据库引擎知道存在错误,它就会在事后快速比较要存储的值和列的长度。然后将其显示给用户。 ASP.NET的可怕表适配器也很内gui。可以执行查询,并且可以显示一条错误消息,指出某处的约束已被违反。感谢那。是时候将我的数据模型与数据库进行比较了,因为开发人员太懒了,甚至无法提供行号或示例数据。(根据记录,我从来没有使用这种数据访问方法的选择,它只是我继承了一个项目!)。 每当我从C#或C ++代码中引发异常时,我都会将手边的一切提供给用户。已经决定扔掉它,所以我可以提供的信息越多越好。为什么我的函数抛出异常?传递了什么,期望什么?我只需要一点时间就可以在异常消息的正文中添加有意义的内容。地狱,它只是帮助我,而我发展,因为我知道我的代码抛出的事情,是有意义的。 有人可能会辩称,不应将复杂的异常消息显示给用户。虽然我不同意这一点,但是根据您的构建,通过使用不同级别的冗长程度可以轻松地解决这个问题。即使这样,ASP.NET和SQL Server的用户也不是您的典型用户,他们宁愿使用充满冗长和美味信息的内容,因为他们可以更快地查找问题。 在当今时代,为什么开发人员认为可以在出现错误时提供最少量的信息呢? 这是2011人,前来上。

3
开源许可我的代码会在以后限制我吗?
假设我开发了一个有用的库,并决定将其发布为开源。一段时间后,我有业务需要做一些不符合开源许可证的事情。我可以这样做吗? 我应该如何以保持所有权的方式发布软件,并且将来不要以任何方式阻止自己使用该库? 请记住,至少在理论上,其他开发人员可能会决定为我的开源项目做出贡献。我可以在许可证中指定作为原始开发人员的我也拥有其贡献的所有权吗?不要误会我的意思,我不是想作恶并拥有他人作品的所有权-我只想保留我的所有权,如果有人发布了重要的错误修正,我可能会无法使用原始代码,除非我也用他的作品。


8
重构时如何保持单元测试正常工作?
在另一个问题中,揭示了TDD的难题之一是在重构期间和重构之后使测试套件与代码库保持同步。 现在,我非常喜欢重构。我不会放弃做TDD。但是我也遇到过这样的测试问题,即以较小的重构会导致很多测试失败。 重构时如何避免破坏测试? 您是否将测试写得更好?如果是这样,您应该寻找什么? 您是否避免某些类型的重构? 有测试重构工具吗? 编辑:我写了一个新问题,问我要问什么(但将此问题保留为一个有趣的变体)。

19
程序员不应该戴什么帽子?[关闭]
以我的经验,软件开发人员往往会戴上帽子,并以不同的职责担当多个角色。从不仅编码,有时还包括编写SQL,设计用户界面,设计数据库,图形处理乃至QA测试。 如果主要角色是编写软件/代码,那么开发人员不应该承担什么角色? 有吗 这个问题的意图不是因为开发人员无法胜任其他角色-而是具有其他角色实际上与主要角色相反,或者实际上应该是不主要编程的人的专门角色。
29 team  roles 

12
每班可以容纳多少人?
我是一位长期的开发人员(我49岁),但是是面向对象开发的新手。自从Bertrand Meyer的Eiffel以来,我一直在阅读有关OO的文章,但是几乎没有做过OO编程。 关键是每本有关OO设计的书都以船,汽车或我们经常使用的任何常见对象为例开始,并且它们开始添加属性和方法,并说明如何建模对象状态以及如何使用对象它。 因此,它们通常会采用“模型越好,模型在应用程序中代表对象的能力越强,结果就越好”的想法。 到目前为止,到目前为止还不错,但是,我发现有几位作者给出了一些食谱,例如“一个类应该放在一个页面上”(我会添加“显示器尺寸是多少?”,因为我们尝试不这样做)打印代码!)。 以一个PurchaseOrder类为例,该类具有控制其行为的有限状态机和的集合PurchaseOrderItem,此处工作的一个论据是,我们应该使用一个PurchaseOrder简单的类,并带有一些方法(比数据类多一点),并且具有PurchaseOrderFSM处理的有限状态机的“专家类” PurchaseOrder。 我想说的是Jeff Atwood 在《编码恐怖》上的Code Smells帖子的“特征嫉妒”或“不适当的亲密关系”分类。我将其称为常识。如果我可以签发,核准或取消我的真正的采购订单,那么PurchaseOrder类应该有issuePO,approvePO而且cancelPO方法。 这不是我理解为面向对象的基础的“最大化内聚力”和“最小化耦合”的古老原则吗? 此外,这是否有助于提高类的可维护性?

30
您在任何编程语言中都面临的最大设计缺陷是什么?[关闭]
所有编程语言都有其设计缺陷,这仅仅是因为没有一种语言像大多数(所有其他)事物一样是完美的。除此之外,在您作为程序员的历史上,哪种编程语言的设计错误最让您感到烦恼? 请注意,如果一种语言是“不好的”,仅仅是因为它不是针对特定事物而设计的,那不是设计缺陷,而是设计的功能,因此,请不要列出这种烦人的语言。如果一种语言不适合其设计目的,那当然是设计中的缺陷。实施特定的事物和内幕事物也不重要。

28
过度依赖工具是否意味着您很懒?[关闭]
我从uni开始使用C ++进行编程,并且很喜欢它。在下一学期中,我们改用VB6,但我讨厌它。 我不知道发生了什么,您将一个按钮拖动到表单上,然后ide为您编写代码。 尽管我讨厌VB的运行方式,但我不能说它比在C ++中做相同的事情更快,更容易,因此我可以理解为什么它是一种流行的语言。 现在,我并不是让VB开发人员懒惰,只是说它比C ++更容易,而且我注意到,许多更新的语言都在遵循这种趋势,例如C#。 这使我认为,随着越来越多的企业想要快速的结果,更多的人会像这样编程,迟早不会有我们现在所说的编程之类的东西。未来的程序员将告诉计算机他们想要什么,编译器将像星际迷航一样为他们编写程序。 这只是初级程序员的知情意见,还是总体上程序员变得懒惰且能力不足? 编辑:很多答案都说明了为什么要重新发明轮子,我也同意这一点,但是当有轮子可用时,人们就不会花时间去学习如何制造轮子。我可以用google搜索如何用任何一种语言做几乎所有的事情,一半的语言在调试时对您有很多帮助,他们都不知道如何解决错误。 这就是我提出的理论,即程序员变得越来越懒惰,缺乏能力,因为没有人关心事物的工作原理,直到它失效为止。

2
为什么在数据库中将标记/枚举存储为字符串而不是整数?
我一直在浏览一些著名CMS的SQL转储,包括Drupal 7,Wordpress(一些非常旧的版本)以及一些基于Python的自定义应用程序。 所有这些转储都包含带有字符串标志而不是整数标志的数据。例如,一个职位的状态表示为published,closed或inherit不是1,2或3。 我在数据库设计方面的经验非常有限,并且从未尝试过使用简单的SQL,但是始终有人告诉我,应该对此类数据使用数字/整数标志。显然tinyint,与例如相比,在数据库中占用的空间要少得多varchar(9)。 那我想念什么呢?这不是浪费数据存储和数据冗余吗?如果这些列使用整数而不是字符串,浏览,搜索和索引编制会不会更快一些?

3
应用程序或域服务中的DDD存储库
这些天,我正在学习DDD,并且对如何使用DDD管理存储库有一些疑问。 实际上,我遇到了两个可能性: 第一 我读过的管理服务的第一种方法是在应用程序服务中注入存储库和域模型。 这样,在一种应用程序服务方法中,我们称为域服务方法(检查业务规则),如果条件良好,则在特殊方法上调用存储库以从数据库中持久化/检索实体。 一个简单的方法可以是: class ApplicationService{ constructor(domainService, repository){ this.domainService = domainService this.repository = repository } postAction(data){ if(this.domainService.validateRules(data)){ this.repository.persist(new Entity(data.name, data.surname)) } // ... } } 第二个 第二种可能性是将存储库注入domainService内,并且仅通过域服务使用存储库: class ApplicationService{ constructor(domainService){ this.domainService = domainService } postAction(data){ if(this.domainService.persist(data)){ console.log('all is good') } // ... } } class DomainService{ constructor(repository){ this.repository …


6
为什么要使用反射?
我是Java的新手。通过学习,我读到反射被用来调用类和方法,并知道哪些方法没有实现。 什么时候应该使用反射,使用反射和实例化对象以及以传统方式调用方法之间有什么区别?
29 java  reflection 

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.