追过很多新技术,迷茫于还有太多东西要学,有些找不到方向、不知所措。常在一个叫酷壳的网站上转悠,渐渐想明白了,其实学习技术也像看电影看书一样,要看就看经典的。我们的生命如此短暂,作为程序员的职业生涯可能会更短。与其追逐各种新潮的技术,不如把有限的精力投入到经典的技术之中。
平时酷爱看各种技术书籍,但缺乏系统的梳理。读书感悟都散落在每本书的字里行间和空白处。于是借着准备从最经典、最基础知识学习的机会,开始由底向上,系统地整理以前所学。
一、计算机数学
大学时认真学习了编程相关的课程,但一些基础课程由于不知道跟编程是什么联系所以失去了兴趣、没有学好。工作了两年,才慢慢发觉大学时一些课程的用处:微积分(分析算法性能时一些求极限)、线性代数(矩阵在三维转换中的作用)、概率统计、编译原理(理解源代码是如何编译、链接,最后被操作系统载入执行的)。现在虽然没有大块时间(其实也没必要)重新复习这些课程,但计算机相关的数学知识基本可以包含在下面两本书中:
可以认真学习这这两本书籍。如果阅读过程中发现不懂的,可以去翻阅大学课程中更基础的数学书。这样不会迷失在过多的理论书籍之中。推荐本微积分的课外读物,齐民友的《重温微积分》,看了一点感觉还不错。
二、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 一个操作系统的实现》。最重要的一点:Readthefuckingsourcecode!
N年寒窗苦读后,也许可以到达这个阶段,也许吧~
看到累了也别忘了放松一下,读一些小散文:
《代码之美》、《Java夜未眠》、《Unix编程艺术》、《疯狂的程序员》...
好了,列了这么长的学习计划勉励自己,希望对看到此贴的人会有些许帮助。
分享到:
相关推荐
Vibrator手机震动服务 - 小小程序员 - 博客频道 - CSDN.pdf,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
学东西,靠的是兴趣和努力,经过几个月的时间,从一个手机开发的愣头青,摇身一变成了可以自主开发一些实用的小软件和耐玩的小游戏的手机小小程序员。这就是我。 秉着共享原则,我把收集到得这些学习资料,发出来给...
之前一直有朋友说我的回答能整理成书籍了,一直偷懒没 做,最近有空仔细整理了知乎上的回答和文章另外也添加了一些新的内容,完成了几本 小小的电子书,这一本是有关于Python方面的。 还有另外几本包括我的一些数据...
一个程序员是如何从一名小小牛逐渐成长为大水牛的。
微信公众号:一个程序员的日常 在知乎分享已经有一年多了,之前一直有朋友说我的回答能整理成书籍了,一直偷懒没 做,最近有空仔细整理了知乎上的回答和文章另外也添加了一些新的内容,完成了几本 小小的电子书,这...
非科班出身程序员刷题 english-study 公式: e: (状1) 主(定1) 谓(状2) 宾(定2\状1) z: (状1\定1) 主(状2) 谓(定2) 宾(状1) 2019-01-01 公式的简单造型 1.A small bee from China is threatening the ...
基于arm平台6818开发板的简单停车刷卡小小系统源码+项目说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载...
本书是世界级VB专家Rod Stephens奉献给广大程序员的编程心得与忠告,是学习Visual Basic 2008编程绝佳的参考手册。本版对上一版进行了大量的扩充,新增了有关WPF、LINQ、UAC安全、WCF等方面的内容。书中的基础部分...
本次用到了5个canvas画布标签! map:用于绘制背景地图,基本上画上一次就不会重画。 main:用于绘制敌人与子弹,因为这两个基本上会一直变,需要一直重画。...本文是转载的,原作者是:无赖的程序员
《Scratch中文教程系列》和《Python零基础编程》由现任新加坡知名游戏工作室的两位资深程序员精心设计和讲解,除了编程以外,还融入了一些有趣的数学,物理知识。教程由浅入深,通过生动有趣的讲解和演示,带领大家...
软考经验谈如何轻松通过软件设计师考试,我的计算机学习过程是与考试同步进行的,参加了一系列大大小小的计算机考试有十余次,其中有成功,也有失败,最大的收获是不怕考试。从初、中级职称计算机考试开始,参加过...
小指的承诺一个很小的Promises库。... 小指的承诺: 轻巧经过测试使用密闭类型系统契约和throw / catch拥抱 Swift 语言包含不变的价值和价值转换的功能风格是Objective-C程序员学习Swift中函数风格的好方法可以
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
一开始学习C/C++的时候会以为,这个语言很严谨,在编码上不容许有任何闪失,不然编译肯定不通过。但其实和后续的C#和java等等语言相比,C/C++的规范还是非常非常宽松的。至少在指针类型各种转换中就能体现出来,让...
这个小小的自学Python课程将帮助您保持结构化和组织化,同时学习从入门到高级的Python概念。 小便笺 该课程计划在四个星期内完成(考虑建议的每日时间投入,您将在相应的一周内找到该投资)。 但是,如果某些程序员...
注意:这是笔记,不是书,不可能面面俱到。作者只记录认为有价值且非常重要...适合初中级程序员想要提升能力,想要晋升架构师岗位的私房菜。 请大家好好学习,珍惜机会,觉得不错的,捐助下作者表示鼓励和支持,感谢!
马拉松学习组 2015 潘帕联邦大学 (UNIPAMPA) 2015 年编程马拉松研究小组的存储库。 这里将放置一起解决的问题的... 几家大大小小的公司越来越多地寻找前马拉松运动员来雇用他们,例如谷歌(google code jam)、Facebo
本项目主要是采用低级API开发类(Canvas),对于初来乍道的J2ME程序员 非常具有学习性。项目是一个小小的射击类游戏,游戏过程可以过关,可以 有意识的加分,可以被敌机动态的跟踪;难道可贵的是游戏的学习性强。