漫谈 Linux,Windows 和 Mac

好了,现在来一点技术性的。这段时间收到很多人的来信(大部分自称是菜鸟)。他们看了我很早以前写的推崇 Linux 的文章,想知道如何“抛弃 Windows,学习 Linux”。天知道他们在哪里找到那么老的文章,真是好事不出门…… 我觉得我有责任消除我以前的文章对人的误导,洗清我这个“Linux 狂热分子”的恶名。

简言之,我想对那些觉得 Linux 永远也学不会的“菜鸟”们说:

1. Linux 和 Unix 里面其实包含了一些非常糟糕的设计。学不会有些东西很多时候不是你的错,而是 Linux 的错,是“Unix 思想” 的错。对 Unix 要批判的接受,而不要顶礼膜拜。那些貌似难的,复杂的东西,特别要小心分析。

2. Windows 其实改善了 Unix,Linux 和 Mac OS X 的很多问题。微软是值得尊敬的公司,是真正在乎程序员的公司。我收回曾经对微软的鄙视态度。请菜鸟们吸收 Windows 设计里面好的东西。

3. 学习操作系统最好的办法是学会(真正的)程序设计,而不是去“学习”各种稀奇古怪的工具。所有操作系统,数据库,Internet,以至于 WEB 的设计思想(和缺陷),几乎都能用程序语言的设计思想简单的解释。


先说说我现在对 Linux 和相关工具(比如 TeX)的看法吧。我每天上班都用 Linux,可是回了家才不想用它呢。上班的时候,我基本上只是“忍受”着它,尽我所能的改善它。Unix 有许多的设计错误,却被当成了圣经,传给了一代又一代的程序员。Unix 的 shell,命令,配置方式,图形界面,都是相当糟糕的。每一个新版本的 Ubuntu 都会在图形界面的设计上出现新的问题,让你感觉历史怎么一会儿前进,一会儿又倒退了。但这只是表面现象。Linux 的图形界面(X window)在本质上几乎是不可治愈的恶疾。我没必要细说 Unix 的缺点,在它出现的早期就已经有人写了一本书,名叫 Unix Hater's Handbook,里面专门有一章叫做 “The X-Windows Disaster”。

当年我热衷于 Linux 的时候就有人向我推荐这本书。它汇集了 Unix 出现的年代,很多人对它的唾骂。他们专门设立了一个 mailing-list 叫 "unix-haters",用于大家发泄。我还以为这是一些菜鸟,他们肯定是智商太低,或者被 Windows 洗脑了,不能理解 Unix 的高明设计才在那里骂街。现在理解了程序语言的设计原理之后,我才发现,他们说的那些话里面居然大部分是实话!而这里面有些人其实是是世界顶尖的编程高手,功底不亚于 Unix 的创造者。在当年他们就已经使用过设计更加合理的系统,比如 Multics,Lisp Machine 等。可惜的是,在现在的操作系统书籍里面,Multics 往往只是被用来衬托 Unix 的“简单”和伟大。它们喜欢在第一章讲述这样的历史:“Multics 由于设计过于复杂,试图包罗万象,而且价格昂贵,最后失败了。” 可是 Multics 失败了吗?Multics,Oberon,IBM System/38, Lisp Machine,…… 在几十年前就拥有了 Linux 现在都还没有的好东西。Unix 里面的东西,什么虚拟内存,文件系统,…… 基本上都是从 Multics 学来的。Multics 的机器一直到 2000 年都还在运行。Unix 不但“窜改”了历史教科书,而且似乎永远不吸取教训,到现在还没有实现一些早期系统里面的好东西。最后 Unix 依靠自己的“宗教”和“哲学”,战胜了别的系统在设计上的先进,统治了程序员的世界。胜者为王,可是 Unix 其实是一个暴君,它倒行逆施,不允许你批评它的错误。它利用其它程序员的舆论压力,让每一个系统设计上的错误,都被说成是用户自己的失误。

我曾经强烈的推崇 FVWM,TeX 等工具,可是现在擦亮眼睛看来,它们给用户的界面,其实也是非常糟糕的,跟 Unix 一脉相承。他们把程序设计的许许多多的细节,无情的暴露给用户。让用户感觉有那么多东西要记,仿佛永远也没法完全操纵它。实话说吧,当年我把 TeXbook 看了两遍,做完了所有的习题(包括最难的“double bend”习题)。几个月之后,几乎全部忘记干净。为什么呢?因为 TeX 的语言的设计其实是不符合程序语言设计的基本原则的。它缺少一种很重要的理念:“抽象”。

一个真正好的工具,应该只有少数几条需要记忆的规则,就像象棋一样。而很多源于 Unix 的工具却像是“魔鬼棋”或者“三国杀”,有太多的,无聊的,人造的“规则”和“特殊技”。有些人鄙视图形界面,鄙视 IDE,鄙视垃圾回收的语言(比如 Java),鄙视一切“容易”的东西。他们却不知道,把自己沉浸在别人设计的繁复的规则中,其实是很无趣的。就像一个人有能力学会各种“魔鬼棋”的规则,却始终无法达到象棋大师的思维高度,因为魔鬼棋本身就是低劣的设计,是低级趣味。所以,容易的东西不一定是坏的,而困难的东西也不一定是好的。学习计算机或者任何其它工具,应该“只选对的,不选难的”。记忆一堆的命令,乌七八糟的工具用法,配置方法,最后脑子里什么也不会留下。学习“原理性”的东西,才是永远不会过时的。

我并不是说 Windows 好很多。技术设计上的很多细节,也许它在早期是同样糟糕的。但是它却向着更加结构化,更加简单的方向发展。我认识一个 Adobe 的高级设计师。他告诉我,当年他们把 Photoshop 移植到 Intel 构架的 Mac,花了两年时间。只不过系统换了个处理器,移植个程序居然花了两年时间。为什么呢?因为 Xcode 比起 Visual Studio 实在差太多了。而 Mac OS X 的很多设计,让他们痛苦不堪。不过他很自豪的说,当年很多人等了两年才买 Intel 构架的 Mac,就是因为他们在等待 Photoshop。最后他直言不讳的说(他明知我有个 Mac,很可能是个 Apple 粉丝),微软其实才是真正在乎程序员的公司。相比之下,Apple 虽然对用户显得友好,但是对程序员的界面却差很多。Apple 尚且如此,Linux 对程序员就更差了。可是有啥办法呢,有些人就是受虐狂。自己痛过之后,还让别人也痛苦。就像当年的我,好的东西不学,仅推崇一些难用,难配置的工具。

我当然不是人云亦云。微软在程序语言上的造诣,我看得很清楚。我只是通过别人的经历,来验证自己早已存在的看法。实际上是我主动问了他这个问题:“你如何比较在 Windows 和 Mac 下的 Photoshop 开发”。所以一再宣扬别的系统都是向自己学习的 Apple 受到这样的评价,我也一点不惊讶。Mac OS X 毕竟是从 Unix 改造而来的,它虽然有很多好的设计,但并没有从 Unix 脱胎换骨。我有一个 Macbook Air,一个 iPhone 5,和一个退役的,装着 Windows 7 的 T60。我不得不承认,虽然我很喜欢 Macbook 和 iPhone 的硬件(当然很多是别人帮它造的),但我发现 Windows 在软件上的很多设计其实更加合理。

说实话,我真的搞不懂为什么我当年会鄙视微软。我只是跟着一些人瞎起哄而已。现在我身边还有一些人鄙视微软。甚至在 Indiana 的时候,有些教授喜欢制造一种“使用 Unix 的学生高人一等”的氛围。微软到底犯着谁了?中国人民到底有几个用 Windows 付了钱的呢 漫谈 <wbr>Linux,Windows <wbr>和 <wbr>Mac 不要忘了 Unix 是 AT&T 的产品。微软和 AT&T,到底谁更邪恶呢?AT&T 当年发现 Unix 有利可图,就到处找人打官司。公司不都是追逐利益的吗。现在看来 Apple, Google,…… 也都是一个样。不过现在,骂 Unix 和骂 Windows 不大一样的地方是,如果骂 Windows,几乎没有人跟你还口。最多有人跟你说,不就是个有点毛病的东西吗,有啥好骂的(埋头继续玩他的游戏)。而如果一旦有人骂 Unix,立刻有人会起来说:“菜鸟不理解 Unix 的哲学。人笨怪刀钝。” 哎,“哲学”的威力就是这么大。

当然我不是反过来在这里打击 Linux 和 Mac 而鼓吹 Windows。这些系统的纷争基本上已经不关我什么事。在我的眼里,它们只是一些“东西”。东西都是低人一等的。人没必要去崇拜或者鄙视一个东西。被东西绊了脚,唾骂它有什么用?只会下次再被绊倒,恶性循环。只有自己爬起来,思考如何合理的改善环境,才能避免下次再被绊倒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AspNet2.0页面生命周期

AspNet2.0页面生命周期 页面框架通过如下过程处理aspx文件请求: 1&#xff1a;解析aspx文件,并创建一个控件树&#xff1b; 2&#xff1a;使用控件树动态实现一个继承自Page类的类或者控件 &#xff1b; 3&#xff1a;动态编译类&#xff1b; 4&#xff1a;缓存编…

数字时钟设计verilog_数字IC设计基本概念之创建时钟

来自微信公众号 “数字芯片实验室”时序分析的一个重要部分是准确地指定时钟和相关属性&#xff0c;例如延迟&#xff08;latency&#xff09;和不确定性&#xff08;uncertainty&#xff09;。 EDA工具可以分析以下类型的时钟信息&#xff1a;时钟网络latency和 skew&#xff…

软件开发模式对比(瀑布、迭代、螺旋、敏捷)

1、瀑布模型是由W.W.Royce在1970年最初提出的软件开发模型&#xff0c; 瀑布式开发是一种老旧的计算机软件开发方法。 瀑布模型式是最典型的预见性的方法&#xff0c;严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤顺序进行。 步骤成果作为衡量进度的方法&a…

photoshop script

http://www.adobe.com/devnet/photoshop/scripting/转载于:https://www.cnblogs.com/275095923/archive/2010/08/23/1806871.html

敏捷开发流程的8个步骤_敏捷开发——个体和互动高于流程和工具

敏捷开发是软件公司主流的项目管理方法&#xff0c;敏捷方法论有许多种&#xff0c;包括Scrum、极限编程(XP)以及精益(Lean)方法&#xff0c;但是它们都具有一个共同点&#xff1a;遵循敏捷宣言和敏捷原则。透明性。每一个敏捷项目成员都知道即将做什么以及项目进展如何。经常性…

瀑布开发

提到“瀑布开发”的时候&#xff0c;大部分人们可能会联想到尼亚加拉瀑布下要进行房地产开发&#xff0c;然后&#xff0c;设想一下&#xff0c;当您告诉他们实际上瀑布开发是一种包含多个阶段的反复叠代的软件开发模型时&#xff0c;他们会多么惊讶。这篇文章将为您提供一份关…

ArcGis Desktop10 注册机授权方法与安装步骤

今天&#xff0c;由于需要处理一些空间数据&#xff0c;安装ArcGIS Desktop10&#xff0c;所以就把注册机的授权方法与安装过程&#xff0c;写成Blog与大家一起分享&#xff01; 第一步&#xff1a;安装 ArcGIS许可管理器。如图所示&#xff1a; 第二步&#xff1a;打开注册机&…

【转】在C#中使用SQLite

SQLite 是一个嵌入式的关系数据库系统&#xff0c;使用十分广泛。在一些数据量不大的应用程序中&#xff0c;如果使用SQLite可以极大的减少部署时的工作量。 要在C#中使用SQLite也很简单&#xff0c;只要找一个C#的wrapper就可以了&#xff0c;例如&#xff0c;我使用的就是来自…

软件开发模式有哪些

软件开发模式有哪些? 快速原型模型&#xff1a;&#xff08;需要迅速造一个可以运行的软件原型&#xff0c;以便理解和澄清问题&#xff09; 快速原型模型允许在需求分析阶段对软件的需求进行初步的非完全的分析和定义&#xff0c;快速设计开发出软件系统的原型&#xff08;…

利用ArcGIS将经纬度数据转化成平面坐标数据

经度是指某点与两极的连线与0度经线所在平面的夹角&#xff0c;国际上规定以通过英国伦敦近郊的格林尼治天文台旧址的经线作为计算经度的起点&#xff0c;即经度零度零分零秒&#xff0c;也称“本初子午线”。它东面的为东经&#xff0c;记为E&#xff0c;共180度&#xff0c;西…

电脑连接电视方法详解_笔记本连接电视方法有哪些?分享两种笔记本连接电视方法...

在如今这个快节奏的时代中,大多数年轻人的手中都会有个笔记本电脑,并且将笔记本电脑作为休闲娱乐或办公的一种设备。相比于电视屏幕尺寸,笔记本电脑的屏幕还真是小了很多。为了提高视觉上的体验,很多小伙伴会选择笔记本连接电视的方式,将笔记本中的内容转换到电视屏幕上。下面我…

美国团购网站Groupon的盈利模式

GroupOn 一种模式&#xff0c;一个奇迹。用户每天疯狂在网站上抢购推出的餐饮、SPA、运动、游戏这样的商品或服务机会。 很难相信&#xff0c;这个网站在2008年11月份上线&#xff0c;在7个月后就实现了盈亏平衡&#xff0c;利润更是高达了30%以上。据报道&#xff0c;2010年销…

完整的连接器设计手册_减速齿轮箱的设计 用一整套完整流程来说明(附PDF手册)...

减速箱减速齿轮箱设计手册获取见文章末尾图片在通用的产品设计中&#xff0c;齿轮减速箱的设计是最简单成熟的一种设计&#xff0c;因为设计流程十分清晰&#xff0c;这已经是一种很成熟的产品了&#xff0c;下面我就来说一说如何做减速齿轮箱的设计&#xff0c;以及设计的一般…

WAMP Server 无法启动的解决方法

今天安装WAMP Server用来发布PHPMySQL做的网站&#xff0c;安装之后发现Apache服务无法启动&#xff0c;尝试用如下的方法进行解决。 首先利用WAMP自带的 Apache->Service->Test Port 80 功能&#xff0c;检测80端口是否被其他软件占用。 检测结果显示&#xff1a; You…

在 WinCe 平台读写 ini 文件

在上篇文章开发 windows mobile 上的今日插件时&#xff0c;我发现 wince 平台上不支持例如 GetPrivateProfileString 等相关 API 函数。在网络上我并没有找到令我满意的相应代码&#xff0c;因此我手工自己写了相应的方法。命名规则是&#xff0c;在 PC API 函数的名称前面加上…

SQL Server 兼容模式

近期一个老系统改用SQL Server 2005数据库, 从原来的2000改为2005, 默认情况下启动出错&#xff1a; Incorrect syntax near Index. If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required. SQL 语句中的table hint 中缺少with 关键…

孩子学python用什么教材比较好-python大学里用哪本教材比较好?

看这本 英文好的话&#xff0c;不需要买书&#xff0c;看该书的英文电子版&#xff0c;免费的。 《How to Think Like a Computer Scientist- Learning with Python 3》 下载地址&#xff1a;https://github.com/pythonpeixun/article/blob/master/books/How%20to%20Think%20Li…

通过VisualSVN的POST-COMMIT钩子自动部署代码

这段时间我们一直规划LSGO Group的学习网络平台&#xff0c;需求部分已经规划完毕&#xff0c;说做就做&#xff0c;开始搭建环境&#xff0c;由于利用PHPMYSQL技术&#xff0c;在服务器端首先安装了WAMPServer&#xff0c;以便提供Apache服务与MYSQL服务&#xff01; 在代码的…

Linux内核的中断机制

5&#xff0e;1 I386的中断与异常 中断通常被分为“同步中断”和异步中断两大类。同步中断是指当指令执行时由CPU控制单元产生的中断&#xff0c;之所以称为“同步中断”是因为只有在一条指令中止执行后CPU才会发出这类中断信号。而异步中断则是指由其他硬件设备依照CPU时钟随…

电脑安装系统多少钱_电脑系统安装教学

双十一刚过&#xff0c;双十一购买硬件的朋友等快递到了&#xff0c;马上就要进入装机环节了&#xff0c;最近会出一系列装机之后的文章&#xff0c;比如今天的装系统教学&#xff0c;之后还会出CPU、内存超频教学。至于装机教学&#xff0c;文章很难解释清楚&#xff0c;如果怕…