对于很多Linux用户而言,这个开源的操作系统是一种信仰;
而对于计算机世界之外的人来说,Linux是一种被忽视的存在。
我5年前在这个论坛曾经喷过一次Ubuntu Linux——因为我发现无论是硬件还是软件,它对各个方面的支持都不如Windows——浪费了我大量时间去安装、测试、卸载它。我不理解为什么会有人把这种系统作为自己的信仰。
彼时我只不过是个普通的计算机用户。从我们这代PC用户的角度出发,任何无法“装好就用”的东西,都是违背人性,要遭天谴的。
----
那么4年之后呢?
接触开发行业之后,我发现,普通程序员其实很容易满足——给他库和文档,还有大量的时间就可以了——但是当一个程序员,希望用自己的力量,去解决一些前人没有解决过的问题的时候——他需要一些真正好用的工具。
好用的工具在哪里?如果一个问题已经被解决过无数次,那么最好用的工具,通常总是来自行业内经验最丰富的厂商。just spend your money。
如果一个问题还没有被人解决过呢?那么针对这个问题的专用工具,往往是不存在的。遇到这种情况,程序员就得把手头现有的工具凑起来,设计一套新的工具,再去解决问题。
这时,商业方案就令人头疼了——因为代码的不开源,有时会遇到一些无法通过的障碍;因为协议条款限制,开发出来的东西不能随便传播运行。这种“不方便”,【普通程序员】是可以忍受的;而像我这样的【终端用户】,则几乎不会察觉。一个普通的iPhone用户,是无法体会AppStore的发布流程有多么恶心的。
于是当年的我口出狂言,说Ubuntu sucks。然而让今天的我感到心凉的是,当年竟没有一个回复,能够用令我信服的语言,纠正我的幼稚想法。
毕竟,KC群众中的【终端用户】和【普通程序员】,比例要远高于【优秀程序员】。当年的我并不知道这一点(当年虽然写过一些软件,但并不了解这门艺术、这个行业),只能说自己实在太短浅、太粗鄙。
也差不多是同一段时间,一部分有【信仰】的编程爱好者从KC消失,留下那些仍然【忽视】着的同学。
于是今天的我只能通过在youtube上大量补课,对当年的忽视,进行自我纠正(我专业是学电的,不是学计算机的)。数据结构,操作系统,流式处理,消息队列……在这个过程中,我“遇见”了无数来自斯坦福、伯克利、MIT的教授,跟着他们的思路一个小时一个小时地走下去。
苦学一个月,感悟如下。
----
1. 计算机科学作为一门自然科学,当然是违背人性的(见刘虎《科学的反人类本质》),因此无法通过条件反射训练直接习得,而必须在一定的数理逻辑基础上,由老师带领学习。计算机科学经过半个世纪的发展,分支门类广为增加,基础理论的重要性也日益提升。如今在未完成【计算机科学专业课程】的情况下成为优秀程序员的可能性,要远低于当年【比尔盖茨=>微软】。
2. 兴趣和好奇心不是决定性因素。计算机科学是很酷的学科,不管是内容本质,还是薪资待遇都非常吸引人,对计算机科学感兴趣的人,几乎包含了每一个计算机用户。作为这个世纪普及度最高的通用工具,可以说每一个拥有计算机的人,都对计算机的原理感到好奇。从行业从业者的学历统计结果来看,真正的决定性因素,仍然是【是否完成了计算机科学专业课程】(当然,不一定非要在大学里完成)。
3. 对1和2的推论是,(与许多普通爱好者常识相悖)如果一个计算机编程爱好者没有完成相应专业课程,他几乎很难在本领域有任何建设(而不是作出微小的贡献)。
诚然,对于许多爱好者而言,计算机程序设计是一件很惬意的事情——写一点代码,就能解决一些问题(看,我写了个计算器APP);然而绝大多数时候,这些问题通常都是前人已经解决过的,它们不属于贡献。而在开发过程中遇到某些前无古人、后无来者的bug时,这类爱好者往往会手足无措,堵在路上(许多arduino爱好者最终放弃的原因)。
因此,如果真的想解决前人所没有解决过的问题(也就是那些真正棘手的问题,比如帮富士康拧螺丝,帮袁隆平选水稻),就必须要求程序员对计算机科学领域的一些世界观、方法论非常熟悉,从而能够判断新猜想、新实践的可行性、可靠性,提高解决问题效率。而这些世界观、方法论,正是计算机科学教育的精髓所在。而这一点,对于没有接受过计算机科学专业教育的人来说,是无法想象的。你无法想象你没学过的东西对你有什么用。
说到这里,就不难理解为什么Linux会被很多人当成信仰——因为它是学习现代计算机操作系统架构的免费教科书,是计算机科学教育中不可或缺的一环。
信仰的力量,在不受强权压迫的地方,尤其强大。linux已经成为了服务器操作系统之王,因为服务器只跟具备【信仰】的人士打交道,而不需要照顾那些充满【忽视】的用户。
----
未来社会的高度分工,决定了我们中的大多数人,将日复一日地,为那些忽视技术细节的用户,提供充满信仰的技术产品和技术服务。对【术业有专攻】的忽视,让我浪费了许多时间,也给我上了宝贵的一课。