软件工程

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



17
Torvalds关于优秀程序员的报价[关闭]
偶然地,我偶然发现了Linus Torvalds的以下引用: “糟糕的程序员会担心代码。好的程序员会担心数据结构及其关系。” 最近几天我一直在考虑这个问题,但我仍然感到困惑(这可能不是一个好兆头),因此我想讨论以下内容: 对这种可能/合理的解释是什么? 从中可以学到什么?

7
Spring框架做什么?我应该使用它吗?为什么或者为什么不?
因此,我正在用Java启动一个全新的项目,并正在考虑使用Spring。我为什么要考虑春季?因为很多人告诉我我应该使用Spring!认真地说,每当我试图让人们解释Spring到底是什么或做什么时,他们永远无法给我一个直接的答案。我已经在SpringSource网站上查看了这些介绍,它们要么真的很复杂,要么真的是针对教程的,它们都没有给我一个很好的主意,为什么我应该使用它,或者它如何使我的生活更轻松。有时人们会抛出“依赖注入”这个术语,这使我更加困惑,因为我认为我对该术语的含义有不同的理解。 无论如何,这里有一些关于我的背景和我的应用程序的信息: 在Java中开发了一段时间,从事后端Web开发。是的,我进行了大量的单元测试。为了实现这一点,我通常制作(至少)一种方法的两个版本:一个使用实例变量,一个仅使用传递给该方法的变量。使用实例变量的一个调用另一个,提供实例变量。当进行单元测试时,我使用Mockito模拟对象,然后调用不使用实例变量的方法。这就是我一直以来所理解的“依赖注入”。 从CS的角度来看,我的应用程序非常简单。小型项目,需要1-2个开发人员。通常是CRUD类型的操作,并附带大量搜索。基本上是一堆RESTful Web服务,再加上Web前端,最后是一些移动客户端。我正在考虑使用直接的HTML / CSS / JS / JQuery进行前端,因此没有真正的计划使用JSP。使用Hibernate作为ORM,并使用Jersey来实现Web服务。 我已经开始编码,非常渴望在那里获得一个演示,我可以四处逛逛,看看是否有人想投资。因此,显然时间至关重要。我了解到Spring具有相当的学习曲线,而且看起来它需要一堆XML配置,而我通常会尽量避免这种麻烦。但是,如果这可以使我的生活更轻松,并且(尤其是)可以使我的生活和开发速度更快,那么我愿意痛不欲生,学习Spring。 所以,请。教我 我应该使用Spring吗?为什么或者为什么不?

16
解释复杂代码的注释有什么问题?
许多人声称“评论应解释“为什么”,而不是“如何””。其他人则说“代码应该是自我记录的”,注释应该很少。罗伯特·C·马丁(Robert C. Martin)声称(用我自己的话改写)经常“评论是写得不好的代码的道歉”。 我的问题如下: 解释复杂的算法或带有描述性注释的冗长而复杂的代码段有什么问题? 这样,无需其他开发人员(包括您自己)逐行阅读整个算法来弄清楚算法的作用,他们只需阅读您用普通英语编写的友好描述性注释即可。 英语是“设计”成易于人类理解的。但是,Java,Ruby或Perl旨在平衡人类可读性和计算机可读性,从而损害了文本的人类可读性。人可以更快地理解英语,而他/她可以理解具有相同含义的代码(只要操作不琐碎)。 因此,在编写了用部分人类可读的编程语言编写的复杂代码之后,为什么不添加友好而易懂的英语的描述性简明注释来解释代码的操作呢? 有人会说“代码不难理解”,“使函数变小”,“使用描述性名称”,“不要编写意大利面条式代码”。 但是我们都知道这还不够。这些仅是准则-重要且有用的准则- 但它们并不能改变某些算法很复杂的事实。因此在逐行阅读它们时很难理解。 用一些关于它的一般操作的注释来解释一个复杂的算法真的很糟糕吗?用注释解释复杂的代码有什么问题?

30
在Stack Overflow中享有很高的声誉会帮助您找到一份好工作吗?
在帖子中,Joel Spolsky提到5位数Stack Overflow信誉可以帮助您赚取一份薪水超过10万美元的工作。多少是真实的? 有谁愿意分享他们在Stack Exchange网站上获得的声誉而获得高薪工作的成功? 我在某处读到某人从Google接受面试的消息,因为一个招聘人员发现他的Stack Overflow名声令人印象深刻。还有其他类似的故事吗?


15
为什么Tanenbaum在Tanenbaum-Torvalds辩论中错了?
最近,在我的OS课堂上,我被分配阅读Tanenbaum-Torvalds辩论的内容。在辩论中,Tanenbaum做出了一些预测: 微内核是未来 x86将消失,RISC架构将主导市场 (从那时起的5年内)每个人都将运行一个免费的GNU OS 辩论发生时我只有一岁,所以我缺乏历史直觉。为什么没有提出这些预测?在我看来,从Tanenbaum的角度来看,它们是对未来的相当合理的预测。发生了什么事以至于他们没有通过?

14
代码编辑器如何在不使用缩进的情况下有效地提示代码嵌套级别?[关闭]
我已经编写了一个XML文本编辑器,该编辑器为相同的XML文本提供2个视图选项,其中一个缩进(虚拟),另一个向左对齐。左对齐视图的动机是帮助用户“看到”用于纯文本或XPath代码缩进的空白字符,而不会受到作为XML上下文的自动副作用的缩进的干扰。 我想为左对齐模式提供视觉线索(在编辑器的不可编辑部分),这将对用户有所帮助,但又不会太复杂。 我尝试仅使用连接线,但是似乎太忙了。到目前为止,我所提出的最好的结果显示在下面的编辑器的模拟屏幕快照中,但是我正在寻找更好/更简单的替代方法(不需要太多的代码)。 [编辑] 以热图的想法(来自:@jimp),我得到了这个和3个替代方案-分别标记为a,b和c: 下一节将接受的答案描述为一个建议,将其他答案和评论中的想法汇集在一起​​。由于此问题现在是社区Wiki,请随时进行更新。 NestView 这个想法的名称提供了一种直观的方法,可以在不使用缩进的情况下提高嵌套代码的可读性。 等高线 NestView中不同阴影线的名称 上图显示了NestView,用于帮助可视化XML代码段。尽管XML用于此插图,但使用嵌套的任何其他代码语法也可以用于此插图。 概述: 等高线被着色(如在热图中)以传达嵌套水平 等高线倾斜以显示何时打开或关闭嵌套层。 等高线将嵌套层的起点链接到相应的终点。 除了热图之外,轮廓线的组合宽度还给人以嵌套层次的视觉印象。 NestView的宽度可以手动调整大小,但不应随代码更改而改变。轮廓线可以压缩或截断以保持这一点。 有时使用空行代码将文本分解为更多可消化的块。这些行可能会在NestView中触发特殊行为。例如,可以重设热图或使用背景色轮廓线,或同时使用两者。 与当前所选代码关联的一条或多条轮廓线可以突出显示。与所选代码级别关联的轮廓线将得到最大程度的强调,但其他轮廓线也可以“亮起”,以帮助突出显示包含嵌套的组 可以在轮廓线上单击/双击不同的行为(例如代码折叠或代码选择)。 等高线的不同部分(前缘,中间或后缘)可能具有不同的动态行为。 可以在轮廓线上方的鼠标悬停事件上显示工具提示 随着代码的编辑,NestView会不断更新。在嵌套不均衡的地方,可以假设嵌套层应该在哪里结束,但是必须以某种方式突出显示关联的临时轮廓线,以作为警告。 可以支持轮廓线的拖放行为。行为可能会随所拖动的轮廓线的部分而变化。 通常在左边距中发现的功能(例如行号和错误的颜色突出显示以及更改状态)可以覆盖NestView。 附加功能 该提案解决了一系列其他问题-许多问题超出了原始问题的范围,但产生了有益的副作用。 可视地链接嵌套区域的开始和结束 等高线连接每个嵌套层的起点和终点 突出显示当前选定行的上下文 选择代码后,可以突出显示NestView中关联的嵌套级别 区分同一嵌套级别的代码区域 对于XML,可以将不同的颜色用于不同的名称空间。编程语言(例如c#)支持可以以类似方式使用的命名区域。 将嵌套区域内的区域划分为不同的可视块 通常在代码中插入多余的行以提高可读性。这样的空线可用于重置NestView等高线的饱和度。 多列代码视图 没有缩进的代码使使用多列视图更加有效,因为不太需要自动换行或水平滚动。在此视图中,一旦代码到达一列的底部,它将流入下一列: 用途不仅仅提供视觉帮助 正如概述中所建议的那样,NestView 可以提供一系列的编辑和选择功能,这些功能与TreeView控件的预期大致相符。关键区别在于,典型的TreeView节点分为两部分:扩展器和节点图标。NestView等高线最多可以包含3个部分:打开器(倾斜),连接器(垂直)和闭合(倾斜)。 压痕 与非缩进代码一起显示的NestView是对传统缩进代码视图的补充,但不太可能替代。 任何采用NestView的解决方案都可能会提供一种在缩进和非缩进代码视图之间无缝切换而又不影响任何代码文本本身(包括空格字符)的方法。缩进视图的一种技术是“虚拟格式设置”-使用动态左边界代替制表符或空格字符。用于动态呈现NestView的相同嵌套级数据也可以用于外观更传统的缩进视图。 列印 缩进对于打印代码的可读性很重要。在这里,没有制表符/空格字符和动态的左边距意味着文本可以在右边距处换行并仍然保持缩进视图的完整性。行号可用作可视标记,用于指示代码在何处换行以及缩进的确切位置: 屏幕真实状态:缩进与缩进 解决NestView是否用完宝贵的屏幕房地产的问题: 轮廓线的宽度与代码编辑器的字符宽度相同时,效果很好。因此,在轮廓线被截断/压缩之前,NestView宽度为12个字符的宽度可以容纳12个嵌套级别。 如果缩进视图的每个嵌套级别使用3个字符宽度,则将保留空间,直到嵌套达到4个嵌套级别为止。在此嵌套级别之后,平面视图具有节省空间的优点,该优势随每个嵌套级别而增加。 注意:对于代码,通常建议最小缩进4个字符的宽度,但是XML经常使用较少的字符。此外,虚拟格式化允许使用更少的缩进,因为没有对齐问题的风险 …

2
软件包名称应为单数还是复数?
通常,尤其是在库中,程序包包含围绕单个概念组织的类。示例: xml,sql,user,config,db。我认为我们所有人都很自然地认为这些软件包以单数形式正确。 com.myproject。XML .Element com.myproject。SQL ■连接 com.myproject。用户。用户 com.myproject。用户 .UserFactory 但是,如果我有一个实际上包含单个类型的实现集合的包-例如任务,规则,处理程序,模型等,哪个更可取? com.myproject。任务 .TakeOutGarbageTask com.myproject。任务 .DoTheDishesTask com.myproject。任务 .PaintTheHouseTask 要么 com.myproject。任务 .TakeOutGarbageTask com.myproject。任务 .DoTheDishesTask com.myproject。任务 .PaintTheHouseTask

6
在git存储库中的单个或多个项目之间进行选择?
在git我们已将大多数项目模块化的环境中,我们面临着每个存储库一个项目或每个存储库设计问题多个项目的问题。让我们考虑一个模块化项目: myProject/ +-- gui +-- core +-- api +-- implA +-- implB 今天,每个存储库有一个项目。它给了自由 release 个别组件 tag 个别组件 但这对于branch组件也很麻烦,因为分支通常api需要和中的等效分支core,并且可能还有其他组件。 鉴于我们希望使用release单个组件,我们仍然可以通过每个存储库设计利用多个项目来获得类似的灵活性。 有哪些经验?您如何/为什么解决这些问题?

14
新开发人员无法跟上分支合并的步伐
我是新开发人员-这是我的第一个编程职位。 我的问题是:我们使用git-我从develop分支中剪切了一个分支,然后开始处理已分配的次要任务。这很慢,因为我没有经验。到我准备将我的分支重新合并到develop其他分支时,已经进行了许多更改,以至于解决冲突变得不知所措(实际上似乎更容易取消工作并重新开始工作,这当然不是可持续的解决方案)。 我该如何克服呢?除了“擅长编码”之外,我还有其他策略可以使用吗?我打算下周与我的主管讨论。

25
新团队负责人-如何与一个怨恨的前同事打交道[关闭]
有人告诉我,我将成为即将进行的项目的团队负责人。我以前从未担任过团队负责人,但是职责通常是您通常期望的,在完成项目所需的8到9个月中,有3至4个其他开发人员在不断旋转。 我的问题是:毫无疑问将从事此项目的开发人员之一将是一个问题。他比我拥有更多的经验,过去曾多次称我为白痴,并告诉我他担任这份工作是因为他是天生的领导者。他期望在每个新项目中都可以晋升为领导职位(迄今为止尚未发生),甚至曾经告诉过我,我要向他报告,尽管实际的团队领导并不抱有幻想。而且,我既观察到也听到别人的声音,他非常不专业(在客户现场观看非工作视频-没有耳机,穿着不专业,上班迟到,开玩笑等)。在我和他一起工作时,多次赞扬我的工作或见解。我目前的团队负责人告诉我,一旦他离开项目,她就丢掉了该代码的1/2,因为质量不好。我可以继续。 我担心这个人会积极地与我抗争,因为他会讨厌不得不向某人报告他认为是劣等人,尤其是因为我有机会在他之前。我曾经作为同伴成功处理过这种类型的个性,甚至过去也曾向类似的经理汇报过。我没有处理过或从未考虑过要处理向我报告的这种类型的角色。 我的问题是:我可以使用哪种策略来有效和专业地应对这一问题?尤其是现在,在它成为问题之前,有什么方法可以在它失控之前将其切断。如果有人有类似的经验,他们将如何处理?
221 team-leader 

9
为什么人们会犹豫使用Python 3?
Python 3于2008年12月发布。从那时起已经过去了很多时间,但是直到今天,许多开发人员仍在犹豫使用Python3。甚至流行的框架(如Django)仍不兼容Python 3,但仍依赖于Python 2。 当然,Python 3与Python 2有一些不兼容,有些人需要依靠向后兼容。但是,对于大多数项目来说,Python 3的存在时间是否已经足够长,以至于大多数项目都无法切换或开始使用Python 3? 有两个竞争版本有很多缺点。需要保持两个分支,学习者的困惑等等。那么,为什么在整个Python社区中对于切换到Python 3如此犹豫?

9
为什么许多异常消息不包含有用的详细信息?
似乎在一定程度上同意异常消息应包含有用的细节。 为什么系统组件中的许多常见异常不包含有用的详细信息? 一些例子: .NET List索引访问ArgumentOutOfRangeException并没有告诉我这是尝试和无效的索引值,也不会告诉我的允许范围。 基本上,来自MSVC C ++标准库的所有异常消息都是完全无用的(与上述相同)。 甲骨文例外.NET,告诉你(意译)“表或视图未找到”,但没有哪一个。 因此,在我看来,在大多数情况下,异常消息没有包含足够有用的细节。我的期望与众不同吗?我是否使用异常错误而我甚至注意到了这一点?或者,也许我的印象是错误的:大多数的异常都实际提供有用的信息?
220 c#  c++  exceptions 

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.