好几天前,在微信里,有个童鞋给我留了这么一段话:
「程序君,昨日知乎日报上出现的那篇《为啥中国的程序员都被称为码农》(以下简称「码农」),看完实在心酸,作为一名还在大学校园即将走向“码农”大军的愣头青,想请教您,你对那篇文章有啥看法?上面的说法属实吗?中国程序员的现状大体是怎样?麻烦指点」
我大概看了一下那篇文章,说的有些道理。但程序君认为:别人是不是码农与你无关,你不该成为那篇文章作者眼中的码农。作者说码农一词强调程序员「地位低下、枯燥和劳累」。作为一个程序员,我也来随便说说。
收入和地位
一般而言,程序员的收入水平不低。我没有具体的数据,但在一线城市,程序员的平均收入应该都能达到该市的中上水平 —— 我猜 top 30% 左右。2012 年,我们在校园招聘的时候,很多面试后非常心仪的同学(清华,北大,中科院等)最终都拿着十几到二十万的薪资去了B,T等公司,有一个我们特别中意的 iOS 工程师,被我们追了很久,但后来最终还是被某著名游戏公司招安,拿了二十好几万的薪水 —— 这可是程序君工作了好几年后才能拿到的 package 啊。
所以你说程序员的收入低么?为什么你的收入会低?为什么你怕你未来的收入会低?
程序君有个朋友,也是途客圈的前员工,本科来实习前已经有很多独立的项目经验,掌握了 python/django 和 iOS 的开发能力。他聪明好学,上手能力非常快,稍加指点就能从事重要功能的开发,勤奋程度又不输于程序君,所以进步神速。后来途客圈的很多核心功能都交由他来负责,某些功能程序君都自认为无法做得比他好。一年半后他从途客圈「毕业」时,已经是各大公司争相想招致麾下的「面霸」,同时拿到了好几份 offer,最终去了某搜索公司,现在前途一片光明。
我想这是一个很有借鉴意义的例子,尤其对于在校学生。就像之前的『软件开发升级打怪之路』所讲的那样,我们身边有那么多很有意思的问题可以通过软件来解决,你愿意放弃一部分打 dota 的时间和精力去解决么?你愿意在解决的过程中排除万难,啃下一个个硬骨头么?
如果你在学生时代就有很多拿得出手的项目,那么在现在互联网热火朝天,人才缺口很大的时代,找一份薪水不低的工作还是难事么?
程序员可能是世界上唯一一份不用太靠学历,不用太靠爹娘,甚至都不用太靠熬日子出头的工种。有人杜撰了这么个故事:
说 Python 之父 Guido van Rossum 有天跑去 google 面试,说了三个词:"I wrote python",就被录用了。
当然像 Guido 这样的大牛犯不着主动去找工作的,就像球场上的超级明星,给猎头打个电话,说我想挪个窝了,工作机会就会像雪片一样飞来。这个故事虽为杜撰,但不失一个很好的例子说明程序员「不靠天,不靠地,就靠自己一双手」的本质。你的薪水取决于你能做出什么来。
至于地位,我觉得除了权贵阶层,其他人的地位都差不多。如果不做公务员,没事别老琢磨地位,那玩意说来就来,说走就走。我倒觉得程序员应该多提高自己的品味 —— 至少多学学打扮自己,别拿着中产的收入过得像无产阶级。
另外,建议妹子们也多关注关注程序员这个群体 —— 毕竟能够改变世界的几类人中,程序员算是最好接近,在比较年轻的时候就能看出潜力,也最好玩弄于股掌中的。^_^
工作枯燥
工作枯燥这事真心和你自己的感受有关。首先不是所有人都适合做程序员的,如果你换了不少团队或公司,做什么都觉得枯燥,自己又没兴趣做 pet project,那你要好好考虑下自己是否适合这条路。否则走下去,就真成了「码农」一文中的码农了。
有人曾经给我留言说自己不想做业务相关的事,没意思,想做「真正的程序员」做的事情。拜托,我们做的是产品,哪个产品不是和业务相关的呢?脱离了业务的软件,要么是纯粹个人爱好,要么只能在象牙塔里生存。
有人说工作特么没劲,每天干的都是琐碎边缘的活儿,枯燥死了。好吧,你以为程序君做得总是高大上的事情么?程序君最近两周干的活也琐碎得要命,其中一个任务类似于「从 linux kernel 的源代码里,把所有.c 引用的.h 文件摘一摘,只留下真正有用的(但系统还能正常编译运行)」。
工作中这样的活不少,枯燥是有点枯燥,遇到了与其怨天尤人,不如想办法快点将它完成。程序君花了大半天时间,在走了很多弯路写了两个程序后,终于找到一个巧妙的办法,仅仅写了五十多行 python 代码就将其完成。效果从最初的方案减少了 25% 的.h 文件一直到减少了 95% 的.h 文件。
我比较不理解有程序员说自己总不得不做重复劳动,所以感觉工作异常枯燥。想想「程序员」这顶帽子带在头上意味着什么?它意味着全世界任何群体都有理由说自己的劳动是重复劳动,唯独程序员这个群体不能。为何?程序员坚守的信条是 DRY(Don't Repeat Yourself),一件事当你发现你需要重复第二次时,就要考虑将其自动化。做不到这一点的请努力,因为这决定了你的效率和效能。
还举我自己的例子吧。前些日子我要测试几个开发环境,流程大概是下载代码,编译,运行 UT。因为开发环境有点问题,所以在下载完代码后我需要对代码打个 patch。这活第一遍我是手工做的,为了验证整个流程的正确性,调整 patch 等等。第二遍以后我就写了个脚本将其自动化。虽然在我写这个脚本的时间里,我完全可以对所有的开发环境都一一验证,但脚本化的好处是,我可以让别人用这个脚本也进行独立验证,我也可以在今后几天的工作中反复使用。
枯燥是你看待任务的主观情绪。很多看起来外表光鲜的互联网公司或者软件公司,真正分到你手上的任务就不见得光鲜靓丽。大数据?那是对外美好的商业表述。你真正做的事情也许是对海量日志进行或手动或半自动分析,枯燥不?操作系统?好吧,你去了以后发现主要做的是本地化,枯燥不?虚拟化?好吧,那里很大的团队在做驱动开发,枯燥不?
没那么多枯燥。软件就是一个个实现起来非常枯燥的功能有机地组合在一起,为用户(客户)提供价值。无法认清这一点,总认为自己干的就是最枯燥的,那你只能继续枯燥下去,也只能成为「码农」作者眼中的码农。
辛苦劳累
辛苦劳累倒是真的。不过要看你怎么个辛苦法。
如果你在一家各种限制你自由发挥,还以你工作时长为工作态度和工作能力的评定标准,那么,除非你有其它想法,否则应该选择离开。记得我毕业后工作的第一家公司,有天晚上吃饭,老板问我对 team 里两个女孩有什么评价,我说她们工作得挺好,合作愉快啊(潜台词是男女搭配,干活不累^_^)。老板努了努嘴,说:可她们一下班就回家,工作态度不积极啊。我听着不是滋味,心里就萌生了离开的念头。
程序员的工作绝对不应该用工作时间,是否加班来衡量。如果你的老板给你的评定是「该员工工作积极努力,主动加班,blablabla」,你还愿意这么呆着,那你就别抱怨辛苦劳累。
不过现状的确是是很多程序员都在加班,包括我在内。
有些人加班是真忙。但其实有很多行业比程序员忙得多,比如四大所在的会计(审计)行业,比如投行,咨询。
也有些人加班是刷存在感。
但更多的人加班是为了有一个清静的环境,能做点什么。
要说辛苦劳累,我觉得一个很重要的原因是:这个工种需要你不断更新夯实自己的技能。
如果被迫接受,那身心俱疲;如果主动出击,身体累了点,心灵上的成就感还是不小的。