background image

程序员之路探究 

        这是个人对程序员生涯的一孔之见,只代表作者的个人想法,其中疏漏甚至错误之处在所难免,希望大家多提宝贵意见。 

前言 

        丰厚的薪水,高端的职位和有成就感的事业是人人都想要的,而这些都取决于你每天的认真工作,努力学习和灵活做人上。

日子就像一块块砖,你就像是一个泥瓦匠每天在堆砌着你的人生,最终砌出一个宏伟的大厦或是一幢低矮的小屋甚至是堆成一堆

瓦砾全取决于你自己。 

程序员是一碗青春饭吗? 

        程序界和软硬件一样都要遵守摩尔定律,也就是说当前的技术知识很快会被替代,你需要不断学习新的东西,否则就会面临

着被淘汰的危险。然而,一个人的学习动力和欲望都是有限的,记忆力还会随着年龄的增长而衰退,从这个道理上来说,年龄大

的迟早会被年龄小的超过,成为鸡肋并最终将被无良的公司抛弃。难道程序员这个职业做不过三十五岁,永远是一碗青春饭吗? 

根基是决定一个人会不会被淘汰的关键 

        我刚进入 IT 业就听说过这种说法,不过当时的年龄限度是 30 岁,当工作一段时间后,这个限度上调了五岁,而且还有陆续

上调的趋势,而在各个公司中,超过 35 的程序员并不罕见,在外国做了一辈子软件的人也屡见不鲜。难道“程序员是吃青春饭的”

是一个谬论吗?那么为什么很多人持有并宣扬此论调呢? 

        其实这个结论既正确也不正确,它的结果取决于要评判的人。一个人如果根基扎实,他就更容易学习新的事物新的知识,年

轻和精力相对于扎实牢靠的根基是微不足道的,对于别人是一座山的障碍,对于他也许就是一张纸的隔阂,这样的人是不会面临

着被超越被淘汰的危机的,青春饭的论调对他完全不适用;而一个人如果根基不牢,只是靠精力和年龄勉强立足,每次新事物新

知识出现都在和年轻人拼体力拼精力,那么他迟早将被淘汰,优胜劣汰的社会就是这样残酷无情,但很公平  。 

什么是程序员的根基 

        面向对象的思想。MVC,分层架构,按接口编程,依赖注入,OR  Mapping,面向方面,SOA 等都是 OO 的发展,不从根本

上领会它,程序员就难以把握程序发展进化的趋势,永远停留在老窠臼中无法自拔,自我提高升华进化当然更是一句空话。 

        数据结构。程序的核心目的是收集,整理和展示数据,而数据的核心就是数据结构,它的重要性不言而喻。线性表、栈/队列、

串、多维数组、广义表、树、图这些数据结构你都需要认真掌握,掌握的程度越深,日后学习的阻力就越小,相对于他人将更有

优势。 

        算法。如果缺乏好的算法,程序架构得再完美数据再贴切都无济于事,犹如一台法拉利却用牛来拉一样。迭代法、穷举搜索

法、递推法、贪婪法、回溯法、分治法、动态规划法都是你需要掌握的,不要以为这很难,读透一本算法导论就足够了。 

        基础 API。只有思想,数据结构和算法只是一条腿,要健步如飞还得两条腿走路。程序员的另一条腿就是基础 API,你需要

认真掌握 TCP/IP 协议详解,Socket 通信,线程,文件读写等每种语言和技术都需要的基础知识,一个新事务即使再绚烂夺目也

是利用这些基石搭建而成的,如果你彻底了解了它们将永处不败的境地,甚至觉得新技术也不过如此。 

如何打好根基 

        多学。从项目中学,从书本中学,从别人哪里学,从失败中学习,掌握基础 API 就是需要多学习,如果有已有的知识总结可

以起到事半功倍的效果。 

        多想。学习 OO 和算法都需要理解,光是死记硬背毫无用处,子曰“学而不思则罔”

,OO 和算法的学习都需要一个理解消化

的过程,只有彻底理解了,你才真正掌握了它们。 

        多练。经过代码的历练,程序员才能百炼成钢,成功的项目能告诉你什么是正确的,失败的项目会暗示它为什么会失败,下

次你就能更进退有据。更重要的一点是,不做项目,不做多个项目,不做大项目,程序员对“度”的把握总是缺乏经验,不是过

就是不及。真正亲手手写过 10-20 万行代码的是成为一个成熟程序员的必要条件(但不是充分条件)。 

        多见。眼光狭窄,目光短浅,固步自封只能造就一只井底之蛙,你的眼光必须超越自己所在的环境才能取得真正的进步,现

在有许多开源社区和软件都是你应该涉足的地方,和什么样的人在一起你自然也会成为什么样的人。

“蓬生麻中,不扶而直,白沙

在涅,与之俱黑“说的就是这个道理。 

程序员的身价是由什么决定的? 

        如果一个程序员有良好的根基,充满智慧的头脑,积极主动的精神和锲而不舍的毅力,他就一定能有丰厚的薪水吗?答案是

否定的。原因在于薪水不光取决于自身的水平,还取决于周围的环境。 

        程序员的身价首先决定于他能给雇主带来多大的利益,如果带不来利益,程序员再有本事也是白搭,这就要求程序员一定要