• 小小程序员的学习计划



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

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


    一、计算机数学

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







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


    二、C语言

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













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


    三、数据结构与算法

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










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


    四、计算机系统

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

    概述




    汇编语言







    操作系统







    数据库

    《数据库系统导论》




    编译原理




    网络







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


    五、具体平台开发

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







    《COM本质论》




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







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


    六、高级语言

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


    N、系统内核

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

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

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

    好了,列了这么长的学习计划勉励自己,希望对看到此贴的人会有些许帮助。

  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157904.html
Copyright © 2020-2023  润新知