软件开发者需要掌握的技能
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件开发者需要掌握的技能
现在,有这样一种主流观念,压垮了很多新手软件开发者,那就是你需要学习很多东西才能成为软件开发人员,并且很多人不知道从哪里开始起步。这里我会尝试着具体说明那些在你追求成为软件开发人员的路上将让你受益的必要技术技能。一篇文章当然不能详尽说明作为软件开发者,你可能需要掌握的所有技术技能,但是我会列出最关键的一些技术技能。一、编程语言我认为从这一条开始说起是最合适的。不懂编程语言,怎么能成为一个真正的程序员?不过,关于选择哪种编程语言去学习可能并没有我们想得那么重要这一点,请允许我一笔带过。相反,让我们谈一谈为什么我们要从一种编程语言开始,而不是试图去学习所有的东西。许多新手程序员会试图一次性或在第一份工作之前学习几种编程语言,以便于有备无患。虽然我认为你最终应该学会一种以上编程语言,但我不建议提前这样做,因为这只会导致混乱,并且会分散你需要学习的其他技能的精力。相反,我建议你应该深入研究,重点学习单一编程语言的来龙去脉,这样你才能对用这种编码语言来写代码信心十足。那么在你决定想要成为什么样的开发人员的时候,怎么样才能尽可能地独树一帜呢?二、如何构造代码在学习了一门编程语言之后
——或者最好是在学习的同时——我坚信,你需要知道的下一件事就是如何正确地构造你的代码。有一个很好的资源来帮助你学习这个非常宝贵的技能:Steven McConnell的《Code Complete 》。我所说的构造代码是什么意思呢?我的意思是,要写出好的,清晰的,易于理解的代码,不需要大量注释,因为代码本身就是一种表达方式。很多软件开发者在他们整个职业生涯都不曾去学习这个技能,这是不幸的,因为这是我——以及其他许多人——判断一个软件开发人员技术和能力的主要方式。良好的代码结构展示了对这种技艺的热衷,而不仅仅是为了完成工作。构建代码是软件开发真正的艺术部分,但它也是至关重要的,因为你和你的同事得花费相当多的时间来维护现有的代码,而不是编写新的代码。具体应该如何正确地组织代码我就不说了,因为我已经给出了一个很好的资源,但是要努力学习如何从一开始就写出好的、干净的代码,而不是事后学习这个技能。我只能保证,即使你是个新手,如果你可以写出好的、干净又简洁的、易懂的,本身就可以表达意思的代码,那么任何面试官看到你的代码都会觉得你是一个有经验的专业人士。并且在一定程度上,或者至少在这条道路上,因为你会将这个职业当作一种专业,而不是一份工作。
三、面向对象的设计这一条是有争议的,特别是如果你正在学习的编程语言并不面向对象,但是有大量的软件开发
世界会按照面向对象设计的思维思考,所以你需要确保你了解它。面向对象的设计是一种将复杂程序设计分解为单独的类或对象(类的实例)的方法,其中封装功能且具有特定的角色和责任。在软件开发中,我们总是试图管理复杂性。从对象的角度思考可以帮助我们做到这一点,因为它能让我们从一堆交互组件中定义并设计一个复杂的系统,而不是作为一个整体的试图解决整个复杂性。现在的编程世界有着大量的函数式编程语言,但你在软件开发中找到的最流行的语言和模式,仍然深受面向对象设计和分析的影响。你应该好好理解什么是类,继承的不同类型——何时使用它们——还有理解像多态性和封装等术语。四、算法和数据结构如果你上传统院校学习并想获得计算机科学学位的话,那么这是一个很大的考点。算法是解决各种计算机科学/编程问题的常用方法。例如,有若干常见的在程序上用于排序的算法。每一种排序算法都有一系列关于速度,内存大小要求,以及数据理想类型的不同属性。计算机科学领域有很多这样的算法,并且理解如何变化这些算法来解决你可能遇到的棘手问题也很重要,当你解决现实编程问题的时候。通常情况下,擅长这些算法可以让一个开发人员在1个小时之内就能解决可能需要另一个开发人员几天时间才能搞清楚的问题。除非你熟悉和擅长算法,否则你甚至不知道已经有了优雅的解决方案在那
里。因此,仅仅只为这个原因,我认为这也是一个值得掌握的宝贵技能。数据结构也是如此,并且可以与算法结合使用。有几个所有软件开发者都应该熟悉数据结构中的,包括:数组或向量链表堆栈队列
树哈希集合通过熟练掌握数据结构和算法,你可以轻松又优雅地解决许多艰难的编程问题。当我开始编程的时候,我在数据结构和算法方面非常糟糕,因为我主要是靠自学的。我一直都没有意识到它们的价值,直到我和一个名为TopCoder的网站竞争,而他们对数据结构和操作算法的了解使之有了很大的竞争优势。很快,随着我遇到了一些我不知道如何解决的问题,我发现这些技能在真正的编程世界非常有用,而且解决起来相当简单——和有趣。事实上,我认为这是软件开发最有趣的领域之一。解决难题并利用数据结构和算法来开发一个又干净又优雅
的解决方案,真的很有意义。至少到写这本书为止,目前最好的资源是Gayle Laakmann McDowell的《Cracking the Coding Interview》。在这本书中,作者涉及了所有你需要了解的关于算法和数据结构的内容。学习这些东西是一个挑战,但非常值得。这是可以让你超越众多同行的技能之一。大多数软件开发人员都不擅长这个领域。如果你想通过如微软或谷歌这样的大公司的面试,那么你一定得掌握这个技能集。五、开发平台及相关技术你应该具
备一些经验,并至少掌握一个开发平台以及与之相关的技术或框架。我所说的平台是什么意思呢?好的,通常它的意思是操作系统(OS),但也适用于其他可以充当类似于操作系统角色的抽象。例如,你可以是专注于Mac或Windows操作系统得Mac开发者或Windows开发者,你也可以是一名专注于特定的web平台的web开发人员。具体确切的关于平台是什么就不讨论了——不同的人会有不
同的看法——但这里我要定义平台为你开发的特定环境,它有自己的生态系统和特殊性。再者,这是另一个我认为选择并非那么重要的技术技能,只要你选择了一个就好。
企业通常会聘请开发人员针对特定的平台或技术开发软件。你作为iOS开发者将更容易找到工作,如果你专业于那个特定平台的话。这意味着要熟悉平台本身,以及开发工具,惯用模式,还有大多数程序员在为那个平台开发时会使用的通用框架。你可能会认为编程语言的选择决定了平台,但实际上事实情况很少是这样的。就拿C#举例。如果你是一个C#开发人员,那么你可以用这种编程语言为Windows,Mac,iOS,Android,Linux,甚至是嵌入式系统写代码。所以,不要仅仅只是选择语言;还要选择平台。
六、框架或堆栈除了学习特定的编程语言和平台,我高度建议去学习框架,或者更好的是,与之相配套的完整的开发堆栈。什么是框架?什么是堆栈?框架就是