第37周星期六几篇文摘
以我的经验来看,一个程序员想跟 Rodrigo 做同事,而一个经理想要 Gabriella 做同事。这是有道理的,毕竟程序员碰到的都是让人烦心的技术问题,而经理面对的是项目期限和沟通问题。但关键是,如果经理想要给某人升职的时候,Gabriella 就走在了前进的道路了。我已经看到很多次,那些并不伟大的程序员走到了顶端,而很多优秀的程序员却因为沟通问题一直留在底层。这句话深有体会,解决技术问题固然重要,但满足领导项目经理的需求更重要,因为后者会直接决定你的升职或考评绩效。
研发经理应该来源于架构师,项目经理大多升级为产品经理?之前还不知道研发经理比架构师、产品经理比项目经理更高级而不是同级别?,或许是不同公司的岗位级别不完全一致吧
对于研发经理,不论是空降还是重新组团,如果想迅速和顺利的进入角色,对其自身又有哪些要求呢?这里我根据自己以往的经验总结了以下几点,需要说明的是,这仅仅代表个人的观点,如有不同,欢迎大家理智文明的讨论。
1. 从技术背景来讲,至少需要八年以上的实际编程经验,三年以上项目管理或架构设计经验。再进一步分,如果是从开发者成为一名项目管理者,那么在积累若干年项目管理经验之后将会成为偏向管理型的研发经理。而另外一种则是从普通的开发者跃升为一名软件的设计者,即架构师。对于后者,同样经过若干年的技术积累和打拼之后,一旦成为研发经理则将更加偏向于技术。在以前那家美资公司,我们的Boss在很多时候都会和我们一起讨论技术解决方案,甚至在我们实在忙不过来的时候,他也会参与其中和我们一起编码,后来从测试人员的反馈来看,他所写的代码模块DEBUG率非常之低。
2. 从自身性格来讲,在经过多年的开发之后,有的人或将成为项目经理,有的人则继续提高自己的技术能力并成为架构师,当然不可否认的是,还有一部分人选择创业或者干脆离开这个行业。不管怎么讲,随着时间的推移,经验的积累,以及周围环境的改变,这种变化又是不可避免。但是每个人发生改变的方向往往是不同的,尽管外部环境有一定的主导因素,然而如果你工作在一个适合于自己的软件企业之中,自身的因素往往会是决定性的。试想,如果你是一位不善言谈同时又酷爱钻研新技术的开发者,那么在我看来你更适合成为某方面的技术专家。如果你善于表达和沟通同时也热爱技术,那么我想架构师将会是更适合你的方向。再者就是善于沟通与团队协作和协调,然而对技术的感觉马马虎虎,这样的人当然更适合于项目经理的职位。在新的岗位上再经过多年的努力后,后两种类型的软件人员则更容易成为研发经理。
3. 最后就是从相关产品技术经验来讲,可能有很多人会不认同我的这一观点,甚至认为有些极端和滑稽,没有关系,各抒己见罢了。我认为如果你当前正在和正要开发的产品平台,对于你存在着非常明显的技术空白区域,那将是极为危险的。因为特别是在国内很多中小型软件企业,不会单单设立一个架构师这样的技术岗位,往往是由资格比较老或是技术比较突出的人来兼任,有时甚至是直接由研发经理亲自担任了。如果你不幸的成为后者,那么不用说,这个平台所能应用的技术环节,你或者可以自己搞定,或者可以借助你的人脉请你的朋友帮你搞定,否则将会给你的工作带来极大的麻烦。当然这里我所指的是技术方向和平台架构的搭建,而不是那些繁琐的技术细节。
1 无意识无能力(不知道自己不知道
这个时候是刚开始接触编程到编程有差不多一年左右的时间,大多数这个时候在大学生涯,年少轻狂,激情四射,学习起来超级有干劲,尤其当自己知道一个个编程法则,写出很自己认为很牛逼的程序,研究过高深的算法,做过几个项目,觉得编程很简单。我当初就是这样的,在大学的时候会用 spring,hibernate,tapestry(貌似这个不是很流行),struts做过两个中型项目,学习过设计模式,部署过ejb,看过soa相关的皮毛知识,觉得自己无敌了,都不知道学习什么了,觉得所有框架都会用了,好牛逼啊,不知道自己学习啥子了。
2 有意识无能力(知道自己不知道)
这个阶段应该是编码超过一年,接触过比较大型的项目,在工作中遇到一些自己无法独立解决的问题。会经常请教一些前辈们。对于编程,知其然,不知其所以然。这个时候大概应该参加工作了,因为工作过程中会遇到很多在校园里面无法遇到的技术问题,比如性能,可用性等等。这个时候没有当初的那种轻狂,开始虚心学习,研究事物的本质。我在刚工作3个月时候,才发现自己水平很菜。虽然会用spring,但是无法领会其精髓。以前做的项目都是自己搭建工程的,而公司有一套标准化的开发,测试,打包,构建工具。开始接触越来越多的技术,遇到很多无法独立解决的问题。这个时候感觉自己的成长很快,慢慢开始走上职业程序员之路。惭愧自己还处于此阶段,经常感慨无限的未知太多,要尽快提升自己才行。
3 有意识有能力(知道自己知道)
经过有意识无能力的阶段,这个时候,由于自己接触的东西已经非常多,职业水平已经达到一个台阶。经历过几千小时的编码生涯,解决过各种棘手的技术问题,对于遇到的大多数问题都知道其发生的原因以及解决方案。在这个阶段里面,已经是一个很有水平的程序员,能够独立解决自己遇到过的所有问题。我在公司的前几年,正好遇到公司的快速发展,公司的技术架构经历了巨大的变化,从单系统架构到分布式架构,从单系统发展到上百系统,日独立PV从几十W发展到接上亿,每天上亿的交易数据。这个阶段自己在 编码技巧,设计模式,消息中间件,分布式系统设计,领域驱动设计,集群,数据库拆分,架构设计 都有很大提升。基本上能够解决遇到所有的问题。
4 无意识有能力(不知道自己知道)
这个阶段就是融会贯通的时候。如果说第三个阶段是能够解决自己遇到的所有问题,这个阶段就是能够解决他人遇到的但是自己还没有碰到的问题。这个阶段就是抽象思维能力不断提高能够达到的境界。如果说第三个阶段能够解决某一个问题。这个阶段能够解决某一类问题。能够把自己在第三阶段遇到的问题抽象化一类问题,例如如何解决一个系统的性能问题。我最近在做ios相关的开发,自己之前从未学习过objective c,但是因为对java底层实现以及设计模式和mvc设计了解,对cocoa 中UIKit设计图看一下就知道大概是如何实现的了。还有就是目前比较火爆的 函数式编程的高阶函数 和 java中的模板模式与 回调机制有点类似。这就是融汇贯通的结果。目前觉得个人能力已经基本在这个阶段。
ps:看到很多吐槽,其实真的木有必要,你在哪个阶段,是现在的你对于自己的认知情况。随着自己的越来越了解,可能阶段也会发生变化。这个阶段本来就比较主观的。其实程序员最关键的是需要思考,就好比,如果你觉得你真的达到第四个阶段,那你后续还需要提升的是什么?程序员限定的范围是什么?程序员的职责是什么,程序员未来的发展是什么?只有不断的思考,才会脱离这个阶段之争。有一些程序员是可以成为项目经理,有一些程序员可以架构师,有一些程序员可以成为科学家,但是他们不一定真的是编码高手,所以不能狭隘的认为程序员就是coder!
1. Change It Up – Sometimes even small changes to your routine can produce big results. Get up 30 minutes early. Stay 30 minutes late. Do things out-of-order for once.
有所改变 —— 有时候,哪怕最小的改变都能带来不错的结果。比如,早30分钟起床、晚30分钟回家、打破常规做事情。
2. Always Give It Your All – Going through the motions produces average results because you aren't doing your best work. Never compromise yourself. Always do things right the first time and with class.
全力以赴 —— 敷衍塞责只能造成平庸,因为你并没有尽最大努力。永远别跟自己妥协。永远在第一时间最出色地完成任务。
3. Do Something New – If you want different results, you have to do different things. Today, do something new. Something you wouldn't have normally done. When presented with two choices, choose the one that is new to you.
尝试新事物 —— 若想得到不同结果,你就得尝试不同事物。今天就开始尝试点新花样吧。做点你平时不会去做的事情。倘若你有两种选择,何不选择新奇的那个呢?
4. Stretch Your Limits – Going through the motions means that you aren't pushing yourself. You are stronger than you even know, but until you test yourself, you will not know your true capabilities.
挑战极限 —— "做一天和尚撞一天钟"说明你对自己不够严格。你远比自己想象的坚强,但只有当你经历了挑战,你才会知道自己的真正实力。
5. Talk to Someone… Else - If you always talk to the same people, you are always going to have the same conversations. Who is the person that you always see at work, but never talk to? Engage them today. They might just be someone who you want to know, either personally or professionally.
找其他人聊天 —— 总是和同样的人谈话,那谈话的内容也总是差不多吧。你工作时常常碰见却很少交谈的人是谁?今天就试着跟他们聊聊吧。或许他们正是你私下里或工作上想要了解的人呢。
6. Learn Something – If you don't want to always be doing the same things, you have to learn new skills. Learn something new every single day.
日有所获 —— 不想重复同样的事情?那你可得学点新技能了。每天试着学点新东西吧。
7. Choose Your Own Path – We often forget that we have a choice in our path. Rather than just repeating the course where everyone else has gone before us, blaze your own path.
走自己的路 —— 我们总是忘了自己有权选择自己的道路。我们不必重蹈他人的覆辙。所以,请闯出你自己的道路吧。
Ensure that you aren't just going through the motions today. We all have limited time in our days and lives. Don't settle for the same old same old. Choose to do something new,and always give it your best.
确保你今天不再磨洋工混日子。我们的时间和生活是有限的。请不要躺在过去的温柔乡里。去尝试新鲜事物。并全力以赴!