第一章 概论
市面上有很多种赚钱的方式:
有的交钱买断
有的“先试用再交钱”,有些软件也提供试用版、免费版和正式版,还有的类似期刊订
阅,每年交钱。
有的不但免费,连源代码也一并奉送,但是要求获得源代码的开发人员遵守某种协定
有的送硬件,但是软件要收钱
有的送软件,但是硬件要收钱
也有“免费用,但是要看我提供的广告”
还有“免费用,程序也不是我写的,如果有问题,给我钱,我就来提供咨询……”
思考:看到这一段,我不禁好奇,自己各式各样的软件接触了很多,而软件的盈利模式具体是怎样的
探究:
- 先付钱后使用”曾经是国内软件的主要盈利模式。消费者的购买行为取决于对品牌的认识。一般来说,这种方式适用于品牌形象好,知名度高的商业软件,如Office系列软件。
- “先试用后付费”,免费给用户下载试用版本,在未付费前,软件有一定的时间、次数、功能等限制。但在国内,与注册收费模式形影相伴的,是数不清的破解和盗版行为,同时受到国内用户购买力匮乏、正版意识不浓等因素的制约,注册收费模式在盈利面前,变得苍白无力。
- 捐助,来自用户或企业的赞助,通过自愿付费,帮助软件作者解决资金问题。一般来说,捐助模式主要适用于免费软件。如,Maxthon,它是国内第一个成功运用这种捐款模式的软件,对捐款的用户除了写感谢信、捐赠标注外,还返回一些特殊的服务,如制定个性化的MyIE等。
- “软件+广告”,主流盈利模式。在软件中嵌入广告、弹出广告窗口等方式卖广告,从广告商那里获得收益的模式。广告和软件的结合是软件作者取得收益的一个非常重要的模式。广告资源是稀缺的,要取得广告资源,最主要在于自己的软件是否有人气,换句话说,用户规模成为关键点。一般来说,广告资源集中在同类软件中用户规模最大的前几名,这导致垄断现象的出现。广告与用户体验的关系问题需要非常小心处理。用户对充斥着大量广告的软件往往会有抗拒心理,若软件的广告行为伤害到用户体验,将流失用户,最终也会失去广告客户。
- 占山为王,软件作渠道
软件可以看作是渠道,软件通过自己的服务到达用户桌面,这就占据了一条渠道。两种较流行的渠道合作方式:CPA广告、搜索合作
- CPA (Cost-per-Action) 是指每次行动的费用,即根据每个访问者对网络广告所采取的行动收费的定价模式,比如成功引导注册或购买等行为。
- 搜索合作。以软件与百度合作为例,搜索合作主要是通过与百度超级搜霸捆绑,用户在安装百度超级搜霸后,点击搜霸搜索产生的竞价广告,软件作者就获得百度公司的竞价收入分成。
6. 捆绑插件是一种忧喜参半的盈利模式。可喜的是,通过软件捆绑,作者可以低成本运作获得高收入,主要是通过捆绑软件(如广告插件)而获得盈利。软件捆绑带有一定的强迫性,很可能对用户体验造成 伤害。经过流氓软件风波后,很多用户一看到插件就有一种惶恐心理,因此,软件捆绑行为很容易使用户产生敌意,影响软件的形象。
7. 增值服务。给用户提供除了软件功能之外的服务,如果这种增值服务本身有很好的盈利模式,那么这种模式可以带来很大的收益。一般来说,除非软件本身有很好的盈利模式,如只要注册就能挣钱,否则,需要考虑增值服务。
开源软件的盈利
1.硬件销售
一种商品在市场上不是独立存在的。汽车生产厂商希望汽油的价格足够低,相反,石油公司肯定希望汽车的价格压到最低,以至于人人都有能力购买汽车.对于像IBM、Sun、HP这样的服务器硬件供应商巨头来说,很大一部企业利润来自于硬件销售。他们希望操作系统开源,希望数据管理系统开源,希望服务器软件开源。
2.提供服务
IBM已经成功转型为IT顾问公司,IT顾问是为企业的信息系统提供服务.为了使企业软件的更加普及,最有效的方式就是支持开源软件的开发,甚至捐献自己的产品源代码。
3.广告盈利
对于开源软件来说,利用广告盈利就必须具备一定的条件。首先这个软件必须是面向Internet的。其次,这个软件产品必须有广泛的用户,而做这一点,这个软件产品必须有良好的质量并且具有新意。利用广告模式,开源软件开发维护成本不再需要软件的使用者来支付,完全转嫁到了需要投放广告的企业身上。
软件行业也有一句著名的笑话:这不是缺陷,这是一个功能!(It's not a bug, it's a feature!)
感触:游戏软件里常常有bug,但并不是所有bug都应该被改正(虽然大部分bug都应该debug)。我认为gta5里面很多偏离游戏原意的地方,比如一个关卡任务原本是让你通过难行的道路甩开追捕,但如果先“卡”一架飞机,就可以轻松完成任务的目标。作为开放的类沙盒游戏,gta很多玩家热衷于寻找游戏中的bug,以此来卡出独特的人物服装,甚至来完成更加值得炫耀的事。大部分玩家都认为能卡bug是一种展现游戏实力的表现。还有的游戏将一些bug作为彩蛋,设置成就,甚至有的游戏设置了独特的bug场景。
第二章 个人技术与流程
思考:这张图片很直观地展现了各个开发流程的时间分配,但我还是有些质疑调查的准确性。此外,我比较好奇的是在开发过程中,估计这个任务需要的时间居然达到了6到8小时,而且制定代码规范居然也要3个小时。我觉得这些都是些不费什么时力的事情。
思考:第二章一翻开就是,单元测试,然后是性能测试,额,第一次接触。
探究:
程序主要是由一个个的 Class 组成的,一个类或一个对象当然也是一个单元,而比类更小的单元是类的方法(函式)。单元测试(优先)的目的就是首先保证一个系统的基本组成单元、模块(如对象以及对象中的方法)能正常工作。
- 即使我看了单元测试的书,也一头雾水,不知道怎么测试我的系统:
这种情况可能是你代码本身导致的,首先你要写具有“可测性”的代码,这意味着你不能写面向过程的,流水式的,几百行逻辑堆一起的代码(也叫意大利面代码,就像一盘意大利面一样搅在一起的代码。),你要学一些模块化技巧,面向对象和函数式编程理念,还有很多其它具体方法,比如能用本地变量,就不要用全局变量等等,让你的代码具有可测性,这些知识的学习应该放在单元测试之前。
- 单元测试代码比功能代码也多,这样成本很高:
事实上单元测试代码都是异常简单的一些“断言”代码,断言就是判断一个函数或对象的一个方法所产生的结果是否等于你期望的那个结果,这样的代码看起来很多,但事实上书写的成本很低。(因为我们开发软件的大部分时间用在了思考上,而不是敲代码上,单元测试的代码逻辑很简单,不需要太多思考)。
- 不是有UI界面吗,点来点去就可以测试了啊:
你完全可以这样做,直到你觉得这么枯燥的事情真的应该交给电脑去做,或者功能越来越多,你只点击你认为影响到的功能,但总会有那些你认为不会影响到的功能也被影响了,你又懒得全部点一遍,单元测试是在你每次改完代码后自动执行,获得反馈只要几秒,并且会把所有功能跑一遍。
- 我们项目有专职测试人员啊,写单元测试的必要还大吗:
单元测试是检查代码粒度的bug(一般是以函数和对象的方法为粒度),你可以依赖测试人员,但如果你不想在修改自己一个月前写的代码时自己把自己弄到吐血(或者把别人弄到吐血),最好在当初就写好测试代码,这个工作的责任完全属于程序员。外国已经有很多资深程序员论证了,不论你的单元测试代码质量有多高,覆盖面有多全,单单是你去做这一件事,就可以很大程度的提高你的功能代码的质量,以及大幅减少BUG的存在。
链接:https://www.zhihu.com/question/28729261/answer/163637881
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第十六章 IT行业的创新
有创新当然很好,但是怎么保护创新呢?就像你的城堡一样,有护城河(Moat)来保护么?果冻是学校里第一个学会了魔方口诀的,在学校这个小范围里姑且算一种创新,但是你的竞争力有护城河么——你能否保持只有你会背这个口诀?如果没有,那有可能大家都来学,然后人手一个魔方,很快就有人超过你了。对于后来者,一个赶上的办法就是把别人的优势变为大路货(Commodity),怎么办呢?
竞争分几个阶段,当大家都拥有类似的技术,大家都能够搭云梯越过别人的护城河,攻入城堡,短兵相接时,竞争便进入了白热化,大家比的就是执行力。这时候,竞争者有好几个选择。
1. 进入一个封闭的天地去卖魔方,例如一个用GFW高墙围起来的神奇小学,那里的同学不知道外面的世界。
2. 依赖自己别的优势或垄断,把魔方绑定在优势项目上销售,例如,团支书要求团员必须去团支部购买魔方。
3. 开发有差异化的新东西,体现独特的价值。
思考:对比起创新的竞争力,直接通过其他手段提升竞争力过于强大。一些国内游戏大厂,直接抄别人创新的游戏,用庞大的用户打压对手。要么就直接抄国外游戏元素的设计,比如什么原画、技能等等。简直是劣币驱逐良币。我曾在知乎上看过药品的相关讨论,国内都在做仿制药,都在等外国药品的专利过期。当软件的创新成本逐渐升高,企业也许都会用脚来回答有关创新的问题吧。
1)专注于你真正想做的的事,也许比较寂寞,因为它不是网上热捧的“高科技”。
2)如果你觉得解决普天下大众的问题很难,能否从解决自己的问题、身边的问题开始?
3)真正做好服务,不管用户有多少。保护用户的数据和隐私,就像你希望别人保护你的隐私一样,不要找借口。
4)有胸怀去找至少一个伙伴,一起成长。
5)能自我管理,按照自己的节奏来分享体会和成果。
6)享受你的工作和生活,当别人询问你的工作职位时,能够情绪稳定地说:我自己干。