时间:2015-04-06 08:44:28 来源: 复制分享
年龄太大了,真的不能当程序员么?
我22岁开始学习编程,以下是我的学习“大事记”:
22岁我学了什么是if条件判断语句。
24岁我在Fackbook找到了一份分析师职位的工作
25岁我在Facebook的职位变成了工程师
26岁我业余时间做了个小项目,赚到一大笔钱,我在Facebook拿死工资是永远赚不了这么多钱,于是我离开了Fackbook,用这笔钱开了一家创业公司。通过Y-combinator,我从一家顶级风投公司获得一大笔投资。
我今年正是26岁。
我很幸运,但我并不特别。如果你也全身心地投入到一件事中去,你也可以做到这样。接下来,我将要告诉你我的故事,希望这能激励你去做你感兴趣的事,永远不要因为觉得“太晚了”而放弃换一份新工作,放弃学习新知识。
这是我之前针对Quora里某个问题的回答,后来我邮箱里收到了50多封邮件,请求我把我的故事分享给大家(貌似这些邮件都是来自印度的大学生)
如果你只是想看看我关于如何学习编程的建议,那你可以直接跳到文章结尾。
如果你要问我问题,我的Twitter账号是@whatsdonisdon。
更详细的“大事记”:
2007年(18岁):成为瓦萨学院(Vassar College)医学预科班的一名大一新生。
与其他新生一样,我告诉自己以后就是医学预科班的一员了。
2008年(19岁):大二,把专业换成了经济学。
这一年,我喝了好多啤酒,玩了滑雪,在经济学中学到了许多有趣的知识。
2009年(20岁):大三,发现教科书很多知识值得一学。
这一年,我染上了mono病毒,大部分时间都躺在床上,不能上课。所以我只好看书,看着看着发现能从书中学到很多东西,真希望我在毕业前能把它们统统学完。
2010年5月(21岁):大四,总算取得了好成绩。
好吧,我写得太夸张了。过去,我的成绩也算是体面,但这一年我第一次得了全优(straight A)!(这是我16年学习生涯中的头一遭…)
大四之前,我一周只有一天花在学习或工作上。我想出一个好办法,这样我可以花最少的时间却能成绩良好(B)。事后想想,这很重要。因为我无情地把我的工作放在优先位置,所以我不得不花最少的时间应付考试,这样我才能腾出更多时间做其他事情。
如今,我从书中学到了很多,再加上我有能力分清工作的主次,终于得了优秀(A)。
2010年7月(22岁):大学毕业。开始在Morningstar公司工作,职位是数据分析师。
我成为了Morningstar这家金融公司的一名数据分析师。当时的我完全不会写代码。
2010年8月(22岁):为Morningstar公司的新主页出了个主意,他们挺喜欢的。
所在项目:FindData
当时,我提出为公司开发个新主页的想法,他们很喜欢,因此给了我一个5人团队来实现我的想法,这5个人都是新招的兼职员工。
这是我第一次“管理”一个项目,或者说,是我第一次带领别人跟我一起实现自己的想法。这对我来说十分困难,所以我犯了很多错。其中最严重的一个是我没有听从团队的建议。如果你只知道一条关于如何管理一个创意团队,那这一条无疑是:把自主权交给你的团队,而你只需要聆听。你的时间应该花在为他们提供所需要的一切(因为你听他们的),以及其它他们没时间完成的工作,通常是与一大波潜在客户沟通。
我每每有个新想法,我总是无法自己来实现,因此只能依靠我的团队来实现我的产品。但他们是兼职员工,除了我的项目外,还要完成自己的本职工作,可我却希望项目能进展得快一些。于是我开始学习编程。
2010年12月(22岁):开始学习编程
所在项目:FindData
我开始学习HTML、CSS和Javascript,这三个术语可以理解成构建一个网页的三种“语言”。从博客,到普通的网站,再到Facebook所有这些都是用这三种语言写成的。如果我学会了它们,我就能自己完成我的产品了。
我从www.w3schools.com开始学习。在这个网站上,我学会了HTML和CSS,并为我老爸的公司开发了公司主页。这个主页很挫,我老爸没用真是个明智的选择。
接着我去lynda.com,学了jQuery,它本质上就是javascript。现在我可以为一个网站做出交互式原型了。
在lynda.com上,我又学了PHP和MySQL。这样,我就可以将数据存在数据库中,我的网站有了“后端”(backend)。到目前为止,我总算修成了“全能型”码农,可以自己搭建一个完整的web应用了。
两个月内,我从对编程一无所知,到能够搭建一个完整的web应用。虽然这个web应用看上去不够好,但至少能用了。
2011年(23岁):Morningstar没有将我的项目上线。我搭建了4个网站。
所在项目:FindData、BarCraft、Morningstar图形交互、Amuse.me
Morningstar不喜欢我的产品(FindData)。他们没有上线使用。事后想来,这是个明智的选择,如果是我,我也不会上线使用这个产品。
但我对这事耿耿于怀。我转到另一个团队,在新团队里,我每天的工作都跟Excel打交道。我不喜欢这样的工作。于是我又回到了以前的习惯:每周拿出一天把本职工作做完,另外四天都花在编程上。五个月左右的时间里,我几乎每个月都搭建出一个新的网站。
2012年(24岁):12次面试后,成为Facebook的一名分析师。收获很多,也搭建了更多网站。
所在项目:Tickur.com、Lookgr.am、Roomidex.com、Searchnwork.com
Facebook的标准面试流程并不需要12轮面试。我最初申请的是项目经理的职位,但几轮面试下来,我被拒了。
不过数据分析团队对我挺有兴趣。我着迷于消费类网站,懂数学,而且有些许金融行业背景。经过了几轮面试之后,他们录用了我。
Facebook的那段时间,整个工作环境迫使我的内心不断成长。因为我周围的同事全都比我聪明,我不得不尽自己最大的努力,让自己不断前进。曾经的大学生活以某种方式让我的想法达到了另一个层次,如今Fackbook再一次推动着我前进。
我不能胡乱给出一个问题的答案,并让同事们接受培训,因为他们都太懒了,不愿意去思考或是评判我的逻辑是否正确。如果我给出了错误的答案,我要马上自己纠正它,如果我给出了正确的答案,我就应该顺着这个思路继续想下去。就这样,我成长了。
我还学到了世界上最优秀的面向个人的科技公司是如何运作的。我发现,当你看到Mark Zuckerberg是如何做决策时,像“数据驱动(data driven)”、“最小化可行产品(minimum viable product)”这些流行术语根本就不起作用。我在报纸和博客上读了很多关于公司的介绍,还参加了公司的每周五例行的与Mark的答疑互动活动,并从中探寻真相(不管怎么说,这个真相至少是来自专家的观点)。
因此,白天,我学着如何运作一款产品、一个项目、甚至一个公司。
晚上,我继续写代码,实现自己的想法。现在想来,当时写的代码烂得很,但我的编码水平不断地在进步,从中吸取了很多经验教训,构建网站的速度也越来越快了。
2013年(25岁):成为一名Fackbook的工程师
所在项目:DataFinder(Fackbook的项目)
我不是个优秀的工程师,虽然我知道什么是“继承(inheritance)”,在构造个人项目时,也能将PHP用得很好,但仅此而已。我不知道什么是“排序(sort)”,并且对算法和数据结构一无所知(不仅当时是这样,现在也还是…)。
我只知道针对分析团队使用的内部数据工具(基于网站)可以进行哪些改进,并且我很清楚该如何做。因此我以工程师的身份加入了数据工具团队。
虽然我写代码的速度可能只有科班出身的工程师的十分之一,但由于我之前做过分析师,而且在交互及视觉设计方面能力不错,因此团队内部给了我较高的评价。
2013年4月:开始构建Blockspring.com
所在项目:Blockspring
我业余时间跟我的一个高中同学一起合作一个小项目。他是个聪明而且努力的人(我只是委婉地说说而已:D),比我还更不算个工程师,因为他只懂一些基础。那时候他刚辞了咨询师的工作,开始创业。
那时候我已经接过很多私活了,但Paul是我真正开始建立一个公司时的第一个共同创始人。
我们项目中的其他共同创始人都是兼职的,Paul是第一个全职加入的。
其他几个共同创始人总喜欢就着网站的着色,以及是否需要加入一些小的功能而争论,这花费了我们大量的时间和精力,实际上我希望在我构造网站的时候,他们去做营销的工作。Paul每个月都邀请许多人访问我们的网站,同时他还自学编码,并帮我一起构建网站。
我并不是想说我的第一批共同创始人很糟糕,我认为主要是我不知道如何处理与他们之间的关系,也不知道怎么为自己设定一个预期目标。当你拥有一家创业公司时,你要做的最重要的事之一就是为公司设定好预期目标及所有权。
我们完成了Blockspring项目。
2014年3月(26岁):为Blockspring.com找到了个客户
我们试着向许多公司推销这个产品,但都失败了。
我们产品介绍公开在博客上,一个来自纽约的聪明的家伙认为这个产品有潜力。于是我们飞往纽约去做推销。但我们还是没能将产品卖给他,不过他答应让我们在纽约呆上一周继续开发Blockspring,这一周的费用由他来承担。
我当时还是Facebook的全职员工,所以以“有急事”为由请了一周的假,呆在纽约继续开发Blockspring。
业余兼职并不违反Fackbook的规定。每个工程师都有自己的业余项目或者兴趣爱好。如果你想留住那些有创业精神的员工,你就得让他们追求他们的“雄心壮志”,同时你还得把你的公司环境打造得更有吸引力,让他们觉得相比兼职,他们更喜欢这份本职工作是不是觉得这种做法太疯狂了?去Fackbook工作,体验一下吧!
但无论是我推销Blockspring,或是花时间继续扩展它的功能,都分散了我的精力,没法集中于Facebook的本职工作,我认为这无论对公司还是对团队都不公平。如果我还想继续开发Blockspring(虽然这个网站几乎没有用户,而且只有一个潜在的客户),我就不得不离开Facebook(虽然Facebook给我提供了全世界最好的工程师的职位,高额的薪水和福利,还让我交到了很多好朋友,诸多种种…)
于是,我离开了Fackbook。
2014年6月:Y-Combinator公司
我们加入了Y-Combinator公司,这家公司为创业公司进行估值,并提供全世界最好的条件加速发展。
我们一共工作了三个月,每天工作16个小时。
这种方式可一点儿也没意思。有些校友称之为“高压锅”,这算是最不夸张的形容。大多数人在一个项目上连续工作两天就会感到厌烦了。在加入Y- Combinator之初,我们在白板上写下了一个数字:85。这表示从那时起至产品演示,一共有85天时间。用85天来扩展产品功能。我们做累了睡(算是睡了吧…),睡起了做,跟各自的女票说她是全世界最体谅我们的人,然后再接着干活。
85天过去了,我们向大家演示了我们的产品,也因此获得了投资。
2014年8月:回到正常生活
我们结束了与Y-combinator的合作,搬到了旧金山的新办公室。我开始把自己的周末从Blockspring项目中解放出来。这种状态大约持续了一个月,现在,我又开始周末也写代码了,实现一些与Blockspring有关的功能,学习图像、动画、博客技术,看看人们在网上都是如何交流的,等等。
这就是我的全部经历。
总体说来,我比较擅长于吸引人才加入我的公司,并让他们对我的想法感兴趣。同时,我还能自学编程,这意味着,我能做到一边促进自己的事业发展,显露自身的管理才华,一边促使我提高自身的执行能力。
如果你现在就希望自己成为一名工程师,那么以下就是你的任务清单:
1.到w3schools.com网站上学习HTML和CSS。
2.思考一下你想做一个什么样的网站。已经有想法了?很好,那么开始实现吧,不管别人告诉你这个想法有多么困难。
3.在你的电脑上打开一个文本编辑器(不是Word),并保存成index.html。把你从w3schools.com学到了HTML和CSS的知识应用到的你网站上,试着在页面上显示些内容,看看你能实现多少功能。
4.到lynda.com网站上,看一些关于HTML和CSS的新手视频。
5.尽量往index.html文件中加你所想的内容,仿照你喜欢的网页上的配色。如果你遇到无法解决的难题,到“jsfiddle.com”网站上测试你的代码,并把问题贴到StackOverflow上寻求解答。
6.到lynda.com网站上看一些关于jQuery的新手视频。引入这个技术将使你的页面交互变得非常简单。
7.在index.html文件中加入jquery,这会让你的页面使用起来像个真正的网页,你可以在上面虚拟一些交互。至此,你的网站原型就算构建好了。
8.把index.html转成Rails项目。现在你可以算是一个全能型的网页开发者了,虽然技术还很挫,但至少你已经会做了。你所需要的是努力提升自己的水平。
9.继续实现你的项目,遇到难题找google,或者把问题放到StackOverflow上求助。你一定会为自己的飞速进步吃惊的。
10.继续构建你的网站。
你也许会说:“可这个清单写得实在太不具体了,而且听说w3schools差得很,我朋友告诉我代码只能在GO上写。”
我将这么回答你:“我的小乖乖,当你成为一名工程师时,你最厉害之处应该是能独立解决问题。因此,跟着这个任务清单去做,是将你带上一条学习曲线。顺着路线走,你会真正学到如何把自己的想法构造成产品,这会让你对自己更加有信心,相信自己无所不能。”
好了,我说完了,可以把这一大堆废话贴到Quora上了……