注:根据自己粗浅的经验,给师弟师妹写了一篇文章,贴到此处。
一、计算机基础知识
一个典型的计算机专业本科学生掌握的主要有5方面,构成了计算机能力的基础。
- 一门静态语言
尤其以C++和Java为主。C语言是C++的完整子集,所以可以直接学习C++。C++的4个层次如表1。
表1,C++语言的4个层次
次语言 | 范围 |
C | 内置数据类型,数组以及指针等。 (pass-by-value更高效) |
Object-oriented C++ | 类相关性质(pass-by-reference-to-const更高效) |
Template C++ | 泛型编程(pass-by-reference-to-const更高效) |
STL | template程序库,containers,iterators,algorithms,function objects(函数对象)。 iterators, function objects(函数对象)是在C指针基础上构建,所以(pass-by-value更高效)。 |
Java是一门纯粹面向对象的语言,从历史沿革来讲,Java舍弃了C++中复杂的指针操作,实现了对象的自动释放,更利于学习。不过,C++较Java更底层,所以一般认为执行效率比Java高。Java的方向主要是分布式系统、网站开发(即J2EE),Android开发,桌面系统(即j2SE),不过,直接用java开发大型桌面系统比较少见。
- 数据结构
从简单的数组、堆、链表、队列、栈、哈希表,到稍有难度的二叉树、二叉搜索树、红黑树等树形结构,再到更复杂深度优先、广度优先、单源最短路径等图论知识。
编程过程中,基本的数组、堆、链表、队列、栈、哈希表等在静态语言中都已经被实现,开发者不用自己实现,不过实际上需要自己写数据结构的机会仍然比较多。
- 算法
不懂算法,不能称之为工程师。算法从最简单的快速排序、堆排序、归并排序等排序算法,到与数据结构相关的处理算法,再到更复杂的动态规划算法、贪心算法等。
就目前来讲,互联网公司的“算法工程师”职位一般特指大数据、自然语言处理方向的算法工程师。
- 操作系统
程序设计中的进程、线程、内存管理、运行时等核心内容都来源于操作系统,Windows、Android、IOS、Linux都是操作系统抽象的实现。
- 计算机网络
计算机网络需要知道TCP/IP参考模型,其中最核心的内容是传输层,尤其是TCP和UDP协议。
从以上5个方面的内容来看,最能衡量一个人编程能力的是数据结构和算法,最能衡量一个人对计算机理解的是操作系统,而熟练掌握一门静态语言是每个程序员的标配。下面是推荐书籍。
表2,书籍推荐
内容 | 书籍 | 备注 |
C++ | 《C++Primer.Plus》,作者Stephen Prata,适合入门和深入。 | 集成开发环境(IDE)可以采用“code:block”,适合学习语言本身;Visual Studio,适合做项目。 |
Java | 《Java 7入门经典》,作者Ivor Horton,适合入门和深入。 | 集成开发环境(IDE)选择Eclipse。 |
数据结构和算法 | 《算法导论》,英文名《Introduction to Algorithms》,作者Thomas H.Cormen | 虽然叫做“导论”,却非常丰富,包括了算法和数据结构两方面内容,是MIT计算机教材。翻译很滥,英文看起来很过瘾,建议中文和英文对比着看。 |
操作系统
| 《现代操作系统(第三版)》《Modern.Operating.Systems,3rd.Edition》,作者Andre S.TANENBAUM | 重点是理解宏观概念,不必拘于细节。可以中英文版本对比阅读。 |
计算机网络 | 《计算机网络》,作者Andrew S.TANENBAUM | 适合全面了解整个计算机网络 |
计算机网络 | 《Java网络编程精解》,作者孙卫琴 | 2007年的一本书,比较旧。可以练习Socket编程。 |
二、 Android开发
任何一个只懂Java语言的本身开发者都可以从事基础的Android开发,不过会遇到更多的问题。
Android开发的参考资料基本都翻译自Google提供的官方指南和培训。但对于初学,可以采用的入门教材是李刚的《疯狂Android讲义》,要注意的是其中的开发环境仍然是Eclipse,而新的Google官方集成开发环境Android Studio已经更新到了2.0版本,非常友好。
最好的开发学习资料就是Google官方指南。其中Tools是讲解Android Studio的安装使用的,Training是培训课程,API Guide是相关API的讲解。
三、 技术发展
计算机行业知识更新速度很快,尤其是互联网行业竞争激烈,需要不断保持学习状态。随着年龄的增长,可能会力不从心。一旦出现这种情况,可能需要转型成产品经理、项目负责人、技术负责人等几个方向,
很多如果一直从事技术工作,我总结从业者技术进阶有几个阶段。
- 码畜
只会一些简单的业务代码,以量取胜,人员基本来自于各大培训机构,人员构成大多是高中、中专等辍学者,另外一批是羡慕互联网高薪,轻率转行却没有打下基础的人员。
- 码农
具备基本的计算机基础知识,对相关领域比较熟悉,但是仍然停留在API调用阶段,不熟悉设计模式、软件架构等抽象内容,英文单词是“developer”,也可以成为“API小王子”。
- 程序员
英文单词是“Programmer”,已经跨过了API调用阶段,熟悉多线程,会独立写核心库,对设计模式和软件架构比较了解,可以独立完成软件设计和编码。
- 架构师
熟悉某方向软件开发的方方面面,可以领导团队进行技术选型、项目开发等工作。
- 技术总监
自己体会。