面向对象的设计
这一条是有争议的,特别是如果你正在学习的编程语言并不面向对象,但是有大量的软件开发世界会按照面向对象设计的思维思考,所以你需要确保你了解它。
面向对象的设计是一种将复杂程序设计分解为单独的类或对象(类的实例)的方法,其中封装功能且具有特定的角色和责任。
在软件开发中,我们总是试图管理复杂性。
从对象的角度思考可以帮助我们做到这一点,因为它能让我们从一堆交互组件中定义并设计一个复杂的系统,而不是作为一个整体的试图解决整个复杂性。
现在的编程世界有着大量的函数式编程语言,但你在软件开发中找到的最流行的语言和模式,仍然深受面向对象设计和分析的影响。
你应该好好理解什么是类,继承的不同类型——何时使用它们——还有理解像多态性和封装等术语。
算法和数据结构
如果你上传统院校学习并想获得计算机科学学位的话,那么这是一个很大的考点。
算法是解决各种计算机科学/编程问题的常用方法。
例如,有若干常见的在程序上用于排序的算法。每一种排序算法都有一系列关于速度,内存大小要求,以及数据理想类型的不同属性。
计算机科学领域有很多这样的算法,并且理解如何变化这些算法来解决你可能遇到的棘手问题也很重要,当你解决现实编程问题的时候。
通常情况下,擅长这些算法可以让一个开发人员在1个小时之内就能解决可能需要另一个开发人员几天时间才能搞清楚的问题。
除非你熟悉和擅长算法,否则你甚至不知道已经有了优雅的解决方案在那里。因此,仅仅只为这个原因,我认为这也是一个值得掌握的宝贵技能。
数据结构也是如此,并且可以与算法结合使用。
有几个所有软件开发者都应该熟悉数据结构中的,包括:
•数组或向量
•链表
•堆栈
•队列
•树
•哈希
•集合
通过熟练掌握数据结构和算法,你可以轻松又优雅地解决许多艰难的编程问题。
当我开始编程的时候,我在数据结构和算法方面非常糟糕,因为我主要是靠自学的。
我一直都没有意识到它们的价值,直到我和一个名为TopCoder的网站竞争,而他们对数据结构和操作算法的了解使之有了很大的竞争优势。
很快,随着我遇到了一些我不知道如何解决的问题,我发现这些技能在真正的编程世界非常有用,而且解决起来相当简单——和有趣。
事实上,我认为这是软件开发最有趣的领域之一。解决难题并利用数据结构和算法来开发一个又干净又优雅的解决方案,真的很有意义。
至少到写这本书为止,目前最好的资源是Gayle Laakmann McDowell的《Cracking the Coding Interview》。
在这本书中,作者涉及了所有你需要了解的关于算法和数据结构的内容。
学习这些东西是一个挑战,但非常值得。这是可以让你超越众多同行的技能之一。大多数软件开发人员都不擅长这个领域。
如果你想通过如微软或谷歌这样的大公司的面试,那么你一定得掌握这个技能集。
开发平台及相关技术
你应该具备一些经验,并至少掌握一个开发平台以及与之相关的技术或框架。
我所说的平台是什么意思呢?