优秀的程序员应该具备两方面能力:
● 良好的程序设计能力:
掌握常用的数据结构和算法;
理解计算机科学的核心概念;
熟悉至少两门以上编程语言;
● 专业的软件开发素养:
具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码;
把握客户需求,按时交付客户所需要的软件产品;
理解现代软件开发过程中的核心概念。
和其它能力一样,程序设计能力和软件开发素养源自项目经验和书本知识。
项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的——尤其是经典图书,它们都能够拓宽程序员的视野,提高程序员的成长速度。
01.基础理论
编码:隐匿在计算机软硬件背后的语言。
这本书其实不应该叫编码——它更应该叫“Petzold教你造计算机”——作者Charles Petzold 创造性的以编码为主题,从电报机和手电筒讲到数字电路,然后利用数字电路中的逻辑门构造出加法器和触发器,最后构造出一个完整的存储程序计算机。
不要被这些电路概念吓到——编码使用大量形象贴切的类比简化了这些概念,使其成为最精彩最通俗易懂的计算机入门读物。
深入理解计算机系统(第2版):
这本书的全名是:Computer Systems:A Programmer’s Perspective(所以它又被称为CSAPP),我个人习惯把它翻译为程序员所需了解的计算机系统知识,尽管土了些,但更名副其实。
02.编程语言
C和指针是C语言的最佳入门书籍之一。它详细但又不失简练的介绍了C语言以及C标准库的方方面面。
对于C语言初学者,最难的概念不仅仅是指针和数组,还有指向数组的指针和指向指针的指针。
C和指针花了大量的篇幅和图示来把这些难懂但重要的概念讲的清清楚楚。
C程序设计语言是二十多年前的书籍,但它仍然是C语言——以及计算机科学中最重要的书籍之一。
它的重要性不仅仅在于它用清晰的语言和简练的代码描述了C语言全貌,而且在于它为之后的计算机书籍——尤其是编程语言书籍树立了新的标杆。
作为C++的发明者,没有人能比Bjarne Stroustrup更理解C++。
Bjarne在Texas A&M大学任教时使用C++为大学新生讲授编程,从而就有了C++程序设计原理与实践这本书——它面向编程初学者,既包含C++教程,也包含大量程序设计原则。
Java核心技术(即Core Java)并不算是一本特别出色的书籍。
示例代码不够严谨,充斥着很多与C/C++的比较,语言也不够简洁——问题在于Java并没有一本很出色的入门书籍。
与同类型的Java编程思想相比,Java核心技术至少做到了废话不多,与时俱进(Java编程思想还停留在Java 6之前),矮子里面选将军,Java核心技术算不错了。
Effective Java是最好的编程书籍之一,它包含大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的Java特性给出了充满洞察力的建议。
以至于Java之父James Gosling为这本书作序:***“我很希望10年前就拥有这本书。可******能******有人认为我不需要任何Java方面的书籍,但是我需要这本书。”***
CLR via C#是C#/.Net最重要的书籍,没有之一。
它全面介绍了.Net的基石——CLR的运行原理,以及构建于CLR之上的C#类型系统,运行时关系,泛型,以及线程/并行等高级内容。任何一个以C#为工作内容的程序员都应该阅读此书。
JavaScript现在可以做到客户端服务器端通吃,尽管JQuery之类的前端框架使得一些人可以不懂JavaScript也可以编程,但我们还是建议学习JavaScript从HTML DOM开始最为适合,因为这是JavaScript设计的初衷。
JavaScript DOM编程艺术系统的介绍了如何使用JavaScript,HTML,以及CSS创建可用的Web页面,是一本前端入门佳作。
JavaScript语言包含大量的陷阱和误区,但它却又有一些相当不错的特性,这也是为什么Douglas Crockford称JavaScript为世界上最被误解的语言,并编写了JavaScript语言精粹一书来帮助前端开发者绕开JavaScript中的陷阱。
和同类书籍不同,JavaScript语言精粹用精炼的语言讲解了JavaScript语言中好的那部分(例如闭包,函数是头等对象,以及对象字面量),并建议读者不要使用其它不好的部分(例如混乱的类型转换,默认全局命名空间,以及奇葩的相等判断符),毕竟,用糟糕的特性编写出来的程序往往也是糟糕的。
Python的入门书籍很多,而且据说质量大多不错,推荐Python基础教程的原因是因为它是我的Python入门读物——简洁,全面,代码质量很不错,而且有几个很有趣的课后作业,可以快速上手。
03.程序设计
计算机程序的构造与解释是另一本被国内大学忽视的教材,这本书和程序设计方法有很多共同点——都使用Scheme作为教学语言;都专注于程序设计方法而非编程语言本身;都拥有相当出色的课后题。
相对于程序设计方法,计算机程序的构造与解释要更加深入程序设计的本质(过程抽象,数据抽象,以及元语言抽象),以至于Google技术总监Peter Norvig给了这本书超高的评价。
04.算法与数据结构
C语言描述,我曾经认为它是最好的算法入门教材,但自从我读到Sedgewick的算法之后我就改变了观点——这本算法才是最好的算法入门教材:
使用更为容易的Java语言作为教学语言;
覆盖所有常用的数据结构和算法,并均给出其完整实现;
包含大量的图示用于可视化算法——事实上这是我读过的图示最为丰富形象的书籍,这也是我称其为最好的算法入门书籍的原因。
编程珠玑(第2版)是一本少见的实践型算法书籍——它并非一一介绍数据结构/算法的教材,而是实践性极强的算法应用手册。
作者(Jon Bentley)从他多年的实际经验精选出一些有趣而又实用的问题,然后展示了他解决这些问题的过程(分析问题,选择合适的算法,解决问题,以及验证答案)。任何程序员都可以从中获益。
通常来讲:
工作1~2年后会成为前端高级软件工程师,年薪可以达到15万以上。
工作3-5年后可以成为前端技术主管或者经理,年薪在15-50万之间。
工作年限5年以上,会成为互联网公司的技术总监或产品经理,年薪将达到50万-100万之间。
更多文章推荐阅读 【 学习企鹅圈:731771211 】 :
2020年Web前端开发工程师市场怎么样?学会什么技术才能拿到高薪
分享七年职业生涯心得,认清自己是否真的适合转行前端开发工程师
【项目实战视频+源码】20w前端程序员疯抢的成长大礼包
前端修炼之道 : 如何成为一名合格前端开发工程师?
前端的工作越来越难找,到底是不是前端领域已经饱和了?