IT技术博客大学习 共学习 共进步

创业三部曲之一――学技术

天蓝色的彼岸 2011-09-04 22:46:30 浏览 6,481 次

   我从创立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) library更多提供辅助行为, 只有需要的时候, 程序员才访问library。

我们不太喜欢framework的原因是, 感觉约束太多; 看起来很简单, 但是背后隐藏了态度细节, 可能存在很多陷阱以及一些不必要的功能。
所以我们刚开始基于这些library构建了一些很简单的框架. 虽然花了些时间, 不过我们充分了解这些代码, 所以开发和调试效率反而有很大提升。

   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创业小心得。)

   (原文)

建议继续学习

  1. 关于创业 (阅读 21,680)
  2. 别为大公司拼命(译文) (阅读 10,184)
  3. 个人开公司的流程,以后用得着 (阅读 7,781)
  4. 如何让员工忠于公司? (阅读 7,780)
  5. 腾讯抄你肿么办 (阅读 7,640)
  6. 小公司如何留住人才 (阅读 6,060)
  7. 从Rails聊聊小公司的研发团队建设 (阅读 5,481)
  8. 创业前应先做出一个好的非盈利产品 (阅读 5,180)
  9. 大公司与风险管理 (阅读 5,161)
  10. 创业小公司其实也需要制度 (阅读 4,882)