一些程序员朋友找我聊个人职业发展,想起20多年前,我也是一个写代码的,就聊聊我是如何从写代码选择了走产品路线。


1996年,大学期间,出于个人兴趣,写了第一个作品,用FoxBASE编写的学校题库系统,实现了出题、选题、组卷、考试答题、改卷功能。
2000年,我参与组织一个网络课程的项目,用ASP实现动态网页,可以进行图文和视频网络课程的学习,这个时候,我发现自己一边学一边写代码,效率太低,一个人搞不定,于是就开始写需求文档,找到几个计算机专业的同学一起完成了这个项目,这个过程中,我担任的角色是产品经理,只是那个年代,还不知道这个职业岗位。

那个时候,也未曾想到自己居然把做产品这个事情干了20多年,中间经历过教师、销售、市场、产品运营、产品策划等多个职业阶段,现在的职业角色是深圳梅沙科技的合伙人,实际上,仍然在承担产品经理的职责。

我算是一个早期的程序员的职业发展案例, 放弃了技术路线,走上了产品道路。
调侃一下,就是程序员的代码能力没发展好,跑去做了产品经理。
但是,在我的职场经历中,遇到不少个案说明,程序写不好,转行做产品经理,也不容易;一些优秀的程序员,更容易成为优秀的产品经理。
我对一直坚定的走技术路线的实力派,是非常仰慕的,在多年的产品项目过程中,我和不少程序员同事建立了非常好的合作关系,很多是在一起加班熬夜过程中建立的战友关系。

下面的分享内容,源自我的好几位程序员朋友,尤其是现在的梅沙科技技术合伙人Martin提供的内容,他从一个校招大学生进入腾讯,经过5年时间,成为高级架构师,综合几位技术大咖的分析,整理了关于程序员职业发展的文字,这次应帅张邀请,分享给大家。

一、职场意识的觉醒
职场,多数人认为是从走出校门开始的,其实,从很早时候,就可以考虑职业发展了,多早呢,不好界定,有的人,从小就有一个梦想,未来要做点什么,这就是梦想的萌芽,例如从崇拜某个偶像开始,那个心目中YYDS,成为偶像那样的人,微软的创始人比尔盖茨、苹果公司的技术合伙人沃兹尼亚克、腾讯的马化腾、张志东、张小龙、小米的雷军都是优秀的程序员。雷军在大学时候读的一本书《硅谷之火》更是点燃了他的创业梦想。

因此,一个人的职业生涯能走多远,源于他最初的梦想,满足了最基本的生存需要之后,真正想做什么,是值得思考的问题。

职业觉醒,表现为知道自己想做什么,在大学不会迷茫,当别人在宿舍沉浸游戏的时候,找到梦想的人,就开始读书,自学程序语言,尽早的找到一家公司实习,有意识的找到行业前辈,多认识几个能帮助自己成长的职业导师去请教学习,这些都能为毕业求职打下扎实基础。
二、如何系统扎实的准备好面试
对于刚刚走出校门,进入职场的技术人的第一份工作,企业不一定会要求你们掌握多么高深的技术问题,技术老司机们更看中基本功和成长性软素质。
  • 技术基本功
原腾讯高级架构师,梅沙科技技术合伙人Martin针对4种常见的技术职位总结了以下计算机基础知识,相信对大家会有所帮助。
A. 协议、算法等基础功底
1.有扎实的计算机基础——加分项。如进程与线程知识,TCP/IP协议,数据与结构等。很多人认为计算机基础知识只是做后端,做服务器开发的人才需要,像前端开发根本不需要,这是绝对错误的。对于只应付日常业务编码的普通工程师来说,扎实的计算机基础知识,是锦上添花的东西,但对于优秀的前端工程师来说,是必不可少的。操作系统的基础知识,能更好的掌控代码避免性能上不必要的开销或者对其有所警觉同时也能避开一些逻辑上的问题。
2.数据结构和基本算法清楚特定的基础数据结构的可以处理的问题,如果已经知道这些算法,那可以跳过很多耗时的技术选型阶段,这就是知识的广度带来的优势。
3.网络协议知识  TCP/IP等网络协议知识,到应用层的HTTP/HTTPS等,对这些协议的深入理解,可以解决web页面在移动网络下的访问耗时长等疑难杂症,提出优化方案。
B.后端程序员
1. 操作系统基础知识文件系统、任务调度、内存管理,进程与线程、进程间通信以及同步,锁等知识必须要有。
2. 基础语言一般要求有CC++基础,精通如但不限于C/C++/PHP/Java/Go等至少其中一种后端语言
3. 扎实的网络协议知识  TCP/UDPHTTPHTTPS协议,Linux网络编程
4. 存储数据库知识包含数据库原理,sql语句的使用、优化。积累搭建mysql和运维mysql的经验。
5. 数据结构知识不要求能写出RB树的算法,但对常用的排序要熟悉。熟悉常用软件设计模式
6. 熟识常用的框架与组件nginx,mysql,redis
7. 实际的项目经验能分析出系统各个模块的关系,为什么这样设计。系统瓶颈在哪里,如何优化性能
C.前端程序员
主要分为两大部分:前端代码技能部分(htmlcssjavascript),前端架构部分(构建工具,新生框架,优化以及安全性)。
如果把一张网页比喻为一栋楼房,那么html相当于搭建一个主体结构,css相当于来做粉刷,javascript发挥的作用就是类似于水泥的粘合剂。其中任何一个环节出现问题,都会可能导致房屋出现问题。
1.html基础,如各种Element的含义和用法。
2.dom结构与事件模型。
3.css样式部分熟悉最基础的布局方式、常用定位的作用和区别、css的一些常用的选择器以及选择器的权重。另外就是css的浮动部分,掌握浮动的应用场景和消除浮动的常用方法。是否熟悉响应式布局这块,对最新的css3的知识掌握熟练程度以及移动端的经验,属于面试之中比较看重的一块。css3中出现了很多的新的浏览器特性和效果,使用熟练程度之余还要知道它的兼容性。
4.javascript基础理解闭包的概念和用途,原型链和继承的概念。网络基本知识像HTTP协议,Get/Post的区别与联系。
5.前端与后端交互的数据格式Xml/Json进阶部分包括得熟悉使用javascript的流行mvvm框架(vue,angular,avalon等等)其中的一种到两种,构建工具(webpack,fis,gulp等等),以及系统后期的一个优化过程(包括静态资源压缩,合并,按需加载,分流)前端安全这块的知识,如跨域机制,CSRF/XSS 漏洞等知识以及如何防范。
D.客户端程序员
首先要对系统如何启动AppApp如何运行有一个整体的了解,这里就包含App启动过程,沙盒机制的目的,实现原理等。
1.  操作系统中进程与线程的知识点App怎样处理图片与外部网络资源,也要有一个整体的认识。
2.  App界面布局和交互的知识。
3.  语言基础包含OCSwift,至少精通其中一种。对象的生命周期,面向对象思想。
4.  App界面知识点,自动布局,自开发组件。
5.  UIView,  UIControl,  UIScrollView,  UIViewController 等核心类型的概念和关系。
6.  App屏幕旋转及屏幕适配,触摸、手势、加速计的使用。
7.网络协议HTTP/TCP等基础知识,Socket/CFNetwork/NSURLConnection等类的使用
8.代码管理如Git/Svn的使用,开发测试流程,Bug管理,打包上架到苹果审核发布等知识。
9.常用类库框架UIKit/Foundation/MapKit
10.热门技术如微信支付/友盟分享/第三方统计等的使用和注意事项。
11.性能调优方面,内存泄漏、网络流量、耗电量方面的优化知识,Analyze的使用。
  • 成长性软实力
除了技术知识等硬素质,能驱动带来可持续成长的软素质同样重要。今日头条资深架构师夏绪宏提到,对候选人更看重:
1. 技术面与职位匹配     建议对照应聘的职位描述,做有针对性的准备,也让企业了解到你的用心;
2. 技术热情    对技术热爱,善于使用技术解决问题,有「技术思维」;
3. 学习能力    技术不可能一开始全部具备,更新迭代快的环境下需要保持不间断学习;
4. 沟通能力    团队协作需要能沟通顺畅、高效;真正在做项目时,如何正确、高效的与战友沟通非常重要,与学校中不同,在职场上更多是并肩作战;
5. 项目经验    实习、生活中自己有项目尝试。最好是有更多的实践,不一定是实习,可以是自己日常去多做小项目尝试,让我们看到你对技术的热情,这一点很重要,已经有相关经验的同学会更有竞争力。
此外,初入职场的应届生要做到基础和工程并重,不要只偏重一方,这样有助于扩展整体的技术视野,在思考问题的角度上更广、更全面。在塑造自己的职场初印象时,大家可以参考以上这几条,给外界一个完美的亮相。
三、如何选择第一家供职企业——大公司,还是小公司
面临大公司、小公司,究竟该怎么选择呢?结合腾讯高级工程师、今日头条客户端技术总监等技术大牛的建议,归纳了一些要点:
1.  行业和公司层面,计算机专业主导行业有哪些?这些行业中top3的公司是哪些?这些公司的商业模式和竞争的护城河是什么?这些问题答案很大程度决定了公司未来的发展空间。通常建议只选快速发展行业中第一、二位的公司。
2.  岗位和兴趣匹配,要多问自己内心喜欢的是做什么样的工作,兴趣是最好的老师,兴趣也在后来的职业生涯中帮助更好地找准发展方向,即使在计算机专业领域,也是有很多细分的方向(例如安全领域,后台领域,移动领域,算法领域等)可以发展的,把它给明确下来。明确了自身的兴趣和发展方向后,就要对应地去匹配行业中有发展空间的top3公司的合适岗位,仔细看下这些岗位的Job Description的技能和知识要求,查漏补缺,把自身的能力短板补充好,做好充分准备。
3.  考虑团队、导师和个人成长团队的技术氛围、mentor的水平直接影响到了你在该公司该岗位上的上升天花板的高度。选择业界顶尖某项技术的大牛追随,是对个人成长绝对有利的。
职场新人,尤其是比较优秀的新人,容易吹毛求疵,导师或者团队有一些不足,就产生失望情绪。记住,人无完人,没必要苛求导师每个方面都完美,当遇到导师或团队产生问题时候,真诚的给出反馈,学会发现导师的长处,虚心请教学习,从导师变成朋友。

4.  公司产品、公司文化及CEO的认同比较成体系的优秀公司,无论是成熟大公司BAT还是超级独角兽们,都有拳头产品。在去公司之前你要体验、了解、认可公司的产品,从内心热爱一个产品将成为攻坚的动力。另外,特色鲜明的公司都有自己独特的公司文化,这些文化反应了公司更看重的核心能力是什么,当你有了公司文化认同时,你未来的工作将会非常顺手,并快速容如公司环境。通常这些价值观也是通过CEO的发言传递出来。
5.  福利待遇建议应届毕业生不要在薪水上有太硬性的门槛标准,面对很好的平台和职位,薪资在短时间内相比于成长空间是可以做取舍的。不过目前无论是大公司还是超级独角兽们,为了吸引优秀人才进入,福利水准已经非常接近了,大家可以多去知乎等社区搜索或向前辈询问了解。
6. 人才关注  公司对人才发展的重视、培养和激励也是非常重要的。
例如有人问华为创始人任正非:“人才是不是华为的核心竞争力?”任总的回答则出人意料:“人才不是华为的核心竞争力,对人才进行管理的能力才是企业的核心竞争力”。
在《华为基本法》里有一句话叫做:“认真负责、管理有效的员工是华为最大的财富”。而不是像很多企业那样泛泛的讲“员工是企业最宝贵的财富”。《华为基本法》中还有一句更厉害的话:“我们强调,人力资本不断增值的目标优先于财务资本增值的目标”。
腾讯,我呆过3年的前东家,印象最深的是,对人才要求最重要的是“正直”,公司很重视人品,位于腾讯价值观的第一条就是正直。其次是体系化的培训机制,校招、社招入职培训,通用培训,专业培训,管理培训涵盖潜龙、飞龙、腾龙等系列,从菜鸟到管理层,培训一路相伴。第三,鼓励员工帮助员工成长,每个员工的成长晋升道路,都需要成为新员工导师、课程讲师,帮助同事个人,帮助团队进行能力提升,这是在职级晋升中的硬性条件。
今日头条张一鸣对人才极其渴求,他不止一次表露过对人才的看法。尊重人才要做到三个方面:「一是回报,包含短期回报长期回报;第二是成长,他在这个公司能得到成长,第三,他在这个公司精神生活很愉快,他干起事来觉得有趣。」
四、职场冲刺攻略:每个程序员都有可能成为架构师
程序员一般在三年,五年,七年都分别面临自身发展的一个坎,根据HR的统计,这几年一般是程序员跳槽换工作最频繁的年限。对于工作前三年的程序员,TA一般都是能比较好地完成好手头上的工作,会开始觉得现在做的工作没有什么困难和挑战了,很多东西都会了,对工作的激情可能逐渐开始消退。初涉职场,如何要求自己,快速成长,BLUES的朋友们都很积极地给了很多建议:
1. 尽快完成身份转换,从学生过渡到公司员工。更好的平衡实际产出和学习提高的精力,这方面有问题不妨多和直线经理沟通
2.兴趣驱动自我成长,能做技术源于我对技术的热爱,找到你的兴趣点;
3. 有优秀的mentor指导;
4. 在某个领域需要有特长,需要去深钻;
5. 学会合作,公司不同于学校里接触的项目,工作上有大项目才能获得锻炼,你会发现原来需要考虑这么多问题,看起来一个简单的产品需要那么多人协同。
6.  辅助技能也是必备,不光是技术上的成长,需要了解用户、推动产品落地,这涉及到用户洞察、执行力、沟通能力等等一系列技术人员必备的技能。
7.  和业界保持更新,不要闭门造车,需要跟更多的业内人士交流、学习。
那么多计算机专业的小鲜肉,有老司机在前面带路,就大胆的去追逐程序员的梦想吧,第一份工作的选择也是一个磨练的过程,或许这个过程有诸多坎坷,但也不用蓝廋香菇,学会自我总结反思,相信会找到一个适合自己的发展平台。
最后,我的亲身感触,任何行业的大牛,都是一个积累过程,不排除天才的存在,但概率上说,99%的人都不是天才,但是可以凭借自己的专注与努力成就职场的发展,很多人的努力程度其实并没有到拼天赋的时候,所以,大家找好方向,按照自己的节奏,持续努力就好。

==============
公众号作者:BLUES(兰军),深圳梅沙科技合伙人,原迅雷产品总监,腾讯、YY语音高级产品经理,公众号ID:bluemidou,原创8年公众号,写了700多篇文章,真实的记录工作、生活与反思,共同成长进步。
长按识别二维码关注Blues,欢迎交流。
继续阅读
阅读原文