首先请允许我这么称呼你,虽然你是高级软件工程师,但我觉得叫你高级软件工程师老师更能表达我对你所写的《大话设计模式》一书无比的喜爱和对你本人无比的敬佩!
我是个刚大学毕业半年的初级程序员。我大学专业是生命科学,但由于大学里的一次偶然事件使我爱上了编程。由于不是计算机专业,所以我在大学阶段只是用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行业实践经验更好地结合起来,将来写出更好的书来,以让后来者不必再像我们这一代程序员这般辛苦!
小封
2009-01-14