创业三部曲之一——学技术
何李石 发表于 2011.8.30| 点击数5000
我从创立3家科技公司的经历中学到了什么?36kr 上的这篇文章直截了当的告诉你,作为一个想要成功的创业者,你需要具备哪些素质。然而,这些素质因人而异,并不是所有创业者都需要从同一个模子里造出来才 能成功。但是,在与许多创业者接触的交流中,我们发现大家遇到一些共性问题。这些问题并不是创业者自身素质问题,也并不是无法改变的,而是很多有想法有激 情的创业者不擅长的。比如,创业之初如何进行技术的选择和学习,如何寻找自己的创业伙伴,如何为你的团队募集资金。
基于此,我们采访了多位 互联网和移动互联网方面的创业者,邀请他们谈谈在创业之初是如何进行技术选择和学习的,如何寻找自己的创业伙伴的,以及如何为团队募集资金。同时,我们将 创业者必须面对的这三个问题整理成三篇独立的文章,以《创业三部曲》系列的形式呈现给读者,希望对大家有所帮助。
本文是该系列文章的第一篇,创业三部曲之一——学技术。Tech2IPO有一群很多优秀的读者,我们跟这群优秀的读者接触过程中发现,大部分人都有很棒的 idea。但是,当谈到项目何时上线甚至如何实现是,很多人说自己不懂技术,想自己学技术或者找相关的合作伙伴。比如,为《假如有这么个应用》系列文章投 稿的坚果兄弟和麦子, 他们希望通过投稿不光能够引起大家的讨论,也希望找到能够帮他们实现点子的技术合作人员。当然,并不是每个创业者都要懂技术的。但是,作为靠技术起家的互 联网或者移动互联网公司,没有技术也是不现实的。因此,本文中,我们采访了四位创业者,向他们请教创业之初该如何选择和学习技术。
一、宽岛网CEO李路
宽岛简介:宽岛网是一个类似Tumblr的轻博客社区,其前身宽途网是国内第一个轻博客社区。在开发方面,宽岛网选择了Ruby on Rails这个Web开发框架,早期的Twitter也是用Ruby on Rails做成的。
技术方面的创业者可能倾向于使用自己擅长的技术,这种选择所带来的局限性导致创业者将自己限定于特定的平台,而看不到其他平台的优劣。下面,宽岛网CEO李路谈谈其自己在技术方面的经验。(本文只截取部分内容,关于技术方面更多详细的讨论请看李路的轻博客。)
1. 关于自己的工作平台
这包括操作系统, 编辑器, shell环境。这是所有工具箱里最重要的,每天,比起你面对某种语言,某个项目,某个老板,你面对系统和编辑器的时候更多,只要打开电脑,它就在哪里。 因此,选择最好的,我从很久以前,在招人的时候就会先问:你用什么操作系统?什么编辑器?什么shell环境?我自己的环境是Ubuntu(偶尔也会用 Mac os X), Zsh, Emacs Ubuntu Linux, Archlinux, Gentoo等linux发行版,我想是最好的选择,Mac os X也完全可以,对于iOS开发就是必须的了。不要用windows做开发环境(真的,就算开发windows桌面软件,我也不会用windows,哪怕让 我用flash实现)。
Emacs和Vi是编辑器世界里公认的最好选择,我自己用Emacs,她非常的迷人,甚至有让你对她形成宗教信仰的 能力。如果是Mac系统,textMate也是可以接受的,虽然我不认为她比emacs更好。选定了一个编辑器,你就要一直用她,包括写邮件等等和技术无 关的领域,让她成为你身体的一部分。实际上,我学习和熟悉Emacs的时间,超过了学习任何一种编程语言,当然,这还不包括学习Emacs Lisp的部分。而经过五年的使用,我也不敢说我做到了我应该用emacs能做到的事情的,十分之一。
Shell环境上,Bash和Zsh都很好,Zsh更新,更强大,也更复杂。
2. 团队的工作平台
这包括一个好的版本控制系统,一个好的代码托管平台,一个好的问题追踪和知识管理系统。对于团队来说,没有什么比这些更重要的了,沟通和控制,是一个团队工作的全部。
我使用Git和Github。比起SVN和更古老的CVS来说,Git无疑是最新最好的替代品,她确实能够提升沟通和工作效率。Github则很方便地集成了代码托管,问题追踪和wiki系统,也许在特定的某件事上,她不如以前我们的SVN+Trac这样的平台功能强大,但对于初创企业,我认为这样的服务是最合适的。
3. 关于语言
语言的选择其实不难。在你所掌握的编程语言中,选择你最有兴趣的,最喜爱的,或者写起来最上瘾的。理由很简单,开发是人的工作,越好地激发出你的热情,才能产生越有创造性的代码和产品。至于冷门语言招不到程序员这种说法,我实在无法同意。实际上优秀但掌握的人不多的这类语言,往往能让你更容易地招到顶尖的程序员,因为使用这些语言的,一定不会是庸碌之辈。我使用过的,通常可以做Web后台开发的语言有C,C++,VB,Java,PHP,Python,Ruby,Lisp,JavaScript。
我的选择是Ruby, 如前所述,这算得上是在我掌握的语言里,最有兴趣和最喜爱的。
我有两年的C++经验,但我觉得我还是没有掌握她,而且,今后也不打算继续学习她了,痛苦比快乐多得多。
VB和Java从接触的一开始我就不喜欢,在被迫用她们做了几个项目后,印象也没有丝毫改善,刻板,累赘和费力。
PHP是很好的web开发语言,但她太混乱,太不一致,非常地缺乏优雅和美感。
Python几乎是现在最好的入门语言,简洁,清晰,学习和开发容易,不过对我来说,有些缺乏创造力,那也就是缺乏乐趣。
Lisp我不能算掌握,但很有兴趣。
Javascript,在做web前端开发的时候是必须掌握的,幸亏,这是一种很有趣的语言,也能够写的很优雅和很有创造力。
不过,上边列的这些语言,真的没有一个比起我刚接触Ruby时那种震撼更大。一种简洁,优雅,一致,创造力超群的语言,还有一个非常活跃和富有智慧的社区。
4. 关于框架,数据库和服务器
框架要选择你用起来最自然和最符合你的开发思路的,简单来说,就是:如果让你写,你也会这样去做。以这个为原则,去一一试用最好的那些框架就可以了。
我用的是Rails3, 她有90%的做法是和我的思路与原则相符合的,而剩下的10%,也可以方便地自定义或修改。很遗憾我因为接触的比较少,没办法推荐php和python的优秀web框架,不过,请先选好语言,再选择框架,不要为了框架而使用你不喜欢的语言。
数据库方面,就不太一样了,这里一定不能用你个人的喜爱与否来决定,因为数据的存储和安全是绝对不能忽视的一块木板。请使用最符合你的项目要求的数据库。如 果涉及到支付,大量的事务,或者是有数据安全的要求很高,请使用完善的传统关系型数据库,Oracle,Postgre, Mysql,用你支付的起的最好的。如果是社交网络这种,对数据的海量存储和读写速度有要求,但不强求事务和任何时间点上的即时一致性的,请使用 Nosql类型的数据库。我使用的是MongoDB和Redis,理由很简单,她们的文档齐全,功能符合要求,并且没有可见的影响开发和部署的bug。在 创业的初期,有足够的文档和社区支持,够用的功能和可接受的性能,要远远比性能强大但文档不全,难以开发来的好。在这一点上,请不要赶时髦,也不要浪费时 间去自己做各种数据库的性能比较,选择文档最齐全,社区最活跃的吧。
服务器方面,也差不多是同样的道理,选择最主流和最稳定的,在此基础 上,选择管理维护最方便的。我使用Debian,web服务器是Nginx, 几乎是不二之选。CentOS和Redhat同样主流和稳定,但是她们的管理维护,尤其是包管理系统,比Debian还有差距Apache和 Lighthttp差不多和上面理由一样,请注意,我在这里也不是因为性能的原因选择Nginx的。
5. 关于工作流程和其他工具
你还需要什么?
测试框架:
在现在这个时代,尤其是web开发,我想测试先行是很有必要的,每一次你的代码变动,都要让这个架构运行测试,习惯了之后,你会发现自己离不开她。我用Rspec。
部署工具:
一条简单的命令,把你的代码部署到生产环境中去,而且同时还能够做很多操作,比如cache生成,搜索索引生成,js/css代码压缩等等,并且具备回滚的能力,喔,最好和版本控制系统联动,让你签下最新的版本。我用Capistrano。
一套好的工作设备:
程序员们,帮自己一个忙吧,用你能支付的起的最好的显示设备和键盘,而不要只用公司配给你的可怜巴巴的破笔记本来工作。我用两个24寸的显示器,宽广的可视区域能够直接提高你的效率,用Cherry出品的茶轴键盘,她让我的键入更快更准确。
一个好的工作环境:
一米五长的桌子,明亮的房间,通风和清新的空气,有可以小睡的沙发。
二、42区创始人张沈鹏
42区简介:42 区是一个新型的社交网站,有一个让用户建立职业信息的页面,类似About.me和Linkedin;也可以让你像发微薄一样唠叨,是不是的有技术人员来 评论你的唠叨。在服务器端方面,42区使用Python开发,这是42区创始人张沈鹏原先所在的公司豆瓣网的第一大主流语言。豆瓣网也是国内少有的使用 Python语言开发的多用户大流量网站。
关于做技术创业,张沈鹏认为,要学的技术很多,其学习周期大概一年,在创业之前能够去豆瓣锻炼下 是最好的。同时,张沈鹏也给大家推荐一本Python学习教程:《Python入门指南 Release 2.7》Guido van Rossum, Fred L.Drake, Jr.著 刘鑫 译 2010年10月版。关于寻找一起创业的技术伙伴,张沈鹏认为,对方应该“写过自己的网站,能很快的掌握一门新的东西,对技术本身有兴趣”。
三、坚果铺子创始人韩竹
坚果铺子简介:坚果铺子是一个类似Dropbox的文件同步和存储工具,目前它有Windows、Mac和Linux等桌面客户端,以及Android和 iOS等移动平台客户端。因为坚果铺子这样的文件同步存储工具主要功夫在后台和客户端,所以技术可能跟前面讲的宽岛网和42区所采用的技术有所不同。不 过,创业不限方向,我们希望为大家提供不同的经验,给大家更多更好的选择。
1. 创业选择的是什么技术?比如语言、框架和平台之类的
我们用了多种不同的技术. 就编程语言, 有java, C++/C, Object C, C#, 选择的时候主要取决于几个因素:
1) 开发效率。
2) 运行环境所需的程序效率。
3) 平台的native支持。
我们没太考虑掌握的熟悉程度. 其中部分语言是我们第一次使用。
我们没有使用过任何的框架(framework), 都是用的函数库(library). 不知道我的理解是否正确, 我个人对于framework和library的定义有所区别,比如:
1) framework更多是约束程序员的行为, 有点类似画好地盘跳舞。
2. 你给初始创业中的技术人员的建议是什么?比如,就你选择的技术而言,要学习该从哪开始?
做为技术人员, 我觉得最基本的是打破砂锅问到底的心态. 比方说, 看到一个bug, 一定要找到最深层次的问题, 从最基本的角度去解决问题, 而不是通过简单的添加代码, 解决问题的现象甚至屏蔽问题. 例如
c.compute(); // c为null, 出现segment fault
最糟糕的解决办法就直接如下fix:
if (c != NULL) c.compute();
这并没有解决问题, 因为它没有回答为什么c在这个地方可能为NULL, 这是否是合法的参数?
另外一个比较重要的点是, 用于重构自己的代码. Google每个两三年都会重写搜索引擎的核心代码. 我们也一直坚信, 删除已有的代码比添加新的代码更难, 也更有意义。
另外, 做技术的同志, 也不要拘泥于任何一种技术. 很多事情都是边干边学, 在战斗中提升. 没必要因为擅长某种技术, 就厚此薄彼甚至卖弄技术, 更多还是需要从产品的角度出发。
最佩服的技术人员是能够融会贯通, 举一反三. 有些技术人员能够从CPU architecture->Hardware interconnect->OS kernel optimization->Language/Runtime implementation->Application->Business Logic整个stack角度去分析和解决问题, 这是非常厉害的。
四、Talk Jokes共同创始人申华章
背景简介:作为Talk Jokes的共同创始人,申华章主要并非负责技术。但从非技术人员眼中看看他们对技术人员的看法和要求,对于技术人员来说也是种不错的参考。毕竟,一个互联网创业公司必须是由技术人员和非技术人员有机组成的。
1. 技术的重要性:你认为团队中技术人员有多重要?
2. 你给初始创业中的技术人员的建议是什么?
对 iOS 开发来说,看一本基础的书,然后就可以看一些优秀的源代码。当然最好的学习是尽量早开始做实际的项目。一定要精益求精,一个应用或者游戏多写几遍,你就会有体会了。做一个什么都懂一点的工程师,不如做一个在某一方面非常精通的工程师。我招人不追求他现在水平有多高,但我一定希望他有这种精益求精的素质。如果他能每次都比上一次写的代码质量高一些,效率高一些,那就他就是我理想中的工程师。(详见申华章博客,iPhone创业小心得。)
原文链接:http://tech2ipo.com/2011/08/startup-trilogy-first-learn-technologies/