抉择

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtNiS7XWEa9XKyHXWefT6uNAJJfzg4UpbZZC47ktEuXEV1YRSLRf9E9u5YSU79acJ/py7afsYurbHJ/M+9f926N+Gvu/4uZNyG1zD3S/pEuWF8QZmdJJtccnI6WQyLdVW3NnsZ94H/jAzeZBJlTXfSzqkgyEbJygHd1UVAxkiAV7Y2pD64OL6kjcOfCczOcaC0FVk3NKLNoEDvOhN0RBqCfSPCA3WOhBLsYL5KCSaBbKiDU329lmvXyVVVkyULsHG+vY2y6al+4DAZeZKhcurrcghQVFk3M0dTVk6iClB2h+d2tVox3sZx4mkY/kwpY3s9kApnhAVhu8p1iau4cvl4Q== xuben1

最近的确非常迷茫,一方面,自己在单位挺受重用(一直在做项目负责人),另一方面,自己的确需要尽快让工资翻番。在面试过程中,开发方面的要求一次次被提及,要么是丰富的C#经验,要么是Linux,C及JAVA经验。总而言之,要做测试主管,光有测试经验不够,光有管理经验也不行,开发必须很强。

这恰恰是我一直以来的短板和痛处。但是,我不可能一辈子待在这里,做着微软的小三,等着自己的头离职自己做老大。还不说这里面风险有多大,就算做了这里的老大,薪资方面也远远达不到我的要求。

目前摆在我面前有几条路:

一、 留在公司:

1、  继续在团队待着,学习管理方面的知识,并不断晋升,真正进入公司管理层——这需要时间、机遇、耐心和情商的不断提高;

2、  先在团队待着,然后总结经验,写书、PPT,录视频,从兼职讲师做起——这比较符合我的兴趣,而且国内最缺少的就是真正的测试高手。目前的测试员分以下几类:

a)       暂时做不了开发的人:技术不过关,暂时做着测试等机会;

b)       分不清测试开发的人:尤其是白盒测试及单元测试员,觉得自己做的就是开发;

c)       混日子的人:不知道何为测试,只知道埋头拼命执行测试用例的人;

d)       闲杂人等:各种各样贩夫走卒;

总而言之,目前国内测试业就是个老弱病残收容站,缺少真正钻研测试理论的人,缺少真正理解测试框架的人、缺少真正深入底层挖掘问题根源的人。而我,处在Embedded windows团队里,周围的资料一旦善加利用将是无尽宝库。而微软的测试实践总结起来则是一套行之有效的指南,再加上自己深入学习的测试理论和知识,堪称完美!

二、 跳槽:

1、  学一些编程的皮毛应付面试,先跳过去做主管,待遇翻番再说——这样我将越来越浮躁,塘子也将越跳越小,最终混混噩噩;

2、  不计较待遇,先找一家底层开发的团队(如windows或linux开发),然后用一到三年的时间狂学底层,C语言,操作系统,数据结构和算法——这样我会成为一个技术高手,不再惧怕任何技术面试;

正好现在是进联想的关键时期,先用这个激励自己狂学一下linux驱动开发。

无论进与不进

3月7~4月1:好好总结MS的工具(因为流程、规范和软技能可以后面回忆,但工具一离开就忘记);

  • 不进,4月1~6月30:狂写,将自己总结的东西整理成类似《杜拉拉升职记》或《大话设计模式》类的书籍,发表出来;
  • 进了,4月1~12月31:一边狂学,一边总结,年内整理完毕发表;

事实上,没必要一味地用开发的要求要求自己,倒不是说不愿意受累,而是需要将底层、数据结构和算法运用到测试方面来——走别人的老路永远成不了事,要特立独行,做自己。一方面,拼命学习底层、数据结构、算法和测试理论;另一方面,要将这些理论与测试实践相结合,深挖并举一反三,反思总结并写到书里,自己也会越来越运用纯熟。

下面是一些学开发的人的总结,对测试很有指导意义。相同点在于,我们都必须深入底层而不是流于表层。不同点在于,我不能一味地学开发所需要的东西,尤其是我不擅长的东西,而应把时间更多地放在和工作相关的知识上(如windows程序设计和win32编程等有助于我掌握核心技术;算法导论和数据结构有助于我设计测试用例及场景;而且要拼命地阅读测试方面的理论,尤其是英文版,然后结合实际需要进行实践方面的总结)。

还有就是学习上的投入,光是上下班地铁上阅读远远不够,我需要充分利用工作时间,并在回家后迅速投入学习状态。全身心地投入,发疯一样地学习,每天练习到想吐才行,现在的我,还远远不够努力!

1.所谓《原理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。极端认真的学生背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头的格式等等,但是忘了路由的原则,忘了TCP/IP协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学;

2.死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你根本不需要对的C++ 语法太关心,动手编程就是了,有不记得的地方一查MSDN就立马搞定。我有个结论就是,实际的开发过程中对程序语法的了解是最微不足道的知识;

3.一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。但在IT领域内的现实就是这样,越容易掌握的东西,学习的人越多 ,而且淘汰得越快;

4.基础的课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个linux(这是许多人嘲笑理论课程无用的原因),但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK的编程)来说甚至是不可或缺的;

5.假设学习VB编程需要4个月,学习基础课程和VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习后者,再来学VB,也许你只需要1个是期就能学得非常熟练;(如果总是学VB,C#,JS这样的东西,一年又一年,时间花了得不到应有的提高)

6.学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质;

7.计算机体系结构和汇编语言:关于体系结构的书遍地都是,而且也大同小异,倒是汇编有一本非常好的书《80x86汇编语言程序设计教程》(清华大学出版社,黑色小 面,杨季文著)。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。

7.计算机操作系统原理:我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《In side Windows 2000》;

8.数据结构和算法:我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C++版的,但我觉得没有必要。C++的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的;

9.软件工程-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获。

10.Windows 程序设计:《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。在这本书。中,没有C++,没有GUI,没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。在学完了它以后,你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要;

11.每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER;

12. 真正值钱的项目,是海量数据,专业性极强的分析系统,真正值钱的技术人才,也要从数据计算处理分析这里着手。所以一定要学好数据结构和算法;

13. 我看了大量这样的例子,然后结合自己实际情况进行总结,才发现了问题所在!基础太薄弱!!!正是这个原因使我现在学习非常吃力。看看我这一年学的都是一些流行的开发工具,比如vc, vb, dreamweaver, jbuilder, oracle等等,而我却真正的忽视了对数据结构和算法、windows程序设计、汇编、编译原理、操作系统等等这些基础课程的学习,一上来就学c++,java,vba,面向过程编程基础不牢固,直接学面向对象,试想一个在大学上只学了两本书的人直接学这些流行的开发工具,结果会怎么样?而且是每门课学的时间都不长,这个月dreamweaver,下个月就jbuilder,再下个月就oracle了,试想要精通asp,java,数据库原理需要多长时间?我们是刚刚学点皮毛就学这些东西,岂不是在沙地上盖高楼,早晚有一天会挎掉的,而且盖得越高,损失也越惨重!而我当初并没有意识到对基础理论学习的重要性,现在真是后悔;

14. 先说象棋,会下棋的人都知道,下棋分开、中、残局三个阶段,要想学棋并想成为一名高手的话,必须先出残局开始学起,然后是中局,最后是开局。从开局学起的人很难有大的发展。这是我的切身体会,我记得我刚开始学棋的时候,几乎没看过书,都是实战实战再实战,从实战中汲取营养,总结经验教训,等我到达一定阶段时,我爸爸就每天给我摆棋式,先练杀法,每天几个,当时有一本很经典的书《象棋杀着大全》,有400多页吧,我爸就天天给我摆,让我破解,不看到结果不许动手,最后都把这本书都翻烂了。然后开始摆残局,接着是中局。对象棋有研究的人会发现,中残局功夫是最难练的,也是最能看出一个人象棋水平的高低。等我到了一定水平后,才自己开始打谱学习开局,看别人的对局选,我发现我对开局的理解比那些上来就学习开局的人更透彻,记得也更牢,而且还能指出其中的错误并且提出自己的观点,有时我看完一本开局书,书上会记很多我自己的体会,试想如果没有良好的基本功的话,是不可能做到这些的;

15. 再说编程,如果把学编程也分成三个阶段的话,那么残局就是基础,包括操作系统、汇编基础、离散数学、编译原理、计算机图形学等等,而中局就是c语言(不是特定的)、数据结构和算法等等、而开局就是目前的各种的流行开发工具吧,包括vc,vb,delphi,jbuilder,dreamweaver等等,如果"中残局"没有打好,只学"开局"是永远也成为不了高手的,而且"开局"总是随着时代发展而改变,不断有新的开发工具出现,落后的"开局"将永远被淘汰,而相对来说"中残局"是不会有太大变化的。而"中残局"和"中残局功夫"两者又不太一样",我个人认为"中残局功夫"指的是编程思想,一个好的编程思想不是一朝一夕可以练成了。如果掌握了打下了扎实的"中残局"基础,练就了一身过硬的"中残局功夫",那么在学开局就相当容易了,网上经常有这样的评论,比如:"如果学C一年,那么学vb之需一个月,如果学vb一年,再学C时间可能超过一个月","学C++三年,再学JAVA只需一个月"等等是同一个道理;

16. 要想在编程方面往更高更深的地方发展,必须打好基础,苦练内功,为此我打算从C语言开始学起,然后是数据结构和算法*汇编*操作系统原理*windows程序设计*C++程序设计,之后要看很多国外经典书,《C++ primer》,《C++编程思想》等等,然后再选一个合适的开发工具,虽然会很慢,但我会踏踏实实的学习,再也不盲目跟风了;

17. 在这里主要做的是一些交换网管系统,在这期间我跟PM学了不少东西。熟悉了HW,ZTE的很多产品,以及COBAR接口规范。私下还对7号信令做了比较详细的阅读,而且对很多网络协议有所了解了,比如SNMP,RIPv2、OSPF、IGRP,还学会了怎样使用CLEARCASE等工具。但是,最大的收获莫过于对UNIX的学习了。在这里有很多UNIX机器,HP*UNIX ,IBM*AIX,SUNOS 等等。。。

每天下班后我没有直接回家,而是留在了单位telnet到SUNOS上,开始了我学习unix的计划。几乎天天都是10:00以后才离开单位,搞不懂的就问人或者在网上找资料。回家以后,我继续在linux上学习一直到转钟。这期间我真的学了很多,跟windows上写程序完全不同了,似乎更关心细节,更关心操作系统了。经过大约3个月的摸索,终于对unix有所了解了,觉得好多东西豁然开朗。进程通讯,进程管理,页面置换,信号灯,线程池这些东西是我在windows下写程序从未接触过的。

觉得学习unix真的很幸福,每天进步一点,会让我睡得踏实。把《unix高级环境编程》学完后,我开始慢慢的请教前辈,有关嵌入式的开发的问题。慢慢学着分析内核情景,裁减内核,底层的东西让我觉得好奇。

18. 实际上优秀程序员和一般程序员拉开档次很大一个程度上就是取决于对数学的能力。一些项目有时需要很复杂的数学建模和利用数学对于系统效率进行分析,而这些项目对于一般的程序员是很困难的。正确应用数学知识有时候能使你的程序的效率产生质的飞跃。

19. 其次就是要对数据结构引起足够的重视。如果说计算机专业的学生与非计算机专业的最根本的差别绝对是数据结构(数学大家都一样学了,主要看你自己学得好坏)。对数据结构的掌握与运用能力是衡量你编程能力的一个很重要的指标。有的人对于看了链表,栈,树,广义表这些东西就头痛。然而这些东西往往能使你的程序的效率比别人高出百倍。

20. 当时面试的题目是一个公司的资金管理项目的一个问题,要求每个人都在思考后给出自己的设计方案。其中比较核心的一个问题就是要计算一个资金最小波动值的问题,给出的数据量相当大,对效率要求很高。对于整个程序的面向对象化的分析我们几个都是差不多的,毕竟这些东西在学校里是很重视的,而且不是真正的难点。然而到了最关键的问题时其余的人都卡壳了,有两个是用简单的双重循环,时间复杂度(N^2),惨不忍睹。还有一个在冥思苦想了好一阵以后说用树,具体技术细节又讲不清楚,效率分析也很马虎。只有我当时很快就给出了采取AVL树的方案,并且利用高等数学推导作出了很详细的效率分析和时空换算,并提出了引入汇编的方法。很自然的我得到了这分工作。

21. 当你能够比较自如的用C编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自己要多用心)。数据结构你可以一点一点漫漫看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。学完C我认为接着最好学习汇编。这个或许有许多人都会反对,然而我个人认为这样是很好的。从最基本的DOS汇编开始,买本《IBM PC汇编程序设计》(清华黄皮)一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。

22. 后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的(相信我,绝对没错)如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习C++了。学习前一定要有个正确的认识,那就是C和C++是两个不同的东西。学习C++是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C++和C相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构放在同等重要的地位。我就见过有的人都大学毕业了还搞不懂virtual到底是怎么一回事情。其实我认为学到这里你已经为你成为一个优秀的程序员打下了很好的基础,你已经能够应用C++,懂得面向对象程序设计,对数据结构掌握很好,掌握汇编和编译原理。

23. 接下来的学习就是基于操作平台的了,一般是先学windows(Microsoft毕竟是老大),先学win32api,搞请windows基本消息机制和原理,有汇编基础基本上不会碰到什么困难。其实只要会了API,其余什么MFC,VCL都是囊中之物了,都不过是对于API的小装而已。VC,C++Builder都可轻松拿下,这只是开发工具的问题。以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了。我在这里强调的是前面的基本能力的学习,后面操作平台虽然知识体系庞大,然而毕竟比较死,更好掌握。最后编程能力的高低主要还是有以下几点决定:

a)       编程的习惯

b)       数学能力(包括逻辑思维,分析问题的能力)

c)       对数据结构的认识能力

d)       经验的多少(包括多使用语言的掌握能力)

24. 记得我读博时写的Othello对弈软件获得了世界冠军。当时,得第二名的人认为我是靠侥幸才打赢他,不服气地问我的程序平均每秒能搜索多少步棋,当他发现我的软件在搜索效率上比他快60多倍时,才彻底服输。为什么在同样的机器上,我可以多做60倍的工作呢?这是因为我用了一个最新的算法,能够把一个指数函数转换成四个近似的表,只要用常数时间就可得到近似的答案。在这个例子中,是否用对算法才是能否赢得世界冠军的关键;

25. 虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快增长,价格也在不断下降。可我们不要忘记,需要处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据(照片,视频,语音,文本等等)。日益先进的记录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科学研究方面,随着研究手段的进步,数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学习、语音识别,都需要极大的计算量。在网络时代,越来越多的挑战需要靠卓越的算法来解决;

26. 在互联网和手机搜索上,如果要找附近的咖啡店,那么搜索引擎该怎么处理这个请求呢?

最简单的办法就是把整个城市的咖啡馆都找出来,然后计算出它们的所在位置与你之间的距离,再进行排序,然后返回最近的结果。但该如何计算距离呢?图论里有不少算法可以解决这个问题;

这么做也许是最直观的,但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆,那这么做应该没什么问题,反正计算量不大。但如果一个城市里有很多咖啡馆,又有很多用户都需要类似的搜索,那么服务器所承受的压力就大多了。在这种情况下,我们该怎样优化算法呢?

首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子(grid)”,然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。

问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这种情况下,我们应该把市中心多分出几个格子。更进一步,格子应该是一个“树结构”,最顶层是一个大格——整个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底

层的格子里搜索结果不多,用户可以逐级上升,放大搜索范围。

上述算法对咖啡馆的例子很实用,但是它具有通用性吗?答案是否定的。把咖啡馆抽象一下,它是一个“点”,如果要搜索一个“面”该怎么办呢?比如,用户想去一个水库玩,而一个水库有好几个入口,那么哪一个离用户最近呢?这个时候,上述“树结构”就要改成“r*tree”,因为树中间的每一个节点都是一个范围,一个有边界的范围(参考:http://www.cs.umd.edu/~hjs/rtrees/index.html)。

通过这个小例子,我们看到,应用程序的要求千变万化,很多时候需要把一个复杂的问题分解成若干简单的小问题,然后再选用合适的算法和数据结构。

27. 传统的并行算法运行时,效率会在增加机器数量后迅速降低,也就是说,十台机器如果有五倍的效果,增加到一千台时也许就只有几十倍的效果。Google最资深的计算机科学家Jeff Dean认识到, Google 所需的绝大部分数据处理都可以归结为一个简单的并行算法:Map and Reduce(http://labs.google.com/papers/mapreduce.html)。 这个算法能够在很多

种计算中达到相当高的效率,而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容错性能异常出色,就算一个server farm里面的机器down掉一半,整个farm依然能够运行。正是因为这个天才的认识,才有了Map and Reduce算法。借助该算法,Google几乎能无限地增加计算量,与日新月异的互联网应用一同成长。

28. 李开复给程序员的七个建议:

(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。

(2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习C语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。

(3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。比如,学会了C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能真正掌握。

(4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。 尤其当你对一些“数学密集型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。

(5)培养团队精神,学会与人合作。今天的软件工程早已经不是一个人可以单独操作的,而必须靠团队合作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。

(6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新,动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而就的。

(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。不要急于去一个要你做“头”而独挡一面的地方,因为向别人学习才是你的目的。找工作也是一样,不要只看待遇和职衔,要挑一个你能够学习的环境,一个愿意培养员工的企业,一个重视你的专业的公司。最后,还要挑一个好老板。

29.编程不仅仅是你对语法的掌握,你还要把各种技术混合到里面,这样才叫编程,你编程的时候,你应该问问自己,你的程序有算法吗?你的程序写的够简单吗?速度足够快吗?占用空间足够少吗?代码写的规范吗?语句写的标准吗?你的程序之间的结构合理吗?你类定义的合适吗?方法和属性合理吗?接口合理吗?等等等,包含很多东西!这就是高级程序员为什么赚这么多钱!要付出相当大的脑力劳动!调试对你也很重要,一个程序高手,也是调试专家,其实调试很多方法,但大多数都是实践中得到的!

30. 用一个月的时间看完了 William Stallings写的《操作系统——精髓与设计原理》,感觉和自己当初看陈向群写操作系统完全不一样

31.看看linux内核设计与原理深入理解linux内核,了解linux内核是怎么设计,为什么会这样设计,我结合自己现在的情况把这两本书的关于存储管理的基本看完了,然后在去看linux内核源代码情景分析的存储管理的源代码,发现原来自己怎么也不明白的,现在竟然一下子就明白了,这给自己增加了很大的信心,相信自己一定能够在这条道路上走下去

32. 这时,再看advanced programming in the unix environment,发现真的和其他人说的一样 ,Richard Stevens写的太经典了;

转载于:https://www.cnblogs.com/xubensave/archive/2011/03/03/2430326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值