扫码打开虎嗅APP
在工作中,我常常和硅谷地区的工程师交流,时常讨论这样一个话题:什么样的工程师,在硅谷是最受欢迎的?
90 后硅谷工程师 Feross Aboukhadijeh是一个极好的学习榜样。他并非扎克伯克那样的硅谷明星,但作为普通硅谷工程师的一员,对于大多数程序员来说,他是一个通过努力可以到达的学习榜样。他的经历不仅仅对向往硅谷的工程师有帮助,对所有在北上广深杭工作的程序员,都有极好的启发。
下面分成四个部分来阐述,第四部分是 Feross 分享的他如何学习编程的经历。
一、建立自己的个人品牌
在水平相同的情况下,拥有更高社交影响力的程序员,在职场中占有更大的优势和更多的机会:在换工作时拥有更多的选择,更多的与同行中的佼佼者学习交流的机会,还总有人邀请你加入他的创业团队当 CTO —— 不一定要做出改变的决定,但有更多的机会和见识总是好的。
和 Fenng 编程能力相当的工程师,很难有和他一样的影响力,这是建立个人品牌的魅力。你不必担心说:我没有 Fenng 那么好的文笔,也错过微信公众平台的发展红利期。条条大路通罗马,只要愿意在网络上分享,你就离成为下一个 Fenng 近了一步。
一些方法可以帮你事半功倍,比如建立你在网上的个人主页。它可以是独立博客的 about 页面,也可以是你的 about.me 账户。然后在你的微博、知乎、微信、Github、V2EX、技术社区的主页上放上它的链接。就像涓涓细流汇成大河一样。
让我们看看 90 后硅谷工程师 Feross 的做法。他在 Github 上拥有 2300 名关注者,8390 名推特粉丝,在问答社区 Quora 有 12500 名关注者。他在这些网站主页上都附上了个人主页:feross.org。
从 Github、Twitter、Quora 吸引来的网络访客,在这里开始了解他:毕业于斯坦福,在 Facebook、Intel、Quora 工作过,还有他的项目经历、他的爱好等信息。
二、什么样的简历是“完美硅谷求职简历”
个人品牌影响力 = 能力水平 × 传播度
经验丰富、能力突出的工程师,如果不善于在网络上分享,“酒香也怕巷子深”。前一部分便叙述了对此的解决方法。但自身能力才是根本,如果技能不够,再传播无济于事。
简历是求职的第一步。作为一个程序员拍卖平台的运营,我阅读过数以万计的简历,但 Feross 的简历是我见过的最完美的简历之一。在这里贴上一部分:
这份简历至少在这两点非常出色:
1、完美的版式
HR 每天要看不计其数的简历,眼花缭乱的状态下能看到这样美观清晰的简历,简直是一种视觉享受。
一份能被 HR 和技术负责人看懂的简历,才是真的好简历。这种看懂包含两方面:一是简历结构清晰、信息充足但不冗杂;二是要让不懂技术的 HR 也能从简历中清楚地读懂你的经历和项目经验。在这两方面,Feross 的简历都堪称完美。
特别要强调后一点。在互联网公司里,HR 要对技术有一点了解是必须的。但无奈有的程序员简历写得深涩难懂,甚至不是同方向的其他技术人员都看不懂,更遑论 HR 了。“HR 水平不够看不懂简历,不是我的责任”,永远不要有这样的想法。
2、从这份简历透露出的经历
斯坦福毕业的教育背景、知名硅谷公司的工作/实习经历、创办过公司并被雅虎收购、丰富的项目经验、有影响力的事迹,还有 Organizations、Hackathon Wins、Awards 等加分大杀器。这样的简历就是“完美硅谷求职简历”。
比如 Projects 中的 Youtube Instant,我们从链接中得知 Feross 的光辉事迹:
Feross 在斯坦福上大三的时候,Google 推出了一项新功能 Google Instant,可以实时显示搜索结果。Feross 觉得也可以为 YouTube 开发一个服务,让 YouTube 实时显示视频。于是他用 3 个小时完成了 Youtube Instant 网站。
有一百万人在 10 天内访问了这个网站。Feross 因此收到了来自 Youtube CEO 的 offer,还有 Engadget、TechCrunch、NY Times 等一票知名媒体报道了这事。
三、善用 Github
Github 对于程序员来说,是一种生活方式。越来越多的公司在招聘时,技术负责人会关注求职者的Github。我所在的公司 100offer,也鼓励用户在填写简历时附上自己的 Github 主页。
这是 Feross 的 Github:
当然,为了表面好看去刷提交次数或者 star,是没有意义的。善用 Github,对求职、精进自己的代码水平、扩大在同行中的影响力,都有非常好的正面作用。
四、Feross Aboukhadijeh是如何学习编程的
Feross Aboukhadijeh 在自己的博客上记录了自己学习编程的经历, 同时发表在 Quora 上获得了四位数的赞同。
现在全文翻译如下:
我是怎么学习编程的——别人常常问我这个问题,特别是在我建立了 Youtube Instant 网站并被很多媒体报道之后。在这里我决定分享我的经历。
一句话以概之:我学习编程的方法,就是大量创建网站。
我在很小的年纪就开始学习编程,学习的方法就是创建大量的网站。下面我将介绍几个自己创建的网站,其中最早的一个,是我在 11 岁的时候开发的。我希望读者能从我的叙述中了解到:如果你想学好编程,做大量的练习性项目是非常重要的。
学习一种技术最好的方法就是练习、练习、练习。我知道的所有优秀的程序员都非常享受编程——编程是一件让他们乐在其中的事情,所以他们大量编程,甚至常常到达废寝忘食的程度。学会如何编程——还有如何做好这件事——并不需要有超出常人的能力。只要你愿意动手开始做就行。
下面就是我如何学习编程的故事:
一、我的第一个网站
在我十一二岁的时候,我决定给自己做一个网站。我记不清那时为什么想到要做一个网站,只记得这样我便开始做了。于是,我开始在网络上搜索关于网页、浏览器、HTML 工作原理的知识。虽然在这过程中,我发现网上很多信息已经过时了,甚至是明显的错误(例如为 IE 和 Netscape 浏览器分别建立网站),但这个过程让我觉得非常有趣,学到了很多新知识。
尽管在网络上得到的信息质量层差不齐,我最终还是完成了一个简单的网站,我称之为“Feross的网站”。我用 Frontpage 开发了它,那是一个很棒的所见即所得的HTML 编辑器。我用很常见的语法,比如粗体和斜体对网站做修改,在编辑器里即时查看这些 HTML 标记的效果。这是个非常有效的学习方法。
这是我的第一个网站的截屏,现在它已经不存在了。
这个截图不能完全反映网站的状况:事实上,网站上的每个元素都在动,有闪烁的动画,还有声音。我在网站的每个网页上都放了不同的 MIDI 格式的歌曲,并且全是自动播放,无法把它们停下来,除非把电脑设成静音。哈,在当时这是很流行的网页设计风格。
过了几年后,我重新设计了这个网站,使它变得更美观。我在网上找了一些免费的网站模板并使用它们,还用微软的画图工具修改图片。
虽然我在建立网站的过程中大量依赖现成的模板,但这仍然不失为一个学习 HTML 和 Web 浏览器的好方法。“Feross的网站”除了用来收集我小时候的一些视频外,没有其它用处,所以不久后我便对它失去了兴趣。
我第一个真正的项目
在我 9年级,也就是我 14 岁的时候,我和朋友们都沉迷于在 Newgrounds 和 eBaumsWorld 等网站上观看 flash 视频和动画(这是2005年之前,那时 YouTube 还没有出现)。我每天花大量的时间泡在这些网站上,所以我熟知所有最棒的视频和游戏。
我产生了一个想法:如果我做一个网站,收集所有我喜欢的 flash 动画、视频、游戏,那真是一件非常酷的事情。于是我便做了 FreeTheFlash 网站,它是这样的:
感谢我在开发“Feross的网站”过程中学到的 HTML 知识,同时我还使用了Macromedia 公司——也就是现在的 Adobe——制作的 Dreamweaver 编辑器,通过这个软件,我可以在网站重复的页面上使用同一套模板。
过了一段时间,我想到可以让网站动起来。我听说可以用一种叫做 PHP 的编程语言来做(动态的)网站,于是我花了 20 美元在 Amazon 上买了一本书,叫做《PHP and MySQL for Dynamic Web Site》。我通过学习,使用 PHP 和 MySQL 重新设计了网站,同时还对它进行了新的美化:
在我读高中的时候,我对 FreeTheFlash 网站的开发持续了2年。这是我第一次尝试做一个“真正的”网站。对于一个初手来时,这个网站是成功的——在 2006 年,它获得了 60 万人次的访问,以及 300 万的页面浏览量。FreeTheFlash 让我感受到,做出一个成功的产品并看大量的人使用它,是一件多么自豪的事情。从此,我决定做出更大更好的网站。
我的第二个网站
在中学时期,我在计算机课上做了很多笔记。在我 11 年级的时候,我决定把这些笔记放到网上,让那些不喜欢看课本的学生使用。我做了一个叫做 StudyNotes 的网站。在开发过程中,我使用了 PHP 和一种叫做 Joomla 的内容管理系统。我也尝试使用 Drupal,但最后发现它太复杂了。
还是这一年,我为学校的 Key 俱乐部建立了一个网站。
在这段时间里,我花了很多时间泡在WebmasterWorld 论坛里,这里有很多网站站长和 SEO专家,他们推测 Google 的算法,讨论 AdSense 技巧,调试网站问题等。
大量的学习和阅读
在我进入斯坦福大学后,我学习了大量的计算机课程,诸如CS106X和CS107,我还提前学习了一些CS106课程。
我把所有的课余时间都花在阅读设计、编程、浏览器和 JavaScript 等领域的资料,平均每天 4-5 个小时。我在读些什么?五花八门,什么都有。其中有大部分,是我敬仰的设计师和程序员写的博客。
一件意义重大的事
那是 2010 年的夏天,我在 Facebook 实习的时候,因为和一个朋友打赌,我开发了YouTube Instant 网站,它可以让人们实时搜索 YouTube 上的视频。这个网站在建成后的 10 天里获得了一百万用户的访问量,甚至连 YouTube 的 CEO 都表示愿意给我一个 offer。你可以点击这个链接阅读媒体们对这件事的报道。
我很清楚地明白,YouTube Instant 的成功归功于好时机和幸运。
继续前进
我发现有很多人使用 YouTube Instant 来听音乐视频,这让我想到了另一种使用YouTube API 的好方法。于是我和朋友 Jake Becker 在 2011 年的前 3 个月里开发了Instant.fm,它能让人们轻松地向朋友分享音乐播放列表。通过这个项目,我们学到了很多新东西。
在这个项目里,我学到的技术:
jQuery
CSS (以及Modernizr和YepNope,帮助人们解决跨浏览器问题)
Python
Tornado
Git&GitHub
Last.fm API
YouTube API
团队合作
还有其它一些我们学到的东西:
Nginx
Supervisor
SQLAlchemy
Apache Ant
动手去做
我详细叙述了我从 11 岁开始做的东西,就是希望能告诉你:如果你想学习编程,你需要动手开始做!现在就去做,不要找任何借口。动手做是最好的学习方法。
把编程语言书从头读到尾是一件很枯燥的事,常常读到一半你就坚持不下去了。但如果你打算做一个项目,你会在做的过程中明白自己应该学习哪些知识,这是学习知识更有效的途径。
计算机课程
大学里的计算机课程,是另一种十分有效的学习编程的方法。那些好的计算机课程,都十分强调学习计算机科学领域里的重要概念,而不是局限于教会某个特定的语言。这可以帮助那些没有接受过正规教育的人在自学时开阔眼界。
我还清晰地记得,在斯坦福大学里我上的第一堂计算机课(那是一堂关于 C++ 的课程)。当时我还在想“变量前怎么可能不带 $ 符号呢?”——因为那时我只使用过PHP,我用了很长一段时间,才改掉在变量前加 $ 的习惯。
在 IT 公司工作
另外一个提高编程水平的方法,就是去 IT 公司实习,比如 Facebook 或者 Quora。最近的两个夏天里,我就是在这两个公司里工作。你可以从优秀的同事那里学会如何更好得编程,如何阅读和理解他人的代码,如何在大项目中进行团队合作。
还是那句话——比什么方法都管用——学习编程最好的方法就是做项目练习。我是不是已经重复这句话无数次了 :-)
如何学会编程:
做 side projects
看编程书
做 side projects
上计算机课
做 side projects
读编程类博客
做 side projects
这就是我能给出的最棒的建议。Happy hacking!
如果想去硅谷工作,可以在知乎阅读我的其他回答,应该有帮助:中国程序员怎么去 Facebook 工作? - 知乎@luckystar 的回答。本文为 100offer 程序员拍卖原创,始发于微信号@(微信ID:at),原文始发于如何成为在硅谷受欢迎的程序员?