跳至主要内容

开源不应作为推荐的理由

开源不应作为推荐的理由

redraiment, 2008-09-04

前言





  明天去学校啦,近两个月的暑假结束了,来总结总结这个暑假的经历。早在放假前,我就计划好了,这个暑假一定要熟悉一下 Linux 的使用。在这个期间,我也看到很多开源人士和 Windows 的铁杆粉丝们在论坛等地方吵架。有个支持开源的朋友说:“当你听到开源软件时是什么感觉?给我的,是感觉亲切,没有浓重的商业气息。”;还有很多软件商,在向用户推荐自己的产品时,都不忘加上一句,“我们的产品是完全开源的”。

  于是我开始思考了,对我来说,开源的软件和非开源的软件区别在那儿

正文

  首先阐明一下,我是软件工程的学生,但现在先暂时搁下这个不说,我就从作为一个普普通通的用户来说,一个像我爸爸妈妈这样的电脑盲的角度来说:软件开不开源,与我何干?有一点不能否认,电脑再怎么神奇,充其量就是一个便捷的工具而已。既然它作为我的工具,我所在乎的仅仅是它能不能高效地替我完成任务而已。

  我来说说我这段时间用 Linux 的体验,我用的发行版是 FC6,在新华书店花68 RMB买的。总体感觉非常不错。我时常要赞叹一下它的强大和灵活。但是,有时让我也感觉很烦心。

  一开始,我先让自己去熟悉 Vim 编辑器,因为我要用它来编程,熟悉自己的开发工具,能提高开发效率。Vim 提供的功能确实想大,所以有人把他和 Emacs 并列称为最强大的编辑器。但是,刚默认安装完的 Vim,还是很简陋的,需要根据的需要进行设置。比如,我要开启语法高亮功能、智能缩进、自动填充语句、还要代码折叠等等。我用的都是一些简单的基本功能,但由于我是新手,不熟悉,配置还是花了老半天。

  接下来就是去看看浏览器,FC6 里自带的是 Firefox 1.5,我到官网下载了最新的3.1。然后安装了 Google toolbar、CHM Reader 等插件,再换上一套酷一点的主题,毕竟看浏览器的时间比较多,不赏心悦目一点怎么行。

  最后再动动系统本身,去掉一些不用的后台服务,卸载一些自己不用的软件包(比如蓝牙设备等),最后界面也美化一下。

  忙活了半天,总算是用得称心如意了。我在自己这样精心搭建的环境下能高效的工作。此时 Linux 给我的印象就是配置配置还是配置。但我突然想起了自己以前还没未接触 Linux 时,曾经和同学抱怨过:自从有了 Ghost 来安装系统,安装一个系统只要20来分钟,但接下来装驱动、装软件等配置一个满意的 Windows 却要花掉一天!所以 Windows 也一样。

  无论是 Windows 还是 Linux,我都是根据我自己的需要进行了个性化配置,而它们经过我的配置,都能满足的那些需要,完成我指定的任务。就这一点来说,至于我用的是不是开源软件,的确和我没太大关系。在我看来他们是一样的。

  那我关心的是什么呢?我举个例子,在 Windows 环境下,我用 Visual Stdio 2005 来编写代码,VS 2005 也提供了语法高亮功能、智能缩进、自动填充语句、代码折叠等功能。就功能上说,VS 2005 带给我的,和 Vim 是一样的。都能满足我的需求。但有一点,让我对 VS 2005 多一点好感,就是这些我想要的功能默认安装后就直接提供的,不需要自己额外去配置,去安装插件。

  这就是我比较在乎的问题,像我这样如此被动的用户,只有在不得已的情况下,才会去亲自动手配置软件。一般情况下,都是直接默认安装软件的。如果两款软件,实现的功能一样,但其中一款默认的设置最解决我的个人喜好,那我想我肯定会选择使用它!因为我安装完就能马上使用了,这软件就像是我老朋友一样,知道我的喜好,知道我需要什么样的功能。

  但我们老师一直在和我强调说,开发软件的真谛是“只提供机制,不提供策略”。其实我一直不苟同这一说法。我是觉得软件“既要提供机制,也要提供策略”。

  不晓得大家用的是什么中文输入法?在 Windows 下,我以前是用智能ABC ,智能ABC 虽然智能,但还不是非常好,它的词排列顺序是固定的。后来我用了谷歌输入法,它能把你频繁地输入的字自动考前,下次输入时词的排列顺序就按使用频率来排序了,自然用户能很快找到自己需要的字,就好像这个输入法知道自己在想什么,每次出来的都是我想要的。这样的软件我用起来感觉很舒心,虽然它不是开源的。

  但要真的实现如此舒心的软件,是非常困难的,它需要大量的需求调查,了解用户们真正的需求,甚至还包含一些心理学上的知识。而再神奇的功能,如果没有需求,那也是废物一个。有个经典的例子,至今有老外还在使用 Win 95 (原文请看这里),按他说的,这也是一个需求的问题,Win 95 提供的功能已经很好的满足它的要求了。

因此,对于我们用户,你和我说软件开源(不一定是无偿免费开源),对我来说那不关我的事,我在乎的是你的软件能不能高效地完成我给定的任务,是不是我每做一个小动作,都要先配置老半天?

  而对开源感兴趣的人,我想应该是此类产品的开发者,他们需要通过源代码来借鉴其他人的技术,并以此来交流和提高自己的水平。这个暑假中,我在编写一些  Linux 程序时,也借鉴了 tr、curl 等程序的源代码。所有,向开发团队去强调开源,那是比较明智的,而不是在一堆电脑盲面前吹嘘不停。

后记

  这两天我突然有了一个很“疯狂”的想法:是不是开源软件是故意这样做(只提供机制,不提供策略)的?因为开源软件是不通过买卖软件来賺钱的,而是通过后期的培训和维护等服务来赚钱的。但如果开源软件前期也做过充分的市场调查,了解用户的需求,然后在软件设计时,默认的设置最大地满足了大部分群体的需要。那也就意味着 Linux 等开源软件也简单易用,容易上手。这么以来,大部分用户就不需要去培训和维护服务了。那开源软件靠什么来赚钱?

  所以,撇开自己使用源代码这一点来说,纯粹的在用户使用这个立场上来讲,开发开源的软件比开发商业软件要容易:因为开源软件前期不用考虑用户的需求,只有后期用户需要什么需求我针对性的进行培训,这样每个用户手中的软件经过自己的配置,可能都是不一样,这样能满足所有用户的个性需求;而商业软件前期有点“预测性”的估计用户的需求,然后到了用户手中的软件配置都是一样,这样就不一定能满足所有用户的需求。要自己配置的话反而另外还得去培训等,这比起开源多了一个环节。

2009-08-10

  不过我最近又有新的想法:小孩子学自行车,辅助轮迟早是要卸下来的。
虽然 Windows 很容易让新手入门,但不能永远停留在初级阶段,终究有一天是要自己去配置系统的。




评论

此博客中的热门博文

AutoHotKey 新手入门教程

AutoHotKey 真是一个好玩的工具!短短几行代码就是先了“窗口置顶”、“窗口透明”等功能,之前我还特意为此装了好几个小工具,现在都可以卸掉了。闲来无事,就把 Quick Start 翻译了一下,我没有逐字逐句地翻译,有时候我嫌原文罗嗦就用自己的话概括地描述了一下。 原文地址:http://www.autohotkey.com/docs/Tutorial.htm 教程目录 创建脚本 启动程序 模拟鼠标键盘 操纵窗口 输入 变量与剪切板 循环 操纵文件 其他特性 创建脚本 每个脚本都是一个纯文本文件,由一些能被 AutoHotKey.exe 执行的命令组成。一个脚本可能还包含 热键 和 热字符串 。如果没有热键和热字符串,脚本在启动的时候就会从头依次执行到尾。 创建一个新的脚本: 下载 并安装 AutoHotkey。 右击鼠标,选择 新建 -> 文本文档 。 输入文件名并确保以 .ahk 结尾。例如:Test.ahk。 右击文件,选择 编辑脚本 。 输入以下内容:#space::Run www.google.com 上一行的第一个字符 "#" 代表键盘上的 Windows 键;所以 #space 表示在按住 Windows 键后再按空格键。"::" 后面的命令会在热键激活后执行,在本例中则会打开谷歌主页。继续按下面步骤操作,来执行这个脚本: 保存并关闭该文件。 双击该文件来启动它。在系统托盘里会出现一个新图标。 按下 Windows 和空格键,网页会在默认的浏览器里打开。 右击系统托盘里的绿色图标可以退出或编辑当前脚本。 注意: 可以同时启动多个脚本,并且在系统托盘里都会有一个相应的图标。 每个脚本都能定义多个 热键 和 热字符串 。 想让某个脚本开机即启动,可以将它的 快捷方式放到开始菜单的启动目录里 。 启动程序 命令 Run 可以运行程序、打开文档、网页链接或快捷键。请参看以下示例: Run Notepad Run C:\My Documents\Address List.doc Run C:\My Documents\My Shortcut.lnk Run www.yahoo.com Run mailto:someone@somedoma

好玩的数学——吉普赛读心术解密

好玩的数学——吉普赛读心术解密 redraiment, 2009-11-19 神奇的吉普赛读心术   闲着无聊窜寝室,看到一个同学在玩一个 flash 游戏:吉普赛读心术( http://gb.cri.cn/mmsource/flash/2006/04/10/er060410001.swf )。规则如下: 任意选择一个两位数(或者说,从10~99之间任意选择一个数),把这个数的十位与个位相加,再把任意选择的数减去这个和。例如:你选的数是23,然后2+3=5,然后23-5=18 在图表中找出与最后得出的数所相应的图形,并把这个图形牢记心中,然后点击水晶球。你会发现,水晶球所显示出来的图形就是你刚刚心里记下的那个图形。   咋看之下觉得很神奇,但仔细把玩两三回后你就会发现其中的奥秘: 右边的图标每次都会改变; 9、18、27、...、81 这9个图标永远是一样的。   假设你选择的两位数是 ab(即 ab=a×10+b),其中 1≤a≤9, 0≤b≤9 。按照规则计算就是 (a×10+b)-(a+b)=9×a,结果是 9 的倍数,∵ 1≤a≤9 ∴ 结果为 9、18、27、...、81 中的任意一个。又∵ 这9个图标是一样的,∴ 水晶球神奇地知道你记的图标。 手指计算器   无独有偶,记的小学数学课上老师教我们用手指计算任意两个5-10之间的数的积。   例如 6×8 ,一只手伸出 6-5=1 根指头,另一只手伸出 8-5=3 根指头。1+3=4,4 就是积的十位数;把两手弯曲的指头数相乘得 4×2=8,8 是积的个位数。则 6×8=48。   道理和上面相同:a×b=[(a-5)+(b-5)]×10+(10-a)×(10-b) 神秘的失踪   做这道题一定要的亲自动手才有滋味!否则就会像浮光掠影,印象不深。   将一个正方形分割成 7×7=49 的小方格,并按下图将它们分为“甲、乙、丙、丁、戊”五部分。   然后,甲块不动、乙块和丙块对调、戊块上移、丁块右移。得到新图如下:   经过这样重新组合拼成的新正方形,中间奇迹般地空出了一个洞!   实际上这只不过是一个小戏法,上面的新图形并不是真的正方形。 观察原始图可知 △ABC 和 △AED 是相似三角形 ∴ DE:CB=AD:AC=4:7 ∴ DE=8/7 ∴ EF=DE+DF=36/7 ∴ 上图

JavaScript中的字符串乘法

JavaScript中的字符串乘法 redraiment, Date 原文 原文地址: http://www.davidflanagan.com/2009/08/string-multipli.html 原作者:David Flanagan In Ruby, the "*" operator used with a string on the left and a number on the right does string repetition. "Ruby"*2 evaluates to "RubyRuby", for example. This is only occasionally useful (when creating lines of hyphens for ASCII tables, for example) but it seems kind of neat. And it sure beats having to write a loop and concatenate n copies of a string one at a time--that just seems really inefficient. I just realized that there is a clever way to implement string multiplication in JavaScript: String.prototype.times = function(n) {     return Array.prototype.join.call({length:n+1}, this); }; "js".times(5) // => "jsjsjsjsjs" This method takes advantage of the behavior of the  Array.join()  method for arrays that have undefined elements. But it doesn't even bother creating an array with n+1 undefined ele