声明:本文为转载,如果有侵犯知识版权,请通知本人,本人将即刻停止侵权行为:
标题:程序员的进化路线图
网址:http://fangang.iteye.com/blog/1535468
我身边的一些朋友常常问我,干了这么多年程序员真的有些累了、倦了、没意思了。虽然干了一个又一个的软件项目,但其实没有什么差别,就是写程序。当程序员的出路何在?每次我总是抑制不住自己的情绪想说,其实不是做程序员没意思,而是你还始终站在一个层次上。人是一种奇怪的动物,总是不进则退,程序员也是一样。它分为了许多的层次,刚毕业是一个层次,干了几年是一个层次,经历多年磨砺又是一个层次,经过几多磨难化茧成蝶将是另一个层次。这就像游戏,当你到了一定级别就应当升级转职了,而如果你始终拒绝升级转职,剩下的时间就是在索然无味地重复了;但当你完成升级转职,你就将进入另一个令人兴奋的世界。做程序员也是这样。OK,我们来看看程序员进化转职的路线图吧。
当你毕业刚进入软件行业时,当然毫无疑问是去编程了。每次项目启动以后,经理们就会给你一大堆需求,上面定好了你的程序应当实现什么功能。剩下的时间就是照着编写程序啦。但是,当你编程数年后,经历数个软件项目以后,你有没有想过,这些需求是怎么定出来的?那么变态,那么奇怪。有时候,我们为了客户一个变态的需求绞尽脑汁,最后客户还不买账。这些需求合理吗,客户真正的是要什么样的功能。当你开始思考这些问题,开始提出一大堆问题来质疑需求时,你的思维就开始从程序员进化为需求分析员。当项目经理发现你有需求分析员的潜质,OK,你的职业生涯开始升级了。你开始转职为需求分析员。
有人说,需求分析员就是需要那些不懂技术的人来做,我是绝对反对这样的看法的。需求分析员的作用不是那个记录员,记录客户的需求。需求分析员要记录客户的原始需求,然后分析整理,进行技术可行性分析,最后拿出客户满意而又技术可行的产品需求规格。不懂技术,就不能提前发现技术风险,为软件开发扫清障碍。所有有那么多人说需求分析员就是酱油,不懂技术的记录员当然就是酱油啦。但是,当你经过一番精彩的需求分析,却看到项目经理就这样直接交给那些稚嫩的初级程序员时,相信你的心都凉了。
从需求到实现,中间的距离也许有数百英里远,特别是那些大型管理系统。数百项业务功能,大大小小的模块,而流程与数据又错综交织。如果就这些直接扔给程序员们,就如同没有经过城市规划的房地产开发:小区是修好了,一会儿自来水管刨一遍路面,一会儿宽带刨一遍路面,好端端的路面变得丑陋不堪。现在城市建设都有专门的规划部门了,但软件开发依然延续着这种序乱。模块与模块之间没有接口调用,它们不是相互协作而是各自为政;共有的功能本应提取出来,但因为没有统一的规划,你写一遍,他又写一遍;没有技术架构和设计规范,程序员们按照各自喜好编写程序。终于有一天,你实在看不下去了。凭借多年的经验与资历,你开始着手规划系统,制订编程规范,并要求所有人遵守。这时候,你开始向系统架构师挺进了。
其实有许多人都十分疑惑,系统架构师是怎样一个角色。简单的说,他就是一个中间人,一个十分重要的中间人,联系业务需求与技术实现的中间人。需求分析员是那些精通业务需求的人,但是由于长期脱离技术,他们对技术的认识在退化,而做需求不能脱离技术。系统架构师可以与需求分析员一道分析需求,哪些是可行的,哪些是不可行的,怎么能够提出更可行的方案,满足用户的需求。同时,尽早确定技术架构,验证技术架构,攻克技术难题,对规避项目风险至关重要。毕竟,搞不定早点儿提出来嘛。
一旦需求定下来,开始开发了,系统架构师的工作并没有结束,因为程序员总趋向于各自为战,他们之间需要一个协调人。这个协调人要事先将他们各自的功能划分清楚。然后是相互之间的接口调用,这是一种协作的体现,系统内聚的体现。最后,系统除了横向的功能划分,还应当定义纵向的层次划分。应当划分哪些层,采用什么技术,每一层按照怎样的规范编写。总之,系统架构师就是那个规划师、协调人。当然,系统架构师还是那个技术牛人,因此技术难点的解决方案也归他来处理啦。
去理解和把握业务需求是需求分析员的工作;统领全局,将需求转换成技术是系统架构师干的事儿。但不论谁,都是在被动地接受需求。客户需求来了,搞一搞;客户需求不来呢?正所谓态度决定一切,试想,比尔盖茨开发windows,是因为一位客户跑来找到他:hi,比尔,我提个需求,你给我弄个windows吧;乔布斯设计ipod,是因为另一个客户跟他说:hei,我在地铁上太无聊了,你给整个ipod吧。这是否让人感觉滑稽可笑呢?软件发展的动力来源于技术的创新。每当新技术出现的时候,我们应当有这样的意识,怎样把它们转变成用户的需求。这就是主动发掘用户需求的意识。当你拥有这样的意识,并最终将胜势转变成胜利时,你又升级了,你将成为市场总监甚至是BOSS。当老板的并不一定是各方面能力都很强的人,而是那些具有开拓精神,从无人走过的荒草中开拓出道路的人。
在游戏中,我们完成一个并不算困难的任务就可以升级转职,但在现实中却并不是这样。每升一次级需要我们付出的是太多的辛苦与努力。怎样才能在适时的时候成功转职呢?管理学中的一句话道破了天机:在成为一名管理者之前,先做一位无名的管理者。什么是无名的管理者呢?没有管理者之职,却做管理者之事,这同样适用于其它职业。试想,当你还没有成为需求分析员时,努力去用需求分析员的思维,去完成需求分析的工作。当你一次次出色地完成需求分析的工作时,公司自然就会提升你为需求分析员。同样,当你开始运用系统架构师的思维去完成系统架构设计时,系统架构师还离你远吗?
总之,只有那些不安于现状、勤于思考、乐于学习,并且有一颗坚强的心的人,才能走到胜利的彼岸。
当想到最后一句的时候,我想到之前在另外一个博客看到的两句话:
1、 I believe that we are who we choose to be. Nobody‘s going to come and save you, you‘ve got tosave yourself. 我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
2、Whatever you do,remember that you do it foryourself,then you will not complain. 无论做什么,记得是为自己而做,那就毫无怨言。