小小程序员的学习计划


追过不少新技术,迷茫于还有太多东西要学,有些找不到方向、不知所措。常在一个叫酷壳的网站上转悠,渐渐想明白了,其实学习技术也像看电影看书同样,要看就看经典的。咱们的生命如此短暂,做为程序员的职业生涯可能会更短。与其追逐各类新潮的技术,不如把有限的精力投入到经典的技术之中。

平时酷爱看各类技术书籍,但缺少系统的梳理。读书感悟都散落在每本书的字里行间和空白处。因而借着准备从最经典、最基础知识学习的机会,开始由底向上,系统地整理之前所学。


1、计算机数学

大学时认真学习了编程相关的课程,但一些基础课程因为不知道跟编程是什么联系因此失去了兴趣、没有学好。工做了两年,才慢慢发觉大学时一些课程的用处:微积分(分析算法性能时一些求极限)、线性代数(矩阵在三维转换中的做用)、几率统计、编译原理(理解源代码是如何编译、连接,最后被操做系统载入执行的)。如今虽然没有大块时间(其实也不必)从新复习这些课程,但计算机相关的数学知识基本能够包含在下面两本书中:







能够认真学习这这两本书籍。若是阅读过程当中发现不懂的,能够去翻阅大学课程中更基础的数学书。这样不会迷失在过多的理论书籍之中。推荐本微积分的课外读物,齐民友的《重温微积分》,看了一点感受还不错。


2、C语言

学习过计算机的基础数学知识后,能够先不急于去看数据结构和算法。先静下心来,仔细学好C语言。相信对C语言更深刻的学习,会加深以后对数据结构和算法知识的理解。













用心作了《C程序设计语言》中的小习题,算是对C语言编程的热身了。这些书籍都很经典(听说 :),能够先仔细看一遍,之后再回过头来重读,相信到时会有更多的感悟。


3、数据结构与算法

掌握了数学基础知识,也学习了C语言,接下来固然就开始学习编程最核心的部分-数据结构和算法。《算法导论》和《计算机程序设计艺术》三卷固然很经典,但拜读以前能够先学习一些更加入门的教材。










要多作题,不只有利于接下来计算机系统的学习,还对往后找工做、作笔试题大有裨益。尽管有些枯燥,但若能坚持下来,绝对能提升本身的分析设计能力。


4、计算机系统

又是有些理论的东西,其实也能够先跳过这部分,直接学习下面更为具体的技术。但要想进一步提升本身,迟早都要回过头来系统的学习这些知识。高手都是有很强的系统性知识嘛~

概述




汇编语言







操做系统







数据库

《数据库系统导论》




编译原理




网络







从大学到如今,只有两次感受本身突破了瓶颈大幅度提升。一次是在一个项目中用了大量的T-SQL特性,解决了不少实际问题,于是对SQL有了更深的理解。另外一次就是对汇编语言及操做系统知识的学习。一直使用着Java,对底层系统的知识还停留在大学课堂上。今年初,先读了《深刻理解计算机系统》有了个大概了解,以后学习了汇编语言那两本书,紧接着就开始啃那本《本身动手实现操做系统》。虽然没有读完,但这一路走下来,两三个月内对汇编语言的基本语法、80X86 CPU结构、寻址方式、实模式和保护模式、进程信息块、页等等曾经课堂上的概念都有了实实在在的了解。也明白了那句话:真正的程序员是应该懂底层知识的。知道咱们天天对着编程的机器是怎样运转的,才会明白对编程的本质。


5、具体平台开发

终于能够在具体平台上开始编程实践了。Windows平台有不少要学的,微软的东西更新换代很快(追的好累,让人又爱又恨),但必定要把握重点。Windows平台上主要学习图形界面程序的结构,界面是怎样布局的,消息是怎样传递的等等。还有一些比较经典的技术像MFC、COM等,也能够简单学习一下。







《COM本质论》




重头戏是Unix/Linux平台的学习!Unix/Linux平台上有太多优秀的代码值得咱们阅读学习。在开始学习Linux平台上编程前,能够先装个Ubuntu虚拟机对Linux有个简单了解。掌握基本的命令,会写简单的Makefile和Shell脚本,会用GCC和GDB编译调试C程序。







还有本我的认为不错的入门书《Linux C编程一站式学习》。


6、高级语言

最后才是Java和.Net的学习。有了前面的学习过程,此时再学习高级语言应该是轻车熟路了。惋惜的是大学时却本末倒置了,学了C++和一些基础课程后都没怎么派上用场,以后就一直用Java开发,致使底层知识一点都不牢固真实遗憾~
高级语言的API、框架不少不少,固然书也不少了,就不推荐了。


N、系统内核

Linux内核源码不少,里面包含不少算法和设计,学习起来真的很难。但挑重点的学习了解一下,对提升编程水平仍是有很大帮助的。好比操做系统怎样经过Loader加载,进程的切换和调度等。学习Linux四库全书:《Linux内核设计与分析》、《深刻理解Linux内核》、《Linux内核源代码情景分析》、《Linux设备驱动开发》。再推荐一本《Orange’s 一个操做系统的实现》。 最重要的一点:Read the fucking source code!

N年寒窗苦读后,也许能够到达这个阶段,也许吧~

看到累了也别忘了放松一下,读一些小散文:
《代码之美》、《Java夜未眠》、《Unix编程艺术》、《疯狂的程序员》...

好了,列了这么长的学习计划勉励本身,但愿对看到此贴的人会有些许帮助。