首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何刻意实践软件工程?

如何刻意实践软件工程?
EN

Software Engineering用户
提问于 2011-11-12 21:21:27
回答 6查看 34.2K关注 0票数 52

我刚读完这篇最近的文章。这是一个非常有趣的阅读,它提出了一些伟大的观点。我特别想说的是:

不同之处在于他们如何度过这段相等时间。精英球员花在刻意练习上的时间几乎是普通球员的三倍--这是一项令人不舒服、有条不紊的拉伸你能力的工作。

这篇文章(如果你不想看的话)是在讨论小提琴演奏者。当然,作为一名软件工程师,我的思想转向软件能力。诚然,有一些很有天赋的人在外面,但是一次又一次,是那些通过深思熟虑的练习来扩展他们的能力的人,在他们的技能上真正变得与众不同。

我的问题是-如何去实践软件工程和计算机科学的“规模”?当我练习钢琴的时候,我会把更多的时间花在音阶上,而不是花在一首有趣的歌曲上。在开发软件时,我如何做同样的事情呢?

为了避免早期的答案,我觉得“在开源项目上工作”和类似的答案是不正确的。Sure...that可以提高你的技能,但是你也很容易被困在对你的整个工艺不重要的事情上。它可以成为学习“闪闪小星星”,永远不会演奏肖邦。

所以,我再问一遍--你怎么建议有人故意练习软件工程?

EN

回答 6

Software Engineering用户

发布于 2011-11-12 21:43:34

我们作为软件工程师所做的事情和小提琴家所做的事情(或者其他任何需要物理练习的事情)是有区别的。一个小提琴家花上几个小时有条不紊地练习,因为他们在教他们的大脑如何与乐器互动的特定模式。

实践软件工程也包括学习模式。你做的项目越多,你就会学到更多(希望)什么是有效的,什么是不成功的。没有编写伟大软件的标准配方(这就是为什么有些人把我们的职业比作“工艺”而不是纯粹的科学)。所以我的建议#1,写代码,然后写更多的代码。不要认为,如果你的工作是有趣的,它没有教你那么多。我说,选择一些有趣的东西,它会让你的兴趣更长,你会更快乐。

如果你不想加入一个开源项目的话,你不需要加入它。只要为自己设定一个目标,你就会感兴趣的事情,然后开始编码。你甚至不需要完成它,所以不要失望,如果一半的项目,你决定放弃它,去做其他的事情。最重要的是,当你离开这个项目时,你需要拥有更好的技能和更多的技术知识。

建议2,阅读实用程序员。这本书的主要内容是,就像你思考如何编写一个软件一样,偶尔你需要后退一步,回顾你的思考过程,思考如何编写一个软件。在你工作的任何时候,不要只是把它放在架子上然后继续前进,而是再看一眼它,想想你可以做得更好的方法。你不需要去重做,但是通过思考,你将锻炼你的大脑来识别我在介绍中提到的模式。

建议3,与其他热衷于编写代码的人交谈。听听他们做了什么,他们是如何处理事情的。向他们解释你在做什么。我没有几个朋友在工作,我只是周期性地走进他们的立方体,快速地勾勒出我正在开发的软件的设计。有时他们只是点头,但其他时候,他们可能会说,如果你把这个箱子搬到这里,摆脱这门课,你可以节省你自己两天的工作,并获得优势A,B和C。

建议4,在你做了几个项目并找到一些模式之后。回去读一些像著名的GoF书那样的书。如果您已经完成了一些工作,您将( a)认识到作者正在谈论的一些事情;( b)您将发现您可以以不同的方式来处理您的项目。

第五条建议,一定要不断阅读并挑战自己。永远不要进入我现在知道技术X的模式,因此我是专家。不管你认为你学到了多少,记住,有无限多的东西需要你去吸收,所以在大计的事情中,你仍然不知道那么多。继续阅读博客;学习一门新的语言。例如,我一直在阅读关于F#和函数式编程的文章,尽管我主要是用C++编程,并且我已经开始将函数概念应用到面向对象的代码中。在某些地方,这大大简化了多线程和数据同步的使用。

票数 27
EN

Software Engineering用户

发布于 2012-11-04 01:02:25

上面没有一个是软件工程。这一切都只是随意地进行编程。

软件工程(,SE)是一门涉及软件设计、开发、操作和维护的系统、严谨、自律的工程学科,也就是对这些方法的研究,即工程在软件中的应用。

特别是,当您应用工程技术时,可以设计软件。学习这样的技术,最好是学习相关的SE硕士学位。当你自学时,你可能会学到编程,但我无法想象你会独自学习工程。

例如:程序员来并开始编写代码、优化代码等等(对程序员来说,所有重要的事情都是代码,而不是代码)。复杂的项目往往是迟来的,预算超出了几个数量级,而且软件不能很好地解决需求。这就是所谓的软件危机。答案是SE纪律。

SE来了,并希望首先了解问题域。应用了一种工程方法,特别是需求工程( -> Requirements analysis -> requirements analysis -> requirements applied )。

RE的结果通常是一组模型,如上下文模型、行为模型和业务流程模型。从这些模型中,SE了解业务问题并设计了一个软件解决方案。

这种设计通常意味着SE将需求模型转换为基于组件的体系结构,然后单独为每个组件设计组件。这就产生了组件边界、组件接口和类的特定规范来组成组件。

下一步是访问这些(通常是自动生成的)接口并创建它们的实现。那个人可能是个程序员。最后,SE遵循软件验证,根据原始设计和需求对所有内容进行测试。

在SE中,项目通常有一个项目计划,允许工程师规划、控制和监视项目。特别是,软件是按时、按预算、按规格设计的。

在软件的实现阶段,为每个工件生成文档,并生成许多配置项(CIs)。这些需要以某种方式加以管理。通常,在SE中,有一个软件配置管理(SCM)存储库和变更管理。另一部分SE是软件过程(SP),即RUP,Scrum,DSDM,水晶,瀑布,.

SP必须有文档记录并严格遵循,如文档中所示,没有任何例外,因此结果总是可以重复的。(ISO 9000)。这指的是软件质量。

另一个SE主题是软件度量和评估,它允许您度量SP的效率、团队绩效、估计项目规模(LOC -代码行),即COCOMO、估计项目交付(人工日)等。

除了这个简短的答案,还有更多的东西要做。应用SE方法而不仅仅是编写代码是您实践SE的方式。

因为SE仍然是一个新兴的领域,因此非工程师自称工程师的情况发生了。除非他们正在应用工程方法,否则他们只是程序员。

有关进一步阅读,请参阅Ian和www.ieee.org / www.computer.org的软件工程。在这些资源中,SE是工程学科。在堆栈溢出和许多公司中,不幸的是,他们借用了术语SE,并将它作为编程的另一个名称。

票数 11
EN

Software Engineering用户

发布于 2011-11-12 21:42:55

想到的两件事是欧拉项目和谷歌的人工智能挑战。尤其是如果你用的是日常工作语言以外的语言,那么这些问题就有足够的限制来扩展你的能力,但也足够简单到有明确的方法。

今年我一直在做人工智能挑战,我发现最吸引人的是,这个问题很简单,可以用基本算法解决,但是如果你用天真的方式去做的话,你每次都会达到时限。你不仅要理解基本知识中死记硬背的部分,还要理解它们背后的根本原因,这样才能使它在有限的时间内发挥作用。

票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/119415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档