您的位置:首页 > 其它

谈谈关于个人提升的一些思考

2011-06-12 00:00 295 查看
刚刚看到一篇文章,转贴下,分享给大家

今天脑子里突然浮现这样一段话(因为时间比较久了,可能有所偏差):

"You just know what you can do with this but you don't know why and how.
You don't care if there are some other ways that can also manage it.
No mention that you care little about why other ways also can and which way is better."

想到这句话,又想到了前几天在某篇博客后看到的一条回复:

“现在的时代那么多诱惑,学生浮躁,快餐式的教育才是当今教学之道,不然我们学校附近的培训机
构也不会那么火了,时代产物”。

“快餐式教育才是王道”,这句话让我不禁感到一阵心寒。如果他所说属实的话,那当今IT行业恐怕有太多的人符合前面
那段英文描述了。

按照前面那段话,我把IT行业(技术类)的人分为下面四类:

一、了解一般问题的解决方案,但只知道一种且不知道这种方案为什么、是怎样解决问题的;
二、了解一般问题的解决方案,可能知道几种,而且对why和how也有所了解;
三、熟悉一般问题的解决方案,知道多种,而且对why和how也有一定程度的理解;
四、精通一般问题的解决方案及它们相关的why和how,并且遇到非一般问题能基于自己的解决一般问题的经验或创造力
(灵感之类的)发明新的解决方案。

不言而喻,这四类人某种程度代表了当前IT行业下人的一种划分(当然四类人相互之间可能存在细小的重叠)。但是我在
这里想对这四类人再做一次简化,粗粒度地划分为“卓越的程序员”、“优秀的程序员”和“普通的程序员”。

世间万物一直在发展,这三类人群当然也如此。普通的程序员通过有效的途径和个人努力可以升级为优秀的程序员。优秀
的程序员在艰苦卓绝的历练后可以升级为卓越的程序员。而卓越的程序员如果不注重与时俱进和不断强化可能会降级为优秀
的程序员甚至普通程序员。

到了这里很多人似乎认为本文该结束了,不然。常规思维是:既然都规划了发展方向,那就埋头苦干就行了,说这么多废
话干嘛。但是不止一次我看到和听到有人说个人发展的路上不仅要有埋头苦干的精神,还要有抬头看路的习惯。蒙着眼睛埋
头苦干可能最后就像拉磨的驴,虽然走了很久很久,但是一直在那个小圈里打转(开始的时候驴是蒙着眼睛的,由人领着它
一圈圈拉磨,过一段时间后,就把布解开,驴自己就会拉着磨一圈又一圈地走下去)。(后面的所有观点都是我的个人看法
,阅历有限,可能有偏颇或不当之处,还请大家包涵。如果你觉得我的观点还行,请支持;如果你觉得我一派胡言,那也希
望你抱着“看这个人又在胡说些什么”的想法看下去,^_^)

埋头苦干谁都会,只要你有很强的成功欲和旺盛的斗志,谁都可以一天十几个小时甚至二十四小时对着电脑。可是关键是
我们会不会在这个过程逐渐堕入那个“拉磨的驴”的可怕结局(这里只是比喻,^_^)。

为了避免这种可怕的结局,我们别无选择,必须“抬头看路”。但是怎么个“抬头看路”法。我个人觉得首先必须明白“
卓越”和“普通”的差别(至于优秀者属于两者特点兼有部分的中间人群,就不讨论了)。

一般提到卓越者,我们很自然就想到这些词“经验丰富”、“技术牛人”、“踏实刻苦”、“高效”、“有规划”、“有
激情”、“自信但不骄狂”、“乐于分享”、“善于借鉴”...

而提到普通者,我们想到的又是这些词“平凡无奇”、“得过且过”、“缺乏积极性”、“没有明确规划”、“效率低下
”、“眼高手低”...

也许很多人开始有情绪了,不过我告诉你一个事实:任何进步、任何质的蜕变都有一个前提,即正视自己的弱点和缺陷(当然人无完人,卓越者不可能具备上面所有的优点,而普通者也可能具备某些卓越者的优点,比如踏实刻苦、有规划、有激情)。

卓越者的特点之一“经验丰富”,是来自他长期的历练和积累,这点普通者是不可能在短期内能够达到的。

卓越者的特点之二“技术牛人”,这要看牛人的定义,一般而言是指在某一方面或者几个方面有比较深的造诣,即他们在
这个方向或某几个方向研究得比较深入。遇到这个领域的问题他一般都能迅速给出正确的解决方案,并能够不断完善之以应
对不同的问题场景;有的问题即使一时找不到方案,也不会一筹莫展,而会根据自己的技术积累逐步分解,最终形成解决方
案,并在解决问题后将此过程的所得所思“物化”成新的经验加入自己的经验库中。这点我想普通者是毋庸置疑非常缺乏的
,普通者在遇到一个问题后最迫切的是想着如何把它解决,解决了就OK了,这点也与普通者的积累不足有很大关系,而且有
一些普通者不管遇到什么问题最先想到的是百度、谷歌或者论坛,然后最熟练的copy+paste代码,并且一般也不会认真看看
这些代码是否真的适合这个场景或者这些代码是如何解决问题的。解决问题之后,少部分人会把找到的代码归档到自己的代
码库里,更少部分的人才会去总结解决问题过程中收获的经验。

卓越者的特点之三“踏实刻苦”,他们中有的人为了了解Linux操作系统,愿意花时间去逐行研读那数百万的代码;有的
人为了理解一个底层技术细节,查阅论文无数(当然包括很多国外论文)和实验无数;有的人可以为了一个“无关大体”的
小bug,而逐层分析,最终发现可能是操作系统本身的一个漏洞或第三方库中的一个bug。而普通者中有一部分人把《21天精
通Java》(21天系列我不想多举例,大家懂的...)、《一周教会你PHP》、《如何一个月薪上万》这类书籍捧为圣经,当然
也有更多的人像前面那位仁兄认为IT专业同其他行业(比如泥水匠)一样可以通过短期的培训马上就业,立刻高薪。普通者
中也许有人对Linux异常感兴趣,但又有几人读过Linux内核源码(当然我不是指每个人都要去读,也不是指读了才能成为卓
越者,因为牵扯到很多因素:兴趣、精力、理解力、技术基础等等)。普通者当中又有多少人研读过原版英文论文?而又普
者当中又有多少人在得到问题的一个解决方案后就打住,而一点都不考虑性能、资源消耗以及系统可扩展性等因素。优秀的
Web开发人员不仅会考虑Web页面在各个浏览器下的兼容性问题,可能还会考虑终端设备因素(比如普通PC上的QQ和Android手
机上的Web QQ)。而普通Web开发人员能考虑基本的FF、IE等主流浏览器兼容就不错了,有的人甚至连字符编码都没有考虑过
(我个人的真实经历,那次一个名字以泰开头的保险公司,具体名字忘了,说我获得了他们公司的免费公交地铁一年保险,
说是和移动一起搞活动,抽取手机尾号为xxx开头的一百名用户;然后我去网上查了下这个公司,百度百科里发现还真有,而
且建成至今已经有近20年了,然后点开它们的官方网站,按照之前柜员的说明找到那一项,一看傻眼了,用户名密码的中文
乱码了,出现几个小方块,当即把页面关了)。有多少普通Web开发人员在设计网页时会考虑Web页面是否遵循W3C标准?又有
多少普通者意识到代码重构的重要性,是否认真研读过这方面的经典书籍如《修改代码的艺术》(既然经典就必然有其研读
价值)?如果在你看来编码就是copy+paste,从来不看别人代码如何实现,更别提自己“造轮子”,重构似乎的确很遥远。

卓越者的特点之四“高效”,体现在他们将要处理的事务按轻重缓急分类,并且给自己订的任务适度。能根据个人特点(
如有的人上午精力旺盛就在上午做那些需要高脑力的活,而有的人是下午精力旺盛)制定出符合自己的计划,能够按质按量
地完成任务。卓越者定期整理自己的事务,虽然这可能要花去一些时间,但比起所带来的收益却是值得的。而普通者中相当
部分人在这方面是不足的。就定期整理事务而言,一次次会被他们以“太麻烦”为借口而pass掉,其实不整理只会越来越麻
烦。而且不得不提,普通者常常将时间浪费在打开一个又一个网页上,这里看到一段搞笑视频,点开看看;那里看到一篇经
典雷文,打开瞧瞧;还有那里有一篇《不得不看的人生50个忠告,不看后悔》,当然必须看了。时间就在不知不觉中流逝了
(其实我也是受害者之一,所以我现在对那种“万金油式”的文章标题是深恶痛绝)。

卓越者的特点之五“有规划”,规划自己的职业,规划自己的生活。职业发展是经济来源,生活规划是为了让自己活的更
有乐趣,从而促进职业发展(好的心情、乐观的生活态度应该是能促进职业发展的)。卓越者在规划好了自己的职业或生活
后积极实践。而普通者要么压根就没有规划,每天朝九晚五,要么是规划着领到薪水后该如何如何,要么是纠结薪水怎么这
么少啊,还谈什么规划啊,一点兴致都没啊!(当然也有少部分普通者有规划的,因为卓越者不可能一开始就是卓越者,他
们也是从普通者走过去的,我说的是大部分情况,因为卓越者毕竟是少数)而少部分有规划的普通者,要么是不能坚持,让
规划成为一纸空文。要么是按规划实施一段后常常自我矛盾,纠结不已。比如张三为了让自己有一个更强壮健康的体魄来面
对“革命事业”,要求自己每天12点之前一定要睡觉(无特殊情况下),但是某天晚上他玩斗地主,玩的久了点,本来规定
8:00-10:00要做的一项任务没有完成,这时他可能会选择直接睡觉,可能会熬夜完成任务,当然还有一种可能继续玩会“斗
地主”反正都已经完不成了,而离12:00还有半个小时呢,不如继续玩。不管哪种情况他都已经偏离了自己的计划(很多个计
划按照一定的逻辑组织起来就成了规划),只要他一直这样发展下去,规划对他而言也会逐渐成为笑话。

卓越者的特点之六“有激情”,他们能够为某个项目而废寝忘食(当然我不建议这个,只是说明卓越者的激情程度),这
个行业不乏这样的例子,很多如今风靡全球的应用无不来自于此,比如Facebook、Flickr、Plants vs Zombie还有Linux(Linux Torvard在学生期间开发的最初原型,到如今为众多开发者推崇,大家懂的。当然你会说因为他是天才,或许是,但是即使他145的智商,你有135的智商,这之间的差距也不是很大。传奇不一定是由天才缔造的,而要创造传奇个人认为激情是不可或缺的。)。而普通者中的一部分人在大学期间做项目就抱着混的想法(前面那位仁兄就说过他在大学的唯一收获就是“混混”二字),何来激情?何来将自己的创意实现为伟大的发明?

卓越者的特点之七“自信但不骄狂”,“高调做事,低调做人”,他们一贯的原则。面对任何一个新提出的问题,不管场
景是熟悉的还是完全陌生的,他们都有足够的自信面对,因为他们有底气。而普通者在看过一本相关入门书籍后就以为这门
技术已经掌握十之八九了,然后踌躇满怀。这之中的典型体现就是一些基本编码素养、常识、论坛基本礼仪的缺乏。比如有
些人写出的代码可能成百上千行没一个注释,还得意地说:“瞧我这代码多简洁”。还有的人给变量命名全是x1,x2,x3...,
因为他接触的参考书里都这样干的(万恶的21天系列)。还有的人(主要是初学者)认为调试一点都不重要,写出一大堆乱
七八糟错误百出的代码,然后晾到网上,说“主要逻辑都已实现,还有一些小bug,请各位帮忙解决”,其实调试代码比写代
码难多了,有人甚至说过“傻瓜都知道写代码”。事实也的确如此,我们每天说的话,写的字其实也是一种代码(谁能说不
是?),只不过它们过于松散,缺乏必要的逻辑组织,所以我称之为“未调试的代码”,想想只要接受过小学教育的人基本
的听说读写都会,也就是说他们都会写代码,但是“调试代码”却不是每个人都会或者擅长的了。当然还有的人在论坛礼仪
方面有待提高,发帖提问,别人的答案如果不满意,要么说别人不知道不要在这里胡扯(其实别人能花时间看你的问题并提
出自己的观点,不管对错你都要感谢别人),或者发了帖以后十天半个月不来处理(对别人严重不尊重的表现,不尊重别人
的人也不能奢求别人的尊重),还有乱给分现象更是屡见不鲜。

卓越者的特点之八“乐于分享”,乐于把自己工作中体会到的一些实用的东西(当然不包括商业机密)分享给别人,有自
己的个人技术博客,有写博客或发帖回帖的习惯。而普通者则不用多说了,相当一部分只看帖不回帖,也很少发表什么博客
。时间紧是最常用的说辞。

卓越者的特点之九“善于借鉴”,“山不辞土故能成其高,海不辞水遂能成其深”、“他山之石,可以攻玉”,借鉴之后
内化为自己的东西。他们很清楚何时该利用现有的“车轮”,何时该造新的“车轮”。就好比赛车,如果引擎更新换代了,
马力变得更强劲,如果还用原有的轮胎,显然不行,必须制造出新的轮胎与之匹配。

说了这么多,其实还没说最关键的一点,普通者还有一个最大的致命缺陷——浮躁。正如前面仁兄所说,“浮躁的时代”
、“快餐式教育”,他也是个浮躁的人。“若求卓越,必须淡定”。这是我诸多人生歪理中的一条。

部分普通者编程语言,学的纯粹是语法;另外一部分学来学去一直在学如何应用这门编程语言的API。这样有什么弊端?
打个比方。Ajax最初一般是由原生态JS实现的,通过XmlHttpRequest等等进行一系列的操作。而现在jQuery流行起来了,
jQuery对Ajax的支持非常好,提供的API让Ajax实现非常之简单,如下:

$('#submit').click(function(){
var name = $('.uname').val();
var data = 'uname='+name;
$.ajax({
type:"POST",
url:"welcome.jsp",
data:data,
success: function(html) {
$('#message').html(html);
}
});

return false;
});[color=#008000][/color]

不管是通过POST方式还是GET方式提交Ajax请求都非常之简单,而请求如果成功则返回信息赋给html参数,利用html参数
可以很容易实现如自动补全、Ajax验证等功能。jQuery提供的Ajax实现如此之简单,那如果哪天jQuery提供Ajax的更简化实
现,这样我们永远只是追随者(当然我不是鼓吹不用API,好的API能为我们提高效率)。而如果深入理解了Ajax的原理,或
许你可以写出个比jQuery支持更好的JS扩展库,你就不再是一个疲于追随者了。另外现在jQuery的一些插件(当然大部分开
发者是外国人)也是非常强大,做出的效果都很酷很炫,但是你是否仅仅因为它很酷或很炫就把它用到你的网站上?基本在
所有的jQuery插件项目问题反馈页面,都有人反映各种各样的问题。你对这些问题是否了解?将来某天你的网站可能因为这
个插件的某个缺陷或漏洞而遭受攻击并因此带来经济损失,你考虑过没有?很多人学习C++,认为C++才是编程语言(我的观
点是编程语言没有好坏,使用者水平有高低),其他的都不算(就像那句话“世界上只有两种方法:oracle的方法和错误的
方法”)。当你用拙劣的代码写出一个应用交给一个普通用户使用时,用户的系统自此毛病不断,你是否应该为此负责(我
认为每个开发人员都要时刻记住职业道德四个字)?学了C++,或者看了多少遍C++ Primer、C++ Programming Language,一
点都不重要,重要的是你能否用C++写出高效安全的程序。我记得我的一位老师说过:“写程序尽量利用你已掌握的东西。”
当你已掌握的东西足够完成任务时,你最好不要去尝试用那些你很陌生的但很新的东西(印象中《The C++ Programming
Language》中前面章节作者也提到过)。

另外一种很常见的现象是,普通者如果在日常开发工作中一直都是copy+paste,那么当他开发的系统出现问题时,他
的对策一般是去网上找其他方案一个个试,直到解决为止。但是问题真的解决了吗?他不知道,其他人也不知道,因为系统是
他开发和维护的。打个不太恰当的比方,一双拖鞋有左右之分,你顺着穿能穿,反着穿,左脚穿右脚,右脚穿左脚也能穿,
但是你不觉得别扭难受么?所以如果你的开发模式一直是copy+paste,那么你就不能想象DBA们在应对性能瓶颈时艰难的探索
,也无法理解架构师们为什么要如此强调体系结构设计的重要性,那么你也永远成不了优秀的DBA或者架构师。

最后不得不提下普通者的“跟风现象”,今年Android流行就一窝蜂地去学Android了,明年MTK发展前景不错又转战MTK了
,还美其名曰“这才叫IN(或与时俱进)”,到最后门门懂一点,无一精通。人的精力是有限的,想在每一个方面都深入研
究是不现实的,新技术出来,可以涉猎,但是一定要有自己的核心发展方向。

写到这里已经说得差不多了,文章该结束了。最后希望大家都能成为卓越的开发者,让中国成为世界顶尖的IT强国,^_^。











http://topic.csdn.net/u/20110611/11/8a24efa6-9462-45d9-b37e-8cd96684cb53.html?40623
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: