关于阅读技术类图书的思考(转)
今天在 cu上看到一封信,一个新程序员写给老程序员的信:
内容如下:
尊敬的程杰老师:您好!
首先请允许我这么称呼你,虽然你是高级软件工程师,但我觉得叫你高级软件工程师老师更能表达我对你所写的《大话设计模式》一书无比的喜爱和对你本人无比的敬佩!
我是个刚大学毕业半年的初级程序员。我大学专业是生命科学,但由于大学里的一次偶然事件使我爱上了编程。由于不是计算机专业,所以我在大学阶段只是用VB 编了很多小的程序,并且由于大学4年里连续三年参加了3次全国大学生数学建模竞赛,而我担任Leader,要求编程和数学基本功都很扎实,所以基本每年我都会在竞赛前抽出一个月的空来进行VB编程以达到温习的效果。但毕竟不是计算机专业的,并且本专业所学的课程也很多,当时也没想到以后会从事这个行业,所以基本没有系统地学习一遍计算机理论知识。
半年前大学毕业后,来到上海找工作,但发现生命科学的工作不好找,关键是企业太少,同时企业里所需要的基本上都是博士或硕士,说实在话,像我这样一学士即使找到了工作,也没有什么前途可言,也只能是干些苦力活。所以我思来想去,最后决定还是转到我喜欢的IT行业。于是就选择了一个小的培训公司进行.NET 工程师培训,培训了将近4个月。在这4个月里,前后分别学了C#、MSSQL、ADO.NET、ASP.NET、和Winform编程,中间顺便简单学了点javascript、ajax和html。记得当时进这家培训公司前,那些做市场的人对我说:只要经过我们公司4个月的培训,保管你达到高级软件工程师的水准,同时在培训的最后一个月老师会带领我们做一个大的项目,好让我们一毕业就能立刻到企业里工作!但经过这4个月的培训,发现所有的都只是一场“骗局”!前后共有3位老师给我们讲课,这些老师都有10年以上软件开发经验。诚然,这些老师技术都很好,并且其中一个还在IBM干了5年。但是一来,他们都是只给我们讲最基础的知识,都是最基础的课本理论知识,比如C#,基本上就是照搬MSDN上的原话和例子讲给我们听,培训结束时很多学员都感到很不满;二来他们似乎都很有点那个“技术保留”,在讲课过程中只要一涉及到在实际工作中比较重要的东西时就是快速地一句话带过,从不多讲一句,好似很害怕我们学了去会对他们造成某种损失;三是他们基本上都不会讲课,毕竟没有一个人是像您那样一开始干过老师这一行业,他们只管在上面讲,也不管我们是否听的懂,并且讲课全部使用投影仪加幻灯片,我们即使想做笔记都来不及。我们向他们要他们的课件,他们从不给,要源代码,也从不给。在培训最后两个周,才开始带我们做一个在线销售系统,但老师们只把一个“需求文档”给我们后,所有的一切都是让我们自己去做。我们都是没有一点工作经验的人,如果有了工作经验,谁还来培训呀。所以我们根本不知从何处下手,只是自己去瞎编。就这样两个周很快就过去了,最后这个所谓的大项目我们那个班没有一个组做出来,但老师也不管不问。我们派人去向老师要,老师都是推脱说过几天他自己做一个给我们。但到最后也没给我们任何交代。
大概两周前,我们的培训结束了。大家都开始投简历找工作。但此时金融危机已经在国内全面蔓延开来,工作太难找了!但是我是最幸运的一个,我投了一家小公司,结果那家公司也就是我现在工作所在的公司就叫我去面试了。一开始是笔试,笔试完了是面试。在面试过程中那个技术总监问我计算机专业方面的很多问题,可我毕竟不是计算机专业的,培训时就只大概学了个.NET,其他的一概不懂。于是我就化被动为主动,并转移话题,转而和他谈起公司的发展方向等很多非计算机理论问题。结果一谈就谈了半个小时。结果第二天总监就打电话通知我上班。第二天去到公司,总监告诉我说:我的笔试是前几天所有来公司面试的人中做的最差的一个,但公司看重的就是我的综合素质,并且公司刚成立不久,需要的是partner ,而不仅仅是一个programmer。如今已经工作了两个周,刚开始的一周都是干的些杂活儿,上个周开始总监先叫我写一个socket并安装测试。我查阅了半天才大体上弄明白了什么是socket,什么是TCP/IP,然后又花了将近一天半的时间才终于写完了程序并测试通过。然后总监把我叫进办公室,说我的计算机理论知识太欠缺了,并且学习新技术的能力不是很强。他说我们是小公司,所以希望你们需要掌握很多技术和知识,不像大公司,只需要你懂一丁点儿就够了。大概谈了一个小时,我突然感到了一股强大的压力和寒心。本来这个socket不难,但首先是我从没听说过这是何物,其次是我刚开始从网上下了个错误的C#写的socket程序,搞了一天都没运行成功。后来又上网找了另外一个样例,才运行成功,然后我才得以弄懂原理并自己加以改进,将客户端和服务端都整合在一起,这样服务器亦客户端,而客户端亦是服务器。想想我们那个培训班,到现在两个周过去了,总共30人的队伍里才只有3、4个人找到了工作,而其他的都没找到。据我所知,来培训的学员中大部分家境都不好,大家都是勒紧了腰带才凑足了学费(13000)来学习的,但到最后却是这番光景,大家心都很寒,并且很多人都不想回家过年,因为觉得脸上无光!而我虽然很幸运地找到了一份工作,但现在我突然感觉到了压力,害怕自己不知哪一天醒来后就会接到公司的消息,通知我以后都不用再去上班了!
做完了那个socket,总监给了我一个大项目的代码,叫我研究。这个项目是他们之前做的,还没做完。总监说这个项目存在问题,希望我能够研究后与他们一起商量研究。我打开项目一看,吓了一大跳!里面有几十个文件,每一个文件都是几万行的代码。我从没碰到如此大的项目,我不知道该从何研究。看了两天,还是没有一点眉目,里面的变量和函数太多了,并且也定义了很多接口,很多子类,还有很多系统方法。我发现我在培训班所学的.NET知识根本不够用!很多东西都看不懂了。就
在我一筹莫展的时候,和我坐一起的同事给了我一个PDF,就是您的《大话设计模式》。那同事比我早3个月来到公司,也是刚毕业,但他是名副其实的计算机科班出生。我当时一看这名字,说实话,心里就比较讨厌。我心想:这本书该不会是哪个无聊的工程师没事时写了然后赚几个书钱的吧!所以当时也没在意,只是将它拷了回来。昨天是周六,闲来无事,就随便打开了这本书。看了前言,说如果C#基本知识欠缺的话就先从最后一章看起,然后再回过头来从头开始看设计模式的讲解。我想现在我的C#基础知识的确是挺欠缺的,总监交给我的项目中有很多东西我都看不懂,不妨就看看这本书里到底有没有我所需要的知识。于是就从最后(即 “培训实习生——面向对象基础”)开始看起,没想到这不看不要紧,一看就放不下了,并且越看越觉得这本书真乃当世一奇书也!我花了将近2小时将这一部分看完,那种愉悦的感觉简直无法用言辞来形容!只一个字:好!两个字:很好!三个字:非常好!就在这短短的2个小时内,我终于对面向对象编程有了感觉了,明白了这种编程技术的总体概念,同时也懂得了类的三大特性、接口、泛型、委托和事件的真正含义和来源。你用最简洁的代码和最简单的例子来给我们演绎这些知识点的由来,直让我感觉似乎当年我本人也参与了C#这种开发语言的开发过程!看完了这一章,我心中似乎对那个项目有了些许的明白了,尤其是明白了项目中的接口。就在这短短的2小时内,我的信心开始有了一点的恢复,似乎也见到了未来的一点光明的曙光!接下来我打算花上两周的时间认真地研究您的这本书。
不过说实话,我心中也还是担心多于信心,迷茫大于清楚。毕竟我大学不是计算机专业的,我欠缺了太多的理论基础知识;我也不知道到底如何才能提高自己的编程能力;我不知道在这样的小公司里能不能混下去,能混到什么时候;万一我们公司无法抵挡这次不知要持续多久的金融危机,那我该何去何从?我不知道未来的发展方向是什么;不知道怎么样才能在IT领域站稳脚跟……我有太多太多的不知道不明白不理解!
前天公司发工资,我收到了人生中的第一笔工资,虽然只有750元,虽然这在大上海只够维持基本的生计,但我心里还是觉得挺多,因为我来到公司两周,几乎什么都没做,我感觉不到自己的价值所在!这让我很是担心,也很空虚,很迷茫!我从小就是一个有理想的人,我想去做很多大事,但目前我必须先在大上海的IT领域里立足,先把自己养活,然后才能发展,并且我一直以来就很喜欢编程,但却越来越发现这与我想象中的不一样。随着工作越深,我心中的担心、空虚和迷茫就越多!但我相信,任何东西,只要一个人认真地去学,投入很多时间和精力,肯定是能够干好的。但现在我却是根本不知道到底要学些什么东西知识才能让我得到进步!这才是让人最痛苦的事!我也经常查阅这方面的信息,但似乎总是很乱,从没有一个人能够详细透彻地给我以明确的指引,或许真正成功的人,比如像您,基本上都没有时间来回答那些和我一样的菜鸟在论坛里所提出的问题。前几天看了一篇文章,说在IT行业里,刚开始的时候如果遇到一个很好的老师来给予指导的话,那么将会少走许多弯路。我觉得这句话说的十分有道理!恰巧昨天有看到了你的这本书,你留下了你的这个邮箱,同时我看了你的很多为这本书所写的写书背景,知道你当初进入这行的时候看了很多书,但是总是看不明白,你甚至怀疑过自己是不是个笨蛋,所以我相信您对我现在的状况应该能够体会的出来,所以我斗胆冒昧地写了这封信,希望能够结识老师您,希望您能够给予我行业方向的指导,能够教我这个非计算机专业的、半路杀出来的外行到底该去学习哪些知识或者该看哪些书才能弥补我所欠缺的计算机理论基础知识,能够明确地告诉我到底该学习并掌握那些知识才能让我得以逐渐成为IT领域的技术专家,并进而向更高的层面发展。
比如很多人都说要想成为技术专家,就必须学习C语言,学习操作系统,学习网络通信技术,再比如,从实际来讲,万一将来我失业了,为了重新找到工作,是否有必要去考一些行业认证的证书;再比如,很多人都说刚开始不要管公司大小,也不要管工资高低,最重要的是要积累实际项目经验,但我担心由于我的专业知识欠缺太多而无法完成领导交给我的任务,比如上次那个简单的socket我就摸索了两天时间才搞定,结果总监说我太慢了。
还有,我在大学里本来是准备考生物研究生的,当时都报了中科院上海生命科学研究所的名了,花了一年时间全身心地研究了生命科学的方方面面,可以说考上这个研究所是一点问题都没有的,但最后我还是放弃了,因为我觉得读研需要花5年时间,这太长了,我完全可以在这5年时间里去好好地闯荡一番,5年后肯定比读研能够学到更多的东西。但现在我却感觉很可惜,倒不是因为没有考研,而是因为我辛辛苦苦所参悟出来的很多生命科学方面的知识会随着岁月的流失而渐渐淡忘,但我真的很喜欢这门专业,并且我十分相信这门科学肯定会在50年内大放异彩造福人类并像50年的计算机技术那样“翻天覆地”地改变人们的生活方式!
我想请教怎样才能将生物和计算机这两门似乎八竿子都打不到一起的科学结合起来?还有,我想知道计算机专业的研究生和本科生之间的区别,我是否需要去一所高等学府里专门进修计算机知识?我参加大学生数学建模竞赛的时候,认识了我们学校里的一位牛人学长,他连续参加两届全国机器人大赛都获得了一等奖,并且我们的数学建模竞赛只要有他,就肯定能获得全国一等奖。但是当初他获奖之前,学校里是一点都没有支持过他,他都是每天只吃几个馒头来省吃俭用,每天只睡几个小时的觉,然后通过自己打工并向他的工薪阶层的父母要一点资金来完成他的机器人设计,但后来他获得了全国一等奖,学校才开始支持他。还在大三的时候他就自己开公司,在毕业后学校里把他留下破格提拔他当了教师,还专门为他建了一个很大实验室。但他最终还是去美国留学了。他说要想学到真正的技术还得去国外才行!所以我想向您请教是否需要看外文书籍才能真正学好IT技术?其实我大二时就过了CET-6,但毕竟计算机专业词汇很缺乏,平时读篇这方面的外文的确比较费劲。……………………以上的几点疑问是我目前迫不及待想弄清楚搞明白的,真心希望程老师能够抽空答复我,我将不胜感激!
我一不怕苦,二不怕累,我只怕我找不着方向,不知路在何方,这才是最让我痛苦的!我时常跟以前的朋友聊天,他们得知我现在做IT这行,都说这行是吃青春饭的,并且要一辈子不断地学习新技术,否则就会被淘汰,干这行太苦太累了。但我总是回答道:要想得到一个好的前景,不付出怎么能行呢?我说再累也没有明星累,他们几乎没有一天能够睡足够的觉,经常为了演出而午夜睡凌晨起,别的不说,光说刘德华,这是我最敬佩的一位明星了,他很笨,但他一直充满激情地工作,并且总是抓住各种空闲认真地学习各种东西。我还说要说起这一辈子都得不停地学习新的东西,但是学的时间再长,也没有国家主席国家总理学的长,他们每天甚至每一分钟都有可能面临新的国内问题和国际问题,他们得去认真分析研究;同时他们为了总理一个国家的政治、经济、文化、体育、科技等等各个方面,他们是什么知识都得学习,至少也得去接触一下。你说就我们这些小小的程序员,能够和他们相比吗?凭你学的再多,学的时间再长,也永远比不上国家领导人呀!国家领导人和明星可以说是这个地球上最红火的两大职业了(如果国家领导人也能够划分为职业的一种的话),但为什么它们这样红火?其实最终是因为他们最苦最累学的最多!既然这样,那么我们这些程序员还有什么好抱怨的呢?啥也别想了,只是憋足了一股劲大步向前冲就是了!但我现在不清楚自己所冲的方向,这令我很痛苦很迷茫很空虚,所以我真心希望程老师能够给我一个详细的明确的指引!
我为我这样一位小小的程序员给您带来的打扰感到深深的歉意,但我只能请求老师能够原谅我的冒昧与无知!
此致
敬礼!
尊敬你的小封
2009年1月11日15:09:23
小封:
你好!很高兴可以收到你的来信。你的问题其实也是很多人的问题,大学毕业找不到工作,对自己的未来迷茫无助。想努力却不知如何做。
最近我在看《明朝那点事儿》(也推荐你看一下),里面可以学到不少的道理,比如有这样一句话就比较颠覆我过去的想法。“很多人说过,最好的老师不是特级老师,不是名牌学校,而是兴趣。但我要告诉你,这个答案还是不够准确,在这个世界上,最优秀的老师是——生存。”我过去总是告诉别人,不要为钱工作,不要为某人工作,而是一定要为兴趣工作。但其实现在对于要毕业或刚毕业的大学生来说,生存才是第一位的。如果生存都解决不了,一切美好的理想都是扯淡了。
我可以理解你,但我好像帮不了你什么太大的忙,因为一切都是要靠你自己。我只是想说,也许你有想依靠的想法,有想求助的想法,可这都不能解决问题。如果你忘记这些,只告诉你自己,若要成功,一切就只能靠自己,那么所有的问题都不是问题了。比如你在读大学,学不到社会上需要的技能,难道不可以自己学吗?比如你去培训,培训老师不教或者根本不会教,你难道不可以自己找书看,写代码,做项目,然后有问题请教可以请教的人,比如身边的同事,朋友,网上的达人等等。总之,如果你生活还可以,只是想要好一些,你不一定能好起来。如果你生存都成了问题,你一定要,你就一定可以成功。
其实网上关于如何才能成为优秀的软件工程师的文章已经很多了,我不想说这些,大多数方法都是可行的,只不过要你付出而已。我更多的是想和你谈态度的问题,显然由于初入社会,碰到了很多的困难,你的心态很差。可我觉得你可以进入一家软件公司(战胜了其他的求职者),这本身已经是很好的开始,也算是一个小成功。接下来,又碰到了很多的困难,比如Socket程序花时间太长,人家的大项目看不懂等等,这些都是很正常的,不要灰心,每天规定自己用四到五个小时读书(如何读,读什么可以看我的一篇文章《关于阅读技术类图书的思考》),并且不断练习编写程序。做一个中期计划(读多少书,写多少代码等),坚持半年的时间,我相信你再给我写信的时候,就不会是这样的内容了。
最后再用一段话来结束我的回复,希望可以有所感。“我是一只褐色老鼠,我可能是一个不可以教育的家伙,但是我能够吃苦耐劳,不怕牺牲,如果我的一只腿陷在夹子中,那么,为了脱身,为了生存,我会把那只陷在夹子中的腿弄断,而在所不惜。”加油加油!
另外:我想把你的来信和我的回复放到我的博客上,以便让更多的朋友分享,请问是否可以?
程杰
2009-01-12
程老师:
百分感谢程杰老师的答复,的确,每个人其实都只能靠自己。感谢你授我以渔而非鱼!
我这两天又在socket的基础上,开发一个实时通讯程序,就是客户端用画笔画,则服务器断也要自动同步同时画同样的东西。
在今晚下班之前终于实现了功能。虽然才做了两天,但我却感觉像是学了一个周。因为这里面要解决的技术问题实在是多!别的不说,光是在传输过程中,几乎将 int、long、short、byte、string等都挨个儿相互转变了遍!尤其是在将Int转成 byte型时,经理叫我最好用位操作,这样速度快。我没有学过C语言,昨晚熬到了12点多,才终于搞懂了位。而在做这些的过程中,我的同事他们也不是太懂,问题基本都是我自己通过百度和谷歌解决的。
刚刚看了你链接的那篇文章,感觉说的很好,程序光看是没有用的,更重要的是要在看的过程敲代码。知识只有自己会实际运用了,才能算是自己的,否则即使今天看了,半个月后也会忘记,那就永远成不了自己的。通过这两天的实践,我对此真是深有体会!如果不是实际工作需要,那么即使我看上半个月的理论书,到最后也不一定真正会解决这些不同类型之间的变量相互转化的问题。
以后我会坚持每天学习4个小时,坚持天天敲一百行代码。
不过我还是有些困惑,不知到底该看些什么书。不过我会自己去上网查询或者请教别人。
如果你觉得有必要,你就将我的去信和你的答复放到你的博客上吧,也许会有很多和我一样的菜鸟发表意见,或许还会有高人前来指点,这样让大家一起提高亦未尝不是件好事。
再次感谢老师的答复!我忠心祝福你能将你的教育理念和你宝贵的IT行业实践经验更好地结合起来,将来写出更好的书来,以让后来者不必再像我们这一代程序员这般辛苦!
附:《关于阅读技术类图书的思考》
很多做编程朋友都喜好读书的。但为什么要读书?读什么书?读多少书?如何读书?这都成了很大的问题。我想就这些问题谈谈我自己的看法。注意,本文读者最好 是那些时间不多,希望通过读一些好书能有大收获的朋友。如果那种只要是技术书都要去读读的朋友,你的精力和时间实在太多了,本文应该不适合你。
首先,在中国,程序员只能靠读书来提高自己的编程或设计能力,这本身其实是很无耐的,因为国内软件编程方向的教育已经远远落后于编程业的发展了。名师凤毛麟角,能够听到名师的课的人非常少。运气好,进了大学或者公司,有个高手师兄或者大牛同事带一带,成长会快些。否则,要想提高,除了读书,还真是没有别的办法。由于本人曾经做过数学教师,我很清楚,数学学习如果只是给你几本参考书,然后就能高考得高分,那是不可能的(你如果例外,只能说你是天才,没有普遍意义),但数学教育已经发展了不知多少年,特别中国这样以应试教育为主导的国家,数学是不需要好书只要有好的老师就可以出好的学生,而软件编程教育的师资就实在是不容乐观。而我想强调的是,读书永远没有好老师的好教学来得有效(注意需要强调“好”字)。因为老师和学生之间是有互动的,是在一个交流的气氛中学习,而不是读书的那种完全单方向的信息传递。现在有了网络视频录像,情况得到了很大改善。不过视频同样存在只能告诉你东西,而不能最快速的解决你碰到的疑问的单向信息传递问题。比如你看了一个视频学习如何用 VS2008写一个“HelloWorld”程序,可是你始终找不到视频里提到的“解决方案资源管理器”(原因是之前你或别人无意将它关闭了),或许你费了很大力,终于明白在工具栏上有按钮或者菜单中可以打开它,但是你的挫败感就很强烈了,这对于初学者来说,是很不爽的。如果有个老师,或者旁边有个同学,这种问题几秒钟就能解决。再比如你看了策略模式的教学书或视频,可是为什么一定要用策略模式呢?我不可以用简单工厂吗?不可以用装饰模式吗?你的问题一个接一个,书中没有答案,答案只能依靠自己去想。如果你坚持去想,你会有“悟”通的一天,但是更大的可能是,算了,设计模式也太难了,以后再研究吧。因此我觉得多读书当然好,不过编程能力通过读书显然不是唯一,更不是最好的办法。不过就目前的国内现状来讲,读书或许是在你没有老师的前提下最好的提高途径,尤其是初学者,系统看一些好书,学习一项技术是很有必要的,只靠实际的做项目来提高极有可能会发展不全面(培训学校我不推荐,因为骗钱居多,好教师太难找)。
然后是读什么书的问题。现在很多过来的朋友都推荐了一些好书,这些好书大多是经过时间验证,的确是难得的精品,看看一些网上书店的排名和评论就大概知道好书是哪些。不过问题又来了,是不是这些书都适合我阅读呢。答案不是,并不是只要是好书就适合读者阅读的。从技术书的分类来看,简单的分就有程序设计、软件工程、数据库、网络、图形图像等等;从技术难度上分,就有入门读物、进阶读物、高级读物等;从写作形式上分,有教材类、论文类、休闲类等;从价位上,有 10-30、30-60、60-90、90-抢钱没商量价等;从书的厚度或阅读时间来讲,有三天读完、两周读完、两月读完、半年读完、阅读三遍、终生阅读等分类;当然最重要的分类,即按书的写作质量来分,应该是垃圾书、一般书、可读书、精品书、绝对必读书等。换句话说,仅仅是告诉你,编程书好书有哪些是远远不够的,往往会让读者根本没办法去区别这个好书是不是适合自己,是不是应该要现在阅读,是否有必要全部读完。当然,商家是不会做这么细致的分类的,没有什么商家会告诉你,本书是垃圾书,本书不适合低手阅读,本书太厚没时间不要读,本书很贵买前要慎重、本书只有三章可以一读等等。但作为读者,如果你没有这种多角度分类的思考去找书的话,你或许会迷失在书的海洋中,无以自拔。打个比方(尽管这个比方我已经打过很多次),GoF的《设计模式》的的确确是好书,但真的不是每个编程者需要去阅读的,至少不是一开始去阅读的,如果你是非面向对象程序员(比如嵌入式开发),你是关系数据库开发者(比如存储过程开发者),你是UI设计者(偏设计但涉及程序的那种),甚至你是面向对象编程初学者,我都建议你不要读它,真的没什么必要,只有等你真的已经达到一定的开发量了,真的有必要提高自己的编程和设计能力的时候再去阅读它。总结,一定要读经过时间检验的好书,但在这些好书中,需要分分类,需要多多思考自己是不是真的适合当前阅读。
接着,就是读多少书的问题了。好书很多,不是一本,不是十本,而是几十本上百本。有些书是全本都好,有些书是部分章节优,有些书有很强的时效性(比如现在 去阅读一些asp.net 1.0入门经典方面的书可能就没有与时俱进了)。是不是有必要把相同类型好书都读了呢?我看没什么必要。比如你要学习asp.net,你真有必要把这方面的好书都阅读一遍吗?读一本足矣。毕竟这里更加需要的是练习而不是阅读了。而要读的这一本书就应该是精读,甚至反复读。其实。因此别的行业可能很需要参考书,我看编程行业基本不需要参考书,Google百度就是最好的参考。思想层面的,比如设计、分析、项目管理等方向的,可能要多读一些。但书实在是贵在精而不是多,还是以设计模式为例,入门读《Head First设计模式》,进阶再去读GoF的《设计模式》就足够了。当然,像《Java与模式》、《设计模式解析》都是好书,你有精力可以多读,没精力,那就不读也罢。
跟着,也是比较关键的,就是如何读的问题,本来这个问题不应该我来多说的,读书吗,从头读到尾就行了,但其实这里学问还真是不少的,技术书还是很有区别于一般的小说书的。如果你只是简单的理解为读书就是花点时间,从头读到尾的话,你从这本书得到的收获是很小的。首先,技术书,并不一定都是需要从头读起的。这要看是什么书,特别是应用级的书,往往是你当前最需要了解的技术,你需要多花时间去研究相关的章节。好的书通常都会在前言就告诉你,应该如何去读这本书。我记得《敏捷软件开发:原则、模式与实践》书中前言就写得很清楚什么样的读者应该更加关注什么样的章节,特别他提到如果你觉得无聊就看看书后的两个故事,哈,我还真是在一次没事做时,去认真的阅读了那两个项目开发对比的故事,感觉非常好。技术的学习不是看完书就完全理解的,更不是看完就能马上应用自如的,一项技能要经过知道、理解、掌握、应用等等过程。我强烈建议读者朋友在精读一本书时,一定要手拿着笔,最好旁边再有一本笔记本(纸)和一台笔记本 (电)(哈,PC当然也没问题)。看到好的句子要摘录到笔记本上(别懒,这其实不是让你以后去看你抄的东西,而是让你在抄的时候,放慢你阅读的速度和节奏,而把大脑紧紧的集中在这个知识点上),有句话说,在一个人用笔写东西的时候,他是不可能分神去想别的事情的。这对于记忆和理解是非常有帮助的,简言之,不动笔墨不读书(非常可惜,现在我已经很少看到喜欢记读书笔记的朋友了,有些人可能一年除了签名都写不了几个字,这实在是一大悲哀)。那么旁边那台笔记本或PC要来干吗呢?不是让你来玩游戏的,更不是让你和MM聊QQ的,而是用来写代码的,代码只是看看是没用的,一定要自己打一遍,最好的效果是看懂了后,根据自己理解的来编,效果差一些的是照着书中的抄一遍,但无论哪种都比你根本不写只是看要强。我见过不少朋友买了书,可能连随书的光盘封套都没拆过,又或者光盘中的代码只是简单的运行一下。没有认真的模仿打一遍,这都是不好的学习方法。有些人认为书读完了,应该就差不多都掌握了,其实未必。不知你有没有过看一部电影,过段时间再看第二遍发现很多很有意思东西原来根本没在意。特别是英文字幕的片子,看第一遍甚至根本就不懂,看第二遍就轻车熟路这种情况不是很多吗。读书也是一样的,好书绝对有必要多读,常读。否则理解可能还是会很片面。
最后,还得提一提两个细节问题。
关于电子版和纸版书的阅读问题。有些朋友喜欢收藏电子版的好书,一收藏就是几十上百本,可惜真正看完的可能是零头。书是用来看的,这些放在硬盘里不看的图书,不如删除更换为几部AV短片(毕竟后者看的可能性要大得多)。但为什么这些好书,却不能好好阅读呢?这也不能全怪读者,而是电子版图书天生有其不足之处。第一,它不方便携带,它一定要在电脑面前才能阅读(特指有图有代码的编程技术电子书),不像纸质书那样可以在地铁公交甚至厕所里阅读;第二、长时间伤眼睛,书不同于短的文章,在电脑面前长时间阅读很容易疲劳,特别是要学习技术的书,看纸质书会更舒服一些;第三、不方便批注,尽管有的软件可以解决这问题,不过怎么使用不如纸质书来得方便;第四、有些电子书不清晰,有可能直接是把原书扫描而得,这显然无法和纸质书相比,阅读情绪会产生很大影响。所以,只有在能完全克服这些困难的人才可以通过阅读电子书来学习。不过现在老外的有些英文原版电子书制作得非常精良,在美元跌落却依然购买不起纸质书的前提下,阅读好的电子书也是不错的选择。
关于图书馆借书还是自己买书看的问题。有句俗语叫“书非借不能读也”。说的是因为自己的书,会有一种反正已经拥有,有空再读的想法,造成反而很长时间都不去阅读。而借的书因为有还期,所以抓紧读的机会还更大一些。加之图书馆借书可以省很多买书的钱,所以去图书馆借书也是不错的选择。不过图书馆的书很难跟得上时代,很多都太老了,有些新书图书馆虽然引进了,但因为抢手也很难借得到,特别好书,基本都要碰运气才行,加之有些书一个月外加一个月续借的时间很难读完。所以借图书馆的书是好办法,但有些书借不到时,还是要考虑购买。但盲目的购买图书显然不是好办法。说到买书,不妨几个同事相约买书,这样可以平摊的购书的成本,另外网络购书优惠不少,也是不错的选择。
总之,在国内的大环境下,读书还是编程工作者提升技术能力的最好办法。那么上面所谈到的问题,也就显得非常的必要。希望本文可以给你的技术书阅读有所帮 助,我的看法也可能有失偏颇,大家一起讨论。但不管你是否同意,留句话,那尽管我花这么几个小时打字的劳动也甚感欣慰了。