工作十年的技术大牛谈:程序员如何从技术进阶到管理

来自:大数据每日评论(微信号:AIReport),作者:小象君

近日,笔者有幸采访了一位IT大牛。他已经参加工作十余年,从最初的技术人员到作初级team leader,他只用了两年不到的时间,现已是某知名企业的高管。他与笔者分享了程序员从技术进阶管理的一些经验和建议。

现在笔者将之整理出来,希望对有志于进阶管理的程序员童鞋有一定的指导和参考意义:

1. 要做管理,首先你必须是一个可靠的程序员

作为程序员,最基本的要求是:代码可读性好,功能正常且没有明显bug。但这一点很多程序员都不做到。

据这位大牛所说,很多程序员写的代码简直不忍直视,review的时候你甚至会有拍桌子的冲动,比如数字常量到处理、函数命名用拼音、if else嵌套十几层,一套代码混用多种命名法,更有甚者根本不考虑命名规则,变量名就叫username,高兴起来又叫userName……

比如:

user_name = 'a';

companyName = 'c';

print user_name, companyName

有的变量甚至都没有什么意义,比如:

“a = 1; b =2; c = a + b”

鬼知道他想要表达的是什么!

还有的不写注释或代码写完之后才去补注释……专职工作尚且如此不靠谱,想进阶管理的难度自然不必说,估计能出现在领导考虑提拔的候选人名单里都是个奇迹。


还有一种程序员则更是糟糕。他会信誓旦旦地跟你打包票,说某个功能交给他肯定没问题,一周或几周之内肯定能搞定云云。

结果要么到时拿出来的代码bug无数,要么直到deadline了才一脸无奈地告诉你他无法完成……说实话,这种人的存在对项目团队绝对是一种伤害,不单对团队没贡献不说,还会把同事拉下水。其实,这类程序员在团队里想保住饭碗都费劲,更别谈晋升了。

一个不可靠的程序员又怎么会是一个可靠的团队管理者?公司领导将技术团队交给他又怎么能放心?

2. 做好每一项看似简单的事情,注重细节

细节决定成败,这句话放之四海而皆准。程序员的工作绝对不是单单写好代码就万事大吉,尤其是你想进阶管理,更要将日常工作中那些看不上眼的小事做好。

有些人的代码低级错误不断,像if语句漏了大括号,“==“ 写成“=”,Java中的空指针处理、定义一个数组时没有考虑数组的最大情况造成越界读写等等,太多了!这些虽然不是大问题,但却会让领导对你工作能力的评估直接降到谷底。

比如:

if (salary > 10000)

   highSalaryNum += 1;

highSalarySum += salary;

其实作者是想写成:

if (salary > 10000) {

   highSalaryNum += 1;

   highSalarySum += salary;

}

再如:判断字符串变量的时候,有人想判断一个字符串是不是等于hello写成

if (inputString.equals("hello")) ...

如果这之前inputString没有被初始化,程序在执行过程中会抛异常退出。

一些新手会写成

if ( inputString != null && inputString.equals("hello")) ...

而很多有经验的程序员则会写成:

if ("hello".equals(inputString)) ...

日常工作联系难免用到邮件。有些程序员的邮件写得极为随意,邮件标题不明或者为空,内容混乱如同车祸现场,不讲究样式、格式,乱糟糟的一团,让了看了就头大。

写文档时各种不规范。无换行、无分段,该用流程图的时候用文字,该用文字的时候用流程图,流程图里也是各种伤:操作和实体混在一起,箭头指向令人茫然不知所以……这样的文档谁能读得下去?

这样的员工,老板有什么理由提拔他?

不扫一屋何以扫天下?连小事情都做不好的人,又如何能委以重任呢?

 3. 用心努力工作

看到这条,许多程序员童鞋都会笑了。没错,你们都很努力,996几乎成了互联网公司的标准作息。但是我们也必须得承认,不同人努力后的结果是不一样的。一个优秀的程序员和一个平庸的程序员其生产效率有着数倍乃至数十倍的差异!

比如,你加班加点、累死累活地写一套代码,一周工作80个小时,其中有40个小时在改bug,而别人同样工作80小时,写了两套代码,运行结果比你的还好。你服气不?

这种对比绝对不是极个别的例子,现实情况中存在很多。

为什么会这样呢?有句话是这么说的:永远不要用战术上的勤奋掩盖战略上的懒惰。你之所以生产效率低,那是因为你没有动脑,没有用心去思考。

编程是一种纯脑力劳动,千万不要真的以“码农”自居,这个词只是低调而傲娇的程序员自黑用的,你若当真,硬是把程序员干成了体力劳动者,那只能说是你的不幸。


聪明的程序员会用50%-70%的时间来思考,尝试和权衡各种设计和实现,而用30%–50%的时间去写代码、调试和测试。而苦逼的程序员则会拿出100%-150%的时间来忙着赶进度、返工、然后重构、改bug… 

所以,在一切以结果为导向的战略思想指引下,甭管你做事多么卖力,就算累病累瘫……生产效率低下的你仍然不会进入领导的法眼,进阶无望。

 4. 保持开放的心态,正视自己的失误

再厉害的程序员大牛也无法100%避免bug。写的代码多了,难免出现疏漏。在这个时候,如果领导责备你,那就坦然接受吧。自己写的bug,含泪也要改完。

此时任何的借口都是苍白无力的,因为bug就在那里,再多的解释也不能让它自动消失。大大方方地承认失误,并用最快的速度修改妥当,是最佳的处理方式。这不单单是能力问题,更是责任意识的体现。


领导要提拔下属,责任心、有担当必定是一个考核指标,不然选上来的人一出问题就各种推诿,那不是给自己添堵呢吗?

作为年轻人,难免有做的不到位的地方。领导能够指出来,不管态度好还是不好,都说明他是对你有要求、有期待的。不管他说的对不对,抱着“有则改之无则加勉”的态度,虚心接受就好。如果要反驳,一定要有充分的理由和依据。

然后在接下来的工作里让领导看到他所期待的变化,领导对你的好感必然大增——这也是职场的生存之道。


不妨换位思考一下,当你处于领导的位置,你给下属提了意见,他的答复总是:

“不是吧,这个不是你想象得那样的。”……

“这么讲是没毛病,但要求太高了吧!”……

然后在接下来的工作中,你想要的变化仍然没有出现。你还会关注他吗?有提拔的机会会给他吗?

5. 不要只专注技术,要理解你的产品和用户

许多程序员都痴迷于修炼技术,为了让自己在技术上更牛逼,他们毫不介意在一个简单的功能模块里用上复杂的算法和高深的技术,而不去考虑这样做是否增加了时间成本,是否影响了用户体验。

技术是为产品服务的,而产品是要满足市场需求的。所以技术归根结底是为市场服务的,切莫舍本逐末。市场具体需要什么产品、什么功能,需要市场自己来告诉你,这不是在技术范畴里能探索出来的。

很多时候,你最关注的问题,实际上用户可能并不在意。你可能连续花了几周的时间去修改一个微不足道的bug,而这个bug可能几百万用户中都没有一个人会关注。你真正要做的是尽快把产品发布出去,尽可能多的获取用户的反馈,那些在反馈中高频率出现的问题和需求才是你真正要关心的。

你要时刻关注你的产品和用户,要从电商网站、售后、论坛等地获取他们真实的评价。理论上讲,一个好的程序员也应该是一个好的产品经理,有了这样的意识,你才具备了作管理的基本条件。

作为团队的管理者,你可能经常要代表团队跟产品经理撕逼,如果你不懂产品、不懂市场、不懂用户,那产品经理就可以在这三个维度把你碾压成渣,你的团队就只能处于被动挨打的境地,尽情享受无止境的加班吧!反正你没有话语权。

6. 要主动积极地去沟通

出色的沟通能力是每一个管理岗位的必备技能。一个优秀的程序员可能只需要写好代码即可,但是要做管理的话,沟通工作必须要重视。向公司高层申请资源、跟产品经理讨价还价,与测试部门搞好关系,勾搭设计妹子,抚慰程序员下属,不做好沟通怎么能行?

但是说起来简单,做起来很难。沟通能力的提高很难一蹴而就,网上充斥着各种帖子,从仪态到情绪,再到话术,说得头头是道,实际上可执行性欠奉,毕竟情况是因人而异的。在沟通方面,这位大牛只给了一个建议,那就是:主动积极地去沟通。


沟通的目的是为解决问题。只要有一个主动积极的态度,事情就会向好的方向发展。也许你不善口才,说不出太多漂亮的话,但只要秉持实事求是的原则,大部分问题其实都是可以得到解决的。

比如,根据项目实际情况向公司高层提资源需求,根据团队实际情况与产品经理协商工期,与测试部门保持沟通畅通,称赞设计妹子的作品不错/创意新颖,犒劳程序员属下一顿火锅……这里并不需要极为高明的沟通技巧,有一说一足矣。

如上六点,便是笔者整理的内容。如感觉对你的职业进阶有所帮助,千万记得点赞哦!

推荐↓↓↓
程序员的那点事
上一篇:十年工龄的程序员为你揭示最危害程序员职业生涯的三大观念 下一篇:程序员惨遭辞退竟只因提了些代码修改意见?