【解惑】杨中科说给弟弟的话
到底他说的那句话触动了我呢,那就是“我现在C++语法学的差不多了,刚才买了一本C#的书,想寒假的时候看看C#,然后下学期C++、C#同步学。”我问他“你难道不知道我经常提醒‘不要在多门语言间徘徊,把一门语言玩熟了 其他语言都是纸老虎’吗?”,他说“知道, 但是看毕业找工作都是招C#、Java的,招C++的特别少。”,我说“我说过多少次我自己的例子: 我大学大部分时间都是在搞Delphi,然后找工作前突击了半个月的Java,然后就拿到了Java工程师的Offer,而且还是笔试成绩第一名(杨中科:我的大学生活)。如果你现在什么语言都没有学,你说看C#挺好,以后想找C#的工作,那么我就建议你去学C#就好了,因为那样会‘一步到位’。但是你已经学C++半年了,刚把C++的基础语法学了一个大概,又要去学C#,那你就又浪费了半年时间,等半年以后也许你又发现Java挺不错,又去学Java的基础,那你这大学四年就完全是在‘学语言’了。”
为了让他更清楚的明白这个道理,我举了一个例子:学游泳,很多人的目标都是蛙泳、自由泳、蝶泳、仰泳都会,那样才酷。但是有的人学游泳就是练两下蛙泳,练两下自由泳,又练两下蝶泳,折腾了几个月,还是什么姿势都不会。而有的人则是从蛙泳练起,把蛙泳游的很顺以后,就有了‘水性’了,所谓水性就是“对水的感觉”,也许练蛙泳需要一个月,但是一旦把蛙泳练成了再学自由泳就很快了,如果一开始上来就蛙泳、自由泳一块学,一个月以后很可能还是在乱扑腾。“同步推进”看似是效率更高了,可能会认为“同时学C++、C#,这样以后我就两种语言都会了”,但是其实学编程一开始都有需要一个“形成编程感觉”的过程,假设学会语言的基础语法需要3个月,真正把语言玩儿到一个比较熟练的程度、找到“编程感觉”需要9个月,那么如果你一直只学一门语言,那么12月以后就等到达有“编程感觉”的程度了;而如果你是两门语言一块学,或者学完一门语言的基础又学另外一门语言,那么你的基础语法、“形成编程感觉”的过程都至少增倍了, 本想提高效率,反而事倍功半了。
遥想当年我大一大二的时候也走过类似的弯路,当年感觉Web开发“有前途”,因此放弃了学了几个月刚有点感觉的VB,去学Web开发的语言,依次把ASP、PHP、JSP学了一个遍,但是最后仍然是什么都不会,只记得for循环、函数等一些模模糊糊的词汇。反而是后来一门心思搞Delphi,而后又把Delphi里边一个用来开发Web的IntraWeb的框架玩熟了,回头再来看ASP、PHP、JSP, 发现其实无论什么Web语言,都是处理Form、Session、Request、Response、Cookie等这些东西,大同小异。我之前走过弯路,浪费了时间,希望同学们吸取我的教训,不要再走这种弯路。
他问到“现在总是.net、.net的炒的那么火,学C#多好呀”。我说“学了一阵子C#你又发现‘现在总是J2EE、J2EE的炒的那么火,学Java多好呀’,你就变成了大学四年一直在学语言的‘语言专家’了。 按照火的程度,C#、Java已经是过气的明星了,现在很多新语言也出来手舞足蹈了,如果你一直追星的话会累死你”。社会上某些人士出于自己的目的总是在炒作“大学学习要和社会保持”同步的舆论,适当的同步是可以的,但是如果总是追着社会上的流行路线跑,永远学不到真东西, 想学唱歌不应该今天去听张靓颖的演唱会、明天去听F.I.R的演唱会,而是应该跟着中央音乐学院的教声乐的过气大妈来学;有人总是说IT行业‘技术更新太快’,其实我要说 IT行业技术更新一点都不快,因为技术的进步不是推翻性的,而是改良性的,一门新技术的推出是为了解决老技术的一些问题,但是他们的不同只有10%,剩下的90%的根基部分则是完全相同的,而且那10%的不同部分也是“相同的问题,不同的解决方式”,同一个目的不同的途径的技术能有多大的差异性呢,很小很小。
我弟弟又问“我大学一直搞C++,那找工作的时候那么多C#、Java的职位我就放弃吗?”我回答“别担心,你一直玩C++,把C++玩熟了,找工作之前如果想应聘C#、Java的职位,可以到时候再找C#、Java的书对照性的突击一下,学习的方式也会和初学的时候不一样了, 只要对照一下C#和C++的异同点进行对照性的学习就可以了,你会发现大同小异,很快就可以从C++的高手变成C#的高手,照样可以突击几天的C#而把那些自称‘精通C#’的人打的稀巴烂”。
刚才在一个网站上看一个同学列出的学习计划:
需要和打算学习的和要了解的:
编程语言:c#,Java,c,c++,jsp,php,Delphi,Python,ruby,perl,ActionScript3.0
数据库:SqlServer、Oracle、MySQL、db2、PostgreSQL、SQLite、access
.net:wpf,Silverlight,winform,wcf,linq,mvc
html+css+JavaScript(jQuery)
软件:vs2009,vs2010,blend,visual C++,C-Free,Photoshop,flash,Dreamweaver............
相信这样‘伟大’的学习计划是很多同学都列过的,也包括我。希望大家以后不要再犯这种‘大而不精’的错误,编程语言选一门足以,数据库找一个就行,‘多多不善,浪费时间’。
C#、C/C++、Java……世上语言千千万,不存在哪个语言好、哪个语言有前途之类的问题。如果你没学过任何语言,那么你根据自己的意愿选哪门语言都可以,但是一旦选择了就不要再 移情别恋, 用情专一的让自己找到编程的感觉,以后就可以根据实际情况很轻松的 另寻新欢了。举一个我以朋友说的例子,虽然太三俗,但是很形象:泡完一个妞再泡另外一个妞不难,因为泡第一个妞已经知道怎么取悦女孩子了,再泡第二个、第三个就驾轻就熟了;难的是同时泡好几个妞,到最后只能是颗粒无收。
朱老师前两天给我说了三个字“ 知信行”。知:知道这个道理;信:相信这个道理;行:照着这个道理去行动。“知信行”就是学习的三个层次,只知不信不如不知,只信不行不如不信,只有“知道、相信、行动”这个这是才真是你的。如鹏网上的一些关于‘一通百通’、‘ 不要在语言间徘徊’、‘ 坚持就是胜利’、‘越容易得到的越不值钱’等道理的文章是达到了让同学们‘知’的程度,然后一些同学的案例证明了这些道理,则可以帮助你‘信’,但是‘行’没有人能代替你,只能靠你自己了。