技术人的职场:程序员如何从菜鸟到大牛

一些程序员朋友找我聊个人职业发展,想起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. 基础语言一般要求有C、C++基础,精通如但不限于C/C++/PHP/Java/Go等至少其中一种后端语言
3. 扎实的网络协议知识TCP/UDP、HTTP、HTTPS协议,Linux网络编程
4. 存储数据库知识包含数据库原理 , sql语句的使用、优化 。积累搭建mysql和运维mysql的经验 。
5. 数据结构知识不要求能写出RB树的算法,但对常用的排序要熟悉 。熟悉常用软件设计模式
6. 熟识常用的框架与组件nginx,mysql,redis等
7. 实际的项目经验能分析出系统各个模块的关系,为什么这样设计 。系统瓶颈在哪里,如何优化性能
C.前端程序员主要分为两大部分:前端代码技能部分(html、css和javascript),前端架构部分(构建工具,新生框架,优化以及安全性) 。
如果把一张网页比喻为一栋楼房,那么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.客户端程序员首先要对系统如何启动App,App如何运行有一个整体的了解,这里就包含App启动过程 , 沙盒机制的目的,实现原理等 。
1.操作系统中进程与线程的知识点,App怎样处理图片与外部网络资源 , 也要有一个整体的认识 。
2.App界面布局和交互的知识 。
3.语言基础包含OC,Swift,至少精通其中一种 。对象的生命周期,面向对象思想 。
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%的人都不是天才,但是可以凭借自己的专注与努力成就职场的发展,很多人的努力程度其实并没有到拼天赋的时候 , 所以 , 大家找好方向,按照自己的节奏,持续努力就好 。
【技术人的职场:程序员如何从菜鸟到大牛】-END-