软件工程

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


8
“并行”执行与“并行”执行之间的区别?
是什么方面的区别并发和并行执行?我从来没有完全能够理解这种区别。 该标签将并发定义为同时运行两个进程的方式,但是我认为并行性是完全相同的事情,即:可能在单独的处理器上运行的单独的线程或进程。 另外,如果我们考虑使用异步I / O之类的东西,那么我们是在处理并发性还是并行性?

10
如今,设计模式真的必不可少吗?
我正在阅读“编码员在工作”,并且面对这样一个事实,书中接受采访的一些专业人员对设计模式并不那么热心。 我认为有两个主要原因: 设计模式迫使我们以其术语进行思考。换句话说,几乎不可能发明新的东西(也许更好)。 设计模式不会永远持续下去。语言和技术日新月异;因此,设计模式最终将变得无关紧要。 因此,也许更重要的是学习如何在没有任何特定模式的情况下正确编程,而不要学习它们。 重点还在于,通常当人们遇到问题并且没有太多时间时,他们会尝试使用一种模式。这意味着只需稍作更改即可将现有代码复制并粘贴到您的项目中,以使其正常工作。当需要更改或添加某些内容时,开发人员不知道从哪里开始,因为这不是他的代码,而且他对代码也不是很熟悉。


13
您使用什么“版本命名约定”?[关闭]
不同的版本命名约定是否适合不同的项目?您使用什么,为什么? 就我个人而言,我更喜欢以十六进制表示的内部版本号(例如11BCF),该数目应该定期增加。然后为客户提供一个简单的3位数版本号,即1.1.3。 1.2.3 (11BCF) <- Build number, should correspond with a revision in source control ^ ^ ^ | | | | | +--- Minor bugs, spelling mistakes, etc. | +----- Minor features, major bug fixes, etc. +------- Major version, UX changes, file format changes, etc.

15
何时针对一种方法优化内存与性能速度?
我最近在亚马逊接受了采访。在编码会议期间,面试官问为什么我在方法中声明了变量。我解释了我的过程,他挑战我以更少的变量解决相同的问题。例如(这不是从采访),我开始与方法A然后提高它方法B,通过去除int s。他很高兴,并说这将通过这种方法减少内存使用。 我了解其背后的逻辑,但我的问题是: 什么时候适合使用方法A与方法B,反之亦然? 您可以看到,由于方法A被int s声明了,因此它将具有更高的内存使用率,但是它只需执行一次计算即可,即a + b。另一方面,方法B的内存使用量较低,但是必须执行两次计算,即a + b两次。什么时候比另一种使用一种技术?还是其中一种技术总是总是比其他技术更受青睐?评估这两种方法时要考虑什么? 方法A: private bool IsSumInRange(int a, int b) { int s = a + b; if (s > 1000 || s < -1000) return false; else return true; } 方法B: private bool IsSumInRange(int a, int b) { if (a + b …

9
数据库应实现多少业务逻辑?
我参与过一些项目,其中大多数业务逻辑是在数据库上实现的(主要是通过存储过程)。另一方面,我从其他程序员那里听说这是一个不好的做法(“那里有数据库来存储数据。其余的则由应用程序来完成”)。 通常,哪种方法更好? 我能想到的在数据库中实现业务逻辑的优点是: 集中业务逻辑; 应用程序类型,编程语言,操作系统等的独立性; 数据库不太容易进行技术移植或大型重构(AFAIK); 无需重新进行应用程序技术迁移(例如:.NET到Java,Perl到Python等)。 缺点: 由于缺乏面向应用程序的语言所提供的库和语言构造,SQL对于业务逻辑编程而言效率较低,并且更为复杂。 通过库更难(如果可能的话)重用代码; 生产效率较低的IDE。 注意:我正在谈论的数据库是关系型,流行的数据库,例如SQL Server,Oracle,MySql等。 谢谢!

9
对网络应用程序的担心不是“面向未来”
我是本地小型SaaS Web应用程序的Web开发人员。目前,它有大约六个客户。 随着我继续设计应用程序,要说服自己投入到项目的任何时间对我来说变得越来越困难,这在开始阶段就已经发生了。随着对项目和我已经编写的代码的重视,我担心我提交的所有其他工作将在不久的将来被推翻,因为随着业务的增长,该应用程序的扩展性将不佳。 作为一名申请实习的大学生,我曾让雇主质疑我的选择,即在面试过程中不使用任何网络框架,这只会使我进一步怀疑我以前的工作。我只是不知道任何Web框架,也不知道要开始使用哪个框架。 我在一月份以全职开发人员的身份进入了实习岗位,在那里我将开始学习前端框架,但是完成应用程序的压力越来越大,我正在考虑完全废弃该应用程序并重新开始,这是我以前做过的 该应用程序当前以PHP和jQuery(用于AJAX调用)构建,并使用MySQL作为其数据库。关于如何克服这种思维障碍并确保我的应用程序可扩展的任何想法?提前致谢。

13
您如何通过遵循干净的代码实践来证明编写更多代码是合理的?
主持人笔记 这个问题已经有十七个答案。在发布新答案之前,请阅读现有答案,并确保您的观点尚未得到适当覆盖。 我一直遵循罗伯特·马丁(Robert Martin)的“清洁代码”书中推荐的一些做法,尤其是那些适用于我使用的软件类型的做法以及对我有意义的做法(我不遵循它作为教条) 。 但是,我注意到的一个副作用是,我编写的“干净”代码比没有遵循某些实践的代码要多。导致这种情况的具体做法是: 封装条件 所以代替 if(contact.email != null && contact.emails.contains('@') 我可以写一个像这样的小方法 private Boolean isEmailValid(String email){...} 用另一个私有方法替换内联注释,以便方法名称描述自身,而不是在其顶部添加内联注释 一堂课只有一个改变的理由 还有其他一些。关键是,可能是30行的方法最终成为一个类,这是因为微小的方法可以替换注释并封装条件等。当您意识到自己有这么多的方法时,它对将所有功能都放在一个类中,实际上它本来应该是一种方法。 我知道任何极端的做法都是有害的。 我正在寻找答案的具体问题是: 这是编写干净代码的可接受的副产品吗?如果是这样,我可以使用哪些论据来证明已编写了更多LOC这一事实呢? 该组织并不特别在意更多的LOC,但是更多的LOC可能会导致非常大的类(同样,为了便于阅读,可以用长方法代替一堆只使用一次的辅助函数)。 当您看到一个足够大的课程时,它给人的印象是该课程很忙,并且其职责已经结束。因此,您最终可能会创建更多的类来实现其他功能。结果就是很多类,都借助于许多小的辅助方法来“做一件事”。 这是特定的关注点……这些类可以是一个单一的类,仍然可以实现“一件事”,而无需许多小方法的帮助。它可能是单个类,可能带有3或4个方法以及一些注释。

11
我的团队应该从哪里开始成为“现代”?[关闭]
我是一个相对较新的开发人员,刚从大学毕业。在上大学时以及随后的求职过程中,我意识到我缺少很多“现代”软件开发方法:单元测试,日志记录,数据库规范化,敏捷开发(相对于通用敏捷概念),编码风格指南,重构,代码审查,没有标准化的文档方法(甚至要求)等。 总体而言,我认为这不是问题。我希望我的第一份工作会包含所有这些想法,并在工作中教给我。然后我在一家大公司获得了第一份工作(全栈Web开发),我意识到我们不做任何事情。实际上,我是团队中经验最少的人,是率先尝试使我的团队掌握“现代”编程技术的人,因为我担心不这样做会导致职业自杀。 首先,我开始使用日志记录软件(log4J),但随后我迅速着手编写自己的样式指南,然后放弃了它,而改用Google样式指南-然后我意识到我们的Java Web开发使用手写的前端控制器,因此我坚持我们对Spring的采用-但后来我意识到我们也没有单元测试,但是我已经在学习Spring ...正如您所看到的,它变得太快了,尤其是与正常的开发工作结合使用时。此外,我很难在这些方法论中变得足够的“专家”来教给其中的任何其他人,而又不花太多的时间去研究其中的一个,更不用说全部了。 在所有这些技术中,我认为在当今的软件开发世界中这些技术都是“预期的”,我如何将它们作为一个新的参与者整合到团队中,而又不让自己和团队感到不知所措? 我如何影响我的团队变得更加敏捷?是相关的,但我不是像这里的问询者那样的敏捷开发人员,并且我正在寻找比敏捷更广泛的方法集。
106 agile  teamwork 

10
为什么将Python用于高性能/科学计算(而不是Ruby)?
PyCon 2011演讲中有一段话说: 至少在我们的商店(阿贡国家实验室)中,我们有三种公认的科学计算语言。按照这种顺序,它们是C / C ++,所有方言的Fortran和Python。您会注意到绝对,完全缺少Ruby,Perl,Java。 它是在更通用的高性能计算环境中。报价仅来自一家商店,但另一个有关HPC语言的问题也将Python列为要学习的语言(而不是Ruby)。 现在,我可以理解在该问题空间中正在使用C / C ++和Fortran(而未使用Perl / Java )。但是令我惊讶的是,鉴于HPC在Python和Ruby中的使用非常相似,因此它们之间会有很大的不同。(注意-我是Python的粉丝,但对 Ruby 没有任何帮助)。 有没有一些具体的为什么一种语言起飞的原因吗?关于可用的库吗?一些特定的语言功能?社区?还是仅仅是历史上的偶然性,它本来可以反过来?

22
职位发布是否夸大了他们的要求?[关闭]
我感觉自己是一个相当合格的程序员,但遇到的许多工作职位却让我感到另类。几乎所有人都将资格分为要求和期望,但即使是要求部分也可能令人生畏。 我看到很多帖子说他们需要在相对较小的技术或库中有几年(2年或更长时间)的经验,这是他们公司特有的。有时我会看到一种语言需要5年甚至7年以上的经验。靠它们自己可以解决一些问题,但是当一个小镇公司说您需要用2种语言工作3年,精通网络编程,脚本编写,数据库以及诸如“具有大型高度冗余的业务关键系统的经验”之类的东西时,这太荒谬了。都在同一时间。 他们真的希望找到一个在使用完全相同的技术上拥有丰富经验的人吗?我很难找到一份我的技能集上至少没有1或2个漏洞的职位。我已经一遍又一遍地听到,大多数地方都珍视您快速学习的能力并会教您工作上的问题,但是为什么要这么说呢?他们只是想阻止应用程序的底部(FizzBu​​zz故障)吗?
106 skills 

15
为什么数据结构在面试中如此重要?[关闭]
我必须承认,我大学毕业后在数据结构方面并不那么强。在我毕业期间的整个校园安置中,我目睹了诸如亚马逊,微软等大多数高科技公司主要专注于数据结构。似乎数据结构是他们唯一希望毕业生获得的东西。 老实说,我对此感到难过。我写好的代码。我遵循标准的编码设计模式,但确实使用数据结构,但使用的是表面结构,如ArrayList,LinkedList等Java公开的API。但是,公司通常专注于数据结构的复杂方面,例如基于指针的内存操作和时间复杂性。 当时可能是由于我的Java背景,我仅在以对象,实例等面向对象编程的方式进行交谈时才了解代码效率和逻辑,但我从未深入到位和字节级别。我不希望人们因为我在数据结构中的这种知识缺陷而对我视而不见。 那么,为什么所有这些都强调数据结构呢?


6
为什么XML确切地称为“语言”?
我一直想知道为什么XML的名称为L。 XML本身不执行任何操作。它只是一种数据存储格式,而不是一种语言!语言“做”事情。 使XML“完成”工作(将其转变为某种语言)的方法是xmlns在其根元素中添加属性。只有这样,它才能告诉环境它的含义。 一个示例是XHTML。它是活动的,具有链接,超文本,样式等,均由触发xmlns。否则,XHTML文件只是标记节点中的一堆数据。 那么为什么XML被称为语言呢?它什么也没描述,什么也没解释,只是。 编辑:也许我的问题应该更广泛。由于当前的答案是“因为XML是以SGML命名的,而XML是以GML的命名的,等等”,所以问题应该是,为什么标记语言(如XML)被称为语言? 哦,还有WRT的近票:不,我不是在问X。我是在问L!

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.