培训班出身的程序员为什么遭人嫌弃

这几年,由于it软件行业对人才的需求很大,很多传统行业也纷纷创办“互联网 ”项目,加上app开发热潮,微信公众平台也催生了更多的就业岗位。于是it从业人员的薪水也随之水涨船高。同时it培训班也随雨后春笋般涌出,一个个打出的口号都很响。

“0基础入学,三个月包就业”

“毕业月入不过万,不收学费”

“从前是你找工作,接下来是工作找你”

真是人有多大胆,口号就有多不要脸。

对于迫切想改变自己境遇的人来说,这些口号无疑是很具诱惑力的。在培训机构的宣传下,好像软件开发行业是一个门槛低,收入高,只要几个月的培训就可以月入过万,实现人生理想的好职业。

可现实是越来越多的企业不想招,甚至明言不招培训班出来的学生。而不少培训班也会教学生隐瞒自己的培训经历,会教学生面试的技巧,包装简历,虚报学历和工作经历,把学生包装成一个具有两年项目开发经验的软件工程师,而且开价往往都不低,动不动就8k以上…

Continue reading “培训班出身的程序员为什么遭人嫌弃”

周鸿祎谈创业:很多程序员智商都高得很,但我一看就知道他们不会创业成功

摘要:很多人都向往着有一天自己创业,程序员更是如此。如果你想创业,那么该怎样创业、需要有哪些准备、自己还有什么不足等等这些问题你考虑过吗?本文就跟大家分享周鸿祎在接受某媒体采访时给程序员上的创业课。 

Continue reading “周鸿祎谈创业:很多程序员智商都高得很,但我一看就知道他们不会创业成功”

形而上学和面向对象

如果有人问我,哲学研究什么?我会告诉他三个问题:

1、世界是什么?

2、我如何认识世界?

3、我该如何生活?

这三个问题基本概括了哲学最主要的三个分支:本体论、认知论和伦理学。

如果有人问我,计算机科学研究什么?我也会告诉他三个问题:

1、计算机能解决哪些问题?

2、计算机如何描述问题?

3、计算机如何解决问题?

分别是计算机的数学模型、计算机对物理世界的模拟和计算机的架构及实现。

Continue reading “形而上学和面向对象”

开源软件中的License

什么是License

许多混乱就始于你不知道License到底是什么,到底有什么含义。当你对你的产品使用License时,并不意味着你放弃了任何权利,你依然对其拥有原著作权。License只是授予他们于特定权利来使用你的产品。

License只是把你的作品释放到公有领域,或者给各个拷贝赋予权限。也意味着你放弃了版权收入,别人也没有义务把你列为原作者或贡献者。

开放源代码许可协议更容易为他人作出贡献,而不必寻求特别的许可。它也可以保护你作为原创者的权利,至少确认了你的贡献。它还可以保证你的工作不为别人所剽窃。

Continue reading “开源软件中的License”

产品经理如何在技术人员面前更有说服力?

作者简介:吴伟,资深产品经理,曾就职于新浪,现就职于约瑟网络,旗下产品“企业问答”,一款面对创业者的问答类社区产品。

以我7年来做PM(产品经理)的经验来看,说服他人,特别是研发、设计、前端这些研发部门的同事,最重要的不是口才、沟通能力和数据,而是专业。专业就是:第一,你要用内行的思维方式、表达方式和处理方式来思考、沟通和执行;第二,你要经常可以做出正确的决定。

一个人要先相信你能说出正确的话,才有可能认真去听你说的内容,进而才有可能认可你的话。通常人们认为只有内行才有可能说出正确的话来,而外行只能瞎指挥。所以PM要时时刻刻表现的很内行,很专业。

有些PM很苦恼:我明明说的是对的,为什么研发人员听不进去?是的,你说的可能是对的,但是由于你平时的表现让研发人员觉得你很外行,他们根本就没有认真听你在说什么。

只有尽量多、尽量深入的了解上下游相关岗位的专业知识,并且有一定的实践经验,才能让我们显得专业。在与相关岗位的沟通中,获得对方的信任感,进而采纳我们的意见。

有几个小技巧可以介绍一下,不过在看这些技巧之前,我必须重申一遍:让自己变得专业的根本办法是自己要尽量多的了解各个岗位的专业知识,小技巧只是一种手段,不要幻想着只凭借技巧就能真正的专业起来。

技巧1:尽量说术语

在我们与研发人员沟通的时候,尽量不要说大白话,而是使用术语。这样会让人家感觉我们很懂技术。例如有一次我和一个客户端工程师说:“我希望弹 出的窗口是模态的。”工程师听完后很诧异的说:“你还知道模态?”我说:“当然啦,这对交互设计很重要啊。”于是工程师立刻就把窗口改成模态的了,根本没 问我为什么。那么什么叫模态呢?用大白话说就是弹出一个窗口,窗口以外的地方都是黑的,或者不可以操作,只有这个窗口可以操作,类似于Windows里面 经常弹出来的讨厌的错误提示。但是你要是跟工程师这么描述,碰上脾气好的说不准帮你改改,碰上不好的准保反问一句:那多讨厌啊,我就讨厌Windows弹 错误提示。

技巧2:思维要周密

在说话之前要尽量把所有可能的情况及其解决方案想清楚。比如你要修改一个按钮的位置,人家自然要问你,空出来的位置怎么办,改过去之后会不会影响现有的功能,用户能不能习惯等等,如果你能胸有成竹的一一化解,别人自然会听从你的建议。

技巧3:让对方自己得出结论

人都是有自尊心的,都希望自己的决定是正确决定,如果你总是说“你这样是错的,我是对的”必然引起别人的反感。所以你可以先把遇到的问题摆出来,在提出自己的解决方案后立刻说:这方面你是专家,如果你觉得这个方案能用就用,如果有更好的方案我也没什么意见。

人嘛,通常都是比较懒的,既然你能提出一个还算说得过去的解决方案,而且又让对方觉得是他自己的选择,通常也就不会为难你了。

技巧4:看人下菜碟

不是对每个都用同样的话说服的,人和人都有所不同。以我的经验,对待工程师、设计师、老板是不同的。

对待工程师要有条理,逻辑要清晰,讲究数据。例如:方案1会造成数据服务器负荷过重,并发量在2万/秒以上,并且至少要占用10G的储存空间, 最重要的是,我们付出了这么大的代价,其实只满足了20%的用户,而且这部分用基本上都是不付费的用户。这一大套话说完,研发人员会认真想一想:也是啊, 万一服务器宕机了责任就大了,还是用方案2吧。

对待设计师要以情动人,因为设计师一般都是学美术出身的,特别感性。例如:大姐,你就给我改改吧,为了画这个原型我昨天都加了一宿班了,你今天 不改,明天指不定又插进来什么活儿呢,我这个项目得什么时候上线啊。再说也不是我想改啊,是销售那边儿一会儿说用户喜欢这个,一会儿说用户喜欢那个,我们 也拧不过他们啊。设计师一听,都是同事,谁还没个难处啊,得了,加班儿给人做了吧。

对待老板要学会画蓝图,例如:根据竞品研究的结果看,这个产品非常有前景,XX刚上线1个月,就已经有100万用户,10万同时在线,收入也差 不多有400来万。我们在技术上、渠道上、政府关系上都比他们强,我觉得只要能够在2个月内推出,各项数据肯定比他们强。更何况,我们的产品线目前缺乏的 就是用户沉淀,而这个产品正好提供了强大的社交功能,弥补了产品线的空缺。老板一听,小伙子想的挺清楚啊,成,给你两个工程师,一个设计师,1万块项目奖 金,1个月给我做出来。业绩好的话再给你发年终奖。

当然啦,还有些人江湖气很浓,他只要当你是兄弟,你怎么说他怎么做,没原因,没为什么。对于这种人平时多吃几顿饭,多送点小礼物,到时候自然帮你。

技巧5:人格魅力

做人要有幽默感,要学会缓和气氛。没必要每次需求讨论的时候都板着脸训人。说说笑话,插科打诨,给设计师倒杯水,给工程锤锤肩,送给运营的小姑 娘几块儿巧克力,给运维的同事买几瓶水。你平时这么注重积累,在你需要的时候别人自然不会为难你。能做的就做了,不能做的睁一眼闭一眼也就做了。

最后再说一遍:所有的技巧都是一种手段,真才实干才是王道

开源是种生活方式

走上开源道路

清晨六点钟,被儿子闹醒,第一件事是打开邮箱,迎面而来的是数以百计的邮件,我知道新一天的工作开始了。

这是一个典型的场景, 过去四年多的时间, 我一直在家工作,全职参与Apache旗下多个开源项目的开发。以开源社区为核心, 以maillinglistIRCJIRASVNGitMaven等为工具,参与全球化协作的开源项目。


走上Apache开源道路,要从2006年谈起,当时源于ObjectWeb社区的Celtix和源于Codehaus社区的Xfire合并,成为了Apache旗下的一个新项目CXF。我当时所服务的公司IONA是开源项目Celtix的主要推动者,也是Celtix的代码提交者(Committer), 因此成为了Apache CXFInitial Committer。 从那之后, 我一直从事开源软件开发工作,期间伴随着IONAProgress收购, 以及Progress成立独立的专门从事开源项目的子公司FuseSource。根据项目发展的需要,我从事的工作也从最初的Apache CXF扩展到了Apache旗下的多个开源项目。目前,我是Apache CXFServicemixKarafCamelFelixCommitter(在Apache开源社区中我使用Freeman Fang这个名字),并且是Apache CXFServicemixKarafPMC member(项目管理委员会成员)。


我想读者最为关心的问题是,全职从事开源软件的开发,靠什么来生活?是完全凭兴趣吗?如何保证自身的可持续性发展?

Ok,要回答这些问题, 必须先谈一种基于开源的商业模式—围绕开源社区和开源软件, 通过雇用主要的开源项目开发者, 向外提供付费的商业服务, 这种付费服务包括订阅、咨询、培训等。我的雇主就是提供类似服务的商业公司。这种开源商业模式在基础软件架构领域(如开源操作系统、开源数据库和开源基础中间件)已被证明是一种行之有效的方式,在欧美市场被广泛接受。但在国内, 这种商业模式还没有被普遍认可,很多人还认为开源就是免费,不愿意承认特定领域专家的价值,这种现象很值得深思。


在我看来,这种开源商业模式下,开源项目和开源社区因为有了商业公司的介入更加活跃,开源开发者有了稳定的收入获得了可持续发展,付费用户由于有了商业支持能更有效地使用开源软件,非付费用户也能从活跃的开源社区获得支持,构成了一个共赢的生态环境。

回到本文开头,我的日常工作是:阅读大量我所从事的Apache开源项目的邮件和公司论坛帖子,回答社区用户问题;实现新功能或者修复Bug,提交代码到Apache代码库中。同时,如果付费用户提交了问题,那么高优先级处理付费用户问题,但实现的新功能或者修复的Bug都会第一时间回馈到相关Apache项目的代码库中。



为什么从事开源项目

如果一个人能很长时间做一件事情并乐此不疲,那么只有一个解释,他很喜欢做这件事。我喜欢开源的原因很多,且听我一一道来。


原因之一:开源意味着最大程度的分享,降低了知识学习的壁垒, 给了后发者赶超的机会。

在从事开源软件开发的过程中,我经历了这样一个心理变化,从很自信到很不自信到慢慢找回自信。 由于有机会和世界上最好的一群软件工程师一起工作,我可以很清楚地看到自身的差距,但开源意味着一切都是透明的,不仅仅是代码,公开的社区讨论也能给你很大的启发。时间长了,你会看到自己的进步,慢慢找回自信的过程就是进步的过程。对于一个喜欢技术、追求技术的人, 开源是一个能提供无限可能的大平台。


原因之二:开源给了我最大程度的自由。

我不用去办公室工作,能自由安排自己的工作时间。在北京这个大都市里,不用去办公室意味着每天能节省2~3个小时的通勤时间, 我可以用这个时间来学习、健身、娱乐,甚至加班。有了孩子之后,我每天早7点之前开始工作, 通常下午4点我会将工作停下, 接管照顾孩子的任务。在晚上8点孩子睡了之后,我会最后再工作一会儿。

随着Internet等基础设施的飞速发展,伴随着大量辅助工具软件的出现,远程办公成为可能,越来越多的工作由集中式变成分散式,我们的工作模式正在改变。这种模式降低了大城市的交通压力,办公场地的压力,更加节能环保,同时也提高了工作者的生活质量。


原因之三:开源给了我成就感。

每次获得一个Apache项目的Committer权限,都是一次被认可的过程。通常意味着你要不断地提交高质量的Patch给该项目,积极参与该项目的社区讨论,之后该项目PMC才会提名和投票表决。每当收到一个项目的Committer邀请,都会带给我巨大的喜悦和强烈的成就感。此外,参与社区讨论,回答别人的问题,也是一件非常愉快的事情,这真的是可以上瘾的。 

从事开源,就有机会和最好的工程师一起工作,做领先的技术和项目,这些项目不仅能直接服务最终用户,还能成为其他项目的重要组成部分。例如,Apache Geronimo选择基于Apache Karaf来实现OSGi容器;还例如Apache CXF作为但不限于JAX-WS协议的一个实现,得到了很广泛的应用。 多个JEE服务器如Apache GeronimoJBossJOnASPramati选择CXF作为自己的JAX-WS实现(从JEE5开始则要通过TCK认证且需要有JAX-WS的支持)。


原因之四:开源让我更好地了解世界。

从事开源项目的开发人员,来自世界各地,具备不同的文化背景、教育背景和思维方式。通过和他们交流, 我更好地了解了他们的技术水平以及引发了我思考人家为什么会达到这样的技术水平。

举个例子,西方的工程师从事开源软件只有一个理由—兴趣。英文里有一个单词是Geek, 翻译成中文是极客,代指狂热于技术、思维异于常人的人群。用Geek来形容开源开发者再合适不过了,他们对技术的追求无止境,他们喜欢创造新的东西,他们渴望改变和引导技术发展的进程。对比国内研发工程师经常忧虑一些现实的困境,他们从来不考虑30或者35岁之后老了没有竞争力的问题, 他们很少考虑转型做管理者。他们通常年龄在35岁或者更大一些,10余年的行业技术积累让他们知识的深度和广度都很好。由于社会文化真正认可技术的价值,他们只凭做工程师就能生活得非常好(真的是非常好),他们要考虑的内容相对单纯一些, 就是从兴趣出发,完全以技术为导向。当一个人真正对自己从事的工作有极大兴趣、引以为豪且有多年的经验积累之后, 其创造力和生产力是惊人的。


技术专家的产生需要土壤,需要社会价值观作为导向,让有天赋的研发人员愿意长期从事技术积累且无后顾之忧,并能获取相应的回报是产生群体性技术专家的基本前提。如果我们的技术人员都在考虑找机会转型, 那么恐怕永远只能做低水平的简单重复,离诞生伟大的软件公司这个目标会越来越远,与和世界一流的软件水平之间的差距会越来越大。


原因之五:开源已经、正在和将继续改变软件业的发展以及我们的生活。

基于成本优势;代码可见,可深度定制;系统高度自由,无需绑定到特定厂商;更敏捷等原因, 越来越多的公司采用开源软件和开源架构,这种趋势也使更多的商业公司开源自己的产品, 以适应市场的发展。

且不说国外开源应用风起云涌, 国内也有很多公司重视开源技术,采用开源架构,例如国内某著名电商互联网公司。该公司重视技术积累,有自己的给力技术团队,有能力对开源解决方案深度定制,快速满足自身需求。该公司的系统每天都在承受超大规模的并发请求但依然很稳定。我一直认为在大压力复杂应用环境中,只有自己是自己的上帝,开源给了你主宰自己命运的机会。这个例子说明真正重视技术积累,有给力技术团队对企业自身的应用是多么的重要。



为什么国人参与开源力度不够大

参与Apache开源项目以来,有一个现象非常困扰我,就是很少有同胞在相关项目邮件列表/论坛问问题,是国人很少使用这些开源项目吗?显然不是,以Apache CXF为例子,如果我们使用Google Trend来查看关键字CXFGoogle被搜索的统计,我们可以看到最多的搜索请求来自中国,搜索者使用的语言排在第一位的是中文;同时,我可以在互联网上搜索到大量的关于使用Apache CXF的中文技术博客。以上都能证明, Apache CXF在国内被大量使用,但我为什么在Apache CXF的邮件列表中很少看到中国人问问题, 更不要说参与讨论、解答问题甚至打Patch了。我在这里想尝试分析一下为何同胞很少参与讨论,并帮您打消顾虑。


我认为最主要的原因是文化上的差异,它首先表现为语言上面的障碍。开源社区的参与人员来自世界各地,为了保证大家的交流,采用的语言是英语,毕竟英语目前是国际上最为通用的语言。在线下交流中,我了解到,很多人因为要用英语问问题而迟疑,甚至放弃问问题。其实大可不必,因为Apache社区很多参与讨论的人员的母语都不是英语,这并不妨碍大家用英语讨论技术问题;再者,我和欧美同行交流过语言方面的问题,他们(尤其是英语是母语的同行)认为很多中国人过于低估自己的英语交流水平。实际把自己的问题用英语描述清楚并没有那么难,别担心,没有人会像针对我们的英语考试中短文改错那样对待你的邮件/帖子。毕竟, 我们掌握英语的程度远远超过西方人掌握中文的程度。另外,多参与讨论, 对实用英语的挺高也很有帮助。


文化上第二个差异体现在不同的学习方式上,我们擅长的学习方式是有系统的教材,有标准的大纲, 最好再有大量的练习题来强化知识点。我们习惯于这种学习方式,我们对规划好的知识点可以掌握得非常好,具体的体现是我们很擅长考试,但我们很少主动问问题。大多数人在考完试之后, 马上就会忘掉之前死记硬背的东西。西方人要学习一个东西,习惯自己找材料,找问题,讨论问题,因此,讨论问题本身就是他们所习惯的学习方式的一部分。而通过这种方式获得的知识更让人记忆深刻。我认为他们更善于学习新东西,尤其是需要自己主动学习时,他们的学习方式让他们更有优势。我们害怕没有面子,害怕问出不靠谱的问题,回避交流。不要这样,要更开放一些,善于利用Apache社区这个很好的资源,和技术专家讨论问题。况且,英语有一句俗语,“No question is stupid”,就是在鼓励大家问问题。

大势所趋话开源——中国开源现状分析

随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在操作系统、编译工具链、数据库、Web服务器、移动操作系统等各方面已成为主流。而且许多企业利用开源软件形成了独特的商业模式。比如Google的Android操作系统,从2007年开源发布第一个版本起,到今天已经发展到4.1版本,占据了智能手机操作系统一半以上的市场份额,Google也通过Android操作系统在移动互联网这一新兴行业中占据了领先和主导地位。以前一直和开源软件做斗争的微软公司,为顺应潮流,也开始拥抱开源,比如向Samba项目贡献代码,放弃自己研发多年的大数据项目而选择Hadoop为其大数据的核心等。

显然,纵观IT行业这20多年的发展,开源项目已形成一股推进计算机及相关行业不停进步的巨大力量。本文将重点讲述国内的开源项目及社区的现状,以及发展过程中面临的困难和问题。


国内开源项目的发展及社区现状

国内开源软件的发展简史

国内开源项目的发展始于1997年前后。那时,中国第一个(局部)互联网(CERNET)刚建立不久,1995年在清华大学建立的著名的水木清华BBS就是开源项目。之后,Linux内核以及GNU项目中的成百上千个开源项目逐渐展现在国人的面前。

随后,中国也逐渐出现了一些开源项目。最初由国人开发的开源项目,主要解决的是Linux系统的汉化问题,流传最为广泛的应该是可以显示和输入中文的伪终端应用程序CCE。在1998年之后的两三年内,出现了以下三个开源项目。

  • LVSLinux Virtual Server)是由章文嵩博士开发的,后来被Linux内核收录,成为使用Linux操作系统搭建集群服务器的重要核心软件组件。
  • Smart Boot Manager是当时的清华大学博士生苏哲开发的,它是一个引导管理器,类似现在流行的GRUB,主要解决引导多种操作系统的问题。苏哲后来主持开发的SCIM系统,被各种流行的Linux发行版收录,成为Linux操作系统上提供多语种输入法支持的标准框架。
  • MiniGUI是由我开发的,后来由我创立的北京飞漫软件技术有限公司维护和发展,在功能手机、数码相框、工业控制系统和工业仪表中得到了广泛应用。

上述三个开源软件是中国开源软件早期的代表作,在国际上具有较强的影响力。

之后,国内开源项目的发展长期处于停滞状态,这与2000年左右互联网泡沫的破裂有一定关系。互联网泡沫的破裂,让许多梦想通过开源项目来创造商业奇迹的Linux发行版厂商很受伤。我曾供职的蓝点软件,在NASDAQ OTCBB板借壳上市,半年之内股价从20多美元跌到0.2美元,后于2001年贱卖。


2005年起,开源项目的发展逐渐走出低谷。在此期间,国内也出现了为数不多的开源项目,其中以清华大学陈渝副教授主持的SkyEye最具代表性。该项目旨在提供一个面向嵌入式软件开发和调试的ARM或其他架构的纯软件仿真器(虚拟机)。该项目持续活跃长达7年时间,吸引了许多海外高手参与,是为数不多的具有国际影响力且充分体现了国际化协作、分享的开源项目。


在参与开源项目的企业当中,最为活跃的是淘宝,接下来是新浪、百度、腾讯和华为等。同时,随着“开源中国”等社区的兴起,个人主持或者参与的开源项目逐渐多了起来。根据“开源中国”收录的开源软件,当前已经有一千多个由国人开发或者主持的开源软件。这和十年前相比,有了非常大的进步。有兴趣的读者可访问http://www.oschina.net。以下开源项目非常值得一提。

  • TFS是一款由淘宝开发的分布式对象存储系统,于20109月开源,存储了淘宝的几百亿张图片和交易快照。目前新浪微博已在生产系统中使用TFS作图片等对象的存储。
  • RT-Thread。这是一个由国人主持开发的开源实时操作系统,曾获得“第六届中日韩开源软件竞赛”的技术优胜奖(其他两个技术优胜奖获得者为淘宝的OceanBase和红旗的Qomo Linux)。RT-Thread 目前也获得了诸多商业应用。
  • Linux Deepin是近几年发展起来的面向桌面的中文Linux发行版,由一群来自武汉的Linux高手发起并维护。
  • ucore。从2010年暑假开始,陈渝博士组织清华大学学生开展教学用开源操作系统ucore的设计与实现,并直接用于清华大学的操作系统课程,学生可参考实验文档和ucore源码通过实践逐步深入掌握操作系统。这相对国内操作系统旧有的教学方法有较大改变,获得了国内外操作系统教学领域专家的认可,并将在教育部的支持下进行更大范围的推广。

国内开源软件的特点和问题

国内开源项目存在很多问题,如缺乏重量级项目、缺乏持续维护和更新、质量一般、用户不多等。另外,正如开源中国创始人所言,国人所开发的这些开源项目,和国际主流开源项目脱节严重,绝大多数处于单打独斗的状态。

例如,淘宝主导或参与的开源软件,大多数和互联网服务器后台、云计算相关,这些项目的主要用户是淘宝自己。因为门户之见,这些软件很难被其他的互联网企业所使用,大家不停地“造轮子”而忽视了开源软件发展必须具备的“共享”、“协作”精神。不过,现在这种情况正在改变,上面提到的淘宝TFS系统已被其他互联网企业使用,ucore项目也得到了诸多国内外大学积极的响应和支持。


我希望国内的开源项目能够和国际主流的开源项目步伐保持一致,要么加入国际化的开源软件,要么将自己主持的开源软件逐步国际化。这样,我们的开源项目才能得到源源不断的前进动力,也才能在国际化舞台上扮演更加重要的角色。

新的力量

无论如何,国内大型IT企业参与开源项目就是一个良好的开端,将为中国开源项目的发展起到非常大的促进作用。与此同时,各种开源社区活动也越来越活跃,例如具有政府背景的“开源软件高峰论坛”和草根性质的“我们的开源项目”巡回展演等。这表明,开源软件即将在国内引起新一轮的发展浪潮。

开源我的软件?

在高物价、高房价的今天,大部分人对此问题的第一反应是:“我就是一刚解决温饱的码农,我开源,谁养我?”这几乎与我们在十年前推广开源项目理念时遇到的问题一样。但这已大大落后于时代了!我们不仅可以通过使用其他人的开源项目赚钱,还可以通过开源自己的项目来赚钱。

如何靠开源项目赚钱?

在证明上述论点之前,我们先看看别人是如何利用开源项目赚钱的。靠开源项目赚钱的方式(经过验证的)无外乎有如下几种。

  • 双许可证模式。在采取严格的开源软件许可证的同时(通常选择GPL),给商业用户提供非GPL许可方式。这本质上是一种贩卖软件许可的行为,但开源软件带给开发者一个很大的好处,即传播迅速、快速迭代。我主持的MiniGUI项目就采用这种模式,在过去的五年当中,获得了几千万元的软件许可收费。当然,使用这个模式最成功的当属MySQL
  • 基础软件采用宽松许可证,同时向基础软件的商业用户贩卖增值服务或者增强组件、开发工具等的许可。这种模式可用于类似RT-Thread这类的基础性软件上,RT-Thread本身可以是开源且可无偿商用的,但其上的各种增值组件,如网络、文件系统、图形系统等,可以是商业软件。国外采用这种模式的以各类CMS系统为主。例如DrupalConcrete系统,其基本系统是开源且免费的,但其上的许多插件、主题、模版等是收费的。有兴趣的读者可访问 http://www.concrete5.org网站,其中还有“Marketplace(市场)”频道。
  • 混合模式,既贩卖工具等软件的许可,同时还向用户提供付费服务的模式。比如Ubuntu Linux发行版。
  • 成为平台型项目,并承载自己的互联网业务。这种模式在大型互联网企业中应用广泛。例如Google开发并开源Chrome浏览器,短短几年抢占了微软的很多市场份额,通过在Chrome中默认使用Google搜索引擎而获得极大的收入;再比如Google开源Android,一方面为了遏制苹果iOS的增长势头,另一方面通过预置Google搜索而获得了大量来自移动互联网的流量收入。

显然,有了先驱们的成功案例,作为开源软件参与者,不论是企业还是个人,都可能名利双收。

IT企业为何要参与开源项目?

作为企业,参与或者主导一个开源项目,其最为明显的动力应该是上述的第四个商业模式,即打造一个平台型项目。但就中国的IT企业来讲,我尚未看到有此种实力,或者此种抱负的企业存在,毕竟,打造一个平台需要长期的投入,一般情况需要五年或更长时间。貌似中国没有一个企业有这个耐心来投入五年这么长的时间在一个项目上。

那为什么企业还要参与到开源软件的开发中呢?我认为,谋不了大利就谋点小利,企业主导或参与开源软件,至少有以下几个好处。

  • 提高企业的美誉度。在利用开源项目的同时,也参与到开源项目中,企业的美誉度会得到很大提升。
  • 员工更有激情。因为自己的作品能够公之于众,虽然著作权本质上属于企业,但作为实际的编码者,可以通过开源自己的作品来获得额外的成就感和满足感。这对于稳定开发团队、提高开发人员的积极性会有很大的帮助。

当然,也许过不了几年,中国也能出现实践第四种商业模式的大型IT企业,让我们拭目以待吧!


个人开发者如何利用开源项目获益?

如果你是一名开源软件的开发者,打算利用自己的软件开创一家软件公司,该如何做?第一,我们要确定好自己的商业模式;第二,为自己的开源软件选择恰当的许可证。

如果决定选择双许可证模式,应选择GPL这样较为严格的许可证,它是这种商业模式能够成功的基础。当然,选择双许可证会阻碍产品在商业用户中的推广。尤其是对初生的开源项目来讲,显然是一种两难的境地。MiniGUI之所以可以采用双许可证模式,是因为在成立公司之前和最初的一段时间内,MiniGUI采取的是LGPL许可证,之后在软件足够成熟时才改为GPL许可证。另外,MiniGUI用于功能手机等系统中时,因为这种设备一般使用实时操作系统,缺乏应用LGPL/GPL许可证的技术条件,所以面向这种设备收取许可费也是天经地义的事情。MySQL采用双许可证模式得以成功的原因在于,MySQL AB公司并不会对仅仅用于Web服务器的MySQL商用行为收费,因为这种情况下,商业用户并不会发布MySQL的副本—它只是在服务器上运行而已。

因此,看起来上面提到的第二种、第三种商业模式是最适合个人开发者或者初创公司的商业模式,能够很快地速度推广和迭代软件本身,还能够确保有足够的收入来保证下一步的发展。在这种模式下,应该选择较为宽松的许可证。但大部分开源软件作者,由于并不真正理解开源软件的许可证,所以采取了错误的许可证(指在法律上是错误的)。例如RT-Thread,一方面采用GPL V2许可证,另一方面又承诺不会对商业使用收费。这其实没有解决根本的法律问题,即使用RT-Thread开发的衍生作品,到底要不要遵循GPL?这个问题和是否收费没有直接关系。要解决这个问题很简单,采用类似ApacheBSD或者MIT许可证即可。有读者会问,那为什么不能采用LGPL许可证?就RT-Thread这样的软件来讲,采用LGPLGPL没有本质的区别,因为RT-Thread的应用场合下一般不支持函数库的动态链接,这导致失去了适用LGPL许可证的技术条件。

上面提到的最后一种模式,是否适用于个人开发者或者初创公司呢?我的答案是,这种模式是大公司的玩法,小团队或小公司没法做这类事情。

大专院校应该成为开源软件的主力军

一个有趣的现象是,很多开源项目其实是作者在大专院校或者研究机构工作或学习时发起的,比如本文提到的三个国内早期的开源项目。甚至某些开源项目由特定的大学主持和维护,如BSD操作系统、PostgreSQL关系数据库、Minix操作系统等。

从国际视角看,开源软件的发展离不开一些知名大学的参与,BSDMIT许可证分别由加州大学伯克利分校和麻省理工学院定义,并由两所大学在其众多开源软件中使用,也被其他开源软件广泛应用。值得一提的是,苹果公司Mac操作系统和iOS操作系统,均使用了加州大学伯克利分校开发的BSD操作系统内核。

从现实情况看,在职的程序员,除非因为供职单位支持,否则很难独立发起和维护一个大型的开源项目,但在大专院校和科研机构工作的老师和学生,则有得天独厚的条件(主要是有大量的时间,并可能与科研课题和教学任务相结合)来发起和持续维护一个开源项目。清华大学陈渝副教授主持的SkyEyeucore两个开源项目就是典型的案例。笔者希望国内有更多的大专院校和科研单位(尤其是教师)能够积极参与到开源项目的发展当中,并成为国内开源项目的主力军。



政府和开源社区应该做什么?

在促进开源项目的发展中,政府要做的就是制定公平、合理的规则,促进相关法律法规的完善。如果知识产权保护力度不够,不仅会阻碍软件产业的发展,也会阻碍开源项目的发展。此外,需要政府支持建立以支持开源项目为己任的非营利性基金会组织。

加大知识产权的保护力度,一方面可以让商业软件在传统贩卖软件使用许可的商业模式下得到良性发展的机会,另一方面可以促使一部分人使用免费的开源软件,进而促进开源软件的发展。

就现阶段而言,如果政府能设立一些奖励基金等奖项,给开源项目的作者以一些奖励,也是不错的支持途径。

开源项目应该以松散、自组织的形式开发和发展,开源社区的存在,为开源软件开发者和使用者提供赖以生存的土壤。开源社区可以是网站、论坛,也可以是松散的交流、展演等。当然,开源社区第一步要解决的问题就是自己的生存问题。

我的建议是,开源社区应该尝试在现有法律框架下,以有限责任公司的形式来做国外开源基金会所做的工作。通过这种方式,可以有效避免无法注册NGO组织的问题,然后从企业(尤其是那些大型互联网企业)当中募集捐款,通过赞助一些开源项目,逐步推进开源软件社区的良性发展。

另外,国内开源社区还需要从使用者社区转向开发者社区,为开发者参与开源软件提供便利,如建立类似GitHub/SourceForge那样的开源软件托管站点,为开源软件项目提供邮件列表、论坛、博客服务等。



结语

将开源项目和商业结合,不管是在自己的项目中使用开源项目,还是靠自己的开源项目来赚钱,都无可厚非。关键是,我们需要尊重开源软件著作权的拥有者,按照开源软件所采纳的许可证办事,只有这样,开源软件才能得到长足发展。合法使用开源软件的前提,就是遵守开源软件的许可证规定的各种义务。

当然,更有积极意义的参与开源项目的方式是,将使用开源软件中遇到的问题或者修正、增强代码提交给开源软件的作者,帮助其改善作品。其实,这是任何使用开源项目的企业和个人都能做到的。

从技术到管理:思维转变是关键

IT公司研发部门的管理人员大多是从公司内部的技术人员中提拔的。在快速发展的公司里,这样的机会更多。然而这种“半路出家”的转型也给我们带来了很多挑战,其中最关键的部分在于思维方式的转变。

从个人成就到团队成就。无论是做管理还是做技术,成就导向意识是优秀员工的基本素质。只有具备很强的成就导向意识,才能把事情做得超预期,才能追求卓越。


刚刚上任的管理人员的思维方式往往还处于个人成就导向阶段,他们希望向外界发出一个明确的信号,团队之所以取得这样的成绩或者解决某个难题,是因为我的组织和领导。然而这种信号被团队成员多次接到后,会产生功劳都被领导拿走的感觉,从而导致团队的向心力下降。

这 时,比较好的做法是:要保护团队成员的成就导向,并且进行鼓励,从而刺激大家的积极性。例如,与某个团队成员共同解决了某个难题后,要弱化自己,重点表扬 这个团队成员对问题的贡献。这样再遇到某个难题时,这个团队成员才能保持一样或更高的激情。只有将自己的成就感定位在团队成就上,才能站得更高,避免和团 队成员产生直接竞争,从而有效地领导自己的团队。

上下同欲的氛围。兵法有云:“上下同欲者胜”。一个团队能够健康运作的基础就是“上下同欲”的氛围。要想拥有这种氛围,必须处理好两件事情:发言权和信息透明。

发言权:每个人都希望发表自己对某件事情的看法,尤其是比较关键的事情,并获得聆听。如果管理人员屏蔽这些,所表达的就是一种不尊重。当然不是所有的意见都要被采纳,需要需要合理的决策,但要让大家有发言的机会。

信息透明:这里的信息包括一切可以公开的信息,如上级期望和项目进展等。保持这些信息的透明度,能够提高团队成员对团队绩效的关注度和荣辱感。当大家都站在团队的高度上思考问题时,能够省去很多协调工作。

转型到管理岗位后,就要多花些时间来考虑团队建设问题。只有团队的氛围比较好,才有机会取得较好的成绩。

合理计划,要事第一。刚刚转型的管理人员往往会有类似这样的抱怨“杂事太多,被不停地打断”。造成这一问题的很大部分原因在于,计划不够周全或者缺乏例行 沟通机制。例如,每日站立例会基本上可以消除很多这样的杂事。同时因为管理人员需要接触的人比较多,所以日常处理的事情也会比较多。这与做技术人员有很大 不同。

这时就要有非常合理的计划,保证要事被及时处理。需要注意的是,时间的急迫性往往会夸大事情的重要性。如果管理人员总是习惯将任务拖到最后的截止时间处理,则会打乱事情的优先级,导致做事失去计划性。

培养人才,用人所长。杰克•韦尔奇说过:“在你成为领导之前,成功只同自己的成长有关。当你成为领导之后,成功同别人的成长有关。” 管理人员要把培养下属作为一件重要的事情,只有团队里的人才层出不穷,团队才有能力去不断挑战更高的目标。用人所长则指在工作的安排过程中需要多关注下属 的长处,不能过度放大他们的缺点。正所谓“用人所长,天下无不用之人;用人所短,天下无可用之人”。人事任命需谨慎考虑,用对一个人,能省很多心;用错一 个人,要操很多心。将合适的人放到合适的位置,是管理人员必须面对的一个难题。