软件工程

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

16
为什么测试人员和程序员彼此不喜欢?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 在我作为程序员的职业生涯中,我见过各种各样的程序员和测试人员,其中许多人互不相爱。我的意思是,程序员认为测试人员的工作不是“真正的”工作,而测试人员则认为程序员太“骄傲”。 这是我做出的正确决定吗,为什么要这样做,以及如何避免此类问题呢?
18 testers 

10
作为程序员,我应该了解低级和高级编程语言吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 已联系我进行一些工作以通过TCP / IP进行LED遥控显示器的工作,但是我的经验和准备工作主要是关于高级编程语言的。我对与我联系有关这项工作的人说,他告诉我: “如果您自称程序员,那么您应该了解所有这些内容” 程序员真的应该知道底层编程的细节吗?还是考虑到底层编程不是我的专长,我是否可以将其视为黑盒概念,理论知识,但不一定要这样做或实施底层语言解决方案?

14
您在工作中使用单元测试吗?您从中获得什么好处?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我曾计划研究并将单元测试应用到我的代码中,但是在与我的同事交谈之后,他们中的一些人向我暗示这是没有必要的,并且几乎没有好处。他们还声称只有很少的公司实际使用生产软件进行单元测试。 我很好奇人们在工作中如何应用单元测试,以及使用它们会获得什么好处,例如更好的代码质量,减少长期的开发时间等。

15
使用高级语言进行原型制作常见吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我目前正在玩一个项目,该项目的语言远远超出了我目前的编程能力,而我在(C)中没有多少实际经验,我正在玩这个想法。使用我更熟悉的高级语言(例如Perl / Python / Ruby / C#)进行原型设计是否有价值,以便使整体设计顺利进行? 最终,最终产品是性能敏感的(它是一个数据库引擎),因此选择了C。但是,恐怕不太了解C会让我迷失森林。 在寻找类似问题时,我注意到一个人提到程序员曾经在Prolog中进行原型设计,然后在汇编器中进行原型设计。

2
回调和侦听器有什么区别?
在Blackberry中,我们可以重写keyChar()方法并捕获keypress事件,也可以注册onKeyPressListener。我知道,onKeyListener是观察者模式。 在android中也有一个KeyEvent.callback和onKeyListener 这两个都是为什么我们不需要注册keyChar事件的事件。两种模式有什么区别?
18 java 

13
计算机科学已经死了吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 问题: CS的科学和艺术死了吗?我的意思是,这些天来思考,计划和有效解决问题的实际需求似乎已脱离CS。该领域似乎正在降低进入壁垒,因此更多的人可以“编程”而不必学习如何真正编程。 背景: 我最近刚获得计算机科学学士学位。我正在一家IT部门的大型公司中担任起步职位。我主要在工作中使用.NET和其他Microsoft技术,但是在此之前,我已经通过实习等工作完成了Java工作。我个人是我自己的有趣项目的C ++程序员。 在深度:通过我一直在做的工作,在我看来,CS中不再存在真正科学的严格学科。过去,程序员必须有效地解决问题,才能使系统健壮和快速。但是现在,随着诸如.NET,Java和脚本语言等主流技术的出现,似乎已经在效率和健壮性之间进行了权衡以简化开发。 与我合作的大多数同事甚至都没有计算机科学学位。大多数人获得了电子工程学位,少数人获得了软件工程学位,甚至有些人是来自没有四年制课程的技术学校。然而,他们没有CS的技术背景,没有研究理论和算法,也没有考虑做一个优雅的解决方案(他们只是寻求最简单,最便宜的解决方案)而表现不错。 该公司敦促我们使用Microsoft技术,这些技术可以解决所有实际问题,并用可以在一半时间内为您自动构建项目的库和工具代替它。我并不是想讨厌这些语言,我知道它们可以达到目的并且可以很好地完成工作,但是当您的员工不知道哈希表如何工作,使用错误的排序方法或运行SQL命令时,效率极低(但是可以在可接受的时间内完成工作),感觉就像是在开发开发技术以整合新的“程序员”,而不是实际教人们如何做正确的事情。 我有兴趣制作高效且美观的程序。如果有更好的方法,我宁愿回去重构它,也不要滑动它。但是在企业界,他们迫使我快速而不是优雅地完成任务。那真的让我很烦。 这就是我一生都会期待的东西吗?对于那些热爱CS的科学和艺术而不只是薪水的人,还有没有职位? 同样,如果您在Java学校的危险之前没有看过这本书,那么可以读一读。

5
为有抱负的学生提供有关构建自己的内核的建议[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我是一个非常有野心的大学生,希望学习几乎所有有关计算机的知识(如果有需要,请抨击我,我喜欢学习)。最近,我认为设计和构建自己的内核是一个有趣的项目(尽管是一个漫长的项目)。 我掌握了一些基本信息,并且已经积累了一些需要掌握Assembly和C / C ++才能真正完成此工作的信息。当我从事这些工作时,我想从编程的角度学习内核实际上是如何工作的。我已经花了几个小时浏览Linux内核的代码,但这只能带您到现在为止。 构建内核的基本步骤是什么?您需要解决的问题?命令还是做事?我知道我很讨厌,但我决心要应付。
18 c  assembly  kernel 

8
您如何措辞“它是开源的,请提交补丁”,以便友好?
在“对它的开源,提交补丁”的典型反驳中,有什么答案?,许多人表达了这样的观点,即简单地要求人们提交补丁是傲慢无礼的。 但是在我看来,作为任何开源项目的开发人员,您在邮件列表中都会看到比您可能实现的功能更多的功能请求。因此,当用户说“我希望看到功能X”时,事情的真相通常是,除非他们自己提交补丁,否则实施该功能的可能性很小。另外,有时可能需要一些鼓励才能使用户成为贡献者。 另一方面,您不想因为粗鲁而吓跑(潜在)贡献者。 那么,您如何以友好的方式说“请提交补丁而不是请求功能”? 更新:感谢您的所有建议!我看到其中大多数需要冗长的解释。但是,由于我宁愿避免(a)每隔一天解释一次相同的事情(这会花费太多时间),还是(b)使用粘贴到电子邮件中的代码片段(它会很快变得不真实),所以我想知道:有人在我可以链接的文档中写过吗? (当然,仍然需要记录特定于项目的事情,例如如何编写测试,编译代码和提交补丁,但我认为那些技术问题还是应该放在CONTRIBUTING.txt中。)

6
在可怕的数据库上编写好的代码是否有希望?
这是我的困境。我最近继承的几个程序之一是在后端使用可怕的数据库构建的。尊敬的创作者显然不喜欢关系概念。每个客户的表,称为唯一客户ID。八十三个隐式命名的字段。该代码都是带有数十个串联的内联SQL语句的程序性代码。 由于没有为我们提供可在同一数据库上运行的重要辅助应用程序,因此我不得不从头开始重新创建它。我是唯一的开发人员,这甚至都不是我的主要职责,因为我至少有一半的时间被操作员占用。从现在开始,不可避免的期限是30天。 尽管我没有经验,但是我敢肯定我可以设计出比以前更好的数据库和现有应用程序,但是我真的认为改变数据库,调整现有应用程序并确保我没有这样做是不现实的。在需要快速创建附加应用程序的同时不要破坏任何内容。 因此,假设我陷入了可怕的数据库。需要使用这样一个糟糕的结构,我写的任何符合它的东西,是否只会增加堆积如山的技术债务,直到一些事情完全崩溃或需要新功能时才被搁置?除了可以运行的应用程序之外,我该如何处理这种情况并从中获得好处? 编辑:如果有人感兴趣,我们最终将这个可怕的数据库及其上运行的应用程序报废了。我们将辅助应用程序的创建(我没有参与设置)外包给了最终两个不同的承包商,他们最终都落在了我们头上,却一无所获。我最终不得不在三天之内赶出一个恐怖的,具有部分功能的修补程序,而该修补程序至今仍在使用。

3
关于装饰器设计模式的新手问题
我在阅读编程文章,其中提到了装饰器模式。我已经进行了一段时间编程,但没有进行任何形式的教育或培训,但是我正在尝试学习标准模式等。 因此,我抬起头来查看装饰器,并在上面找到了维基百科的文章。我现在了解了装饰器模式的概念,但是我对这段内容感到有些困惑: 例如,考虑一个窗口系统中的一个窗口。为了允许滚动窗口的内容,我们可能希望适当地向其添加水平或垂直滚动​​条。假定窗口由Window类的实例表示,并且假定此类不具有添加滚动条的功能。我们可以创建一个提供它们的子类ScrollingWindow,也可以创建一个ScrollingWindowDecorator将此功能添加到现有的Window对象中。此时,任何一种解决方案都可以。 现在假设我们也希望能够向窗口添加边框。同样,我们原始的Window类不支持。ScrollingWindow子类现在带来了一个问题,因为它有效地创建了一种新型的窗口。如果希望对所有窗口添加边框支持,则必须创建子类WindowWithBorder和ScrollingWindowWithBorder。显然,随着每个新功能的添加,此问题变得更加严重。对于装饰器解决方案,我们只需创建一个新的BorderedWindowDecorator,在运行时,我们可以根据需要使用ScrollingWindowDecorator或BorderedWindowDecorator或两者来装饰现有窗口。 好的,当他们说要向所有窗口添加边框时,为什么不只是在原始Window类中添加功能以允许该选项呢?我所看到的方式是,子类化仅是为类添加特定功能或重写类方法。如果需要向所有现有对象添加功能,为什么不修改超类来这样做呢? 文章中还有另一行: 装饰器模式是子类的替代方法。子类化在编译时增加了行为,并且更改会影响原始类的所有实例;装饰可以在运行时为单个对象提供新的行为。 我不明白他们说“ ...更改影响原始类的所有实例”的原因-子类化如何更改父类?这不是继承的全部重点吗? 我将假设该文章像许多Wiki一样,书写不清晰。我可以在最后一行看到装饰器的用处-“ ...在运行时为单个对象提供新的行为。” 如果不了解这种模式,那么如果我需要在运行时更改单个对象的行为,则可能会在超类或子类中构建一些方法来启用/禁用所述行为。请帮助我真正了解装饰器的用途,为什么我的新手思维有缺陷?

5
我该如何用自己的“话语”安全地编写代码而不抄袭?
在撰写研究论文时,我非常了解窃和措辞,但编程方面的这些等效领域对我来说似乎很陌生。我在网上查找了这些主题,令人惊讶的是,关于该主题的材料并不像人们期望的那么多。 在编写代码并必须实现以前从未实现的功能时,我将上网查找示例。我尝试先通读文档,但是有时我觉得很难遵循。因此,如果失败了,我将在网上搜索该主题,并提供许多示例(无论它们是在某个人的个人博客上还是诸如SO这样的问答网站)上。现在,通常为我提供5-10行代码。我已经并将永远不会将其复制并粘贴到自己的代码中,但是我仍然担心会逐字复制。我发现很难重新编写某些代码,尤其是在只有这么多种方法的情况下。我确保重命名变量,更改格式等-这就足够了吗? 我一直想了解这个主题,但是现在我正在使用一种新的语言,并且在公司环境中,我认为它特别相关。如果有人可以在其他地方解释或链接到一个好的解释,我将不胜感激! tl;博士, 我不知道您需要更改多少内容并重新编写网上找到的5-10条代码段,以免遭到窃。如果您几乎没有改变可以怎么办?


6
自引用匿名闭包:JavaScript是否不完整?
匿名自引用函数闭包在JavaScript中如此盛行的事实是否表明JavaScript是不完整的规范?我们看到了这么多: (function () { /* do cool stuff */ })(); 并且我想一切都取决于品味,但是当您只想要一个私有名称空间时,这看起来不像是垃圾吗?JavaScript无法实现包和适当的类吗? 与同样基于ECMAScript的ActionScript 3相比,您可以获得 package com.tomauger { import bar; class Foo { public function Foo(){ // etc... } public function show(){ // show stuff } public function hide(){ // hide stuff } // etc... } } 与我们在JavaScript中执行的卷积相反(这来自jQuery插件编写文档): (function( $ ){ var …
18 javascript 

12
值得阅读语言规范吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我想知道如果您不打算为语言或类似语言编写编译器/解释器,是否值得阅读语言规范/标准文档(例如Java语言规范)?我知道读这样的书不应该是任何人第一次接触该语言,但是这可能是学习它的更详细信息的好方法。 您是否曾经打扰过,其他人也应该打扰吗?

5
申请入门级编程职位时,如何包括我的编码示例?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我将很快开始申请入门级编程职位。到目前为止,我还没有专业的编码经验,因此我只需要展示一些个人项目和代码示例即可展示我的能力。我该如何向潜在的雇主介绍代码示例,我在协作项目,个人项目等方面的具体工作?有点像数字名片?简历上的网页链接到所有页面的布局?链接到各个项目页面? 基本上,除了描述简历的几行内容外,还有没有其他方法可以列出或显示我所做的工作?

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.