这是《我是一只IT小小鸟》的读书笔记。
本书是由一群IT小小鸟——来自十几所院校,或男生,或女生;或科班,或半路转行——合著,书中详细讲解了他们在大学及研究生阶段的学习历程,有失意,有快意;有泪水,有欢笑。在失望中追求希望,在迷茫中辨别方向。大多与我们类似,大一、大二、研一读尤其受益,大三、大四、研二、研三也可看看他们的求职经历与经验。因而每个计算机系的同学,不论处于哪个阶段,都可一读。
听说这本书是大一刚开学,一位老师在讲座中推荐的,真正开始读却是在尘埃落定的大四。读完颇多感慨,如若当时就读了这本书,我的大学乃至我的人生或有不同?或许专业课会更扎实,不做PM而做程序员了?有趣的是,推免至本系的我,仍是要面对这本书,面对选择。已然错过四年,但剩下只得这个三年。疲奔在创业路上,PM的能力未见多精深,担子也卸不下。不过我既写到这里,可见有心,就看岁月与我谁饶过谁了。
本笔记算是总结摘录,且含个人主观的删减,建议还是去读下原书,书也不厚。
关于专业学习的思考与总结
1、什么才是真正的基础扎实?
我的理解是:
牢牢掌握大学课本中关于计算机核心课程的理论知识,深入实践; ;
对于该方向非常重要的技术思想、概念名词、技术要点有良好把握;如可随手写出快速排序、哈希查找等经典常用算法,熟记进程与线程的概念、差别;linux不仅只几条shell命令,C++不仅知道些语法,起码要了解一些常用的标准库,知道什么是STL,了解基本的OO思维方法;学过网络起码要用过socket;了解数据库不仅仅是会几个sql语句和背范式。
不要将自己局限在一个狭小的范围,要注意学习的扩展性,要努力去理解本专业常用的核心思想与技术,达到熟记于心的程度。
进行结构性思考:把本专业教学计划中所有非政治、英语、体育类的课程挑出来,通过网络或图书馆了解每一门课程在计算机知识结构大厦中所处的位置,解决的问题,各自之间是什么关系。
2、到底是什么让某些人出类拔萃?是深度。
每个人都会在简历上写会C++,但真正分析过SIT源代码的人并不多
每个人都会声称自己精通各类操作系统,但真正能说清楚Linux系统启动流程的人也不多
李想曾说,如果一个事情比别人多付出5%的努力,就可能拿到200%的汇报。
不管做什么,努力使自己比别人早走一步,多走一步。
精通这个词讨论了千万遍,归根结底就是深度问题。
3、ACM 刻苦练习,准备参赛
大部分时间用来练习编程,学习算法(每天坚持至少8小时,3个月);
仅仅是数据结构书满足不了acm的要求,MIT的openCourseWare 学习算法导论,顺便练了听力;
acm要求有较强的数学建模能力与coding能力;
最大的收获是对于一种陌生的算法或形式化的描述我能很快地理解,并用程序去模拟他的流程;
大多数看似非常复杂的算法都是由最基本的算法演化而来。
4、数学建模大赛
一个迷你科研过程,别人提出一个问题,出自不同领域而且目前没有得到很好地解决;参赛者用3天的搜集与查阅资料,针对问题提出合理的数学模型进行解释,通过实验得出数据进行验证最后写出论文;
能学会一些有用的数学知识,分析问题的方法,数学建模的一些技巧,学习如何快速地掌握一个陌生的理论并将运用在建模中;
团队:英文论文的写作,模型的分析及共识的推导(数学),问题分析与计算机求解(计科);
训练:做练习题,阅读并分析近几年mcm的outstanding论文;
交付一万多词的英文论文;
数学建模大赛经验:1不管使用哪种方法,先解决问题再说,搞定之后再想更好的解决方法,并对这些方法进行分析和对比。2方法上难以创新就拼细节。
5、切忌切记
切忌复杂,急功近利。假如以你的实力可以通过五年的时间成为一个领域的高手,你期望缩短到3年或更短,最终可能要用8、10年的时间,甚至永远做不到。
有英文版的书绝不看中文翻译的。
独立完成每一次课程设计和大作业。
关于技术面试
1、好的外企希望招聘到的学生
做事all in;
特别乐于思考;
充满活力;
具备一定的行业知识;
在面试准备时,应该充分了解目标企业,多思考,多关注框架等背后的东西;
谦虚、和善、乐于向别人学习和擅长理性思维是加分项;
2、面试心态
没有什么必须要得到,顺其自然,放松不急躁,冷静地思考;
化被动为主动:主动秀出擅长的东西,自信加分。
把面试官当朋友来看待,享受每一次过程,哪怕是被鄙视的过程。
3、小技巧
没有答上来的问题是否回去思考了,答案是怎样的?考察反思。
不能立即回答出优秀答案时候,分四步走,理解题目、原始算法、优化算法、复杂度/性能分析;
4、决胜心法
很多人觉得我找工作顺利,其实我三年前就已经开始四处收集求职信息,确定了自己三年后的职业定位。定位之后就开始锻炼这种定位所需要的各方面能力。
面试题怎么都那么熟悉?面试微软,别的同学说怎么那么难?我很奇怪,这些题《编程珠玑》上不都有吗?其实,看过《编程珠玑》的人没我想象的那么多,而我也是在书架上乱翻才偶然看到的。
面试题怎么还是那么熟悉?面试的过程其实平淡无奇,题目不是《编程珠玑》上的,就是《计算机程序设计艺术》上的,再不然就是网上贴出来的。(面google中国)
关于刘未鹏
写了《程序员》boost源码分析系列;
译书,如果觉得做不下去了,就硬着头皮坚持做,然后就会麻木了、适应了,那种望而却步的感觉会逐渐自动褪去。
英文原版书,啃完一本后,发现英文世界的技术资料那么丰富!wikipedia和英文书成为获取信息方式的tipping point。
他们的信奉和思考
1、可做可不做的事情做得越少,获得成功的可能性就越大。(李凌)
2、我偏爱资源软件的原因之一是他的理念与我使用软件的原则相契合:在不直接或间接侵犯他人合法权益的前提下,尽可能满足自己对计算机系统的知情权和控制力。
3、研习算法的目的不是掌握某类问题的特定解法,而在于思维能力的培养,有助于在经验之外偏数学、偏逻辑的实际问题时候,对求解的直觉和答案的理解。
4、做infoQ中文网兼职编辑,翻译ruby和java相关文章和新闻。勤动笔是好习惯,对于技术性的文字,有价值的内容往往比写作的文字风格更重要。但我一直认为,不能因此而忽视了技术文章或书籍文字质量。坚持原创技术写作,万涓成流。
他们研读过的书籍
1.谭浩强《C语言 程序设计》 和 K&R《C程序设计语言 》
2.《C++primer》
3.《thinking in c++,volume1》
4.严蔚敏 《数据结构》
5.林锐 《高质量程序设计指南:c++/c语言》
6.陈慧南《算法设计与分析》
7.《编程之美——微软技术面试心得》
8.《程序员面试宝典》(这本书上有些错误)
9.《算法引论》
10.《深入理解计算机系统》
11.programming pearls《编程珠玑》《编程珠玑2》
只需观察各大IT公司的面试题就知道这两本书的重要性——很多面试题都是从这两本书中例子和系统改编的。
12.structure and interpretation of computer program《计算机程序的构造和解释》
这是一本想要从更高层次认识编程的人的必读书。很多编程的基本概念都可以在这本书中找到直白但深入的讲解。
13.the art of computer programming 《计算机程序设计艺术》
计算机科学领域最为经典的一套书,哪怕细读一章也受用一生。
14.the art of unix programming《Unix编程艺术》
至少在可以预见的时间内,一个真正的程序员,必然是一个了解Unix环境和文化的人。这本书就是Unix世界的敲门砖。即使是Unix专家也能从这本书中学到很多。
15.code complete《代码大全》
the elements of programming style 《程序设计实践》
这两本书都是讲解如何构建良好的,易于维护的代码。他们的基本思想都是一致的,读者可以任选一本。
16.the pragmatic programmer《程序员修炼之道》
the productive programmer《卓有成效的程序员》
这两本书介绍了获得高生产率的方法和经验。并不只适合程序员,一切从事“知识工作”的人都可以从中获益。
17.how to solve it《怎样解题》
经典的介绍如何用系统的科学方法分析和解决问题的书。这是追求更好更快处理问题的开发人员必备书。
18.the structure of scientific revolution 《科学革命的结构》
阅读科学史有助于养成对技术敏感的的嗅探力和判断力。
18.godel escher bach:an eternal golden braid《哥德尔、爱舍尔、巴赫——集异璧之大成》
不可多得的横跨计算机、数学、语言学,艺术等学科的奇书。
19.cosmos《宇宙》
每次阅读这本书,心中的烦闷或狂妄都在广袤星河间骤然渺小不计。
记得当初读这本书读到缺氧,还坐过站。很能感受到那种疯狂学习的状态,然而头脑发热亦或缺氧总是容易的,坚持下来却太难。
“青春太宝贵,千万别浪费;要想不浪费,万事早准备。”
共勉。