各位师弟师妹们,你们好!我非常有幸得到蒋老师的邀请,与大家分享一下我在计算机领域的学习和工作生涯。首先,我先给大家介绍一下我的背景。

从信管到Google

我是2008年进入广外英文学院读书,到大三要选专业时,我认为拥有一门计算机技术更容易让自己在未来“存活”下来,同时我认为学习技术和练习翻译是可以两不误的,所以我义无反顾地选择了学院最好也最难的信管专业。

2012年我从信管专业毕业,期间想去香港深造多媒体结合计算机的专业(我另一个背景是喜欢画画、设计),但发现在这个世界上要找到这样相结合的专业真的很难,于是转而考虑申请美国学校直接读计算机专业。因为自己是从文科转专业,而且也只是接触了计算机科学的皮毛,所以只要美国有大学肯收我,我就去学。毕业后某天晚上的凌晨,我收到了美国东北大学(位于波士顿)的Offer,激动得从床上跳起来,到白天一查才知道原来东北大学在波士顿。可见我当时也没有多大的把握自己会出国深造。

到美国上的第一门课《计算机系统》,我看到第一次作业时都惊呆了,要我在Linux系统上通过Git提交我的名字?我只在Windows下用过Visual Studio,而且提交名字不应该是老师给个网址就好了吗?所以最后这作业是我室友帮我完成的!虽然挑战很大,但是整个学习生活我都是一直保持已有的优势(前端UI、UX设计得比同学好:也就是在编程界UI好,在UI届编程好),然后迎头赶上自己的弱项(算法、后端开发、数据库等)。读书期间我们学校有让我们去全职实习的机会,所以我先后去了一家创业公司MediaVue(我是他们第一个招的开发者)和稍微规模大一些的公司Epsilon实习做开发人员。

得到了不少锻炼后,我更加清楚如何补上自己的短板,于是毕业后,我顺利拿到了在波士顿最Top之一的Tech公司Vistaprint的工程师职位,与更多优秀的工程师在一起工作。我负责前后端全栈开发,两年后做到了高级工程师。后来因为自己的兴趣,想跳槽做产品经理,所以最后在今年2019年年初入职了Google做产品技术经理一职。

兴趣是第一

以上就是我的背景,没有很牛的起点和天赋,却一路上很幸运都有人“收”我。但我想对大家说的关键就是:“我对开发真的很感(you)兴(re)趣(chen)”!对于我来说,回到家很累时,不是躺在床上摊着,而是只要拿出电脑来做开发,我就觉得是一种放松和享受(这也是很奇葩的状态需要自己平衡,否则容易与你的另一半闹矛盾)!

如果你认为学习计算机知识、开发程序很有意思,只要给我网络和电脑开发程序,我就像得到空气和阳光,那么恭喜你,你这第一步是走对了!如果你认为只是因为现在社会上很需要计算机技术人才、工资待遇能让自己迅速过上“小资”(当然这是事实),那么你可能要三思!先问一下自己是不是真的能扎进去!

很多人认为学计算机是很枯燥的,或者说门槛很高,感觉什么区块链、无人驾驶、算法大牛这些对自己都很遥远。其实只要你感兴趣,你就会看到自己离他们越来越近。

自学很重要

计算机领域更新换代特别快,如果你认为掌握了一个热门的技术,你就能干到退休,我真心祝福你!如果你真干到退休了,我真心祝贺你!但是其实对于一个优秀的程序员来说,拥有不断学习新的知识这一能力是非常重要的。日新月异的互联网时代都是你刚学懂,一会儿新的替代就出来了,你刚学的就过时了。

所以怎么自学呢?第一步是能看懂Document(包括书籍、论文)。我在学习蒋老师的VB课程前的那个暑假,从图书馆借了一本21天学懂VB,然后花了几天时间全部看完,到开学上课发现自己都懂了不需要听课,直接就可以写作业了!所以我就根本没听课(蒋老师,不好意思)。对于很多自己想学习的知识或课程,有很多资源都可以利用,如实体书(自己买或者图书馆借)、电子书(百度一下)、网络课程(我在美国喜欢用PluralSight、Coursera等)。有时你可能找不到中文翻译的书籍,那对于学英语的我们来说看英文版本就是极大的优势(我看国内不少学计算机专业的同学在一些新技术出来时都在各种求翻译)!

第二步是学以致用。学习了理论后,实操更为重要。老师布置的作业算是一种实操,但程度不够,你值得拥有更难的开发来加深你的理解和记忆。当时我学了蒋老师的SQL课程,于是我给在勤工中心的同事们写了一套绩效考核系统,当中涉及到了很多数据库设计和应用的知识,各种SQL语句写多了我就都记得了,也知道怎么能在白板上写了(白板,顾名思义,在没有任何提示下能写出来)。所以在SQL考试时,我压根没有复习该怎么死记硬背我就都能写出答案来,因为你已经有了肌肉记忆了,你已经把核心逻辑转化成自己的知识了!

第三步,练就用科技解决问题的能力。有可能你会说,我找不到让自己实操的项目。那有一种简单的方法——问蒋老师呗!但我推崇的方法是自己去留意生活中有什么痛点,如信息不对称导致效率非常低下的东西,然后你感觉用技术可能可以解决,那自己就去尝试解决一下。久而久之,你便练就了这种发现并解决问题的能力,这个是所有公司都想招到的能力。当时我在准备出国留学时,便觉得每天带一本厚重的《红宝书》来背单词真是太累了,为何不把单词都放进手机呢?正好那年Android开始火起来,我就自学了怎么开发Android应用(也是各种翻书、百度),然后发布了《森先生背单词》这款手机APP,荣登《电脑报》。

脚踏实地、持之以恒是最好的“捷径”

因为《森先生背单词》这款APP,我发现做产品真的很有意思,你会看到客户为你解决了他的痛点而点赞,甚至付费,自己内心就会产生巨大的满足感来推动你不断前进。从那以后,我就开始边做边学,如何改版自己的个人网站,捣鼓怎么搭建博客系统,研究微博里面的“@”功能怎么实现的。

当时有个小故事,我暑假去腾讯实习,在腾讯微博的市场部门工作,其中一个任务是去找所有提到某个关键词的微博并把发微博的人名、时间等信息记下来。如果我手动一个一个地去找,大概花一个小时能完成。但当时我选择了去开发一个爬虫帮我完成。我花了半小时查阅如何写爬虫代码,又花了差不多半小时调试,最后只花了30秒把数据爬下来。你可能说好像时间上没怎么优化,但如果第二天老板再让你找含有另一个关键词的微博时,你一分钟后就给他结果了。他肯定笑嘻嘻地拍你肩膀说,“小伙子可以啊,要不把爬虫给我用吧!”

当你有了自学的能力,能够发现问题并解决问题,这时你需要的做的是进入一个“马拉松比赛”。人生其实就是这场马拉松比赛,有时你没到终点,怎么知道自己不能赢?所以每一天,让自己多学一些,多提升一些,一年后你就会发现质的变化。
(这个是我特别喜欢的等式)

到了美国学习后,我花了5年时间坚持独立开发自己的创业项目CareerEngine。从刚开始的十几人访问,做到后来几百万人访问。当用户量上涨很大时,你会发现你原来用得好好的解决方案不再适用了,你需要去学习什么是缓存,什么是分布式,怎么确保不影响用户的使用下扩容等等。然后你就会去查找为什么天猫在双十一不会宕机,为什么你刚发的一条朋友圈你的好友就都能收到提醒,为什么我刚看了抖音的这类型视频它能不断推荐我喜欢的等等的技术文章。当你又学懂了并解决了这些能应对几百万用户的问题后,你又会进入需要应对几千万、几亿用户的环节...这是个无止境的过程。所以如果你没最一开始培养的兴趣,我劝你找个合适的时间转行做点别的吧。如果你能一直坚持下来,那“苟富贵,莫相忘”!

以上就是我这些年做开发所浓缩的“精华”,如果你们有任何问题,还想深入了解(包括该怎么由浅入深地学习技术、确定职业发展方向、找相关IT工作,甚至是怎么到美国留学等问题),可以给我Email(hey@yanghuang.net)。我将把我所知所想与君共勉!

谢谢,
黄阳 于波士顿

继续阅读