软件工程

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

14
使用常数是否正确?
所以我的教授回馈了我一直在从事的项目的反馈。他为此代码添加了一些标记: if (comboVendor.SelectedIndex == 0) { createVendor cv = new createVendor(); cv.ShowDialog(); loadVendors(); } 这在组合框“索引已更改”处理程序中。当用户要创建新供应商时使用它,我的首选(索引0,永不更改)打开“创建新供应商”对话框。因此,我的组合框的内容最终看起来像这样: Create New Vendor... Existing Vendor Existing Vendor 2 Existing Vendor 3 他的问题在于第一行代码: if (comboVendor.SelectedIndex == 0) 他声称0应该是一个常数,因此实际上使我停靠了标记。他声称我根本不应该在代码中使用文字。 问题是,我不明白为什么要在那种情况下使该代码保持不变。该索引永远不会改变,也不需要您进行调整。将一个单独的0保留在用于特定情况且永不更改的内存中似乎浪费内存。
42 c# 


10
什么定义了健壮的代码?
我的教授在谈到“健壮”的代码时一直引用这个Java示例: if (var == true) { ... } else if (var == false) { ... } else { ... } 他声称“健壮的代码”意味着您的程序考虑了所有可能性,并且没有错误之类的东西-所有情况都由代码处理并导致有效状态,因此为“ else”。 但是,我对此表示怀疑。如果变量是布尔值,那么在逻辑上不可能使用第三状态时检查第三状态的意义何在? “没有这样的错误”似乎也很荒谬;即使是Google应用程序,也会直接向用户显示错误,而不是无声地吞下错误或以某种方式将其视为有效状态。很好-我想知道什么时候出了问题。似乎很宣称应用程序永远不会有任何错误。 那么“健壮代码” 的实际定义是什么?


8
为什么要(不)细分?
我正在研究操作系统和x86体系结构,当我阅读有关分段和分页的内容时,我自然地很好奇现代OS如何处理内存管理。从我的发现中,Linux和大多数其他操作系统从本质上回避了分段,而支持分页。我发现这样做的一些原因是简单性和可移植性。 分段(x86或其他方式)有什么实际用途,我们是否会看到使用它的健壮操作系统,或者它们将继续支持基于分页的系统。 现在,我知道这是一个加载的问题,但是我很好奇如何使用新开发的操作系统来处理分段。支持分页是否有意义,以至于没有人会考虑采用一种“分段”的方法?如果是这样,为什么? 当我说“避免”分割时,我的意思是Linux仅在需要时使用它。用户和内核代码/数据段只有4个段。在阅读英特尔文档时,我感觉到细分的设计考虑了更强大的解决方案。然后我又在很多场合被告知x86可能过于复杂。 在链接到Linux Torvald最初针对Linux的“公告”后,我发现了这个有趣的轶事。他稍后在几篇文章中说: 简而言之,我想说移植是不可能的。它主要是用C语言编写的,但是大多数人不会称呼我写C语言。它使用了我能找到的386的所有可能的功能,因为它也是一个向我传授386的项目。如上所述,它使用了MMU ,用于分页(尚未到磁盘)和分段。正是这种细分使其真正依赖386(每个任务都有一个64Mb的代码和数据段-4Gb中最多64个任务。任何需要超过64Mb /任务的人-坚韧的cookie)。 我想我自己对x86的试验使我提出了这个问题。Linus没有StackOverflow,因此他只是实现了它来进行尝试。

14
公司是否雇用有抱负的企业家的软件开发人员?[关闭]
那里的开发人员不仅编写代码和解决问题,而且渴望有一天成为一名企业家并经营自己的公司。他们可能参加开源项目,参加各种社交活动/聚会,甚至编写代码来帮助在工作之外塑造/开展自己的业务。 而且,例如,与一名潜在员工进行的完全坦率的面试可能是这样的: 公司:五年后您会在哪里看到自己? 您:我看到自己在Z市经营自己的软件公司,从事xx项目,解决了yy类问题。 对于一家公司而言,这可能是一个危险的信号,因为他们可能认为这类开发人员具有较高的离职风险,并且他们会带走开发特定软件或特定行业知识的经验。 开发人员是否应该向其当前的雇主或面试者隐瞒这些愿望/特征?提及这类事情是否专业?这是否有助于或伤害了他们被录用的机会?

14
完成项目有多重要?[关闭]
我是一名学生(尚未上大学),并且我已经编程大约5年了。在那段时间里,我从一种语言到另一种语言,从一个API到一个API,以及从一个项目到另一个项目,随处可见。我曾尝试过将自己放在一件事上,但我却失去了兴趣。我的整个PC上都完成了一半的项目(至少格式化了磁盘上四倍的项目)。 我开始想知道我出于乐趣而编程的较低动机(这是我真正喜欢的一项活动),是因为我最终没有完成项目。我不能告诉我目标是否太开放,或者关注范围太短。我试图做一些较小的项目只是为了完成它们,但是它们对我一点都不感兴趣。 这可能是我动力下降的原因吗?另外,当我申请去大学(并希望将来有软件工作)时,这可能会成为问题吗? 综上所述: 完成辅助/业余项目对职业,动机或教育有多重要?



7
函数式编程正在上升吗?
我最近注意到功能编程语言越来越流行。我最近看到了Tiobe索引与去年相比如何显示出其受欢迎程度的增加,尽管根据该索引,其中大多数甚至都没有进入前50种最受欢迎​​的语言。 这已经有相当长的一段时间了。函数式编程根本没有像其他模型那样流行(即,面向对象的编程)。 但是,我已经看到了对函数式编程功能的浓厚兴趣,现在,多核越来越流行,开发人员开始对由Haskell和Erlang等语言在过去探索的其他并发模型表现出兴趣。 我非常感兴趣地看到,尽管缺乏社区的广泛认可,但越来越多的此类语言继续出现。Clojure(2007),Scala(2003),F#(2002)只是最近十年的三个例子。 我本人一直在花时间学习Haskell和Scala。尽管存在了这么长的时间,但对于我来说,这是一个全新的范例,我发现了巨大的潜力。 当然,我最大的问题是,这些方法中的任何一种是否将变得足够流行,以至于考虑对其进行任何努力,但这是一个问题,即使人们对此大惊小怪,连Mandrake都无法回答。 我想问的是: 在哪种情况下,我应该考虑一种更适合执行给定任务的功能编程语言?除了最近流行的并行编程多核问题。 如果我决定改用函数式编程语言,那您会认为这是我将要面临的最大陷阱?(除了范式更改和由于懒惰的评估而难以评估性能)。 有这么多的函数式编程语言,您将如何选择一种更适合您的需求的语言? 任何进一步研究的建议都将受到欢迎。 我在网上搜索了一些意见,看来所有这些重新流行起来都来自这样的想法,即现在我们将要碰到摩尔定律,函数式编程语言将会出现并英勇地拯救我们。但是,如果是这样的话,我想说现有流行语言有更多的可能性适应这种范例。 你们当中有些人可能每天都有使用这些语言的丰富经验,可以为您提供有关该主题的更多见解。您的所有意见将得到更好的理解和认真考虑。 提前致谢!

16
是否有具体原因不大量使用库和代码片段?[关闭]
总的来说,我从事编程工作已有大约8年的时间,在我看来,我越来越依赖开放源代码库和代码片段(该死的GitHub!)来“完成工作”。我知道我可以及时编写自己的实现,但我希望专注于总体设计。 这是正常情况(非公司环境)吗?如果我的“编程”仅是将不同的库粘合在一起,那会出什么问题? 我知道“不要重新发明轮子”,但是当您不再发明一个轮子时会发生什么呢?

30
您应该在学校学过的东西,但当时没有注意[关闭]
这个问题使我认为还有一个更好的问题要问。 您在学校学到了什么,您当时并不在意,但是后来发现有用,或者您因为在学校学习而不得不在工作场所重新学习,但没有保留信息,而是需要它?(我的意思是与软件相关的工作。) 我认为这可能会帮助大学生确定在学校期间应该真正注意的一些内容。

10
关于在家工作的(弊端)优势是否有确凿的数据?[关闭]
是否有关于在家工作的优缺点的硬数据(研究,比较,不公正的感觉分析)? 我的开发人员询问例如每周有一天在家里工作,老板出于各种原因不喜欢它,我同意其中的一些原因,但我认为它们不一定适用于这种情况。 我们有真实的办公室(每人2..3人),分散注意力的情况仍然很普遍。IMO将有助于集中精力,每周工作1天,不会在交互和沟通上造成太多损失。此外,这将是一个很好的选择,并且可以节省通勤。 相关:远程/在家工作的利弊 (有趣的观点,但没有确凿的事实) 需要说明的是:这不是我的决定,我同意视情况而定是赞成与反对,我们正在努力争取“尝试一下”。我之所以提出这个具体问题,是因为(a)在与工程师老板争吵时,事实是一个很好的补充;(b)作为开发人员,我们应该像所有值得尊敬的交易一样,基于事实。

8
如何开始使用HTML5?[关闭]
建议学习HTML5的工作流程是什么?我应该安装什么工具?什么SDK?从哪儿开始?怎么测试?如何调试?我读什么? 我知道通常被标记为“ HTML5开发”的实际上是HTML,CSS,JS和更多内容的混合体,但是我不认为在记事本中开发更大的项目。这就是为什么我要您透露有关工作流程的提示和技巧。
42 javascript  html  css  ajax  html5 

15
创意编码有什么不好的地方?[关闭]
我今晚看着鲍勃·罗斯(Bob Ross)画一些“快乐的树”,而且最近我发现让我感到压力的是什么。 这里和Stack Overflow上的社区似乎拒绝任何不完善的想法。我的目标是通过提高技能来编写受人尊敬的(因此可维护和运行)代码。但是,我富有创造力。 让我解释一下“创造性编码”的含义: 我在项目中的第一步通常是坐下来并敲击一些代码。对于更大的事情,我会在这里和那里做一些计划,但大多数情况下我只是潜入。 除非与正在项目中创建其他作品的其他人一起工作,否则我不会绘制任何类的图。即使那样,那当然也不是我要做的第一件事。我通常不从事大型项目,而且视觉效果也不是很好。 当我测试,简化,重做并将原始hack转换为可重用,逻辑且高效的东西时,我编写的第一轮代码将被重写很多次。 在此过程中,我一直在清洁。我删除未使用的代码,并注释所有不明显的内容。我不断测试。 我的流程似乎与专业开发人员社区中可以接受的基本原则背道而驰,我想理解为什么。 我知道,糟糕的代码最令人困扰的地方是有人陷入了前员工的混乱之中,并且要花费大量的时间和金钱来解决。我了解。鉴于最终结果与从头开始计划所有事情类似,因此我不了解我的流程是怎么了。(或者至少是我发现的。) 最近,我对这个问题的焦虑非常严重,以至于我停止编码,直到我知道解决所解决的特定问题的每种方法的所有知识。换句话说,我几乎完全停止了编码。 无论您对此问题有何意见,我都非常感谢您的投入。 编辑: 谢谢大家的回答。我从每个人那里学到了一些东西。你们一直都很有帮助。

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.