Macintosh演化史(三)

machistory1

经常有读者提醒我,你还有好几个坑没填知道不?然后比着手指头说,第一个是你之前写过四篇「Vim」相关的文章,五呢?第二个是你在微信平台上写了「我和Mac」系列的前两篇,三呢?然后你债多不怕愁虱多不怕咬,居然又开了一个「Macintosh演化史」,你准备啥时把这些坑填平?

我通过测量坑的长宽深浅大小,发现确实是我挖的,真是此坑未平彼坑又陷,何日成坑爹?然后我就有两个疑问:

1、挖坑不填能算美德吗?总比不挖强吧……

2、有这么好记性的读者到底是好事还是坏事?

鉴于大家的热情,我决定把这几个系列接起来,Vim 系列也会搬过来,而且 Vim的一些内容也需要更新了,重新回回炉也是个乐儿。如果你们觉得哪个系列不好玩了,告诉我,我就会让城管对待小贩一样,让它们消失的像从来没有存在过!

Macintosh演化史(三)


1999年10月,Mac OS 9发布,这个版本是针对Mac OS 8的一个稳健的升级版本, 你们都知道这当然是一种文艺的说法,Mac OS 9相对于上一个版本并无突破性的改进,主要内容包括:改进了对AirPort无线网络的支持,改进了内存的实现和管理方式,允许AppleScript操作TCP/IP和网络设置,增加了简单的多用户功能,每个桌面用户可以拥有自己的数据和系统设置。

9系列的版本虽然延续到了2002年,但已是强弩之末,Mac OS X发布以后,技术架构发生了翻天覆地的变化,9系列最终只能做个承上启下者,已经不是Mac未来的方向。

写到这我不由得悲天悯人的想起公司和人的发展,一个公司从创立之出,三年后不死,必然会在战略、架构、人员、产品等层面不断进行调整和改变,可能某一个公司的支柱产品或中坚力量,突然就会不那么重要了,也有些默默无闻的产品和角色会突然崛起,这些都是正常的,无论你是崛起的甲方,还是没落的乙方,都没什么可抱怨和担忧的,世界在变,苹果不创新就会死去,人不进步就会退步,要么甘心没落,要么不断提升,就是这样!

无论多么不情愿,Mac OS终于到了退出历史舞台的那一天。2002年5月,史蒂夫·乔布斯在加利福尼的亚圣约瑟召开了全世界开发商会议,那一天他罕见的穿上了黑色西装,隐喻Mac OS 9的葬礼,事实上乔布斯已经迫不及待的想埋葬Mac OS系列了,因为 Mac OS X 已经横空出世!

Mac OS 9.2.2是Mac OS 9 的最终版本,至此,Mac OS 时代结束。

虽然我把System系列和Mac OS系列划分为了两个时代,但这两个系列的技术体系是一脉相承的,创新性的图形用户界面(GUI)、简陋的内存管理和协作式的多任务处理系统,以现代技术标准来看,这些技术和实现都是原始级别的,但在那个时代却是突破性的,尤其是在人机交互的使用体验上。

这两个时代还见证了苹果公司由盛及衰和重新崛起的商业奇迹,见证了苹果创始人乔布斯的放逐和回归,更重要的是,System和Mac OS系列为现代Mac操作系统提供了重要的技术基础和技术遗产,这不仅仅是设计和研发操作系统的丰富经验和组织架构,还包括一些具体的技术,例如包含了Finder的图形界面技术、支持分层的文件系统、虚拟内存、网络技术、脚本语言AppleScript等等,这些技术对后来的OS X产生了巨大的影响,直到今天!

技术的选择就像江湖上的优胜劣汰,你不停的向世界宣告,你依然优秀,你依然能打出各种眼花缭乱的地趟拳和大小洪拳,但是人们告诉你,我们知道你还很厉害,你还能打很多年,但是这儿已经不需要你了,因为这就是江湖!

Mac历史上最优秀的操作系统时代即将来临!

Macintosh演化史(二)

macos9

Mac OS 时代


注意,这个时代没有 X,有同学会问 X 是什么意思,X 就是数字家族中具备高贵血统的罗马数字10,这个 X 将出现在 Mac 的下一个时代中。

Mac OS时代持续时间很短,从1997年到2000年,技术体系还是沿用了System系列,在这个时代,发生了一件苹果公司历史上最重要的事件:创始人乔布斯回归。乔布斯年少轻狂的时候对记者说,你很少看到一个艺术家在三四十岁还会有令人惊叹的作品,然而他自己正是在40岁之后再次焕发出夺目的光彩,让世界为之震撼。

1996年苹果收购了乔布斯的 NeXT,并以此为基础,开始漫长的Macintosh 改造之路,这是属于下一个时代的事情。乔布斯对所有人说,颤抖吧,爷胡汉三马上要回来了!那边叫嚣乎东西,这边啥事也不耽误,招人砍人改造产品线,开启了改变世界之旅:Mac、音乐、电话、软件、平板、图书……

1997年1月,Mac OS 7.6发布,这是以Mac OS命名的第一个Mac版本,这个系统开始出现在第三方厂商的电脑上,这是在苹果发展史上绝无仅有的事情。当然随着后续乔布斯的回归,这种开放策略必将昙花一现,因为乔布斯要「控制一切才够完美」,即使在苹果之外放逐了十几年,对硬件与软件的全盘掌控依然是这位爷不可打破的原则。

1997年7月,Mac OS 8发布,之后不久,乔布斯正式回归苹果。该系统最初定为Mac OS 7.7,但是为了配合乔老爷终止操作系统与第三方电脑厂商合作的策略,改名为8。该系统增加了多线程的Finder支持和三维金属拉丝(Platinum)界面,同时提供了电脑的帮助系统。这个版本的操作系统在6个月的时间内卖出了300万份,这对当时财务状况低迷的苹果来说无疑是一支有力的强心剂!

有同学问神马是三维金属拉丝?看一下今天的配图就知道,界面是充满质感的银色和灰色,部分 UI 辅以突起的拉丝设计,在当时的 UI 领域显得无比高贵典雅,也开启了拟物设计的先河,大家看看当年 Win98那个UI 就会明白一个道理,人比人得死,货比货得扔,当然,我们只说 UI……

1998年,苹果第一台一体机iMac发布,预装系统是Mac OS 8。从Mac OS 8.5开始,操作系统只能运行在PowerPC的处理器上。PowerPC是Apple、IBM、Motorola组成的AIM联盟研发出来的微处理器,设计源自IBM的POWER(Performance Optimized With Enhanced RISC 的缩写)架构,史称PowerPC。

PowerPC当年也是CPU 界的一方霸主,摩托罗拉当时有几十种芯片产品是基于PowerPC架构研发的,后来成为没落贵族主要是因为自己不争气,摩托罗拉在芯片领域先败于 英特尔,十几年后在手机领域再败于苹果和三星,现在谷歌旗下喘息度日,可悲可叹。想了解这段历史的,可以去读读吴军老师的《浪潮之巅》。当然在十几年后的移动互联网时代英特尔被 ARM搞的焦头烂额,已是后话了。

PowerPC的历史将持续到下一个 Mac 时代。


在知乎日报上看到一个问答,很有意思,分享给大家。

问:在网上看到关于中国的各方面状况都很差感到很可怕,该怎么去适应?
答:如果你只看集锦,会感觉每个球员像是球星哦~

问:日常生活中哪些坏习惯最致命?
答:一边憎恶虚荣,一边找各种机会虚荣,在应该为了虚荣而努力的时候,丫拖延症犯了。

知乎日报是个好应用,有了这货我都快不用知乎了,感觉很对不起知乎,另外一个原因当然是 MacTalk,所有的话都写给你们听了,那还有时间去知乎回答问题呢?

文章内容来自微信公众账号:MacTalk
· 微信号:sagacity-mac
· 回复 m 可以查阅所有历史文章和Mac Tips
· Web站点:macshuo.com

如果希望持续听MacTalk,点击{赞助}对作者进行小额赞助

Macintosh演化史(一)

Macintosh1

那篇谈程序员写作的文章收获一筐好评,但我自觉并非上乘之作。有位读者语重心长的告诉我:「二师兄,如果你赶脚这篇《程序员与写作》还未达到上乘水准,那么恭喜你,你的潜力大大地,可劲挖」,是用钉耙挖么? 最近闲谈随笔较多,今天写点干货,谈谈 Mac 的演化史。

从第一台Macintosh电脑诞生到现在,已经有近30年的历史,30年是个什么概念呢?把时光的指针回拨30年,估计MacTalk 的一大半读者要么在玩尿泥,要么还在未知世界的某个角落游荡,等待一个机会。30年沧海桑田白云苍狗,世界发生了翻天覆地的变化。今天看到一张十几年没见的初中同学照片,如果不让用惨不忍睹来形容,我只好用目不识丁来搪塞。 Mac 同样如此,如果对比一下1984年的Mac和2013年的Mac,我们很难想象这是同一系列的产品,看看今天的配图,你能想象这就是美轮美奂的 Mac 么?几十年时光飞逝,有人成长,有人变老,计算机的软件技术和硬件技术在发生了质和量的变化,Macintosh的演化史,基本上是 PC 之外另一条时间线上的个人电脑发展史,让我们来领略一下 Mac 的技术之殇和变化之美。

柏杨成书《中国人史纲》,把中华人的活动历史分为神话时代、传说时代、半信史时代、信史时代……以此来描述那段上古的历史时期。今天我东施效颦,按照自己的理解,把Mac的演化史分为三个时代,它们分别是:

  1. System 时代: 1984——1997
  2. Mac OS 时代: 1997——2002
  3. OS X 时代: 2000——现在

今天我们先说说 System 时代。

System 时代


这个时代所有Mac上跑的OS都是以System开头的。

1984年的第一个版本叫做System1.0,当时的Macintosh叫做Macintosh 128k,一体机,搭配9英寸黑白显示器,使用Motorola 68000处理器,存储空间128kb,搭载3寸盘、单键鼠标和键盘,当时的System1.0是最早的面向个人用户的、具备图形用户界面(GUI)的操作系统之一,所以非常容易和其他命令行的操作系统区分出来,System1.0包含Finder、桌面、窗口、图标、光标、菜单等等,采用的文件系统是平面文件系统MFS(Macintosh File System),对文件夹的支持很不完善。Finder提供了虚拟文件夹用来组织文件,但是从其他程序进来是不可见的,而且并不真正存在于系统中。

System1.0的主要开发语言是Pascal和汇编,是一个单任务操作系统,系统的界面就是今天配图的样子。

System1.0虽然距离完美差着十万八千里,但是这货开创了一个历史,那就是 GUI 和Command Line 的结合,这一特点到现在依然是 Mac 最大的优势之一。

1985年System 2 发布,Finder进行了更新,增加了多文件夹处理、Shut Down命令,同时安装了一个叫做“MiniFinder”的程序,用来快速启动任何选中的程序。截屏快捷键command+shift+3诞生。同年 2.1发布,开始支持硬盘。

1986年System 3.0发布,System第三代的发布对Mac和其他电脑的操作系统都有重大影响,因为在这个版本中,Mac开始正式采用HFS(Hierarchical File System)文件系统,可以把文件存储在分层文件夹中,而之前一直采用的是平面文件系统。另外System 3.0还支持一些其他新技术,包括SCSI和AppleShare等。

苹果其实一直在尝试各种文件操作系统,不断的尝试、放弃,再寻找更好的解决方案。虽然 IBM 的大型机一直采用扁平文件系统,但是你能想象个人电脑上没有文件夹的概念吗?3.0的HFS 虽然解决了一部分问题,但是性能和 IO 依然是用户之痛。

随后发布的3系列和4系列并无重大更新。

1987年System 5 发布,这个版本带来的特点是增加了MultiFinder的扩展功能,允许系统“同时”运行几个程序。系统采用了协作多任务模型,任务切换的时机完全取决于正在运行的任务,只有正在运行的任务放弃对处理器的控制的时候,下一个任务才能执行。当然用户也可以选择不使用MultiFinder,仍然沿用单任务操作。

这就是我之前讲解并发时候的类分时协作模式,想回顾一下的,请点击「并发」。

1988年以后发布的System 6系列采用了 68030 的处理器,但在软件层面并无突破性的特性,乏善可陈。

1991年具有里程碑意义的System 7发布了,这是一个重要的更新,包括UI的变革、新应用程序的增加、稳定性的提升和许多新特性。System 7开始支持虚拟内存和网络,并内建了协作多任务机制,而之前的Sytem 5和6都是通过独立的应用MultiFinder实现的。System 7还支持文件拖放操作,脚本语言AppleScript也在这个版本出现了。另外,System 7还是苹果公司第一个彩色的操作系统。

System7.5之后,这个时代结束了,因为从System 7.6开始,苹果把操作系统的名称改为Mac OS,Mac OS时代拉开了序幕。

彩色人生

多彩世界

周五和周六一般是 MacTalk 的法定休息日,不过由于昨天的语音播报效果实在太好了,所以今天就多说两句。

那段语音当然是录了几次的,想精准到 60s 不可能一次成功,Mac 君下班后在会议室录了几次才成功,很多人说语音比较拘谨,我觉得也是,卖萌的说法不能接受,其他赞誉都收了。按道理哥也是见过大场面的人,面对几百听众讲几个小时大义凛然毫无惧色,最后挥挥手飘然而去不留下一个bug。昨天对个破麦克居然哆里哆嗦真是太不像话了,最可气的是有朋友说这声音不像你,哎,有损 MacTalk 的威名,我去面壁了。

我认识的IT圈里的朋友,大喷壶 Tinyfool (飞翔的胖子郝培强)算是能说的,狭路相逢的时候,我也能抢个三分之一的话头,但是那家伙居然能在 podcast 里自言自语说两个多少时,我觉得这种人神共愤的事我干不出来的,我必须得对着人说,所以有朋友说让我去做个 podcast,我觉得目前还没做好心理准备。不过将来可以尝试一下,磨练人生意志嘛,《Rework》里不是说了,要去挠自己的痒处!

昨晚至今大概收到了近1000条有实际内容的消息,音频回复也蛮多的,以至于我昨天回复你们时,微信后台认为有程序在频繁攻击后台服务,很多时候让我输入验证码,也算是挺奇葩的事。昨天见识了很多从未发言的朋友,听到了很多声音,让我再次认识到这是一个丰富多彩的异构世界,每个人都是世界的中心,每个人都有一个属于自己的圆环,各种圆环叠加在一起,就形成驱动世界前行的源动力!

每个人都在有意无意的改变世界,要么变好,要么变坏,世界不会因为你的停滞而放缓脚步,你只能带着梦想,不停奔跑,偶尔停下来擦汗的时候,听听 MacTalk 就好!

我希望我退休的那天,所有的工作成果都换成了银元,我坐在黄昏的边缘看夕阳西下,然后录录Podcast,写写代码和 MacTalk,就是这样……

如何学习一门编程语言

programming-languages

关于学习编程这个主题,有各种读者多次要求写一写,而且要求文艺的写、抒情的写、充满小布尔乔亚风格的写,要做到:问题看起来巨复杂,读起来巨简单,学起来巨容易……就很不容易。

如果你准备未来投身到 IT 行业从事编码这份有前途的职业,学习一门语言显然是远远不够滴,就像你初入江湖,人家问你会几门功夫啊,你说

「兄弟只会太祖长拳」
问,「是乔峰打的太祖长拳么?」
你说,「不及万一」

人家一看你就是个江湖小球……写到这我想起了一个叫做兄弟,算是编程领域的泥石流,在程序语言方面一生只爱 Lisp(Lisp号称编程语言的祖宗),在人类语言方面则除了中英文,还在同时学习意、法、西、德四门语言,而且不是随便学学,分门别类有模有样,神志没有错乱,这一点让我十分佩服。相较自身,一门英语已经从初中折磨我到现在了。在人类语言层面,我常常是被秒杀的。

所以,如果编程有可能成为你的职业,那么 5 – 10 年的学习和实践时间是需要的,因为你可能要学习编程语言、操作系统、算法、数据库、Web 开发、移动开发等等,还有各种数不清的引擎和架构,特别令人发指的是当你熟练的掌握了一门技术之后,就会有位大仙儿走过来告诉你,孩儿啊,你学的技术已经落伍了,然后在你绝望的眼神里,飘然离去。

如果你的职业发展与编程无关,只是想学习一门语言磨练人生意志,那么这事就比较容易了,比如 Python、Java、Go、JavaScript 等,根据自己常用的操作系统选一个就好,如果你用 Mac,这些语言可以任选,而且环境都是现成的。这些语言除了能够帮助你锻炼意志和提高逻辑思维能力的同时,还可以在某些关键时刻帮助你处理各种繁琐复杂的工作,比如大量文本、定时任务、自动化任务、编写常用小工具等等……写到这儿如果还没有打消你学习编程的热情,那就可以继续往下读,下面才是正文:

要有光


无论学习什么,一定要有明确的目的和目标,如果是抱着玩票的心态,最多能够「知道」而不是「学以致用」,所以搞清楚自己为什么要学习编程,准备学习哪门语言,要达到什么程度,想用多长时间等等,这些问题在你的头脑里有个大概的思路和计划,就基本解决了 Why 和 What 的问题,下面我们来找 How。

其实学什么都有用的,大部分时间你只是不知道会在什么时候什么地方用。

经典教程


选定了语言不要着急去网上搜索各种秘籍、评价和下载各类盗版电子书,每个技术领域都会有一些经典的圣经级别的图书,找到它们,购买一本纸质书或电子书,最好是带练习题的,可以边学边做。

如何找到这些图书,豆瓣读书网应该是个不错的选择,虽然豆瓣的电影评价过于小清新口味,但图书评价还是值得信赖的,另外找乐于分享的老人推荐一下也是个不错的选择。

掌握基础,持续练习


每一门编程语言的学习内容都会涉及:基础运行环境、数据类型(数字、字符串、数组、集合、字典等)、表达式、函数、流程控制、类、方法等等,不同的语言还有一些不同的特性,这些内容并不复杂,尽快通过大量的练习击倒它们,然后再去深入了解面向对象、并发、异常、文件与目录、网络、标准库等内容,并辅以持续的练习,这些内容才能够让你真正进入编程领域并做出实际的软件。

初学者每天花1-2个小时是需要的,尽量保证阅读和练习的持续性和时间长度。其实1-2个小时根本不算什么,想想你们花费在刷微博和抖音上的时间吧,如果还说没时间,那就是不抽不舒服斯基了。

记住那句话:一边憎恶虚荣,一边找各种机会虚荣,在应该为了虚荣而努力的时候,丫拖延症犯了。

外事不决问 Google


现代人的生活和学习是如此的方便,因为我们有 Google!俗话说内事不决问百度,外事不决问 Google,技术绝对属于外事,你要是去问度娘技术问题,被人家的回旋踢踢飞可别怪我没告诉过你。

以前学习技术只能通过技术图书和口口相传,现在遇到问题从Google 那里就可以找到答案,所以用好 Google 你就能如猛虎加之羽翼而翱翔四海。如果你还在认为 Google 就是个搜索框,那就想简单了,可以看这一篇:https://t.zsxq.com/02BIYvFUf

让你的搜索与众不同。

用好工具


俗话说的好,欲练神功挥剑自宫,sorry 不是这句,工欲善其事必先利其器,想要学习编程一定要写代码,所以一定要找到趁手的武器。我个人把工具分为三种,第一种是部分程序语言自带的 shell,第二种是文本编辑器,第三种是集成开发环境(IDE)。

1、Shell,如果你在学习 Python,那么python shell,bpython 和 ipython 都是不错的选择;如果你在学习 Ruby,那么irb就是 ruby 的 shell;如果你在学习 Shell,打开终端(Terminal)就是 shell;如果你在学习 Java 或Objective-C,对不起,这些语言没有 shell。

Shell 能够单步执行你的编程语句并给出即时反馈,这种交互式编程方式非常适合初学者,所见即所得,所以凡是提供 shell 工具的语言,推荐大家优先使用shell学习。

2、文本编辑器,这个领域向来是溢美之词和吐槽之声交相辉映,从古至今绵延不绝,说起来都是眼泪,比如两大神器 Emacs 和 Vim 使用者,大家沿着不同的道路和目标前进,但总是会在某个点交叉相遇,见面就扔石头和臭鸡蛋,砸得对方鼻青脸肿,然后擦擦眼泪和口水继续前行。还有 IDEer 说 Vimer 装逼,Emacser 说 IDEer 垃圾 balabala……种种血淋淋的事实足以拍一部惊悚科幻动作言情片。

我自己比较喜欢文本编辑器,但是也不排斥 IDE,这种人俗称两边不待见,但我还是那句话,不为自己设限,不同的环境应该选择最好的工具。下面给大家推荐几款文本编辑器:

(1)VIM:号称编辑器之神,全键盘操作,充满速度感,良好的插件体系,几乎满足一切程序语言的编写需求。
(2)Emacs:神的编辑器,捆绑了文本编辑器的操作系统。没了,大家感受一下……
(3)TextMate:Mac 专有编辑器,号称 Ruby 程序员最爱,当年1.0版一份39欧元,总共卖了十几万份拷贝,现在2.0免费开源,原来的开发者已经消失无踪,据说挣足银子去太平洋的小岛晒太阳去袅。
(4)Sublime Text:文本编辑器的后起之秀,发展迅猛,媲美 TextMate,跨平台,比 Vim 和 Emacs 容易上手,号称性感编辑器。

以上四款自成体系,都有完善的插件生态环境,诸君可任意选择。

3、集成开发环境(IDE)

IDE 是图形化的集成开发工具,具备精准的词法分析、编程提示、调试等功能,功能之繁复用户自知,如果做工业级编程和团队协作的话,还是推荐使用 IDE。

在这里推荐几个系列:
(1)VSCode,通过插件方式几乎支持所有的常用编程语言,免费。
(2)JetBrains 系列,产品线丰富,几乎都是精品,Java、Python、Ruby、Php、Objective-C、Web 等一应俱全,收费。
(3)Xcode,Mac 上优秀的集成开发工具,所有的 Mac App 和 iOS App 都出自此货之手,免费。

微软的技术不懂,就不推荐了,嘿嘿……

找到你的 Master


小时候看西游记发现,师傅原来是用来人肉的;后来看天龙八部发现,牛人都不需要师傅,即使有也是要被别人一掌震飞的;再后来看射雕英雄传发现,愚钝的人首先得有师傅,其次得有很多师傅,再次每增加一个师傅功力都以指数级别增长,2、4、8、16……

所以,如果有人告诉你三人行,一个老师都没有,你至少要质疑这一观点,同时考虑自己会不会筋斗云,是否天赋异禀以一当百等等。如果不成,那还是去找师傅好了。

有老师的好处有这么几个:
(1)老师能够看到你自己看不到的地方,人这一辈子,很少人能给自己一个清晰的评价和认知,要么高估自己,要么低估自己,而旁观者,尤其是老师,往往能够看到你的弱点、长处、威胁、变化,并给你适时的提醒和指导,少走弯路。
(2)所有领域的知识都是成体系的,如果有这个领域的行家里手在你早期的学习阶段进行指导甚至设计练习技巧,与自己琢磨的效果是不可同日而语的。估计每个人都会有这样的经历,一个问题自己,想到心碎想到梦醒也没有结果,别人过来抽丝剥茧条理清晰的一讲,不仅你懂了,连你的小伙伴都懂了。这就是听君一席话胜读十年书的道理。
(3)好处多多,余不一一。

但是走出校门之后再想找传统意义的师傅就很难了,像绝地武士那样和 Master 出双入对同生共死更无可能,这时你就需要把身边的朋友、同事当做老师和资源,不耻下问,而且要问的有智慧,让人有回答欲望,那么如何提问呢,请参考我之前写的一篇「如何提问」。

参与社区和技术会议


自己学习和同事交流之余,可以参与一些网络社区的交流,推荐:

技术问答社区:http://stackoverflow.com ,在技术领域几乎包括万象,无所不知。 GitHub:https://github.com ,几乎全世界优秀的开源软件作品都在上面。

另外还可以参与一些群组,订阅一些优秀的个人博客,这个时代依然有人愿意贡献优质内容。

选择性参与一些技术会议,比如 QCon,不指望在会场能学到什么,但可以了解技术趋势,并看看别人在做什么。

刻意练习


之前写过两篇「刻意练习」的文章,自感对学习编程有一定帮助,大家可以去读一下。

逃离舒适区


这一部分适合已经有一定编程基础的童靴

什么是舒适区?如果你是个新手,你就没什么舒适区,什么都不懂嘛舒适个毛,在磕磕绊绊的学习中懵懂前行,期间可能还伴随着老鸟的嘲笑和进度的压力,终于有一天你武功精进,乾坤大挪移练到了第五重,工作中开始得心应手游刃有余,不断有新人或老人来找你解决问题,你微笑着迎接挑战,淡淡的送走难题,你挥一挥手,不带走一片云彩,这是什么境界?这就是你的舒适区,这和靠在沙发上看电视的舒适不是一回事,通常进入舒适区需要花费你很多的时间和精力,需要你不断的练习,一旦进入,你会enjoy it!

这时候,如果有人胆敢让你脱离舒适区,可算要了亲命了,你会勃然大怒,轻则争吵,重则离职。这种事遇到太多了,一个写前端的你让他学习一些后端技术,一个写Java的你让他学习一下C,得到的答复可能会,Sorry, I feel very uncomfortable!

没有人学新东西的时候非常舒服,一旦经历过从新人到老鸟的过程,再让你进入陌生的领域,那种痛苦会让你自发的去抗拒。但是一个人不可能永远躲在舒适区里,逃离舒适区会有助于你从不同的角度看问题,视野会更加开阔。人总要往前走的。

很多人在某个地方待久了就会非常懈怠,没退休就像在养老,这时候你就知道,他们在舒适区太久了,与在哪个地方无关。

最后一招「见龙在田」


实战总是很重要,为大家推荐一下我做的产品,极客时间:

极客时间

假以时日,各位必定武功大成,那时横刀立马、拔剑四顾,说英雄谁是英雄。

终极 Shell

zsh

在开始今天的 MacTalk 之前,先问两个问题吧:

1、相对于其他系统,Mac 的主要优势是什么?
2、你们平时用哪种 Shell?
……

第一个童靴可以坐下了,Mac 的最大优势是 GUI 和命令行的完美结合,不要把所有注意力放在 Mac 性感的腰身和明媚的显示屏上好吧,这不是妹纸!第二个童靴你可以出去面壁了,讲了这么多期 MacTalk 你告诉我还在用 Windows 的 cmd, 你让 Mac 君情何以堪?哪怕你就说在用 Linux 的 Bash 我也就原谅你了,踢飞!

上次在「如何学习一门编程语言」里提到了 Shell,也有读者问到 Shell 的问题,所以这次给大家说说 Shell 的事。

我在「趣谈个人建站」里介绍过一点 Shell,自己的东西借用下不丢人,把扯淡的拿掉,干货留下,就是如下内容:

Shell是Linux/Unix的一个外壳,你理解成衣服也行。它负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,内核是真正干活的,干完之后再把结果返回用户或应用程序。

Linux/Unix提供了很多种Shell,为毛要这么多Shell?难道用来炒着吃么?那我问你,你同类型的衣服怎么有那么多件?花色,质地还不一样。写程序比买衣服复杂多了,而且程序员往往负责把复杂的事情搞简单,简单的事情搞复杂。牛程序员看到不爽的Shell,就会自己重新写一套,慢慢形成了一些标准,常用的Shell有这么几种,sh、bash、csh等,想知道你的系统有几种shell,可以通过以下命令查看:

cat /etc/shells

显示如下:

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

在 Linux 里执行这个命令和 Mac 略有不同,你会发现 Mac 多了一个 zsh,也就是说 OS X 系统预装了个 zsh,这是个神马 Shell 呢?

目前常用的 Linux 系统和 OS X 系统的默认 Shell 都是 bash,但是真正强大的 Shell 是深藏不露的 zsh, 这货绝对是马车中的跑车,跑车中的飞行车,史称『终极 Shell』,但是由于配置过于复杂,所以初期无人问津,很多人跑过来看看 zsh 的配置指南,什么都不说转身就走了。直到有一天,国外有个穷极无聊的程序员开发出了一个能够让你快速上手的zsh项目,叫做「oh my zsh」,Github 网址是:https://github.com/robbyrussell/oh-my-zsh。这玩意就像「X天叫你学会 C++」系列,可以让你神功速成,而且是真的。

好,下面我们看看如何安装、配置和使用 zsh。

安装zsh


如果你用 Mac,就可以直接看下一节
如果你用 Redhat Linux,执行:sudo yum install zsh
如果你用 Ubuntu Linux,执行:sudo apt-get install zsh
如果你用 Windows……去洗洗睡吧。

安装完成后设置当前用户使用 zsh:chsh -s /bin/zsh,根据提示输入当前用户的密码就可以了。

安装oh my zsh


首先安装 git,安装方式同上,把 zsh 换成 git 即可。

安装「oh my zsh」可以自动安装也可以手动安装。

自动安装:

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

手动安装:

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

都不复杂,安装完成之后退出当前会话重新打开一个终端窗口,你就可以见到这个彩色的提示了:

zsh1

配置


zsh 的配置主要集中在用户当前目录的.zshrc里,用 vim 或你喜欢的其他编辑器打开.zshrc,在最下面会发现这么一行字:

# Customize to your needs…

可以在此处定义自己的环境变量和别名,当然,oh my zsh 在安装时已经自动读取当前的环境变量并进行了设置,你可以继续追加其他环境变量。

接下来进行别名的设置,我自己的部分配置如下:

alias cls='clear'
alias ll='ls -l'
alias la='ls -a'
alias vi='vim'
alias javac="javac -J-Dfile.encoding=utf8"
alias grep="grep --color=auto"
alias -s html=mate   # 在命令行直接输入后缀为 html 的文件名,会在 TextMate 中打开
alias -s rb=mate     # 在命令行直接输入 ruby 文件,会在 TextMate 中打开
alias -s py=vi       # 在命令行直接输入 python 文件,会用 vim 中打开,以下类似
alias -s js=vi
alias -s c=vi
alias -s java=vi
alias -s txt=vi
alias -s gz='tar -xzvf'
alias -s tgz='tar -xzvf'
alias -s zip='unzip'
alias -s bz2='tar -xjvf'

zsh 的牛粪之处在于不仅可以设置通用别名,还能针对文件类型设置对应的打开程序,比如:

alias -s html=mate,意思就是你在命令行输入 hello.html,zsh会为你自动打开 TextMat 并读取 hello.html; alias -s gz='tar -xzvf',表示自动解压后缀为 gz 的压缩包。

总之,只有想不到,木有做不到,吓尿了吧。

设置完环境变量和别名之后,基本上就可以用了,如果你是个主题控,还可以玩玩 zsh 的主题。在 .zshrc 里找到ZSH_THEME,就可以设置主题了,默认主题是:

ZSH_THEME=”robbyrussell”

oh my zsh 提供了数十种主题,相关文件在~/.oh-my-zsh/themes目录下,你可以随意选择,也可以编辑主题满足自己的变态需求,我采用了默认主题robbyrussell,不过做了一点小小的改动:

PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}>'
#PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'

对照原来的版本,我把 c 改为 d,c 表示当前目录,d 表示绝对路径,另外在末尾增加了一个「 > 」,改完之后的效果是这样的:

zsh2

大家可以尝试进行改造,也算个趣事。

最后我们来说说插件。

插件


oh my zsh 项目提供了完善的插件体系,相关的文件在~/.oh-my-zsh/plugins目录下,默认提供了100多种,大家可以根据自己的实际学习和工作环境采用,想了解每个插件的功能,只要打开相关目录下的 zsh 文件看一下就知道了。插件也是在.zshrc里配置,找到plugins关键字,你就可以加载自己的插件了,系统默认加载 git ,你可以在后面追加内容,如下:

plugins=(git textmate ruby autojump osx mvn gradle)

下面简单介绍几个:

1、git:当你处于一个 git 受控的目录下时,Shell 会明确显示 「git」和 branch,如上图所示,另外对 git 很多命令进行了简化,例如 gco=’git checkout’、gd=’git diff’、gst=’git status’、g=’git’等等,熟练使用可以大大减少 git 的命令长度,命令内容可以参考~/.oh-my-zsh/plugins/git/git.plugin.zsh

2、textmate:mr可以创建 ruby 的框架项目,tm finename 可以用 textmate 打开指定文件。

3、osx:tab 增强,quick-look filename 可以直接预览文件,man-preview grep 可以生成 grep手册 的pdf 版本等。

4、autojump:zsh 和 autojump 的组合形成了 zsh 下最强悍的插件,今天我们主要说说这货。

首先安装autojump,如果你用 Mac,可以使用 brew 安装:

brew install autojump

如果是 Linux,去下载 autojump 的最新版本,比如:

git clone git://github.com/joelthelion/autojump.git

解压缩后进入目录,执行

./install.py

最后把以下代码加入.zshrc:

[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

至此,安装、配置、插件三位一体,终极 Shell 全面登场。退出终端会话重新登录,开始感受 zsh 的训疾如风!

使用 zsh


1、兼容 bash,原来使用 bash 的兄弟切换过来毫无压力,该咋用咋用。

2、强大的历史纪录功能,输入 grep 然后用上下箭头可以翻阅你执行的所有 grep 命令。

3、智能拼写纠正,输入gtep mactalk * -R,系统会提示:zsh: correct ‘gtep’ to ‘grep’ [nyae]? 比妹纸贴心吧,她们向来都是让你猜的……

4、各种补全:路径补全、命令补全,命令参数补全,插件内容补全等等。触发补全只需要按一下或两下 tab 键,补全项可以使用 ctrl+n/p/f/b上下左右切换。比如你想杀掉 java 的进程,只需要输入 kill java + tab键,如果只有一个 java 进程,zsh 会自动替换为进程的 pid,如果有多个则会出现选择项供你选择。ssh + 空格 + 两个tab键,zsh会列出所有访问过的主机和用户名进行补全

5、智能跳转,安装了autojump之后,zsh 会自动记录你访问过的目录,通过 j + 目录名 可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过hadoop-1.0.0目录,输入j hado 即可正确跳转。j –stat 可以看你的历史路径库。

6、目录浏览和跳转:输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。

7、在当前目录下输入 .. 或 … ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd 命令了。

8、通配符搜索:ls -l **/*.sh,可以递归显示当前目录下的 shell 文件,文件少时可以代替 find,文件太多就歇菜了。

9、更强的别名:请参考配置一节。

10、插件支持:请参考插件一节。

……

看完这篇文章,你就知道,zsh一出,无人再与争锋!终极二字不是盖的。

如果你是个正在使用 shell程序员,如果你依然准备使用 bash,那就去面壁和忏悔吧,别说你订阅过 MacTalk!

感谢那位开发了 oh my zsh 的无聊程序员,他可能没有因此收获物质上的利益,但是他的代码提升了无数程序员的效率,节省了大量的时间,我们说,程序员改变世界!

MacTalk 写的多了,朋友和家人都不太理解,这玩意赚不了钱争不了名,写来何用?我想,能够学习、编码、写作,并做出一点帮助别人的东西,总好过炒股炒房的价值吧,尽管人家比咱「富」多了……