软件工程

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

2
您如何更改intellij自动格式化代码的方式?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 IntelliJ对Javascript代码进行了一些奇怪的格式化,而我正在尝试弄清楚如何使其停止格式化。每当我将jQuery函数链接在一起时,它就会缩进自动创建的代码,例如: $('#something').focus(function() { /* Do some stuff */ }).blur(function() { /* this is where the cursor and closing braces end up */ }) 我希望它看起来像这样: $('#something').focus(function() { /* Do some stuff */ }).blur(function() { /* cursor and closing braces indented normally */ }); 我该如何更改?

7
设计文件中应包含对给定设计的利弊的讨论,还是应集中于事实和理由?
我目前正在更新设计文档,以使其对未来的开发人员来说是正确的和最新的。 当前,该文档仅关注事实,介绍设计的方式。提出的任何决定都没有理由。我认为,掌握基本原理很重要,这样开发人员才能知道事情为什么如此,因为这很可能会影响未来的决策。对于我来说,不可能为所有设计决策(尤其是在我开始从事该项目之前所做的决策)添加依据,但是我正在本部门尽我所能。 但是,考虑到项目的要求,某些设计决策是非常糟糕的决策。不过,也有一些不错的。 我最初的想法是,我应该讨论设计问题以及针对这些问题的潜在解决方案或变通办法,以引起未来维护者的注意,但是我不确定设计文档是否适合进行此类讨论和提供信息。我不希望其他人在该系统上工作并更新文档时使设计“批判”猛增到“撕毁该设计的新特性”,因为这显然是不合适的。 我的经理会支持任何一个决定,所以这取决于我。无论采用哪种方法,生成的文档都将进行正式版本控制,并通常在执行开发任务之前将其提供给系统上的开发人员。期望新的开发人员在开始开发工作之前先熟悉与给定软件系统相关的文档。 问题: 设计文件应遵循原始事实(“这就是设计”)和基本原理(“这就是设计的原因”)还是应该用于指出设计中可能存在问题的无缺陷问题未来的开发商? 如果不应该使用设计文档来捕获这些信息,那么应该通过讨论设计原理,权衡和已知问题(不是缺陷,因为可以跟踪缺陷)的讨论,应该捕获哪种类型的文档,以及应该捕获什么其他类型的文档?使用其他工具)?

2
如何处理技术“独断论”
我离开了一份工作(搬到另一个国家),大部分时间我都使用Javascript和Haskell(某些python)进行编程。我真的很喜欢它,因为人们是客观,积极,数学的,却做了很多事情。这是一家真正的专业商店。 现在,我在一家敏捷/ XP商店工作。虽然这很好,但我觉得在选择技术和库时也许我们并不专业。我觉得我们编写软件的方法还有些不成熟且没有结构。我正在尝试阅读我提供的书籍,它们似乎鼓励这种风格(ugh)。很多时候,我们只是从git hub中摘取libs并使用它,而没有进行任何类型的审查。 即使对一个人来说这是一件小事,我也总是被迫与某人一起工作。即使规则可以被琐碎的反例破坏(每次我都误以为给出反例而被口头攻击),似乎所有事情都有一条“快速”规则。在美国,这正常吗?我该如何处理这种教条主义?
13 ruby  haskell  agile 

3
应用SOLID原则
我对SOLID设计原则很陌生。我了解它们的原因和好处,但是我未能将它们应用到一个较小的项目中,我想将其重构为使用SOLID原理的实际练习。我知道没有必要更改运行正常的应用程序,但是无论如何我都希望对其进行重构,这样我才能获得未来项目的设计经验。 该应用程序具有以下任务(实际上还有很多任务,但让我们保持简单):它必须读取一个包含数据库表/列/视图等定义的XML文件,并创建一个SQL文件,该文件可用于创建ORACLE数据库架构。 (注意:请不要讨论为什么我需要它或为什么我不使用XSLT等,这是有原因的,但是它们不在主题之列。) 首先,我选择仅查看表和约束。如果忽略列,则可以通过以下方式声明它: 约束是表的一部分(或更准确地说,是CREATE TABLE语句的一部分),并且约束也可以引用另一个表。 首先,我将说明应用程序现在的外观(不应用SOLID): 目前,该应用程序具有“表”类,该类包含表所拥有的约束的指针列表以及引用该表的约束的指针列表。每当建立连接时,也会建立向后连接。该表具有createStatement()方法,该方法依次调用每个约束的createStatement()函数。所述方法本身将使用到所有者表和引用表的连接,以检索它们的名称。 显然,这根本不适用于SOLID。例如,存在循环依赖关系,这些依赖关系根据所需的“添加” /“删除”方法和一些大型对象析构函数使代码膨胀。 所以有两个问题: 我应该使用依赖注入来解决循环依赖吗?如果是这样,我想约束应该在其构造函数中接收所有者(以及可选的被引用)表。但是,如何在单个表的约束列表上运行呢? 如果Table类都存储自身的状态(例如,表名,表注释等)以及到约束的链接,那么考虑“单一职责原则”,这是一个还是两个“职责”? 如果情况2是正确的,我是否应该在管理链接的逻辑业务层中创建一个新类?如果是这样,1.显然不再相关。 应该将“ createStatement”方法作为Table / Constraint类的一部分,还是应该将它们移出?如果是这样,去哪儿?每个数据存储类(例如,表,约束等)一个管理器类?还是为每个链接创建一个管理器类(类似于3)? 每当我尝试回答这些问题之一时,我都会发现自己在某个地方盘旋。 如果您包括列,索引等,问题显然变得更加复杂,但是如果你们帮助我解决简单的Table / Constraint问题,我也许可以自己解决其他问题。

3
计算错误代码的成本
我正在寻找能说服管理层投入精力进行重构的论点。 我们使用Jira记录工作,并将每个svn-commit与jira调用相关联。 我的想法是执行以下操作: 手动发现极难实现但经常使用的代码区域:来自User-POV和Developer-POV的区域(错误修复) 获得包含JIRA问题的svn-commits 根据某些条件(问题类型,版本,优先级等)过滤问题 计算在这些错误上花费的时间/精力 估计工作量和重构风险 出示这些数字并寻求解决方法。 你觉得这怎么样?这样的测量是否有用和/或令人信服?优缺点都有什么?

5
为学习体验创建新的脚本语言?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为自己的个人学习经验创建脚本语言值得吗? 我问的原因是已经有那么多编程语言可用,我知道我的语言除了提供良好的学习体验外,不会有任何实际用途。但是,我确实发现仅尝试将脚本语言作为一种学习经验是有弊端的:要花费更多的时间和精力,我可能会做一些更具“生产力”的事情。 创建一种编程语言(包括编写其预期目的,语法,哲学,解释器等的草稿)是否值得花费时间,精力和学习经验?还是还有其他我可以从中受益的项目?

4
异常处理是否是跨领域的关注点?
我对异常处理和日志记录的关注并没有多大区别,因为两者都是跨领域的关注。你怎么看?它不应该单独处理而不是与方法实现的核心逻辑交错处理吗? 编辑:我想说的是,在我看来,方法实现应只包含成功执行路径的逻辑,而异常应在其他地方处理。这与已检查/未检查的异常无关。 例如,一种语言可以通过使用如下结构以完全检查的方式处理异常: class FileReader { public String readFile(String path) { // implement the reading logic, avoid exception handling } } handler FileReader { handle String readFile(String path) { when (IOException joe) { // somehow access the FileInputStram and close it } } } 在上述概念性语言中,程序在没有FileReader 处理程序的情况下将无法编译,因为FileReader 类的readFile不会引发异常。因此,通过声明FileReader 处理程序,编译器可以确保对其进行处理,然后程序可以进行编译。 这样,我们就可以同时处理已检查和未检查的异常问题:健壮性和可读性。

8
在CL和Python之间进行Web开发
我来自Java背景,在阅读了Paul Graham的这篇小文章之后,我开始想知道如何选择一种新的语言,即Common Lisp,以加快工作速度(我是一名Web开发人员)。 我目前正在编写宠物项目,但我有一些未来的业务计划。保罗在论文中谈到LISP是“秘密武器”。我不知道十年后这个说法是否正确,但是我将脚趾插入了一个不错的CL教程中,看起来LISP对于Web开发可能更胜一筹。 Paul还提到Python是我真正熟悉的不错的选择。我的问题是:我将来的Web项目应该选择哪个? 我在想什么: 我不会开发桌面应用程序,因此可以选择我喜欢的任何语言。 python似乎有一个很大的社区,因此与lisp相比,它拥有更多的库/框架 我发现Lisp具有某些功能(例如宏),在其他任何地方都找不到 我通常独自工作或与其他1-2位程序员一起工作,但要找到一个精通Lisp知识的人可能很难 所以你怎么看?

7
Delphi XE2如何在各种平台上工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 因此,我一直在阅读有关Delphi XE2的文章,我很可能会去本月晚些时候在芝加哥进行的世界巡回演出,问这个问题是否有人在这里不能回答。 我想知道如何在Mac上执行我的Delphi代码?为了使程序运行,是否还需要运行其他东西(即虚拟机)?

3
您在哪里使用ROT13?
我在阅读vim的文档时,发现有一个快捷方式,例如g?w可以使用ROT13转换下一个单词。我也知道您可以将Python文件的编码更改为ROT13。 这是我的问题:为什么?除了像Django FUNserver这样的恶作剧程序外,它似乎没有那么有用。
13 encryption 

9
用C ++重写IBM汇编器+ COBOL
我是一家汽车租赁公司的出租代理/经理,该公司在1972年编写的出租系统上运行。我决定也许是时候进行更新了。作为一点背景,下面是我们每天必须从此程序中处理的疯狂的简短示例: 租赁代理商必须记住,在一个屏幕上进行打印时,在ACT字段中使用“ MXC”(所有内容均基于短代码),这令人困惑地表示“在合同上显示最大数量”,而在另一个屏幕上则需要PR(对于PRint)。 ACTION字段,但有几个屏幕在PT(对于PrinT)字段中使用Y,而另一个屏幕在PRT(对于PRinT)字段中使用Y,而另一个屏幕要求用户点击Enter(但不点击字母,因为这是换行符,必须是数字键盘上的回车键),然后是F8,一个不同但相关的屏幕仅需F8,某些屏幕上有一个标有PRT的字段,该字段应用于PRinT,但实际上该字段什么也不做,经过几次提示后,打印会自动完成,还有更多屏幕带有标有PRINT Y / N的字段,对于其他地点已经交付文书工作的操作,默认为Y;对于其他经销商将需要文书工作的操作,默认为N。 我决定可以做得更好,因此我决定与公司中的负责该更新的人联系。我最终与负责该计划的IT副总裁取得了联系。我从他那里得到了一些信息,并且得知我的汽车租赁公司的租赁程序是用IBM大型机组装程序编写的,其中混入了一些COBOL。他说,目前没有职位空缺,但是我应该无论如何,请给他发送我的简历给他(以防万一)。 这使我想到了我的问题。 首先是技术。考虑到将来改善可维护性的想法,我的想法是用比汇编语言更高级的语言来重写它。我的经验领域是C ++,因此这对我来说是显而易见的选择。该公司迫切需要一种更简便的方法来更新程序,正如我最近读到一篇文章时所引用的,当时与我交谈的那个人说,该团队工作很努力,他们很自豪地宣布该程序现在支持5位数字的位置代码(而不是4)和8位的车号(而不是7)。我的更新哲学,即使在这种可怕的情况下,也符合乔尔的观点:http : //www.joelonsoftware.com/articles/fog0000000069.html简而言之,重写应该是渐进式的,而不是扔掉以前的一切然后重新开始。 有没有一种简便的方法可以将IBM Assembly与C ++集成在一起,如果可以,该怎么办?我隐约知道了asm关键字,但是我不知道最好使用它还是做其他事情。这样的计划不明智吗?我在使用g ++和GNU make的Linux上完成大部分工作,因此欢迎您回答特定的答案,但绝对不需要(因为我不知道它们没有哪种构建系统,但我怀疑几乎没有)。 第二个问题更具政治性。我应该如何说服该公司他们需要进行转换?理论上的成本节省是巨大的(根据我的估计,该公司每年在浪费额外的百万美元左右,仅是增加了学习如何与该程序交互的培训成本),但是我建议的更改可能会将所有当前的程序员失业,应该将他们制定出来,因此存在很大的结构性变革阻力。 编辑:我应该解释为什么我修改公司已经拥有的东西对我来说似乎是最好的解决方案。我仍然愿意接受其他建议,因为这是程序的庞然大物。我以前从未从事过编程工作,因此请对我可能给出的任何错误分析进行更正。 首先,有现成的解决方案。 从我与几位中层管理人员的讨论中,切换到新系统的主要问题之一是,许多忠诚的员工已经在公司工作了数十年,并且对系统很满意。 。如果我有能力修改已有的内容,则可以将当前接口保持为某种“兼容模式”。用户已经必须登录才能使用当前系统,因此我可以添加在用户首次登录(在我进行此更改之后)时激活设置的功能,在此用户可以选择使用“经典”界面或“新”界面。我无法找到一种现成的解决方案来实现这一目标, 我公司还拥有我们使用的软件;我们不许可。这意味着我正在与之交谈的管理层实际上是可以授权我进行更改的同一个人。使用第三方解决方案,除了获得开发我们所使用产品的公司的必要权利外,我还必须获得公司的批准,这增加了另外的障碍。这还需要说服公司放弃“他们的”产品并购买其他产品,这似乎比尝试更新我们现有的产品更大的障碍,但是在这个问题上我很可能是错误的。 最后,展望未来,我不仅要改善用户界面并修复一些错误。在更新了这些“紧急”问题之后,我希望更新与技术相关的公司运营的基本方式。在这类问题上花了1-2年的时间后,我的计划是回到管理层并提出更重大的变化。公司目前有很多方法可以通过根本不使用的技术从根本上加以改善。例如,每个区域几乎都以相同的方式运行。当地的主要机场是分发汽车的中央枢纽。它们主要按需要发送。但是,机场被用作所有行动的基地。他们会用一辆车派两个人到我的位置,从我们这里接我们不需要的车,然后带着他们进来的汽车返回机场,再加上他们要收回的东西(我们距机场32英里)。然后,他们将乘坐两辆车到达距离我们5英里的位置,将其中一辆降下,然后将另一辆车返回机场。即使我们退还的汽车与他们在我们附近所需的汽车相同,他们也会这样做。我已经在该公司工作了大约两年,而我似乎只在最极端的汽车短缺紧急情况下才偏离了这一点(大约有过三次)。我将用一个自动调度系统代替在每个地区工作的4个人,该系统可以确定要去哪辆汽车,并尝试找到所需的时间最少的里程+里程+驾驶员来将所有汽车交付到需要的位置。我希望有一天可以添加更高级别的修复示例。 但是,在我提出所有建议之前,我认为通过执行较小的任务(例如更新接口)来了解公司和代码库将很有帮助。诸如外包或其他方式的解决方案将消除这种可能性。

7
资助敏捷项目
我所工作的公司正在努力地迈向敏捷项目管理策略-一次又一次地体验了瀑布的“欢乐”。这样做的关键是将重点转移到交付功能上,而不是满足艰巨的截止日期。 尽管通过敏捷开发的迭代发布肯定会改善开发过程和客户关系,但事实证明,将相同的原理应用于该项目的融资策略更加困难。客户通常不习惯诸如敏捷之类的概念,并且对他们认为“准备就绪后就会准备就绪”的情况表示极大的关注。 我想听听人们在资助敏捷项目方面的想法和经验 编辑: 我想强调的是,我不是在要求人们向我解释敏捷方法的优缺点,也不是我相信敏捷等同于“准备就绪后就会准备就绪”,这是由我提倡敏捷开发实践时曾与之合作的客户/企业。 我感兴趣的是人们解决了根深蒂固于业务客户/关系中的“传统”瀑布式预算方法与更先进的开发方法之间的冲突的经验,以及他们为支持这种演进而采用的预算策略。
13 agile 

3
推荐一种设计模式/方法来暴露/容忍/从系统错误中恢复,异常处理(例如Java,C ++,Perl,PHP)
您能推荐一种设计模式/方法来暴露/容忍/从系统错误中恢复,异常处理(Java,C ++,Perl,PHP)吗? 一些错误需要报告。 某些错误可以在内部处理(通过重试或不重要的处理(可以忽略))。 您如何构造代码以捕获它们? 但是所有错误都需要记录。 有哪些最佳实践? 为了模拟它们能够完全测试受它们影响的组件? 适用于几种现代编程语言的一般非编程语言特定问题,但将欢迎使用Java,C ++,PHP和Perl进行模式,方法和哲学的示例说明。 (也在stackoverflow中问过:https : //stackoverflow.com/questions/7432596/recommend-a-design-pattern-approach-to-exposed-tolerating-recovering-from-system, 但我认为也应该在程序员中提出,因为我认为程序员的问答涵盖了更广泛的软件/编程问题,而stackoverflow则更多地是关于技术实现(IMHO)。

10
找工作时,什么吸引您对求职的注意[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我为之工作的小型公司目前正在寻找一些优秀的程序员。我们已经在几个地方发布了工作清单,并打了当地的用户组委员会,但实际上还没有得到任何回报。 作为开发人员,职位发布的哪些要素会让您做出回应: 公司名称(即Microsoft,Oracle或我们的工作部门BAE,波音,洛克希德·马丁公司)。 工作类型(这似乎很明显,但类似于ROR或Java等) 工作环境 使用的电脑(适用于所有人的MacBook Pro) 工资范围 其他 很难相信,鉴于整个就业市场,我们什至没有简历。我们处于一个热门市场(DC区域),但似乎仍然有些困难。
13 recruiting 

9
公司的内部Intranet应用程序中可以使用任何GPLv2许可库吗?
我正在为我签约的公司创建一个内部应用程序。我们希望在此应用程序中使用GPLv2许可的库。一些要点 该应用程序将在公司范围内使用,绝不能公开使用。仅供公司内部使用。 它永远不会被出售!。因此,出售代码不会直接赚钱。这不是产品。 应用程序有两种使用形式 它的本机形式是基于控制台的exe(使用GPL库);和 通过调用可执行文件的Web界面使用。 源代码将保持封闭源代码(仅供公司使用),并且是适当的 我在SO上经历了无数的问题(一个是关闭的,另一个是程序员未标记的),但是我很难理解我对许可证的解释是否正确。 根据到目前为止的理解,我可以不用担心而使用此库。我既不修改源代码,也不分发应用程序或公开使用该应用程序。该应用程序将不会出售,也不会分发给公司外部的任何人(但是可以在我们公司的异地灾难恢复设施中使用)。我很有可能使用发行版的二进制文件,而不是从源代码重新编译。 GNU FAQ中的以下问题似乎支持我的想法。 GPL是否要求将修改版本的源代码公开发布? GPL不需要您发布修改后的版本或其任何部分。您可以自由进行修改并私下使用它们,而无需发布它们。这也适用于组织(包括公司);组织可以制作修改后的版本并在内部使用它,而无需在组织外部发布。 但是,如果您以某种方式向公众发布修改后的版本,则GPL要求您根据GPL向程序的用户提供修改后的源代码。 因此,GPL允许以某些方式而不是其他方式发布修改后的程序;但是否发布决定取决于您。 公司的内部Intranet应用程序中可以使用任何GPLv2许可库吗?
13 licensing  gpl 

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.