其实找工作之前一直很忐忑,或者说不是很自信,因为各种传言说14年就业难。实验室的项目逼的有些紧,在四川做项目,腾讯实习面试都错过了。4月底回到学校给实验室申请不去实验室,准备看书。----此为题。
一、毫无亮点的自我介绍
二本师范类本科,大学四年,只学会了MFC。用MFC做了几个垃圾的不能再垃圾的管理系统。没有看过任何一本经典书籍。当时就准备考研,考到了华科。
到了实验室,发现实验室对自己完全放养的,不干涉自己的发展,自己有疑问可以问老师,老师会解答。但是具体怎么学还是要靠自己。在网上搜集资料,看windows内核方面的东西,绕了很多弯路。无意间看到了一篇讲程序员怎么升级的博客。里面提到了多读经典书,不要读国内的书尤其是XX天精通XX,XX从入门到精通一系列的书,当时就把VC详解给甩到了一边。在豆瓣上找7.5分以上的书。
开始了梳洗脉络,重练武学的过程。研一的时候要助教,当时活很轻松,就坐在办公桌上看书《C++ primer》和《C和指针》。跌跌撞撞的入了门。感觉很菜的时候,实验室要让参加项目,我做端口控制。期间把《windows核心编程》过了一遍。驱动层的完全不懂,在网上很是推荐《windows驱动开发详解》这本书,买了之后才发现大部分是对DDK开发文档的翻译,很是失落。偶然的逛论坛的时候看到了《寒江独钓》这本牛书,才堪堪入了门。这时候已经下学期了,实验室让我主导负责特种木马检测研究的项目,花费时间很久,但是给我的感觉确是杀毒这方面是一个巨坑,一个完全没有市场的地方。被数字公司流氓了这么长时间,杀毒市场不再天真。转身回想,自己的确站错了队。决定学习linux,当时实验室就一个学长研究linux,而且他看一本linux一站式编程,我粗略了看了一下,基本上是在讲C语言;然后在书架上翻出来暑假买的《鸟哥的linux私房菜》对比了一下,还是鸟哥的牛逼,还没看完的时候,实验室准备外派我去四川做项目,项目周期就是研二一年。而在去之前有2个月的准备时间,把《Effective C++》,《C专家编程》,《unix高级环境编程》《深度探索C++对象模型》《STL源码分析》占了半箱子的空间,问我徒弟借他的kindle存了几本大头部的书《C++标准程序库》《C++ primer》《C算法》《程序员的自我修养》《深入理解操作系统》,在四川的一年中一般是下午5-6点下班,自己做饭花一个小时,看会电视(没有网),最后抽空看一下书,其实当时完成的并不理想,kindle里的书只看了很少很少。
二、发奋的起源
从四川回学校之后,刚刚是腾讯离开武汉。实验室4个人拿到了腾讯的实习。当时阿里还没开始,准备发力阿里。天不从愿的是,阿里笔试委托给51job的人经办,我报的安全岗位,笔试时间一个小时,试卷单独出的,而51job的工作人员把我安排到软件测试的位置上,发下试卷我看了一下一个小时做完很有难度啊,然后问了一下工作人员试卷搞错没,一个小时怎么可能做完?得到的回答是你做你的就是。一个小时过后工作人员说安全的时间到了赶紧交卷。当时还没做完,就郁闷的交了试卷,准备回宿舍。回到宿舍没过多久,51job的人打电话说,不好意思把你的试卷发错了,你有没有时间重做一下? FXXX
好吧,周围的人都去实习了,剩下我和江南烟雨苦逼的娃相依为命。左思右想自己的优势和劣势,感觉做windows方向不是太合我口味,windows经常坑程序员,2年一个新的开发环境,一个操作系统的迭代,win 32 api一变再变,发觉自己的经验得不到长期的梯度积累。又想了一下linux,改动的仅仅是内核,一般编程内核态的api是不影响老旧的程序的,这样程序员可以更容易的积累经验。我打算彻底的叛变了。
和江南建了一个群。订了一个学习计划,讨论了一下学后台开发的可能性。
三、书单与执行力
语言经典书:
C:C程序设计语言(K&R)->C和指针->C专家编程->C陷阱与缺陷->你必须知道的495个C语言问题
C++: C++ primer -> effective C++->深度探索C++对象模型 ->stl源码分析->C++必知必会
java:java编程思想->java并发编程->深入理解Java虚拟机:JVM高级特性与最佳实践
算法经典书:
算法导论->数据结构与算法分析(维斯)->编程之美->剑指offer
系统经典书:
无关平台:
深入理解计算机操作系统->编译原理(龙书)->程序员自我修养
TCP/IP协议详解v1
linux:鸟哥的linux私房菜->unix高级环境编程(必看,熟读,完全消化)->unix网络编程(卷1&卷2)->unix编程艺术(进阶)->linux shell脚本攻略(短小精悍)->linux内核设计与实现->深入理解linux内核
windows:windows核心编程(必看)->深入理解MFC(经典)->windows内核情景分析(上下)->寒江独钓windows内核安全编程
视野:
linux多线程服务端编程
深入理解nginx
深入剖析nginx
调试:软件调试的艺术(强烈推荐!!)
设计模式:headfirst设计模式(强烈推荐!!)
linux系列的书基本上是和江南一起看,晚上一起讨论的。最后看完apue之后我提出要搞一个线程池,我写了几个线程池的必备条件,然后我用条件变量实现,江南用信号量实现,如此等等
执行力可能都是头疼事,一个好的基友会帮助你很多,有疑问提出了大家讨论,讨论过程中可以学习到书本上没有的知识,笔记共享(是的,我和江南的onenote笔记是互相共享的),学习的进度是十分可观的,消化知识的速度也很快。实战经验是一般互相提需求实现,动手能力也相应的增加了。
其实看这么多书,最重要的还是灵活的运用,也就是知识的迁移能力,这方面要刻意的锻炼:例如,你看完了unix高级环境编程后,应该梳理一遍笔记,然后自己尝试动手写一个demo例子把里面重要章节的知识串起来,你可以写一个线程池(9,10,11,12),然后用这个线程池实现生产者消费者问题,完成一个聊天服务器,给这个程序写一个守护进程,监控程序的运行状态……
四、基友是无价的,自信是面试的不二法宝,基础牢固是自信的基石。
看书多是基础的基础,但是有好基友一起学习是真正无价的。
不用看什么面经笔经,那些不是太重要,重要的是把自己的基础打牢,自信满满的,震住面试官。
一个肚子里全是干货的你,加上信息满满的脑子,好吧,我无法想象你的破坏力了。。。
君不过万里征程腾高路,只愿枝鹤溪头盼归家。君得意高朋越江穿水散四方,不忘青头高歌埋头苦。
还等什么呢?赶紧勾搭你的基友,一起看书讨论,收割offer!!!