软件工程

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

5
为什么旧的编程语言会继续被修改?
这个问题不是, “为什么人们仍然使用旧的编程语言?” 我非常了解。实际上,我最了解的两种编程语言是C和Scheme,它们都可以追溯到70年代。 最近,我在阅读有关C99和C11与C89(实际上仍然是C语言中最常用的版本,以及我从K&R那里学到的版本)有关的更改。环顾四周,似乎每一种频繁使用的编程语言都会每十年左右获得至少一次新规范。尽管事实上大多数使用Fortran的人仍在使用FORTRAN 77,但甚至Fortran仍在获得新的修订。 将此与排版系统TeX的方法进行对比。1989年,随着TeX 3.0的发布,Donald Knuth宣布TeX具有完整的功能,以后的版本将仅包含错误修复。他甚至声明,在他去世后,“所有剩余的bug都将成为特性”,并且绝对不会进行进一步的更新。其他人则可以免费使用TeX并已这样做,但是对结果系统进行了重命名以表明它们与官方TeX不同。这不是因为Knuth认为TeX是完美的,而是因为他了解稳定,可预测的系统的价值,该系统将在五十年内完成与现在相同的任务。 为什么大多数编程语言设计师不遵循相同的原则?当然,当一种语言是相对较新的语言时,它会经历一段时间的快速变化然后才适应。没有人能真正反对微小的变更,这些变更所做的工作不只是编纂现有的伪标准或纠正意外的读数。但是,当一种语言在十到二十年后似乎仍然需要改进时,为什么不只是分叉它或从头开始,而不是尝试更改已经使用的语言呢?如果某些人真的想在Fortran中进行面向对象的编程,为什么不为此目的创建“ Objective Fortran”,而让Fortran自己呆着呢? 我想可以说,不管将来的版本如何,C89已经是一种标准,没有什么可以阻止人们继续使用它。这是对的,但内涵确实有后果。GCC将以学究模式警告C99中不推荐使用的语法或含义稍有不同的语法,这意味着C89程序员不能完全忽略新标准。因此,C99必须具有一定的优势,足以使使用此语言的每个人都承担此开销。 这是一个真实的问题,而不是引起争论的邀请。显然,我对此有意见,但是目前,我只是想了解为什么这不只是事情的完成方式。我想问题是: 与基于旧语言创建新语言相比,更新语言标准有哪些(真正的或可感知的)优势?

4
我如何完全自学计算机科学?[关闭]
作为一个完全自学成才的程序员,如果我能通过自学针对一个典型的CS毕业生的计算机科学课程来提高自己的水平,我会很高兴。 在互联网上查找不同的资源非常容易,当然还有MIT开放课程软件,还有斯坦福大学和其他大学提供的Coursera课程。Internet上散布着许多其他开放资源,并且反复推荐了一些好书。 我已经学到了很多东西,但是我的学习分散了很多,这确实使我很烦。我很乐意如果在某个地方,我可以找到我应该走的路,应该限制自己的学习范围,这样我就可以确定自己学习了哪些计算机科学的重要组成部分,然后系统地处理了我没有学过的那些部分。 维基百科的问题在于它没有告诉您什么是必不可少的,而是坚持要作为完整的参考。 麻省理工学院针对计算机科学和电气工程的开放课程软件。有大量的课程列表,但并没有告诉您根据每个人的兴趣/要求哪些课程是必不可少的,哪些是可选的。我没有提到要学习不同学科的命令。 我希望创建一个可以跟踪的列表,例如这个假人 SUBJECTS DONE Introduction to Computer Science * Introduction to Algorithms * Discrete Mathematics Adv. Discrete Mathematics Data structures * Adv. Algorithms ... 您可以清楚地看到,我对计算机科学的具体主题一无所知。 即使有人按照推荐的学习顺序指出MIT课程软件中的基本课程(+ MIT OCW中没有提供的基本课程),这也将非常有帮助。 我将列出我已经经历过的帖子(但我没有得到我想要的信息) https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major-最佳答案表示不值得研究cse https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science-指向MIT OCW https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming

9
到底什么是企业软件?
我不了解“普通”软件和企业软件之间的区别。即使阅读这些... Wikipedia上的“企业软件” Techcrunch上的“企业软件再次变得性感” 关于编码恐怖的“伟大的企业软件骗局” 我实在无法绕开真正的分歧。两者之间有什么区别吗?人们为什么说企业软件很烂?


3
为什么选择Java作为Android?
为什么选择Java而不是C ++之类的Android?我听说Java使用了大量内存,并且我认为低内存使用在移动设备上非常重要。在移动设备上使用Java而不是像C ++这样的语言有什么真正的优势?
46 android  mobile 

22
经典BASIC曾经用于商业软件开发吗?如果是,如何克服局限性?
包括我在内的我们许多人都是从用家用计算机编写的程序开始编程生涯的,例如 10 PRINT "ENTER RADIUS" 20 INPUT R 30 PRINT "CIRCUMFERENCE="; 2 * R * PI 40 PRINT "AGAIN?" 50 INPUT A$ 60 IF A$="Y" THEN GOTO 10 70 END 当然,基于行号的BASIC倾向于创建spagetti代码,这也是因为大多数BASIC方言都错过了结构语句,例如WHILE,除了FOR使用IF- GOTO和使用- 循环外,其他都没有GOSUB。我说的是1991年QBASIC和Visual Basic出现之前的BASIC方言。 虽然BASIC方言可能在有抱负的程序员中引起了恶劣的作风,但是否存在使用BASIC方言创建的大型商业项目?如果是这样,他们如何设法克服明显的缺点? “严重”是指: 不是游戏(我知道有些商业游戏是用BASIC编写的,例如Pimania) 不是免费软件 不平凡,即相当大(例如:至少1500 LOC) 卖给几个客户(不是内部开发) 有“关键任务”优先
46 history  basic 

10
如何在没有CS学位的情况下成为一名成功的程序员[关闭]
免责声明(请先阅读,然后再回答): 我已经看到了许多与我想问的问题类似的问题,因此这里有一些类似的问题。 恕我直言,它们既不完全是我要问的,也不是我希望的那样彻底(我不是要总结以下问题的答案,也不是要I毁提问者,我只是想成为更加全面): CS学位可以使年长的程序员受益吗? https://softwareengineering.stackexchange.com/questions/80024/importance-of-certifications-for-java-programmer-without-bs-degree https://softwareengineering.stackexchange.com/questions/81591/in-the-absense-of-a-cs-degree-how-can-i-fill-in-the-gaps-so-to-speak 申请发展工作时,CS学位的重要性吗? 让我清楚一点,我不是在问以下问题: 如何从零开始教自己编程(没有CS学位) 如何将自己推销为优秀的软件开发人员(未获得CS学位) 如何获得作为软件开发人员的高薪工作(没有CS学位) 一些上下文: 既然我已经放弃了免责声明,那么让我从我作为软件开发人员的经历的简短历史开始,充实我的问题。 首先,我非常幸运。我得到了很多工作机会(几个繁重的后端PHP / MySQL项目,以及XAML / C#中的几个WP7应用程序),通过这些工作,我真正了解了有关软件开发的所有知识。我所从事的几乎所有软件开发工作都是我没有资格应聘的工作(在聘用我之前,我已经向雇主明确说明了这些工作)。我不想在不必要的时候给自己以荣誉,但是我想说,完美的谦卑免除了谦虚。 在我从事的几乎每一项开发工作中,我都超出了雇主的期望,并被证明是宝贵的资产。当然也有例外1。但是我的意思是我很聪明,能够自学成才,以取得成功。每做一份工作,我的压力就会越来越大。 我参加了华盛顿大学西雅图分校的工作,目前我已经四年级,还剩两年,正在学习数学学位。在我所从事的各种工作中(如果需要这份清单,请参阅我的简历),我还以全日制学生的身份上学。 当我想大多数开发商会同意,学习典型的普通版本科课程,包括入门 编程课程ABSOLUTELY就相形见绌了与编写实际的代码,建立比较真实的2种产品,有工作真棒人,并积极影响的生活用户3。 所以...随着事情的发展...我花了更多的时间和精力在工作上,而不是专注于学习。有时我的表现非常糟糕,但是在大多数情况下,我都能保持自己的成绩。 然而,计算机科学课程在威斯康星大学是非常,非常,非常,非常有竞争力。 因此,当我被程序拒绝时,这不足为奇。两次。具有讽刺意味的是,尽管我通过电子邮件收到了始终礼貌,令人沮丧的拒绝通知,但在同一个半小时的窗口中,我从亚马逊接到了一个电话,为我提供了暑期实习4作为SDE。 当我环顾我这个年龄21岁的其他人时,他们在软件开发中的目标与我相同。我发现自己对自己的位置,所学的知识,身份以及所处的环境感觉很好我可以。当然,那里有21岁的年轻人比我自己要聪明得多,我并不是要说我在人群中脱颖而出,只是我觉得自己在落后于普通同龄人的进步方面并不遥不可及。 我对自己在软件领域取得成功的能力充满信心。更重要的是,我对自己的能力和渴望充满信心,能够在我真正需要的时候继续成长,学习并尴尬地谦卑。 数学学位 我发现自己追求数学学位的唯一目的是拥有学位。有些人说我应该退学,现在就开始工作(因为我有机会去做),还有一些人说我应该真的完成我的学位。我已经下定决心要继续攻读学位,其原因与任何一个营地都会提出的原因完全不同,所以请不要在这件事上以一种或另一种方式鼓励我。考虑问题“关闭” :) *深呼吸* ...抱歉,这比我预期的要长。 本质上,这是我的问题: 如何客观地确定我现在可能会或可能会缺少的CS学位所学的领域,常识和其他技能? 如何按最重要的顺序对这些技能进行排序? 在接下来的两年中,最好的方法是补充我的教育以达到或超过顶级大学的CS本科水平来获得这些特性? 这是我已经采取的步骤: 询问开发社区(本文) 与经验丰富的开发人员一起寻求指导,这些开发人员与我有着相似的职业道路 定义短期和长期的“学习”目标以及随后的大纲概述学习主题 继续编写代码并从事我热衷的项目 如果您到此为止,您应该得到一个cookie :)非常感谢您的支持。 那么……开发社区,经验丰富的开发人员,与我同舟共济的同学,您将有何建议? 此外...请记住我的免责声明这篇文章什么我顶不要求。 更新: 我意识到,对于我认为是问题的成功“答案”,我没有提供非常具体的参数。我认为这个问题非常模糊,可以提出许多“正确”的答案。 经过一段合理的时间后,我将选择适合以下属性的答案: 解释答案背后的原因 可以从某种程度的经验谈起(例如与我的鞋子聘用/互动或成为某人) …
46 education 

8
如何学习有效地编写Pythonic代码?
用谷歌搜索“ pythonic”会发现各种各样的解释。在维基百科页面称: Python社区中最常见的新词是pythonic,它具有与程序样式相关的广泛含义。说代码是pythonic就是说它很好地使用了Python习惯用法,它是自然的,或者显示出流利的语言。同样,要说它是pythonic的接口或语言功能,就是说它与Python惯用语配合得很好,并且它的使用与语言的其余部分很好地结合在一起。 它还讨论了术语“ unpythonic”: 相反,非Python代码的标志是它试图用Python编写C ++(或Lisp,Perl或Java)代码-也就是说,提供的是粗略的转录,而不是来自另一种语言的惯用形式的翻译。pythonicity的概念与Python的极简主义的可读性哲学紧密相关,并且避免了“有多种方法可以做到这一点”。不可读的代码或无法理解的习惯用法是难以理解的。 术语“ pythonic”是什么意思?如何学习在实践中有效地应用它?


16
吸气剂有多少逻辑
我的同事告诉我,getter和setter中的逻辑应该尽可能少。 但是,我深信可以在getter和setter中隐藏很多东西,以使用户/程序员免受实现细节的影响。 我做的一个例子: public List<Stuff> getStuff() { if (stuff == null || cacheInvalid()) { stuff = getStuffFromDatabase(); } return stuff; } 工作告诉我做事的一个例子(他们引述Bob叔叔的“干净代码”): public List<Stuff> getStuff() { return stuff; } public void loadStuff() { stuff = getStuffFromDatabase(); } 设置器/获取器中适合多少逻辑?空的getter和setter的用途是什么,除了违反数据隐藏之外?
46 coding 

15
业余爱好者有可能成为一名优秀的程序员吗?[关闭]
专业的全职程序员可以通过不断学习他们的工作来做得很好。业余程序员如何训练成为一名优秀的程序员? **如果您喜欢播放音乐或唱歌,可以这样做,因为这是您的爱好,并且您很感兴趣,因此您可以成为一名优秀的歌手或音乐播放器。但您无需成为专业歌手或唱歌来谋生。对程序员来说也是如此吗?有一位著名的业余程序员吗?
46 training 

9
什么是最正交的编程语言?[关闭]
我发现自己不得不教新生关于特殊语言规则(例如数组到指针的衰减)的烦恼,这些规则与编程本身完全无关。所以我想知道: 什么是特殊语言规则数量最少的编程语言,其中的一切都是一流的,并且可以在不麻烦的技术限制下进行编写?这样的语言难道不是完美的教学语言吗? 主持人备注 我们正在寻找能提供一些解释和上下文的长答案。不要只列出一种语言:请说明为什么您认为该语言可以回答问题。没有解释任何内容的答案将被删除。有关更多信息,请参见良好主观,不良主观。

4
确定什么是有用的单元测试
我一直在研究phpunit的文档,并遇到以下引号: 您可以随时编写更多测试。但是,您会很快发现,您可以想象的测试中只有一小部分确实有用。您要编写的测试即使您认为应该可以通过也要失败,或者编写的测试即使您认为应该可以通过也要成功。另一种思考的方式是成本/收益。您想编写测试以回馈信息。-埃里希·伽玛(Erich Gamma) 我很纳闷。除了该报价中关于成本/收益的内容外,如何确定使单元测试比其他单元更有用的因素。您如何决定为哪个代码创建单元测试?我之所以这么问,是因为其中的另一句话也说: 因此,如果不是关于测试,那是关于什么的?这是要弄清楚您要做什么,然后再半弯腰去尝试。您编写了一个规范,以简洁,明确和可执行的形式细化了行为的一小部分。就这么简单。这是否意味着您编写测试?不,这意味着您编写代码说明。这意味着您需要提前指定代码的行为。但时间不算早。实际上,在编写代码之前最好是最好的方法,因为那时候您掌握的信息将尽可能多。就像做得好的TDD一样,您以微小的增量工作……一次指定行为的一个小方面,然后加以实现。当您意识到这全都在于指定行为而不是编写测试时,您的观点发生了变化。突然,为您的每个生产类都提供一个Test类的想法是非常荒谬的。用自己的测试方法(以1-1关系)测试每种方法的想法将是可笑的。-戴夫·阿斯特斯 重要的部分是 * 并且用自己的测试方法(以1-1关系)测试每种方法的想法将是可笑的。* 因此,如果为每个方法创建测试都是“可笑的”,那么您如何/何时选择编写测试的目的?

12
为什么关系数据库不支持以嵌套格式返回信息?
假设我正在建立一个博客,希望发布和发表评论。因此,我创建了两个表,一个具有自动递增整数“ id”列的“ posts”表,以及一个具有外键“ post_id”的“ comments”表。 然后,我想运行可能是我最常见的查询,即检索帖子及其所有评论。对于关系数据库而言,它是相当新的东西,对我而言,最明显的方法是编写看起来像这样的查询: SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments FROM posts WHERE id = 7 这会给我我想要的帖子的ID和内容,以及所有相关的注释行,它们整齐地打包在一个数组中(嵌套表示形式,就像您在JSON中使用的一样)。当然,SQL和关系数据库不是这样工作的,它们可以得到的最接近的结果是在“帖子”和“注释”之间进行联接,这将返回很多不必要的数据重复(重复相同的帖子信息)在每一行中),这意味着要花费大量的时间在数据库上以将它们放在一起,也需要花费我的ORM来解析和撤消所有内容。 即使我指示我的ORM急切地加载帖子的评论,最好的办法是调度一个对该帖子的查询,然后进行第二个查询以检索所有评论,然后将它们放到客户端,效率也不高。 我知道关系数据库是经过验证的技术(地狱,它们比我还旧),并且在过去的几十年中,对它们进行了大量研究,我敢肯定,它们(以及SQL标准)旨在按其功能运行,但我不确定为什么上面概述的方法不可行。在我看来,这是实现记录之间最基本关系之一的最简单,最明显的方法。为什么关系数据库不提供这样的功能? (免责声明:我主要使用Rails和NoSQL数据存储来编写Web应用程序,但是最近我一直在尝试Postgres,我实际上非常喜欢它。我并不是要攻击关系数据库,只是感到困惑。) 我不是在问如何优化Rails应用程序,或如何在特定数据库中解决此问题。我在问为什么SQL标准在我看来违反直觉和浪费时会以这种方式工作。SQL的原始设计者希望他们的结果看起来像这样有一定的历史原因。
46 database  sql  rdbms  query 

5
什么时候使用PHP或ASP.NET?[关闭]
我已经在使用PHP和ASP.NET开发Web应用程序方面进行了广泛的工作,但是客户经常问我的问题之一是要继续开发php网站还是asp.net网站。 所以自然而然地想到的第一件事就是回答这样的问题: PHP是开源的,而ASP.NET是Microsoft的。 通常说完这样的话,客户的脸上就会一片空白。显然,一个是开放源代码而另一个不是开放源代码的事实并没有真正使它们困惑。这是有充分理由的,因为当我第一次听到它的时候,并没有告诉我太多。 通过与两家公司的合作,我知道在网站开发方面各有千秋。 我的问题是,到目前为止,ASP.NET和PHP有何区别? 特征 安全 可扩展性 构架 平均开发时间 我正在尝试汇总事实清单,以便与客户进行比较,以便可以在适当的开发平台上做出明智的选择。

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.