百度百科:巡礼之年是由三组钢琴独奏组曲组成的一套专辑,由法兰兹·李斯特(Franz Liszt)作曲。一般被认为是李斯特最杰出的作品,为李斯特音乐风格的集大成之作。第三组曲特别被认为代表了李斯特的晚期风格。
文章起名为「巡礼」,多少有点回顾的意思。当然,你说我受了村上《没有色彩的多崎作和他的巡礼之年》的影响,我觉得也行。
一、程序员是个好职业
工作了十几年,到今天为止,我依然认为程序员是这个时代很好的职业。是不是最好,不敢确认,毕竟没离开过互联网行业,就像你只懂中文就很难说中文是世界上最好的语言一样。不过最好的之一,总归是有的。无论程序员自嘲也好,被误解也罢,甚至被其他领域的人黑到了喜马拉雅山的高度,但不可否认的是,大部分程序员都是在空调房里敲敲键盘就有可能冷不丁改变了世界,并且,大部分时候,我们都让这个世界变得好了一点点。与很多职业相比,程序员的投入产出比都算高的,稍有智力门槛,也没比其他行业高多少。而这个时代,给了程序员们大展宏图的机会,给我们足够的自由度去创造我们想要的东西。
至于传说中的「程序员职业病」,其实和程序员这个职业并没有多大关系。越来越多的互联网公司为员工提供了各种福利,免费的健身房,舒适的桌椅,香浓的咖啡,甚至一些娱乐设施。自己不运动,其实很难怪到这个职业头上。另外,程序员的工作也「并没有想象的那么辛苦」,所以,遇到头脑清楚逻辑清晰又喜爱计算机并且没有远大的志向进入其他领域的年轻人,我总是对他们说,来做个程序员吧,这是个能让你的生活变得精彩的职业。
二、程序员是一个具备长久生命力的职业
我大学刚毕业的时候,程序员还是一个稚嫩的职业,那个年代,身边的人们没见过35岁以上的程序员。于是很多人告诉我,程序员是吃青春饭的,你在国内见过35岁的程序员吗?我说,没有。
就是嘛,所以要尽早转行呀……
这种话听得着实不少,事实上也真的有很多程序员早早转行了,我没转不是因为内心强大,而是比较单纯。35岁,听起来像光年一样的距离,谁会考虑那么遥远的事情。所以我什么都没想就继续编程了。
35岁转瞬即至,除了过了个普通的生日之外,什么都没有发生。我依然在活蹦乱跳的编写程序,偶尔向周围稍稍四顾,身边的朋友要么在某个技术领域成为行家里手,要么在做产品的同时写书分享,有的设计出了千万人使用的软件,有的则成为了一个纯粹的管理者,经营着上千人的机构。这些人从前是程序员,现在也是。
随着互联网行业的成熟,程序员在成为风口浪尖人物的同时,也逐渐规范和传统化,与其他行业的工程师一样,程序员们在自己的领域有深耕,有转化,有思考,有沉淀,稳步前行。
毫无疑问,程序员是一个具备长久生命力的职业。
三、程序员不一定要写一辈子程序
以前人们总是说年龄大了就不要写代码了,或者说写不动代码了。现在多少有点矫枉过正,比如 CTO 怎么能不写代码呢,写代码可是一辈子的事呀。在我看来,这个问题根本没什么可以争论的,一个阶段一种做法。如果你写代码是最有价值的,就去写代码。如果你做产品是最有价值的,就去做产品。如果你去管理公司是最有价值的,就去管理公司。去年参加极客邦硅谷行的时候和七牛云的创始人许式伟聊天,我说老许你还在写线上代码么?老许说,不碰代码半年多了,我需要从更高的层面上去把握七牛的方向、人和事。
老许比我牛得多,是一位非常资深的程序员,热爱编程,可以说写了半辈子代码,即便如此,在这个阶段,显然有比写代码更重要的事情等着他。前一阵子看过一篇文章「扎克伯格开发笔记:打造 Jarvis 的日子」,扎克伯格在文章里写到:
2016年我给自己制定了一个挑战:打造一个像钢铁侠里 Jarvis 那样的家庭 AI 助手。
在这一年里,我打造了一个可以通过手机和电脑进行对话的 AI 系统。它能够控制我家里的灯光、温度、电器、音乐和安防系统,而且这个 AI 还能了解我的品味和习惯,可以学习新的词汇和概念,甚至可以逗我的女儿 Max 开心。Jarvis 是由 Python、PHP 和 Objective-C 编写的,运用了包括自然语言处理、语音识别、面部识别以及强化学习在内的人工智能技术。
扎克伯格是为了编程而编程么,显然不是。除了保持技术的敏感度,他主要是为了了解人工智能发展的现状。通过挑战熟悉 Facebook 的工程师们使用的内部技术,同时了解智能家居。而且,这些工作仅仅占用了他很少一部分时间。
实际情况也是这样,与我一起成长起来的七零后程序员,差不多有超过一半,他们的工作重心已经不再是编码,而是其他工作事务,另外一半则依然以编程为主要任务。这两种状态,都是很好的存在。
四、入行三五年
以我并不丰富的程序员阅历来看,入行三到五年的经历对程序员以后的职业生涯有非常重要的作用。互联网时代学习环境开放,资料浩如烟海,很多大学生在走出学校大门的时候,很可能在某项专业技能上已经达到了很高的水准,但是这三到五年的探索,依然是不可或缺的。
顺便在这里给大家推荐一个架构交流学习群:650385180,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源。相信对于已经工作和遇到技术瓶颈的码友,在这个群里会有你需要的内容。
很多人喜欢制定学习计划,但这些计划大都无法执行下去。不是计划出了问题,而是人学习和提升的方式很难按部就班,很多时候我们都是在摸索前行。就像你今天按计划要耕完一亩田,作业进行到一半的时候,你发现一块土质的异常,于是深挖下去,用镰刀割去杂草,用铁锹铲除泥土,用钻头钻出深洞,最后发现了一口油井。如果你按照计划耕完这一亩田,可能永远发现不了那口井。
我相信每个人身体里都有某种特质,这种特质让你在某个领域取得成就的可能性远远大于其他,这种特质也能让你异于他人。但是,人们并不是生来就知道自己擅长干什么的,需要花时间去寻找,找到它,然后去做自己最擅长的事情,这对你漫长的职业生涯是一笔巨大的财富。
需要五年这么久的时间吗?依我个人的经历,恐怕更长也说不定。无论程序员也好,软件工程师也罢,叫着简单,领域知识却是浩如烟海。进入现代互联网阶段,程序员的领域细分到了令人发指的程度,比如 XX 语言工程师,前端工程师,后端工程师,架构师,大数据工程师,安全工程师,运维工程师,移动开发工程师,DBA 等等,叫法繁复,甚至职能重叠,这些角色最初都叫做程序员,最终他们像一棵大树,枝条粗壮,蜿蜒生长,然后在树冠分开,并结出了各种各样的果实。同时,每个细分的领域又会衍生出浩瀚的领域知识。
比如编程语言,常用的编程语言就有几十种,静态语言,动态语言,脚本语言,函数式编程,面向对象编程,过程式编程等等,从平台角度,Java VM 上有 Java,Scala,Groovy,Clojure,Jython,Ceylon 等,.Net 平台上有 C#,J#,F#,VB.Net,VC#,ASP.Net,移动平台有 iOS,Android,WindowsPhone……
即便我们把目光聚焦在一门语言或技术上,Java,你也不可能仅仅掌握它的语法特性和函数库,然后写写业务表单和增删改查就完了。Java 的虚拟机、性能、并发编程、Jit 技术、垃圾收集、集群、分布式、异常、日志服务,还有大量的 Java 平台开源项目,都需要深入了解。除此之外,一些数据结构和算法也是程序员们应该掌握的内容,比如栈、队列、链表,二叉树、红黑树、B 树,散列表,排序算法,查找算法,最小路径,最小生成树等等……
这么看来,五年的时间并不长是不是?
当然,还有一种可能,你花费了五年的时间,发现自己并不适合做程序员,虽然这听起来有点悲哀,但也不失为一件好事,因为你还有时间转型啊。程序员几乎可以转型为其他任何角色,反过来却很难。我们听说过很多优秀的产品经理,创业者,管理者最初都是程序员,却很少听说哪个顶尖的程序员是从产品经理转过来的,有吗?反正我不知道。
写到这我必须给你举一个例子,他就是杭州滨江区吴彦祖、MacTalk 出境小王子、二爷鉴书的作者邱岳。这位邱二爷当年也是少年英侠,编程领域的快刀浪子,上学时屡获计算机竞赛奖,毕业后一头扎进了嵌入式编程领域潜心耕耘,最后惊喜的发现,「原来自己真的不是编程这块料啊」,二爷仰天长叹,擦掉鼻涕和泪水,毅然沦为一个产品经理,不也挺成功的吗?
当然,最近他失业了,不过,你能想象他会一辈子找不到工作吗?如果是那样,回来做编程,倒也未尝不可。
写累了,今天就此搁笔,关于这个话题,下一篇再说。