开发与研发php
按:这几天我一直在写这篇东西,原本是成竹在胸,没想到后来越写愈加现本身在这个题目下有太多话想说,而以我如今的能力又不能很好地归纳总结,以致于越写越长,文章结构也变得混乱,到后来修改的时候每次都要考虑很久才能下笔,因此决定拆成两部分来发,以便阅读。这篇写得我心力交瘁,质量不算好,凑合着看吧。html
一样是写程序,不一样的岗位工做内容不同,对程序质量以及工程师的要求也不同。程序开发大概能够划分红两类:开发和研发,相应也就有开发工程师和研发工程师。不少人以为作开发和作研发没什么区别,“都是同样对着电脑写程序啊”,但其实这二者是彻底不同的,下面我想抛开公司对员工的指望、社会对工程师的需求等其它因素,单纯从国内互联网行业“工程师我的发展”的角度来讲一下我我的对这两类工做的见解。程序员
开发通常是指产品开发,开发工程师直接为产品贡献代码。每一个公司都有本身的产品线,拿 Google 来讲吧,它有 Gmail, Chrome 等产品,每一个产品都有不少开发工程师在后面支持,这些产品的开发、维护以及升级都是由相应的开发工程师负责的。因为开发工程师的工做直接关系到产品的质量和在线状况,因此开发工程师的责任是很重的,他可能常常为了下个版本的发布而加班,为了产品的故障不得不在休假的时候打开电脑工做,甚至在过年的时候都会接到领导的电话。因此你看到那些总抱怨加班太多,老是说本身是“IT民工”的,大部分都是开发工程师。在工程师当中,大部分人都是作产品开发的,毕竟公司都是要靠产品盈利,招聘的大部分人也要直接为产品服务。算法
作开发是很辛苦,但也有好处,由于须要对产品线负责,因此会是公司的核心,裁人对你威胁不大,若是你负责的产品刚好又是盈利产品的话,那么加薪、奖金、集体出游等福利都不会少。若是你足够幸运地加入了一家快速发展的创业公司,说不定一会儿就发家了。还有很重要的一点是,做为产品的开发人员能够看到本身作的东西被那么多人使用,那是一种莫大的鼓励和确定。编程
尽管我很尊重开发工程师,可是我不得不认可,在国内大部分的公司,作开发工程师是没有前途的。首先,从微博到开心,有多少国内的产品不是山寨的?这也罢了,最恶心的是有一些产品经理连产品设计图都懒得本身画,直接去截取别人产品的图片,假如我是一我的人网的开发工程师,天天看到产品经理把 Facebook 新上线功能的截图拿过来让我作,你让我如何对产品有荣誉感和认同感?而若是一个开发工程师对本身作的东西没有荣誉感和认同感,那么他坚守本身的岗位要么是由于公司给的钱多,要么是由于他尚未找到下家。我我的认为,作开发最大的一个好处就是能够亲手实现一个“本身的做品”,就算平时很累,但最后完成它的时候也仍是会无比知足,这点被剥夺了以后,和饭店打工的服务员有什么两样?不同是为了糊口吗?网络
我不知作别人怎样,但我自参加工做以来就一直纠结于此――甚至开发的大部分产品都很差意思写上本身的名字;直到前不久有机会去作一个公司内部使用的平台,才终于有个做品让本身以为满意。相信不少开发工程师参加工做以前都对互联网上不少诸如Gmail, Facebook 等优秀的产品耳熟能详,本身也常梦想作出那样的产品,但万万没有想到的是,工做以后要学习的第一课就是“不要对本身作的东西有感情”――有了感情你就不肯意作广告弹窗,不肯意看到它下线,不肯意为了短时间利益伤害用户。与此同时,你还要继续听产品经理和老大们满怀激情地说“咱们必定要让用户喜欢咱们的产品”。一个连开发工程师本人都以为无聊的产品如何让用户真正喜欢呢?拿搜索巨人来讲吧,Google 把社交网站看做是某种形式的娱乐而不是有用的工具,因此它会在社交领域失败,再牛的技术也没法遮盖情感上的空白。不过话说回来,这好像对于国内大部分的公司都不是问题,由于它们作一款产品只是想从用户那里拿到钱,若是之后用户流失了就下线,而后再开发一个新的。他们要的不是用户的长期感情,而是一晚上情,开发工程师就是一晚上情的工具。数据结构
其次,国内几乎全部公司的技术流程和技术积累都作得很烂,大部分都只是片面地追求开发速度。咱们在大学里受到的教育是“文档和注释很重要”,工做以后才发现文档和注释是很稀有的东西,只有特别负责任的工程师才会挤时间去写。有一个颇有意思的现象是,国内不少产品发布以后会特别自豪地说“XX 是咱们开发团队在时间紧迫的状况下,封闭开发了X 天就完成的!只有最牛的工程师才能创造这样的奇迹!!多少个凌晨,XX写字楼上只有咱们办公室的灯还亮着……”,而后你会以为“好感动啊”,但冷静下来想想,这种拼命赶工作出来的东西质量会过硬吗?抛开产品质量不谈,没有时间写文档、没有时间写注释、没有时间作 code review, 没有时间作阶段总结……没有了这些,做为一个开发工程师你经过这个项目能够提高多少呢?因此好多开发工程师一开始是“代码民工”,过了几年仍是“代码民工”,而一我的年富力强的时间又有几年呢?怪不得那么多人说工程师和妓女同样,都是吃青春饭的。架构
我我的认为,国内的开发工程师大概有三个发展方向:1.作管理。 2. 去作架构等与产品关系不那么紧密的研发。3. 提高其它方面的能力,作 “A+ Player”,而后本身创业。我对管理没有研究,也没有兴趣,这里就不说了。研发我会在下篇中细说,这里主要说一下第三条。ide
若是你只会埋头写代码,那么代码写得再好也可能不会是一个好的开发工程师。作开发不是作学术研究,你的任务不是去钻研技术,而是利用本身的技术把产品作出来。尽管技术能力是基础,但若是没法把能力很好地应用到开发当中,那么你在团队中就没什么价值。举个例子,若是你不能很好地理解产品需求,那么就会根据本身的理解去作技术方面的架构和编码,等到后来发现了再去修改就特别麻烦,这个时候技术能力强反而成了坏事,南辕北辙的故事我想你们都据说过。工具
不少开发工程师属于那种“很本分”的人,历来不会提出意见,不关心产品形态和细节,只是去作产品经理提出的需求。我以为别人把工程师叫作“代码民工”也就算了,可是工程师对本身作的东西彻底没有见解,那就是甘心沦落为民工了。这也有文化的缘由,国内的公司都喜欢那些不爱抱怨的员工,由于他们听话并且符合中国传统的价值观,但我更喜欢那些爱抱怨而且抱怨得有道理的人,由于国内(不仅是互联网上面)粗制滥造的东西实在太他妈的多了,不抱怨才不正常,有不满才会去思考如何作得更好。
曾经听到有人谈论如何管理技术人员的时候说:“管理技术人员很简单,找一个比他们都牛的人就好了。” 这我的很了解工程师的脾气。工程师去判断其余工程师的时候,每每只看他的技术能力,以为谁的技术好谁就最牛,其它的都无所谓。没错,技术牛的工程师写的代码质量很高,但这只是一个方面而已,判断一我的在团队中是否是“很牛”要看他对团队对产品的总体贡献,而不是他的我的能力。他能很好地理解产品需求吗?能很好地理解设计师的意图吗?和团队其余成员沟通顺利吗?写出的代码方便测试吗?会对产品提出好的建议吗?……这些都是判断一个开发工程师的标准,总体素质越高在团队中的价值也就越大。
因此要想作一个好的开发工程师,就要在写好代码的同时努力提升其它方面的能力。我知道大部分的工程师都喜欢和机器而不是和人打交道,因此遇到和产品经理、设计师以及 QA 等部门协调沟通的时候就皱眉头。协调沟通确实是一件闹心的事情,但从另外一方面来讲,这是开发工程师的一个得天独厚的优点:你能够深刻接触产品生产线上的全部环节。需求评审的时候,你能够了解产品设计;开发界面的时候,你能够了解到视觉和交互设计;测试的时候,你能够了解到产品测试的细节;上线的时候,你也能够多观察 Ops 同事的操做。若是你能够在协调沟通的时候学会换位思考,多从对方的角度看问题,多想一下“他为何要这么作”,那么不知不觉就会对各个领域有一些了解,进而发现原来每一个领域都大有学问,就不会由于周围那些学艺不精的人而轻视他们所在的领域。
对于工程师来讲,测试和上线都是技术性的工做,和开发有不少相通的地方,而产品设计、交互设计和视觉设计等设计领域则比较陌生。对于本身不了解的东西,咱们的见解每每会趋于两个极端:要么是看得高深莫测,要么是看得一文不值。其实对于大部分的东西,只要不笨而且愿意下功夫学习,老是能够学会的。尽管达到大师的水平可能须要传说中的“天赋”,但作到中等水平并非特别困难。关于设计领域我一直在断断续续地在学习,到如今可能连略窥门径也算不上,这里只是说一下我我的对设计的理解和心得,供你们参考。
产品设计看上去比较简单,由于只要清楚本身想要作什么,那么天然能够慢慢勾勒出产品的形态和功能。要作好产品设计,就须要平时多下一些功夫,多研究一下互联网上那些已有的产品,另外还须要多看一些诸如社会学、历史等“闲书”,举个例子,假如你想开发一款针对台湾用户的产品,那么了解一下台湾的文化确定是有必要的。总之,学习产品设计是慢功夫,没有什么速成的捷径,只有一点一滴地不断积累才能培养出敏锐的产品意识和深入的洞察力。
工程师学习产品设计有一个优点,那就是设计出来的产品是本身亲手实现的,你能够在实现的过程当中不断从新反思原来的设计,而后加以修改和完善。这就好像写文章同样,不少时候你写东西的时候并不清楚本身具体要写什么,但只要是下笔开始写,写着写着就会发现新的想法,写做的过程同时也是思考的过程。写做和写代码很像,它们不只能够表达想法,还能够创造想法。
不少工程师听到视觉设计会马上远而避之,以为本身“不会画画”、“不懂配色”是不可能学习视觉设计的。诚然,视觉设计是须要更多艺术方面的基本功,要彻底掌握须要长期的训练,但咱们仍是能够从简单的学起,慢慢培养对设计的感受。我我的在这方面所知很是有限,可是对视觉设计中的完美主义印象深入。
编程的时候,若是你的某行代码多了一个空行可能不会有什么问题,但在视觉设计中差了 1 个像素或者 10% 的透明度就是不可容忍的,不少设计师要求的都是 “Pixel-Perfect”――像素级别的完美。若是你不苛刻地追求完美,几个这样的“小瑕疵”就能够把整个做品毁掉。在我没有接触过视觉设计的时候很难理解这一点,切页面的时候并不会特别仔细地去看设计图,并且为了下降技术难度会想固然地篡改设计师的意图,好比把一些微小的渐变用纯色代替,这是很无知的作法。因此当设计师要求你作一个 1px 的修改的时候,即便会花掉你几个小时的时间也要听他的――只有这样才能够把界面作到百分之一百的完美。固然,设计师本身作不到完美另当别论。
此外,做为一个页面设计师,从职位名称上来看他的最终做品应该是页面,而不仅是视觉效果图。因此我以为页面设计师应该精通 CSS,只有本身才能够精确实现本身的设计意图。对于那些没有受过设计训练的工程师来讲,很难注意到页面上色彩、字体和渐变的细节,让他们精确实现一个设计师的意图几乎是不可能的。精通 CSS 对于页面设计师来讲并不算一个过度的要求,不少国外的设计师甚至能够本身用 PHP 写出产品原型,相比之下,国内的页面设计师进化得实在太慢了。
交互设计是有关行为的设计,它更关注如何让产品更好用。举个例子,网页中通常都有不少超连接,当你把鼠标移动到超连接上的时候,鼠标形状会变成手型,暗示它是能够点击的,并且访问过的超连接和普通超连接的颜色是不一样的,这样就很好地引导了用户行为。
以前我一直把设计和“视觉设计”等同起来,但在深刻了解了以后发现,对于互联网产品来讲,交互设计要比视觉设计重要得多,并且交互设计相对于视觉设计也更加有迹可循,对“感受”要求没那么高,工程师彻底能够把重点放在交互设计上。若是交互设计作得好,视觉设计遵循一些标准,那么彻底能够作出一款“不难看而且好用”的产品。没有人特别夸赞 Google 的产品“好看”,但它们都特别好用,Google 注重的是易用、快速,用户体验是很棒的。
互联网行业的大部分页面设计师(Web Designer)都是学习平面设计出身的,但我以为网页和软件设计更像是“显示器里面的工业设计”。不少平面设计师设计出的页面很好看,好像海报同样,很是适合打印出来,但每每对交互方面重视不够。不太好看影响不会很大,但很差用就没有办法留住用户,并且有时候太注重外观的视觉效果反而会分散用户的注意力进而影响产品的使用,这种 “eye candy” 是糟糕的设计。如今专门培养交互设计师的机构很少,我很但愿对互联网有兴趣的工业设计师们到这个行业中来。
关于设计我就说这么多,之后有机会再另外撰文专门探讨这些主题。值得一提的是,没有人能够真正把设计和开发所有精通,若是深刻到细节,不管设计和开发都会占用你大量的时间和脑力。单从设计来讲,须要掌握的就有颜色、字体排印(Typography)、排版(Layout)、交互设计等,其中每一种技能又涵盖无数细节,真的是要皓首穷经才能够在其中的某个领域成为大师。不过,即便你对这些知识只是有一个大体的了解,之后在看一款产品的时候也能够从功能、交互、排版、页面代码、总体性能以及URL语义化等各个方面进行全面而细致的分析,明白它哪里作得好,哪里作得很差,而不是在那里想固然地说“真酷”或者“狗屎”。真正了解什么是好的什么是差的,本身作东西的时候才会心中有数。
不少人可能会说:“一我的要是能够把全部事情都搞定,那还要其余人干吗?我更相信团队的力量。” 没错,一我的就算从设计到开发都精通,若是只有他一我的作东西,开发效率也不会高。可是若你真的花心思去了解那些“与代码无关的事情”,你就会在写代码的时候更多考虑到产品经理/设计师的想法,对产品经理/设计师疏忽的地方也能够及时提醒,让本身真正地融入整个团队。目标并不必定要实现,它是用来指明方向的。开发工程师提升本身的产品意识和设计能力绝对不会是白费心血,否则的话你就只是一个实现产品的工具。你只会回答别人提出的问题,而好的问题要比好的答案有价值得多。
当你各方面能力提升得差很少的时候,应该就能够出来创业了(注意,我说的是创业,不是去创业公司打工)。由于对各个领域都有必定的了解,平时也常常接触到各个领域的人,那么在创业的时候你就很清楚本身须要什么样的产品经理/设计师,知道具备什么样能力的产品经理/设计师才是最好的,这样就能够从一开始就保证团队的质量和睦质。不少互联网的业界前辈都说过“要招聘最好的人”,但问题是你如何判断一我的是否是该领域最好的呢?若是一我的对程序和设计一窍不通,满脑子都是商业运做,你以为他有可能找出最好的工程师和设计师吗?有一次和一个创业公司的CEO聊天,他和我讲他们“只招聘 Geek”,后来我才发现他其实根本不知道什么是 Geek,只是不知道从那里听到 Geek 这个词,他真正想要的应该是那种只知道写代码愿意没日没夜不辞辛苦给他当牛作马的人。国内大部分的创业公司就是这样,老大们喊着技术密集型的口号,实际上作着劳动密集型的事情,金玉其外,败絮其中。你能够和他们不同。
我本身并无创业的经历,也没有创业的打算,因此对创业的理解可能很片面并且天真。可是我相信,找到最好的人永远都是关键,否则即使后来成功了,也不过是多了一家靠人数取胜的血汗工厂。假如你选择成为移动互联网的独立开发者,对一个产品各个环节的全局把握也是有必要的。若是一个团队的每一个人都能独当一面而且能够很好地理解其余人的意图和专业技能,就算最后在商业上失败了,那也会是一个幸福的团队,比那些除了盈利以外找不到任何亮点的团队好太多。
在“开发”这个小节的最后,我想多说一点本身对产品经理这个角色的见解。在国内绝大多数公司,开发工程师的做用就是把产品经理的想法以代码的方式写出来,“代码民工”这个称呼却是很恰当。我对互联网行业的产品经理们一直感到很奇怪:他们没有能力把本身的想法实现出来,可是却几乎老是认为本身比其余人更理解产品;当工程师对产品提出本身的意见的时候,他们每每会心中不屑但尽可能保持礼貌挤出微笑说一句:“呵呵,工程师不是普通用户”。一个产品原本就是须要不少人齐心合力一块儿完成的,产品经理和工程师的地位也是平等的,可是因为产品经理在工做流的上游,因此状况每每演变成工程师在为产品经理工做。若是产品经理真的对产品负责也就罢了,惋惜的是大公司的产品经理大部分是对KPI负责,小公司的产品经理大部分是对老板的我的好恶负责,结果就是工程师跟在产品经理屁股后面作一些莫名其妙的事情。我接触到的几乎全部开发工程师都对他们的产品经理头疼不已,据他们说,好的产品经理就像真正的爱情,是极为稀有和可遇不可求的。
按照如今大部分公司的分工方式,产品经理是产品的总负责人。根据我我的的理解,产品经理之于产品,应该至关于导演之于电影,建筑师之于建筑。一个导演若是对拍摄一窍不通,那么就很难控制镜头的表现力;一个建筑师若是对建筑材料和结构一无所知,就不可能把握建筑总体的感受。那为何那么多人会以为产品经理能够不懂技术不懂视觉设计,只须要写好文档画个框图而后交给别人去作就能够作出好的产品呢?原本是一个须要对各个领域融会贯通最难作得好的角色,如今反而被不少人视为悠闲的差事,不爱干活的人纷纷想要转去作产品经理,实在是可悲至极。
我一直坚信好的工程师是不须要产品经理的。若是一个产品非要有一个什么产品经理的话,Google 的不少产品都不会出现,DropBox 这种只招聘工程师的公司也早就完蛋了。不少伟大的产品都是几个工程师想到一个点子而后慢慢作出来的,好比 Paypal 和 Google. 但须要说明的是,我讨厌产品经理并非说我推崇“技术导向”――不管怎样产品都应该是让用户使用的,而不是用来炫耀技术的,只不过工程师不须要产品经理也能够设计好一个产品而且实现它。产品设计不是产品经理的专利。
想知道懂得设计的工程师没有产品经理的时候能够作出什么东西吗?去看一下 Livid 作的V2EX 就知道了。在国内,设计和代码都有品味的网站可很少,我以为 Livid 同窗真是开发工程师的典范。
研发
相对于开发来讲,我我的更喜欢研发一点。研发和开发的一个不一样之处就是研发有更多的“研究”成分在里面,也就是说研发的时候会有更多“光明正大”的学习时间,这对于那些对技术自己有追求的工程师来讲是颇有吸引力的。有一些人作工程师是为了能够创造出好的产品,而后挣大钱或者改变世界;也有一些人作工程师是由于对技术自己有兴趣,想要好好研究。能够凭借技术名利双收变身成功人士当然颇有吸引力,但不关心世事钻研一些本身喜欢的东西也自有它的乐趣在。
若是说开发产品是“输出”,那么学习思考就是“输入”,只有输出没有输入整我的就会废掉,彻底沦为一颗螺丝钉。在不少公司尤为是那种常常加班赶项目的公司,你天天都会处于很忙碌的状态,脑子里想的都是赶忙把指定的任务完成上线。由于时间紧,因此你在开发过程当中遇到什么问题都是只求解决,没有心思和时间去搞明白为何会出现那种问题,在这样的工做状态下彻底没有办法积累工做经验,看上去好像工做了五年,实际上是工做了一年,而后重复了四年。
作研发通常不会直接为产品贡献代码,更多作的是一些基础架构或者实验性的产品,因此它有几个很明显的好处。首先,不多开会。其次,没有产品经理。第三,通常都会把质量放在第一位,时间不会特别紧。这是三个很是巨大的优点,这意味着你绝大部分时间均可以安心学习、思考、设计、编程,幸福指数会飙升。若是你是作基础架构,那么代码质量就会有硬性要求,你不得不写得健壮、易用、松耦合而且易于调试,要花心思和时间细细打磨,对我的的能力提升、习惯养成和经验积累都很是有帮助;若是你是作实验性的产品,那么你就有大量的机会和时间去调研最新的技术,并且最棒的是你能够在产品当中使用它们――这对于开发线上产品的工程师来讲是不太可能的,由于不成熟的新技术存在太多未知的风险。
此外,作研发对工程师的素质要求很高,须要很好的技术基础、学习能力和研究能力――我把它看做是一个优势。从我的角度来讲,我宁愿一家公司招聘很是严格须要不遗余力才能够进去,由于严格的招聘能够保证团队全部成员的质量,不用担忧进去以后会“和臭棋篓子下棋”。既然选择去作研发,那么基本能够说明你是一个对技术有追求的人,也确定但愿周围是一群和你同样的人,而不是连基础知识都不够熟悉的家伙。只有这样一群“互相看得起”的人在一块研究、学习、思考、切磋才会其乐无穷,才可以产生更多创意,作出好玩的东西。
固然,作研发也有很差的地方。只有大公司才有研发部门,这些公司通常都已经上市或者员工已经不少,你不太可能有机会一晚上暴富。当你埋头作了几年研发以后,某一天去参加同窗会,发现大学时候那个数据结构不及格老是求你让他拷贝编程做业的张三衣着光鲜四处敬酒。他所在的公司刚刚上市,由于进去得早,如今他变成了百万富翁并且荣升高层。因而你突然开始怀疑本身当初的选择,连学习和编程的乐趣都变得很不真实。因此,若是你渴望建功立业,那么就不要选择作研发,或者作几年研发以后就出来闯荡。成功须要的条件不少,而编程只是你的优点之一,只有这一个优点你须要太多的运气才能够获得你想要的。
不过,咱们也能够换个角度看。“乱世放不下一张安静的书桌”,如今处处都无比浮躁,有个地方可让你安安心心作一些本身喜欢的事情已经很是可贵,多少人拼命挣钱就是为了能够和你同样作本身喜欢的事情。尽管那么多人在叫嚷“搞原子弹的不如卖茶叶蛋的”,但总有一些人愿意去追求人类最高财富――知识和艺术家般的技艺。
原本作研发成就感会少一点,做为一个 Twitter 的开发工程师看到那么多人在用 Twitter 确定会特别开心,相比之下某个在 Google 作基础研究的工程师的成就感可能没那么强烈。不过在国内环境比较神奇,开发工程师非但成就感很少,反而会很多挨骂,还常常会有负罪感,相信作过邮件推广和广告弹窗的工程师都深有体会。这样一来,研发工程师的“清苦”反而变成了一个优势,能够远离不少“不得不作”的违背良心的事情。
相信不少工程师在入行以前是喜欢技术的,可是工做以后发现彻底不是本身当初想象的那个样子,而后就变得失望麻木,再也不对技术有热情。其实你能够把热情延续下去,只不过要去作研发,而不是作开发。大部分因为兴趣而不是生计学习编程的人,心里真正渴望的都是去作研发,只不过没有人告诉他们开发和研发的巨大差异。如今很多大公司都有本身的研发部门,有一些还成立了本身的研究院,想要一直作技术的同窗不妨尝试一下。
如何选择
不少人在大学里之因此会选择计算机为本身的专业,并非由于本身对计算机和编程有兴趣,而是由于计算机是“热门专业”,在毕业以后也浑浑噩噩地找了一份工做进入了这个行业,作着本身并不喜欢的事情;还有一些人则是毕业以后找不到工做,而后看到一些培训机构的广告就去报名学习编程,但愿广告上描绘的“月薪过万”不仅是一场梦。因而就有了愈来愈多的“代码民工”,在形形色色的大小公司作着又脏又累的工做,只为了“混口饭吃”。
我并不想批评这些人,毕竟在这个大环境下有着太多无奈,逼得咱们无从选择。对于这样一些只想找一份好工做的人,是被骗到这个行业中来的。仔细回忆一下,这些年来咱们看到的业界新闻,了解到的互联网公司文化,大部分都是有关诸如 Google, Facebook 等国外公司的;咱们平时学习和使用的技术,几乎都是国外发明的。这让咱们深信互联网就是那样美好,那些激动人心的东西触手可及,但请你关上电脑出门好好看一下周围:这是在中国。互联网没有国界,但互联网公司有。Google 和 Facebook 这样的公司看上去离咱们很近,咱们天天也使用它们的产品,但国内的互联网公司可能要几百年以后才会有那样的气质和文化。因此若是你不幸误入了这个行业,仍是及早打算改行或者转型作管理比较好,这样就不须要再学习本身并不喜欢的“枯燥”技术了。
对于那些“真的”对技术有兴趣的人,要么去作一个同时具有软件设计能力的开发人员,也就是富有创造力的 Hacker;要么去作一个自得其乐的研发工程师。虽然环境恶劣,可是任何东西都挡不住真正的热爱。在这个几乎人人都把金钱做为衡量标准的社会里,你真是获得了上天的眷顾,不只可以以本身喜欢的事情谋生,并且收入还过得去。
Hacker 是适合创业的,由于他拥有创造一个产品的所有能力。电影《社交网络》让不少以写代码为生的人产生了幻觉,Facebook 创始人传奇般的经历好像在向全世界宣布:世界是程序员的。不少人只是激动地看到扎克伯格的技术能力,可是却忽视了他的软件设计能力和对产品细节的重视程度,好像只要埋头编程就能够作出 Facebook。除了优秀的技术能力以外,扎克伯格的思考能力和创造力一样出类拔萃,能够感觉获得他眼里的世界是不同的。咱们的工程师又有多少人对生活中的事物有独特而深入的理解呢?独立思考也应该是 Hacker 的必备技能。
不少工程师都以为本身会编程,只是缺乏一个“好的 idea”;不少非技术人员则以为本身有一个“好的 idea”,可是缺乏编程能力来实现。要作一个产品,好的 idea 和实现它的能力缺一不可。然而,咱们能够看到最后成功的每每是那些非技术人员,由于他们能够清楚地看到编程是一件能够学习的事情;而工程师们则每每天真地认为好的 idea 靠的是“灵机一动”,不会有意识地培养本身的观察能力和想象力。不少好的 idea 都是来自于平日对生活的敏锐观察和思考,而后这些点在某个时候突然连成了一条线,把它简单地归结为“天才”是懒惰的作法。
“成为一个 Hacker”和“作研发”,很难说两者哪个更困难。Hacker 在技术上能够不是一流,但他运用技术创造产品的综合能力确定是一流的;而研发更注重技术上的造诣和理解程度,关注的是深度而不是广度。若是想要作研发,那么就要好好把基础知识研究透彻,好比数据结构、算法和网络协议等,否则很容易就会遇到瓶颈。我遇到过的每一位研发工程师都是技术上的大牛,在不少技术问题上都有很是深入的看法;他们会从本质上分析问题,而不仅是纠结于语言细节。
若是你想要经过本身的做品改变世界,那么就好好提升一下编程以外的能力,作一个好的 Hacker;若是只想埋头技术,就应该选择去作研发。不过,不管是想要作一个 Hacker 仍是一个研发工程师,都须要终年累月地不断学习和思考。听上去好像很是辛苦,不过每个热爱技术的人应该都会把学习和思考看成一种乐趣,而不是一种苦役。若是你没法享受学习和思考的乐趣,那么仍是不要在技术这条路上走下去了,你会活得特别累,而且毫无幸福可言。
在这个充斥着“代码民工”而且缺少“技术文化”的国度,咱们只是关心怎么样能够活得更舒服,彷佛忘记了编程自己所具备的迷人色彩。Joel Spolsky 说过,许许多多的人选择编程,首要的缘由就是,他们宁愿将本身的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是对的就能赢得任何争论的地方。此外,我以为选择编程还能够得到最大限度的自由和独立。由于找工做的时候只须要凭借本身的编程能力,因此不须要见人说人话见鬼说鬼话,不须要去结交权贵达人,不须要去为了所谓人脉去混圈子,也不须要看到邮件列表里有领导的邮件就去“顶”。平日里写写代码,其它时间喝酒吃肉,只交性情相投的朋友,武侠小说里的畅快适意也不过如此。这种独立和自由是极为宝贵的,你可知道有多少人在醉酒以后哭喊“安能摧眉折腰事权贵,使我不得开心颜”?
因此说,编程这件事情关乎公平,关乎自由,关乎美。而做为一个拥有编程能力的人,你能够亲手创造美。只有艺术家才能够创造美。但愿有愈来愈多的人能够真正领会到编程的魅力所在,喜欢上这种艺术。正如 Raymond 所说,软件设计和实现应该是一门充满快乐的艺术,一种高水平的游戏。你须要用心。你须要去游戏。你须要乐于探索。
黑客事业之将来, 全依赖咱们今日之创造。
最后推荐一些文章和书,这些文章和书大部分都与技术细节无关,它们讨论的是基于编程的使人心醉的文化,也适合非技术人员阅读。
1. 如何成为一名黑客。全部学习编程的都应该多看几遍这篇文章,至少把 Hacker 和 Cracker 的区别弄清楚。
2. 大教堂和市集。这是一篇关于 Linux 的经典文章。这里须要声明一下,我对那些 Windows 程序员没有偏见,只是我以为做为一个以编程为职业的人,若是不参观一下 Linux/Unix 的深邃世界,未免太过狭隘。
3. UNIX编程艺术。这本书虽然名字叫作“编程艺术”,但里面并不讲授如何编程,而是全面展现了迷人的 Unix 哲学和文化。看完以后你会发现,那些看上去不修边幅、整日对着电脑屏幕编写代码的邋遢程序员,对于美居然会有那么高的追求。“美在计算机科学中的地位,要比在其余任何技术中的地位都重要,由于软件太复杂了。美是抵御复杂的终极武器。” 这本书的做者 Raymond一样是《如何成为一名黑客》和 《大教堂和市集》的做者。
4. 黑客与画家。这篇文章是 Paul Graham 写的,文中详细描述了黑客与画家的类似之处。这里所说的“黑客”和《如何成为一名黑客》中所说的“黑客”略有不一样,但你能够看到他们不少共同点。本文也已经被收录到 《Hackers and Painters》一书,该书的中文版《黑客和画家――Paul Graham文集》由阮一峰翻译,应该很快就会面世,我十分期待。
5.创造者的品味。做者一样是 Paul Graham,文章观点独到,看法深入,每读一次都有新的收获。
6. 软件随想录:程序员部落酋长Joel谈软件。这本书是 Joel Spolsky 的精华文章结集,做者写文章写得很是有趣,擅长讲故事,前几天我翻译的那篇《程序员阿士顿的故事》就是他的手笔。本书由阮一峰翻译,翻译质量很是高,有兴趣的能够先去试读几篇。
7. About Face3交互设计精髓。本书是交互设计领域的经典著做,做者之一 Alan Cooper 原来也是知名程序员,被称为 “Visual Basic 之父”,因此这本书里面对程序员的批评仍是很中肯的。另外,书中“设计体贴的软件”的核心思想很是棒,值得程序员好好阅读和思考。