You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
7.9 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 43 | Q&A聊一聊职业发展和选择
你好,我是景霄。
在前面几节课中我分享了在FB工作的一些经验和感想不少同学都提出了自己的困惑也希望我能给出一些职业发展方面的建议。综合这些问题我主要选取了下面三个主题来说说职业发展、职业选择方面我的看法。
### Q程序员的岗位主要有哪些类型我该如何选择
A无论是在求职阶段还是正式进入公司工作后你都会发现工程师普遍按技术的不同分为下面几个岗位。
1. 前端包括移动Android、iOS以及Web前端JavaScript、CSS开发。
2. 后端(服务器端):主要是服务器端的开发,简单来说,就是输入为请求,输出为响应,发送给客户端。
3. 算法:主要涉及到的是机器学习,比如推荐系统如何更好地实现个性化推荐,搜索引擎返回的结果如何才能更符合地用户的需求等等。
4. 架构涉及系统架构偏底层语言以C++为主。
从薪酬的角度来看,普遍来说:算法 > 架构 > 后端 > 前端。当然,这主要是由市场的供需关系决定的。
就拿算法岗来说国内市场普遍缺少算法人才也是因为这个岗位的培养难度更大需要投入更大的精力。在顶尖互联网公司参与核心产品研发的算法工程师们工作三年年收入100-200W人民币是很常见的。
不过我这里所说的算法人才绝不是指类似在校生那种看过几篇论文写过一些MATLAB在学校做过几个科研项目的程度。算法工作岗位需要的算法能力是你必须身体力行有某些产品线的实践经历。还需要你真正了解市场比如今日头条的推荐算法是怎样的Google搜索引擎是怎么工作的头条里的广告排序又是怎么做的等等。
再来说说架构,这也是目前一个热门的方向。我一直认为这是一个很偏工程、很硬核的领域,发展前景也相当不错,可以说是一个产品的基石。就拿刚刚提到的推荐系统来说,广告的定位和排序系统背后,都需要强有力的架构支撑。因此,这一行也可以称得上是人才紧缺,是企业舍得花高薪聘请的对象之一。
与算法不同的是这个领域不会涉及很深的数学知识工程师的主要关注点在于如何提高系统性能包括如何使系统高扩展、减小系统的延迟和所需CPU的容量等等。架构师需要很强的编程能力常用的语言是C++当然最重要的还是不断积累大型项目中获得的第一手经验对常见的问题有最principle的处理方式。
最后说说后端和前端,这是绝大多数程序员从事的岗位,也是我刚进公司时的选择。也许比起前两个岗位,不少人会认为,后端、前端工程师的薪酬较低,没有什么发展前景。这其实大错特错了!从一个产品的角度出发,你可以没有算法工程师、没有架构师,但是你能缺少后端和前端的开发人员吗?显然是不可能的。
后端和前端,相当于是一个产品的框架。框架搭好了,才会有机器学习、算法等的锦上添花。诚然,这两年来看,后端和前端没有前两者那么热门(还是市场供需关系的问题),但这并不代表,这些岗位没有发展前景,或者你就可以小看其技术含量。
比起算法和架构,后端、前端确实门槛更低些,但是其工作依然存在很高的技术含量。比如对一个产品或者其中的某些部件来说,如何设计搭建前后端的开发框架结构,使系统更加合理、可维护性更高,就是很多资深的开发工程师正在做的事。
前面聊了这么多,最后回到最根本的问题上:到底如何选择呢?
这里我给出的建议是:首先以自己的兴趣为出发点,因为只有自己感兴趣的东西,你才能做到最好。比如,一些人就是对前端感兴趣,那么为啥偏要去趟机器学习这趟浑水呢?当然不少人可能没有明确的偏好,那么这种情况下,我建议你尽可能多地去尝试,这是了解自己兴趣最好的方法。
另外从广义的角度来看计算机这门技术存在着study deep和study broad这两个方向你得想清楚你属于哪类。所谓的study deep就意味着数十年专攻一个领域励志成为某个领域的专家而study broad便是类似于全栈工程师对一个产品、系统的end to end都有一个了解能够随时胜任任意角色的工作这一点在初创公司身上体现得最为明显。
### Q如何成为一个全栈工程师
A相信屏幕前的不少同学是在创业公司工作的刚刚也提到了创业公司里全栈工程师的需求尤为突出。那么如何成为一个优秀的全栈工程师呢
简单来说,最好的方法就是“尽可能地多接触、多实践不同领域的项目”。身体力行永远是学习新知识、提高能力的最好办法。
当然,在每个领域的初始阶段,你可能会感觉到异常艰难,比如从未接触过前端的人被要求写一个页面,一时间内显然会不知从何下手。这个时候,我建议你可以先从“依葫芦画瓢”开始,通过阅读别人相似的代码,并在此基础上加以修改,完成你要实现的功能。时间久了,你看的多了,用的多了,理解自然就越来越深,动起手来也就越来越熟练了。
有条件的同学比如工作在类似于FB这种文化的公司可以通过在公司内部换组的方式去接触不同的项目。这自然是最好不过了因为和特定领域的人合作永远比一个人单干强得多你能够迅速学到更多的东西。
不过,没这种条件的同学也不必绝望,你还可以利用业余时间“充电“,自己做一些项目来培养和加强别的领域的能力。毕竟,对于成年人来说,自学才是精进自己的主要方式。
这样,到了最后,你应该达到的结果便是,自己一个人能够扛起整条产品线的开发,也对系统的整个工作流程有一个全面而深入的理解。
### Q学完本专栏后在Python领域我该如何继续进阶呢
A在我看来这个专栏的主要目的是带你掌握Python这门语言的常见基本和高阶用法。接下来的进阶便是Python本身在各种不同方向的运用拿后端开发这个方向来说比如如何搭建大型系统的后台便是你需要掌握的。一个好的后端自然离不开
* 合理的系统、框架设计;
* 简约高效的代码质量;
* 稳健齐全的单元测试;
* 出色的性能表现。
具体来说,你搭建的系统后端是不是易于拓展呢?比如过半年后,有了新的产品需求,需要增加新的功能。那么,在你的框架下,是否可以尽可能少地改动来实现新的功能,而不需要把某部分推倒重来呢?
再比如你搭建的系统是不是符合可维护性高、可靠性高、单元测试齐全的要求从而不容易在线上发生bug呢
总之,在某一领域到了进阶的阶段,你需要关注的,绝不仅仅只是某些功能的实现,更需要你考虑所写代码的性能、质量,甚至于整个系统的设计等等。
虽然讲了这么多东西,但最后我想说的是,三百六十行,行行出状元。对于计算机行业,乃至整个职场来说,每一个领域都没有优劣之分,每个领域你都可以做得很牛逼,前提是你不懈地学习、实践和思考。
那么,对于职业选择和发展,你又是如何看待和理解的呢?欢迎留言和我一起交流探讨,也希望屏幕前的一直不懈学习的你,能找到属于自己的方向,不断前进和创新,实现自己的人生理想。