三流本科学渣 如何2年内成为年薪50万工程师大牛

百家 作者:程序人生 2017-10-25 06:09:40

87红楼梦尤二姐饰演者张明明,后来拿了加州大学伯克利分校计算机宾夕法尼亚大学沃顿商学院MBA学位。早期担任甲骨文的软件程序员,后在纽约所罗门兄弟投资银行、美国信孚银行 ,英特尔投资和香港分行的投资银行部门工作。


厉害了我的美人!




网络上能找到的资料很有限,比起尤二姐张明明的个人资料,小编更关心她的程序员旅程

她是0基础成为大牛的吗?未必

那她有良好扎实的名校科班基础吗?显然不是

平凡如你我,又为什么不能通过扎实的努力取得成功呢?

三流本科又怎样?专科又怎样?自学又怎样?

只要方法对,够努力,一样可以成为更强的自己!




下面,我们根据职场发展通路和能力水平,给出一个普通开发者的进击路线:


普通开发者处在第一个成长阶段:专项能力 提升。

专项能力提升阶段是 初级阶段。为了搞定事情,你必须先具备某些基础能力,比如:

  • 某种编程语言(Java / C++ / Python / JavaScript 等)

  • 某个IDE (Visual Studio / Qt Creator / Android Studio / Eclipse / WebStorm 等)

  • 某种技术框架(Netty / Qt / SSH / MyBatis / AngularJS 等)


这个阶段,最重要的就是提升专项能力,让自己能够迅速搞定一些别人安排给你的事情,体现出你的价值。

在这个阶段,最起码达到下列水准:

  • 能理解并完成别人分解好的 叶子任务

  • 能自己完成一个 功能模块 的开发


以 前端开发者 为例,在这个阶段,你必须能将从 UI 过来的某个页面原型转换为可运行、可操作的真实 Web 页面。比如登录页面、比如商品详情展示页面,要能做到实现可视化页面和业务逻辑跳转。

以 Android App 开发者 为例,在这个阶段,你必须能搞定类似登录、支付等这类功能。以 App 的登录功能为例,你要能使用特定的布局和组件实现自适应的登录界面,还要能学习使用类似微信、微博等第三方账户的 SDK ,实现第三方账户登录。

你可能很难自己设计一套完整的登录功能(包含口令加密、单点登录、Cookie 使用、验证码、密码找回、第三方登录、多终端同步、角色鉴权、用户数据存储等),但是 当熟练开发者或者高级开发者完成了设计,把某个小功能分配给你的时候,你要能够理解这个设计,并将这个设计实现出来,和整个登录系统整合在一起,能够正常运转

当你能够搞定这些事情的时候,你的专项技术水平起码是这样的:

  • 能熟练 搭建 需要的 开发和测试环境

  • 熟悉所用编程语言的 基础语法,有这门语言的 知识地图

  • 熟悉该语言本身的各种 基础功能,了解这门语言的 高级功能

  • 能调用已有技术框架的 API 来实现特定功能

  • 能在实现同一功能的多组 API 之间选择 合适的那一组

  • 能熟练使用 开发环境 和各种 辅助工具 进行 调试

  • 可以解决易复现的、逻辑简单的软件 Bug

  • 能自主学习某个新框架的基础 API ,参考 DEMO 完成 某个功能的基本实现


普通和熟练的关键区别


为了搞明白拥有自己的技能体系是什么概念,我们先来看两组概念:

  1. 知识、知识体系

  1. 技能、技能体系


简单说,知识是能引发改变的信息技能是运用知识解决问题的一系列思维和动作的组合。但这样讲不大容易明白,我们举个软件开发领域的例子。 C++ 中的虚函数是一个知识点,用虚函数这个特性定义模块接口,实现模块的动态加载,就是技能。


知识 和 知识体系 的关系,技能 和 技能体系 的关系,就像 树木 和 森林 的关系,就像 瑞士军刀上面 小刀、小剪子、小螺丝刀 和 瑞士军刀 的关系。


这样打个比方,应该可以体会到“体系”是什么了。


所谓知识体系,就是若干相互联系的、可以用来解决特定场景问题的知识的组合。


Ok,现在回头来看普通开发者和熟练开发者的区别,就简单多了。


普通开发者 因为不断完成任务,不断做项目,接触、使用了各种各样的“知识点”,于是拥有了各种 离散的知识,但这个知识和那个知识很少关联,他拥有的知识,是散兵游勇。


当你的知识点各 不关联 时,你在遇到问题时,就很难进行 系统思考,就很难获得解决办法。


而 熟练开发者,则(被动或主动)经历了 知识点的梳理、整合 过程,把零散的知识点围绕着某个 应用场景 联系起来,形成了知识体系。


当你有了知识体系之后,遇到和你知识体系对应的 场景相关 的问题,就可以快速找到相关的知识,系统的分析问题,最终解决问题。


你看,是否拥有知识体系,导致了熟练开发者和普通开发者的一个非常重要的区别:熟练开发者,能够独立负责一个模块或子系统的设计和开发工作,拥有分析问题、解决问题的能力和任务分解的能力,可以分配任务给普通开发者


当我们从普通程序员进阶为熟练程序员后,可以进入到下一个话题:程序员如何让自己更值钱——培养稀缺。


稀缺资源的秘密


资源有很多,比如知识、技能、关系、社会资源、信息、天赋等等,哪种资源才是稀缺的呢?


答案可能不在资源本身,而在于:

  • 合适的环境

  • 合适的时机


    举个例子,作为移动 APP 开发者,你可能拥有开发 Android APP 的知识、技能。这些知识、技能,在 2007 ~ 2015 年上半年,尤其是 2013 ~ 2015 年,是稀缺的,很值钱,即便刚刚参加完培训出来,也轻松拿到万儿八千的月薪。但是 2016 年之后呢,现在呢,恐怕很多人都有一种寒意,不但新手难找工作,有三几年经验的也不大敢随便动弹。


    再举个例子,一个人有姚明的身高(天赋),放在篮球场上,是稀缺的,值钱的,但这个人进入电商软件公司做前端开发,可能就没那么值钱了,甚至,大家可能会觉得太高大壮的朋友不太适合做开发。


    所以,让自己拥有稀缺资源的关键,是识别需要你所拥有的资源的环境和时机。


    每个人都可以通过观察环境和时机,掌握某种稀缺资源,从而让自己更值钱。


    如何识别稀缺资源


    那么,如何判断自己是否拥有稀缺资源呢?


    有两种策略可以帮助我们判断什么是稀缺资源以及自己是否拥有稀缺资源:

    1. 需求分析

    1. 卡位理论


    我们先说需求分析,这一点每个人都可以做,只要你会做信息搜集与分析工作即可。简单说,就是你可以到招聘网站上去做数据挖掘,看看哪种技能比较稀缺。


    通常来讲,用这种方式,你可以看到有两类人比较稀缺:懂得新技术的开发者和精研某种成熟技术的资深开发者。比如视频处理、图像处理等方向,懂算法的、资深的开发者就很稀缺。这就可能是你努力的方向。


    需求分析这种方式具有一定的滞后性。而卡位理论则带有一定的前瞻性。


    所谓卡位,是指预判某件事的发展趋势,提前占据必经之路。


    下图很好的解释了开发者的卡位策略:



    如果你能预判智能手机时代的带来,那你就可能会留意移动端的开发技术,比如 Android 开发或 iOS 开发,在它们刚刚有开发者版本时或者刚开放开发者 SDK 时就介入。


    有一个简单的方法,可以帮助你识别趋势,找到卡位点:分析你所处的产业链中的产品,找到体验不好的部分


    以手机为例,以前我们用着觉得慢、屏幕小、颜色不真实,所以CPU、GPU大发展,屏幕大发展。现在呢,你会发现,电池待机时间太短、网速太慢,那么就一定有公司会围绕这些点来布局、改善体验,比如快充、比如共享充电宝、比如 5G、比如生物电池、比如手机耗电优化……都是大家围绕它们做的尝试。


    当头号问题解决后,二号问题就会成为头号问题。所以,关注你的身边,发现未被解决的问题、噬需提升的体验,琢磨有什么方式可以满足它们,就可能发现未来的方向,就可能找到卡位点。


    即便如此,很多人可能还是觉得自己个人比较难判断大的趋势,所以很难去卡位。其实你并不需要什么事儿都自己判断,你可以跟随一些媒体或专业人士的分析,或者跟随投资趋势(投资者往往有专业的投研团队来分析),从中发现热点,再从热点发现与自己相关联的趋势。


    媒体分析方面,你可以关注TechCrunch(中文版http://techcrunch.cn/)、The Verge、VentureBeat、The Next Web、硅谷密探、Product Hunt、Wired、Stack Overflow、Hacker News、CSDN、GitHub、虎嗅、品玩、36kr、极客公园等媒体,上面有很多产品信息、创业信息、技术趋势等方面的文章。


    投资方面的趋势,从一些公开的数据中就能分析出来。比如你可以关注 IT 桔子,投中网、投资界,它们的信息很全面,覆盖投融资信息、投资事件、初创公司、产品分析等,里面能挖掘出很多有价值的信息,非常赞。


    不过,不论哪种方式,都需要投入时间和精力来搜集信息、分析信息。


    持续拥有稀缺性


    从 2015 年下半年开始, O2O 类的公司潮水般地倒闭,直播、互金、AR/VR 等领域也随之发生了和 O2O 类似的状况,大量初创或小微公司的崩塌,一方面挤压了移动开发的泡沫,另一方面,也释放出大量移动端开发者,让整个就业环境迅速恶化:跟随万众创业热潮进入移动开发的很多初级开发者再次找工作非常困难,刚刚做了准备要奔赴移动开发前线的初学者更是到处碰壁。

    在这个时候,Android 和 iOS 开发者不再稀缺,想通过学习移动端开发技术,迅速找到高薪工作,简直是白日做梦。

    2015 到 2017 年移动端开发者遭遇的这种状况,说明稀缺性是动态的,作为开发者,必须能够看到这种动态性,只有你能够持续的保持稀缺性,才能持续值钱。

    那么,怎么做呢?

    有两种策略:

    1. 追逐新技术

    1. 淬炼已有技能,做到出类拔萃


    技术是通往稀缺的一种方式,每一种新技术都是为了满足一种稀缺。所以,直接追逐新技术,可以让你靠近稀缺。(反过来,当这种稀缺变成富足,关联的新技术就变成老技术,不再受到追捧,回归常态。)


    要追逐新技术,就要用到“如何识别稀缺资源”这部分提到的两种策略,经常性、周期性地分析,看看是不是有新技术出现,看看自己掌握的技术是不是有新的发展。比如你在用 AngularJS,通过分析,就会发现 AngularJS 2 浮现出来了,还会发现 AngularJS 4 也要到来了;再比如你一直用 Python 2.x ,应该在 TensorFlow 出来时就迅速跟进了解,很可能就能拿到通往未来的船票……

    通过需求分析,我们可以看到有两类人比较稀缺:懂得新技术的开发者和精研某种成熟技术的资深开发者。我们保持稀缺性的第二种策略,就对应到后一种需求上。


    虽然这两年 Android 开发初学者不太好找工作了,但是资深的开发者,依然比较抢手哇,你去搜索招聘信息,都要求多年 Android 开发经验、大型项目经验。


    由此其实也可以看到,任何一种技术方向上,资深的、出类拔萃的人,都是稀缺的。


    比如你做了十年视频编码,精通各种视频格式和算法,那一定是非常稀缺的了,而且在未来 N 年都会比较稀缺;比如你精通音频方面的算法,那也会在诸如网络会议、语音通话等领域非常抢手;比如 C++ ,你用到八年以上,并且你的经验对得起这八年,也会成为抢手货……


    不管哪种策略,都可以铸就你的稀缺。但我更推崇的,是一拖 N 式的稀缺:既在某个领域有深厚积累,又能跟随各种稀缺的新技术


    要做到这种稀缺,可以这样:

    • 在已有技术方向持续深耕并关注它的新发展

    • 每半年做一次稀缺性分析,选择一种新技术,掌握它

      内容摘自 公众号:程序视界  由 小七 整理发布


      今日互动:

      你平均一天的写代码行数是多少?  欢迎在留言区留言评论。


      更多精彩

      老公月入五万的程序员夫人70后程序员的启示程序员提升外观王小波程序员我会编程七夕表白程序员最高殊荣程序猿(媛)CP祭天Python歌词特斯拉程序媛直播鄙视链敲代码404结婚Facebook怎么进BAT女友日记高逼格指南计算机专业技能干货编程习惯陆奇演讲自救指南周鸿祎谈创业



      关注公众号:拾黑(shiheibook)了解更多

      [广告]赞助链接:

      四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
      让资讯触达的更精准有趣:https://www.0xu.cn/

      公众号 关注网络尖刀微信公众号
      随时掌握互联网精彩
      赞助链接