作者|池建强

编辑|小智

 

戳阅读原文,获得短信提醒,不错过下次InfoQ大咖说直播!

1

写在前面

加入极客邦的第一天就被拉到了「大咖说」的现场,这也是我始料未及的事情。从锤子科技正式离职之后,我享受了一个短暂的假期,随即投入了下一个战场,极客邦科技和内容服务领域。

很多人都在问我,为什么要离开锤子科技加入极客邦科技,其实这就是一个简单的职业选择。人生在世,一路向前,总会遇到各种各样的选择,有时候是被动选择,有时候是主动选择,仅此而已。

锤子科技是一家独特的,有趣的公司,由于种种原因,它的成长之路比其他创业公司走的更为艰难,不过锤科创造的产品和秉持的价值观我是很认可的。我在锤子科技期间认识了一大批优秀的、有趣的、才华横溢的伙伴,他们的技能栈分布在各个领域,这对我来说是一笔巨大的财富。学无止境。

在锤子科技我更多是负责产品的研发和实现,并主导一些底层的技术架构和技术产品,在极客邦科技我可以有更大的自由度,全面负责公司的产品和研发工作。尤其内容产品,一直是我的兴趣所在。这几年我一直在寻找技术和产品平衡点,在知识经济和内容服务层面做了很多尝试,而极客邦聚合了人、技术和内容,对我来说,这是一个非常好的平台。所有就有了「从锤子到极客邦:我的职业生涯巡礼」。

说是我的职业生涯,其实谈的是程序员这个群体以及我对近二十年工作经历的思考。题目起名为「巡礼」,多少有点回顾的意思。我喜爱的作家村上春树有一本小说叫《没有色彩的多崎作和他的巡礼之年》,其中的巡礼就有探究过去,只面未来的意味。

巡礼之年是由三组钢琴独奏组曲组成的一套专辑,由法兰兹·李斯特(Franz Liszt)作曲。一般被认为是李斯特最杰出的作品,为李斯特音乐风格的集大成之作。第三组曲特别被认为代表了李斯特的晚期风格。

所以,今天我会和大家讲述程序员成长的故事和一些思考,包括程序员这个职业的生命力,要不要一直编程,如何寻找自己的特质,程序员和产品的关系,专业的选择,职业的选择,等等。

2

程序员是一个具备长久生命力的职业

我大学刚毕业的时候,程序员还是一个年轻的职业,那个年代,我们都没见过35岁以上的程序员。很多人告诉我,程序员是吃青春饭的,你在国内见过35岁的程序员吗?我说,没有。

就是嘛,所以要尽早转行呀……

这种话听得着实不少,事实上也真的有很多程序员早早转行了,我没转不是因为内心强大,而是比较单纯。35岁,听起来像光年一样的距离,谁会考虑那么遥远的事情。所以我什么都没想就继续编程了。

35岁转瞬即至,除了过了个普通的生日之外,什么都没有发生。那一年我依然听着音乐编写程序,看看周围的朋友,他们要么在某个技术领域成为行家里手,要么在做产品的同时演讲布道,有的设计出了很多人使用的软件,有的则成为了一个纯粹的管理者,经营着上千人的机构。这些人从前是程序员,现在也是。

程序员是这个时代最好的职业之一,是不是最好,不敢确认,毕竟我没离开过互联网行业。不过程序员喜欢自嘲倒是真的,甚至以互黑作为生活的乐趣,有时我们也会被别人黑到喜马拉雅山的高度,但不可否认的是,大部分程序员都是在空调房里敲敲键盘就有可能冷不丁改变了世界,并且,大部分时候,我们都让这个世界变得好了一点点。与很多职业相比,程序员的投入产出比都算高的,稍有智力门槛,也没比其他行业高多少。而这个时代,给了程序员们大展宏图的机会,给我们足够的自由度去创造我们想要的东西。

至于传说中的「程序员职业病」,其实和程序员这个职业并没有多大关系,伏案工作的人群大抵如此。越来越多的互联网公司为员工提供了各种福利,免费的健身房,舒适的桌椅,香浓的咖啡,甚至一些娱乐设施。自己不运动,其实很难怪到这个职业头上。另外,程序员的工作也「并没有想象的那么辛苦」,有太多的行业比我们辛苦的多,所以,遇到头脑清楚逻辑清晰又喜爱计算机并且没有意向进入其他领域的年轻人,我总是对他们说,来做个程序员吧,这是个能让你的生活变得精彩的职业。

3

程序员不一定要写一辈子程序

以前人们总是说年龄大了就不要写代码了,或者说写不动代码了。现在多少有点矫枉过正,比如 CTO 怎么能不写代码呢,写代码可是一辈子的事呀。在我看来,这个问题根本没什么可以争论的,一个阶段一种做法。如果你写代码是最有价值的,就去写代码。如果你做产品是最有价值的,就去做产品。如果你去管理公司是最有价值的,就去管理公司。前一阵子看过一篇文章「扎克伯格开发笔记:打造 Jarvis 的日子」,扎克伯格在文章里写到:

2016年我给自己制定了一个挑战:打造一个像钢铁侠里 Jarvis 那样的家庭 AI 助手。

在这一年里,我打造了一个可以通过手机和电脑进行对话的 AI 系统。它能够控制我家里的灯光、温度、电器、音乐和安防系统,而且这个 AI 还能了解我的品味和习惯,可以学习新的词汇和概念,甚至可以逗我的女儿 Max 开心。Jarvis 是由 Python、PHP 和 Objective-C 编写的,运用了包括自然语言处理、语音识别、面部识别以及强化学习在内的人工智能技术。

扎克伯格是为了编程而编程么,显然不是。除了保持技术的敏感度,他主要是为了了解人工智能发展的现状。通过挑战熟悉 Facebook 的工程师们使用的内部技术,同时了解智能家居。而且,这些工作仅仅占用了他很少一部分时间。

实际情况也是这样,与我一起成长起来的七零后程序员,差不多有超过一半,他们的工作重心已经不再是编码,而是其他工作事务,另外一半则依然以编程为主要任务。这两种状态,都是很好的存在。

4

程序员职业生涯的关键点是哪些?

以我并不丰富的程序员阅历来看,入行三到五年的经历对程序员以后的职业生涯有非常重要的作用。互联网时代学习环境开放,资料浩如烟海,很多大学生在走出学校大门的时候,很可能在某项专业技能上已经达到了很高的水准,但是这三到五年的探索,依然是不可或缺的。

很多人喜欢制定学习计划,但这些计划大都无法执行下去。不是计划出了问题,而是人学习和提升的方式很难按部就班,很多时候我们都是在摸索前行。就像你今天按计划要耕完一亩田,作业进行到一半的时候,你发现一块土质的异常,于是深挖下去,用镰刀割去杂草,用铁锹铲除泥土,用钻头钻出深洞,最后发现了一口油井。如果你按照计划耕完这一亩田,可能永远发现不了那口井。

我相信每个人身体里都有某种特质,这种特质让你在某个领域取得成就的可能性远远大于其他,这种特质也能让你异于他人。但是,人们并不是生来就知道自己擅长干什么的,需要花时间去寻找,找到它,然后去做自己最擅长的事情,这对你漫长的职业生涯是一笔巨大的财富。

需要五年这么久的时间吗?依我个人的经历,恐怕更长也说不定。无论程序员也好,软件工程师也罢,叫着简单,领域知识却是浩如烟海。进入现代互联网阶段,程序员的领域细分到了令人发指的程度,比如 XX 语言工程师,前端工程师,后端工程师,架构师,大数据工程师,安全工程师,运维工程师,移动开发工程师,DBA 等等,叫法繁复,甚至职能重叠,这些角色最初都叫做程序员,最终他们像一棵大树,枝条粗壮,蜿蜒生长,然后在树冠分开,并结出了各种各样的果实。同时,每个细分的领域又会衍生出浩瀚的领域知识。

比如编程语言,常用的编程语言就有几十种,静态语言,动态语言,脚本语言,函数式编程,面向对象编程,过程式编程等等,从平台角度,Java VM 上有 Java,Scala,Groovy,Clojure,Jython,Ceylon 等,.Net 平台上有 C#,J#,F#,VB.Net,VC#,ASP.Net,移动平台有 iOS,Android,Windows Phone……

即便我们把目光聚焦在一门语言或技术上,Java,你也不可能仅仅掌握它的语法特性和函数库,然后写写业务表单和增删改查就完了。Java 的虚拟机、性能、并发编程、Jit 技术、垃圾收集、集群、分布式、异常、日志服务,还有大量的 Java 平台开源项目,都需要深入了解。除此之外,一些数据结构和算法也是程序员们应该掌握的内容,比如栈、队列、链表,二叉树、红黑树、B 树,散列表,排序算法,查找算法,最小路径,最小生成树等等……

这么看来,五年的时间并不长是不是?

当然,还有一种可能,你花费了五年的时间,发现自己并不适合做程序员,虽然这听起来有点悲哀,但也不失为一件好事,因为你还有时间转型啊。程序员几乎可以转型为其他任何角色,反过来却很难。我们听说过很多优秀的产品经理,创业者,管理者最初都是程序员,却很少听说哪个顶尖的程序员是从产品经理转过来的,有吗?反正我不知道。

5

程序员如何做出好产品?

在很多人眼中,产品经理做需求,程序员做实现,似乎是一对冤家对头,比如最新的段子是这样的:产品经理失踪了,程序员第一时间到警察局报警。警察对程序员说:你先冷静一下,你这样一直笑没办法做笔录。

其实根本不是这样,一个好的产品,一定是程序员和产品经理一起努力协作的结果,甚至,很多技术人员本身就是这个产品的产品经理,有的即负责技术又设计产品,有的干脆是从程序员转成了产品经理。

张小龙在刚并入腾讯的时候负责 QQ 邮箱,那时候他觉得自己应该做一个管理者,产品的事情让团队的人去做就行了。「说老实话,我个人没有太关注它的体验,几乎很少参与到产品的设计中,结果出了大问题」。之后张小龙彻底改变风格,重回一线。「从极简版开始,我真正投入去做一些我自己掌握的产品体验,我怎么说就怎么做,任何一个元素要改都必须得到我的同意才行,我会全程参与到这个产品的每一个功能体验中」。最后始有微信。

据说张小龙是那个时代南方最好的程序员。

马化腾对技术和产品的重视程度也由来已久,他在2008年的公开演讲中就说:产品和服务是需要大量技术背景支持的,我们希望的产品经理是非常资深的,最好是由做过前端、后端开发的技术研发人员晋升而来。好的产品应该交到一个有技术能力、有经验的人员手上,这样会让大家更加放心。如果产品经理不合格,让很多兄弟陪着干,结果发现方向错误,这是非常浪费和挫伤团队士气的。

如果你是个程序员,如果你热爱你的正在研发的产品,一定要参与到产品的方方面面中来,彻底了解产品的逻辑、体验、交互和用户心理每一次版本发布后去观察用户的反馈,收集产品数据,与产品经理反复探讨和确认每一个细节。

事实上,无论产品经理和设计师做到何等的事无巨细,最终软件是由程序员写出来的,这个产品必定天然携带了这些程序员的特质和元素,如果程序员在每一行代码中倾注了自己的情感,这个产品就是个有情感会呼吸的产品。如果程序员只是实现产品的工具,那做出来的东西也是没有生气的,苍白的。

只有程序员和产品经理同时全情投入,才有可能做出最好的产品。

6

专业性很重要,但也别太「专」了

程序员一看就是个很专业的工种,但是正如前面所述,这个领域的技术用浩如烟海来形容豪不为过,我们穷尽一生也无法掌握其万分之一。人们常说先做专才,再做通才,也就是所谓的 T 字型人才,既有某个领域的专业知识,同时知识技能广泛,为人处世,大开大合。古代开国皇帝大抵都是这种,雄才大略又武艺高强,上马砍人,下马治国,一通百通。

所以程序员必须首先具备专业技能,才能在这个残酷的领域里存活下来,不要没干两年就想着去管理,抛弃专业知识。翻一翻互联网招聘职位列表就知道了,一百条里面99条是各种各样的工程师,好容易有一条是管理性质的,一看是总经理,您能胜任吗?

所以,专业技能是需要优先考虑的,等你真正成了技术大拿,自然知道怎么去扩展横向知识。

但是您也别太专了,以至于成了偏门技术。我有个朋友一直在国外生活,他的技术栈就是大型机 —— MainFrame,每天和 JCL(Job Control Language)、COBOL 等技术打交道,工作机会不多,但这个专业的人员更少。找工作倒是不难,但是看不到上升的空间,每次换工作都得换城市,为了一个更好的职位,甚至需要从美国辗转到日本,每次被折腾的死去活来,换方向代价有太大,薪水还会降很多,进退维谷。

选技术方向,不要让自己处于这种境地。

7

程序员的跳槽?

跳槽也是一种选择,关键是要找到自己的价值。谈到价值,大家就会想到财富,毕竟每次跳槽大家都希望能挣到更多的钱。凭借工资能够完成足够的财富积累吗?不一定。

财富积累应该是阶段性的,而不是线性的。比如你在很长的阶段里,薪水一直徘徊在两万左右,突然有一天,到了一个不可预知的拐点,月入十万了(注意不是月薪),又或者,股权兑现了,又或者,家里拆迁了,等等。总之,财富的积累不是一点点涨上去的,你可能在很短时间内积累的财富远远超过之前积累的总和,或者说,财富积累也符合二八原则。当然,你也可以等着薪水一点点的涨上去,那样的话,就是说,嗯,基本上最终你也不会有什么财富。

无论通过哪种方式,跟随公司上市也好,自己能力大幅提升年薪百万也好,投资也好,创业也好,总之要找到或者碰到这个拐点,坚持、勤奋、坚定,都是不可或缺的因素,当然,运气有时候更为重要一些。无论如何,最重要的是你得一直往前走。

跳槽是往前走的方式之一,跳的过程中,也可能遇到拐点。举个例子,前阿里的王勇睿老师,2010 年面试外企失败(原因未知),退而求其次进了阿里巴巴,结果四年后阿里咔就上市了,王老师富废,结果还是闲不住,又去创业了。举个反面的例子,杭州二爷邱岳,2008 年加入阿里,干得风生水起,2012 年不知道什么原因就从阿里巴巴跳槽了,2016 年不知道什么原因就失业了……

之所以举了两个好朋友的例子,意思就是,跳槽的变数也挺大的,有时候做了有价值的事,获得了应得的财富,有时候则只取其一,或者两手空空。

每个上过班的人都知道,在同一个公司加薪实在是太慢了。为什么会这样?因为你入职的那一天,公司人力部门是以当时的市场价值评估确定你的薪酬的,随后的日子里,如果公司正常发展,加薪升职都要遵循公司的内部通道和规则,如果这个规则赶不上市场薪酬的涨幅(就像最近几年),那你干了三年,薪水还不如同等水平的新员工就是很正常的情况了。

知道了这个真相后怎么办?去判断短期利益和长期利益。无论个人财富还是知识积累,从长远来看,能够让你获得自由的,都是指数级别的增长,也就是那个拐点,而不是你的工资。一个人一辈子挣到手的工资其实是可以一眼看穿的。而可以看穿未来的事情,往往比较无聊。

所以决定离开一个公司或加入一个新公司,问自己几个问题就好了:公司是不是在成长?你自己能不能获得成长?公司的成长和自己有没有关系?干的开不开心?如果这几个问题都是肯定的回答,那么就该留下共同成长。反之就该离开。如果 2:2 呢?这就需要你去判断了。

程序员如何实现个人价值?还是得踏踏实实的写好每一行代码,做好每一个产品,然后等待时间的力量,万一是大器晚红呢?

今日荐号今日荐文

https://view.inews.qq.com/a/20170305A013MW00

程序员该如何过好他的整个职业生涯?(最重要的是你得一直往前走。拐点不是你的工资。想起很久前有个人说我“逻辑性”比较强)good的更多相关文章

  1. [Mac A]为什么国外程序员爱用 Mac?

    from http://www.vpsee.com/2009/06/why-programmers-love-mac/ Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜 ...

  2. (转)【推荐】初级.NET程序员,你必须知道的EF知识和经验

    转自:http://www.cnblogs.com/zhaopei/p/5721789.html [推荐]初级.NET程序员,你必须知道的EF知识和经验   阅读目录   [本文已下咒.先顶后看,会涨 ...

  3. 程序员买房指南——LZ的三次买房和一次卖房经历

    引言 买房,一直是程序员群体绕不开的一个话题,尤其是到了一定年纪和人生阶段以后,买房这件事会变得越来越迫切. 为什么LZ一上来就说,买房是程序员绕不开的一个话题? 其实原因很简单,由于程序员这个职业的 ...

  4. 好程序员web前端分享前端学习路线自学如何找到工作

    好程序员web前端分享前端学习路线自学如何找到工作,自学能不能学会WEB前端并且找到WEB前端开发岗位的工作取决于自身条件,如果基础好,自律性强那么将会容易很多,还有就是自学最难克服的并不是知识点,而 ...

  5. Java已五年1—二本物理到前端实习生到Java程序员「回忆贴」

    关键词:郑州 二本 物理专业 先前端实习生 后Java程序员 更多文章收录在码云仓库:https://gitee.com/bingqilinpeishenme/Java-Tutorials 前言 没有 ...

  6. 「编程羽录」上线,程序员必备的这些技能你能get到嘛?

    大家好,我是小羽. 好久不见,给大家带来个好消息,小羽的全新专题「编程羽录」系列正式上新,主要是介绍一些关于面试题和经验总结的文章. 会为大家提供一些技术栈之外,程序员还需要的其他方面硬核知识,做到全 ...

  7. 打造程序员的高效生产力工具-mac篇

    打造程序员的高效生产力工具-mac篇 1   概述 古语有云:“工欲善其事,必先利其器” [1] ,作为一个程序员,他最重要的生产资源是脑力知识,最重要的生产工具是什么?电脑. 在进行重要的脑力成果输 ...

  8. 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷

    首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在<人月神话>中提到的.银弹原本应该是指某种策略.技术或者技巧可以极大地提高程序员的生产力[1].此题目中关于 ...

  9. StackOverflow程序员推荐的几本书籍

    1. <代码大全>史蒂夫·迈克康奈尔 推荐数:1684 “优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”.这本书有 ...

随机推荐

  1. Display controller

    Field of the Invention The present invention relates to a display controller. Background to the inve ...

  2. Cordova app 检查更新 ----JS进行调用(二)

    原文:Cordova app 检查更新 ----JS进行调用(二) 1.获取版本号 需要添加 插件 cordova plugin add https://github.com/whiteoctober ...

  3. C#性能优化:延迟初始化Lazy

    1. 概述 我们创建某一个对象需要很大的消耗,而这个对象在运行过程中又不一定用到,为了避免每次运行都创建该对象,这时候延迟初始化(也叫延迟实例化)就出场了. 延迟初始化出现于.NET 4.0,主要用于 ...

  4. jsp中国文字形式提交,request对象获取乱码

    jsp表单提交中文字符,request对象获取时乱码解决方法 第一种: 在request对象获取页面Charset中的"C"大写,且页面无中文字符,最好用英文,否则MyEclips ...

  5. 一组西门子S7 报文

    03 00 00 16 11 E0 00 00 00 01 00 C1 02 10 00 C2 02 03 01 C0 01 0A(第一次握手报文) 03 00 00 16 11 D0 00 01 0 ...

  6. Codeforces 444A DZY Loves Physics(图论)

    题目链接:Codeforces 444A DZY Loves Physics 题目大意:给出一张图,图中的每一个节点,每条边都有一个权值.如今有从中挑出一张子图,要求子图联通,而且被选中的随意两点.假 ...

  7. OpenMP编程的任务调度控制

    在OpenMP的for任务分担中,各个线程的任务划分是可以由程序员控制调整的.考虑这样一种情况,当在一个循环中每次迭代的计算量不相等时,如果根据系统默认简单的给每个线程分配相同次数的迭代量的话,会导致 ...

  8. 零元学Expression Design 4 - Chapter 4 教你如何自制超炫笔刷

    原文:零元学Expression Design 4 - Chapter 4 教你如何自制超炫笔刷 在Chapter 2 有稍微讲过Design内建笔刷的用法,本章将教大家如何自制独一无二的笔刷,并且重 ...

  9. 图形的认识(curve,surface,hypersurface)

    平滑函数(smooth function): curve:曲线: 二维平面: surface:曲面: 三维空间: hypersurface:超曲面: 更高维度: 1. surface 是对平面的泛化, ...

  10. Unity3d 鼠标的事件GetMouseButtonDown()、GetMouseButton()、GetMouseButtonUp()

    当鼠标按键按下时,返回一次true,后面參数0是左键,1是右键,2是中键 if(Input.GetMouseButtonDown(0)) Debug.Log("Pressed left cl ...