1.说人话——啥是晶体交叉编译
2.ç¼ç¨å硬件ä»ä¹å
³ç³»ï¼
3.什么是系统
4.一个好的程序员至少应该具备哪些条件?
说人话——啥是交叉编译
本文将深入探讨计算机世界的语言转换,特别是管源交叉编译的概念。首先,码晶我们从计算机如何理解指令开始:
想象一下,体管当我们输入"hello world"(用Python编写的源码简单问候语),按下回车,晶体阿里tomcat源码计算机看似能理解并输出,管源但实际上它并不直接理解人类语言,码晶而是体管翻译成一种它能解读的“语言”——序列。这种序列是源码人类对电子元器件(如晶体管)物理状态的抽象,这些元器件通过电压和电流变化来执行指令。晶体
以mosfet为例,管源计算机处理的码晶是连续变化的电压,这在硬件层面处理起来并不直观。体管因此,源码我们定义了高电平和低电平这两种状态,它们之间的切换是基于物理规则的。编译器的工作就是将人类编写的源代码转化为这些电子状态,以便计算机能执行。
不同CPU架构,如位或位,就像不同的国家工人,他们的指令集和电平表示方式可能各有不同。这就导致即使输入相同的代码序列,由于架构差异,输出结果在屏幕上显示的可能不同。这就是为什么可执行文件在不同平台间不通用的原因。
接下来,编译过程涉及到的“体力活”是跨平台的——我们想在一台CPU(如x)上编译出可以在另一台CPU(如arm)上运行的代码,这就需要进行“交叉编译”。它就像一个美国人用中文考试,虽然他自己和他人可能都无法理解,但通过翻译工具,中国人可以理解答案。
以x Linux编译器编译arm Linux为例,这个过程像是在x平台上按照arm平台的规则对代码进行转换。然而,生成的可执行文件却无法在x上运行,就像美国人用中文考试后,其他人看不懂但中国人能理解。
ç¼ç¨å硬件ä»ä¹å ³ç³»ï¼
ç¼ç¨æ¯ä¸ªç»ç§°ã
æ»çæ¥è¯´ï¼ç¼ç¨çå®ä¹å°±æ¯éè¿ä¸é¨çè¯æ³ç»æç»ææ令å»å®æä¸ä¸ªç®æ ã
æåºå±çæºå¨ä»£ç å°±æ¯ç±0å1ç»æçäºè¿å¶ä»£ç ãç®åçå»ç解ï¼è¿ç§äºè¿å¶æ¹å¼çå®ç°å ¶å®æ¯å©ç¨äºç¡ çå导ä½ç¹æ§ï¼ä½¿å¾ä¸ä¸ªå导ä½æ¶ä½ç®¡è½è¾åºä»£è¡¨0ççµåå代表1ççµåã许许å¤å¤çæ¶ä½ç®¡æç §è®¾è®¡å¥½ççµè·¯è¿æ¥èµ·æ¥ï¼å°±è½æ为åç§è¯çäºï¼æ¯å¦cpuè¯çå°±æ¯å·¥èºæå¤æçä¸ç§ç¡ å导ä½éæçµè·¯ãç®åï¼è¿æ²¡ææ´å¥½çè½æ¿ä»£ç¡ æ¥å®ç°2è¿å¶éæçµè·¯çææï¼æ以ç°å¨çè¯çé½æ¯ç¡ è¯çã
0å1ç»æçäºè¿å¶ä»£ç 没æä»»ä½å¯è¯»æ§ï¼æ¯é¾ä»¥è¢«äººä¸ºç¼ç¨çï¼æ以å¨ç¡¬ä»¶çé¢ä¹ä¸ï¼åæ¶æäºä¸å±ç¼è¯æºå¶ï¼å°±æ¯æ±ç¼è¯è¨ï¼å ¶ä¸è§å®äºåºæ¬è¯æ³æ ¼å¼ï¼è®©ç¼ç¨äººåå¯ä»¥éè¿æ令访é®è¯ççµè·¯ä¸åç§è¿ç®åè½ãæ±ç¼è¯è¨å°±æ¯ç´æ¥å¯¹è¯çè¿è¡ç¼ç¨ï¼æ¯å¦æºå¨äººå·¥ç¨å°±å±äºè¿ç±»ãè¿æ¯æåºå±çç¼ç¨ï¼ä¿ç§°ä½çº§ç¼ç¨ã
ä½æ¯æ±ç¼è¯è¨ä¹æ¯è¾ç涩ï¼é½æ¯åºäºç¡¬ä»¶çåºæ¬æä½ï¼è¦å®æç¨å¾®å¤§ä¸ç¹çä»»å¡å°±è¦åé常ç¹æçç¼è¯å·¥ä½ãäºæ¯äººä»¬åå¼ååºåé«ä¸çº§å«çç¼è¯æ¶æï¼äºæ¯æäºCè¯è¨è¿æ ·çåºæ¬çç¼ç¨è¯è¨ãè¿ä¸å±çº§å«çè¯è¨å°±é常好æäºï¼ç¼ç¨äººåå¯ä»¥æå¼ç¹æç硬件ç»æï¼ä¸å¿å»è®¾è®¡é对åºç¨å±é¢çç»æäºã
ç°å¨æ´å¤é«çº§çè¯è¨è¯¸å¦C++, C#ï¼JAVA çé½å·²ç»å¹¿æ³åºç¨ãå¯ä»¥è¯´ç°å¨ç软件ç¼ç¨è·ç¡¬ä»¶çå ³èå·²ç»è¶æ¥è¶è¿ï¼ä½æ¬è´¨ä¸åæ¯å¯ä¸å¯åçãå°±åç°å¨ç人å¼è½¦ï¼åªç®¡æ¡æ¹åç踩油å¹è½¦ï¼ä¸è¬é½ä¸ä¼å»äºè§£åå¨æºçåºæ¬åçäºï¼ä¹æ²¡å¿ è¦å»äºè§£ã
什么是系统
系统是什么
尽管系统一词频繁出现在社会生活和学术领域中,但不同的人在不同的场合往往赋予它不同的含义。长期以来,系统概念的定义和其特征的描述尚无统一规范的定论。一般我们采用如下的定义:系统是由一些相互联系、相互制约的若干组成部分结合而成的、具有特定功能的一个有机整体(集合)。
我们可以从三个方面理解系统的概念:
(1)系统是由若干要素(部分)组成的。这些要素可能是一些个体、元件、零件,也可能其本身就是一个系统(或称之为子系统)。如运算器、控制器、存储器、输入/输出设备组成了计算机的硬件系统,而硬件系统又是计算机系统的一个子系统。
(2)系统有一定的结构。一个系统是其构成要素的集合,这些要素相互联系、相互制约。系统内部各要素之间相对稳定的****、组织秩序及失控关系的内在表现形式,就是系统的结构。例如钟表是由齿轮、发条、指针等零部件按一定的方式装配而成的,但一堆齿轮、发条、指针随意放在一起却不能构成钟表;人体由各个器官组成,单个各器官简单拼凑在一起不能成其为一个有行为能力的人。
(3)系统有一定的功能,或者说系统要有一定的目的性。 系统的功能是指系统与外部环境相互联系和相互作用中表现出来的性质、能力、和功能。例如信息系统的功能是进行信息的收集、传递、储存、加工、维护和使用,辅助决策者进行决策,帮助企业实现目标。
与此同时,我们还要从以下几个方面对系统进行理解:系统由部件组成,部件处于运动之中;部件间存在着联系;系统各主量和的贡献大于各主量贡献的和,即常说的1+1〉2;系统的状态是可以转换、可以控制的。
系统在实际应用中总是以特定系统出现的,如消化系统、生物系统、教育系统等,其前面的程序员表白程序源码修饰词描述了研究对象的物质特点,即“物性”, 而“系统”一词则表征所述对象的整体性。
对某一具体对象的研究,既离不开对其物性的描述,也离不开对其系统性的描述。系统科学研究将所有实体作为整体对象的特征,如整体与部分、结构与功能、稳定与演化等等。
[编辑本段]计算机系统
以下是有关现在关于操作系统的文章。
我们常说的系统通常是指操作系统。
一、计算机软件与操作系统
功能强大的计算机自从走进了人类的生活就发挥着越来越重要的作用,随着时代的发展,计算机已与人们的日常生活息息相关。不能不说计算机软件日新月异的发展在此起着关键作用。可以这么说,离开了软件,计算机就成了废铜烂铁。
计算机机软件大致可以分为两类:系统软件和应用软件。
系统软件用于管理计算机资源,并为应用软件提供一个统一的平台。
应用软件则在系统软件的基础上实现用户所需要的功能。
而操作系统(Operating System,简称os)则是最基本的系统软件,它控制计算机的所有资源并提供应用程序开发的基础。
二、操作系统诞生的原因
计算机是由CPU、内存、磁盘、显卡、声卡等许许多多设备组成的,而且这些设备的厂商众多,品种繁多,而且不同厂商生产的同种设备虽然完成同种功能,但是具体细节却存在千差万别。
为了正确地管理和使用这些设备来实现具体的应用,这样程序员就得了解和掌握各种设备的工作原理。
而且对于同种设备,由于不同的硬件厂商在实现细节上的差异使得程序员再次陷入了复杂的硬件控制的深渊。
必须找到一种方法使得程序员从苦海中脱离出来!多年的研究与发展终于使得这个愿望成为现实。这个解决方法就是在硬件的基础上加载一层软件来管理整个系统。
这个软件通过设备驱动程序来与计算机硬件打交道,通过一系列的功能模块将整个计算机硬件系统抽象成为一个公共、统一、开放的接口—虚拟机,从而使得程序员不必再陷入各种硬件系统的具体细节!
这一层软件就是操作系统。
三、什么是操作系统
操作系统是一个大型的软件系统,其功能复杂,体系庞大。
从不同的角度看的结果也不同,正是“横看成岭侧成峰”,下面我们通过最典型的两个角度来分析一下。
1。从程序员的角度看
正如前面所说的,如果没有操作系统,程序员在开发软件的时候就必须陷入复杂的硬件实现细节。程序员并不想涉足这个可怕的领域,而且大量的精力花费在这个重复的、没有创造性的工作上也使得程序员无法集中精力放在更具有创造性的程序设计工作中去。
程序员需要的是一种简单的,高度抽象的可以与之打交道的设备。
将硬件细节与程序员隔离开来,这当然就是操作系统。
从这个角度看,操作系统的作用是为用户提供一台等价的扩展机器,也称虚拟机,它比底层硬件更容易编程。
2。从使用者的角度看
从使用者的角度来看,操作系统则用来管理一个复杂系统的各个部分。
操作系统负责在相互竞争的程序之间有序地控制对CPU、内存及其它I/O接口设备的分配。
比如说,假设在一台计算机上运行的三个程序试图同时在同一台打印机上输出计算结果。那么头几行可能是程序1的输出,下几行是程序2的输出,然后又是程序3的输出等等。
最终结果将是一团糟。这时,操作系统采用将打印输出送到磁盘上的缓冲区的方法就可以避免这种混乱。在一个程序结束后,操作系统可以将暂存在磁盘上的文件送到打印机输出。
从这种角度来看,操作系统则是系统的资源管理者。
四、操作系统发展历史
下面我们结合计算机的发展历史来回顾一下操作系统的发展历程。
1。第一代计算机(-):真空管和插件板
年代中期,小九机器人 源码美国哈佛大学、普林斯顿高等研究院、宾夕法尼亚大学的一些人使用数万个真空管,构建了世界上第一台电子计算机。开启计算机发展的历史。这个时期的机器需要一个小组专门设计、制造、编程、操作、维护每台机器。
程序设计使用机器语言,通过插板上的硬连线来控制其基本功能。
这个时候处于计算机发展的最初阶段,连程序设计语言都还没有出现,操作系统更是闻所未闻!
2。第二代计算机(-):晶体管和批处理系统
这个时期计算机越来越可靠,已从研究院中走出来,走进了商业应用。
但这个时期的计算机主要完成各种科学计算,需要专门的操作人员维护,并且需要针对每次的计算任务进行编程。
第二代计算机主要用于科学与工程计算。使用FORTRAN与汇编语言编写程序。在后期出现了操作系统的雏形:FMS(FORTRAN监控系统)和IBMSYS(IBM为机配备的操作系统)
3。
第三代计算机(-):集成电路芯片和多道程序
年代初,计算机厂商根据不同的应用分成了两个计算机系列,一个针对科学计算,一个针对商业应用。
随着计算机应用的深入,对统一两种应用的计算机需求出现了。这时IBM公司试图通过引入System/来解决这个问题。
与这个计划配套,IBM公司组织了OS/操作系统的开发,然后复杂的需求,以及当时软件工程水平低下使得OS/的开发工作陷入了历史以来最可怕的“软件开发泥潭”,诞生了最著名的失败论著----《神秘的人月》。
虽然这个开发计划失败了,但是这个愿望却成为了计算机厂商的目标。
此时,MIT、Bell Lab(贝尔实验室)和通用电气公司决定开发一种“公用计算机服务系统”----MULTICS,希望其能同时支持数百名分时用户的一种机器。结果这个计划的研制难度超出了所有人的预料,最后这个系统也以失败结束。不过,MULTICS的思想却为后来的操作系统很多提示。
年代未,一位贝尔实验室曾参加过MULTICS研制工作的计算机科学家Ken Thompson,在一台无人使用的PDP-7机器上开发出了一套简化的、单用户版的MULTICS。后来导致了UNIX操作系统的诞生。
目前UNIX操作系统主导了小型机、工作站以及其他市场。
也是至今最有影响力的操作系统之一,而Linux也是UNIX系统的一种衍生。
4。第四代计算机(-今):个人计算机
随着计算机技术的不断更新与发展,计算机神奇般地闯入了人们的生活,现在以低廉的价格就可以获得强大计算能力的计算机。
价格不再是阻拦计算机普及的门槛时,降低计算机的易用性就显得十分重要!由于UNIX系统的本身特点,使得其不太适合于在运行在个人计算机上,这时就需要一种新的操作系统。
在这一历史关键时候,IBM公司由于低估了PC机的市场,并未使用最大的力量角逐这一市场,这时Intel公司趁机进入,成为了当今微处理器的老大。
同时善于抓住时机的微软公司的总裁比尔·盖茨适时地进入了这一领域,用购买来的CP/M摇身一变成为MS-DOS,并凭借其成为个人计算机操作系统领域的霸主。
虽然是苹果公司在GUI方面先拔头筹,但由于苹果公司的不兼容、不开放的市场策略,未能扩大战果,这时微软又适时地进入了GUI方面,凭借WINDOWS系统再次称雄!
五、操作系统构成
一般来说,操作系统由以下几个部分组成:
1)进程调度子系统:
进程调度子系统决定哪个进程使用CPU,对进程进行调度、管理。
2)进程间通信子系统:
负责各个进程之间的通信。
3)内存管理子系统:
负责管理计算机内存。
4)设备管理子系统:
负责管理各种计算机外设,主要由设备驱动程序构成。
5)文件子系统:
负责管理磁盘上的各种文件、目录!
6)网络子系统:
负责处理各种与网络有关的东西。
六、黑客工具包源码操作系统结构设计
操作系统有多种实现方法与设计思路,下面仅选取最有代表性的三种做一简单的叙述。
1。整体式系统结构设计
这是最常用的一种组织方式,它常被誉为“大杂烩”,也可说,整体式系统结构就是“无结构”。
这种结构方式下,开发人员为了构造最终的目标操作系统程序,首先将一些独立的过程,或包含过程的文件进行编译,然后用链接程序将它们链接成为一个单独的目标程序。
Linux操作系统就是采用整体式的系统结构设计。但其在此基础上增加了一些形如动态模块加载等方法来提高整体的灵活性,弥补整体式系统结构设计的不足。
2。层次式系统结构设计
这种方式则是对系统进行严格的分层,使得整个系统层次分明,等级森严!这种系统学术味道较浓!实际完全按照这种结构进行设计的操作系统不多,也没有广泛的应用。
可以这么说,现在的操作系统设计是在整体式系统结构与层次式系统结构设计中寻求平衡。
3。微内核系统结构设计
而微内核系统结构设计则是近几年来出现的一种新的设计理念,最有代表性的操作系统有Mach和QNX。
微内核系统,顾名思义就是系统内核很小!比如说QNX的微内核只负责:
¨ 进程间的通信
¨ 低层的网络通信
¨ 进程调度
¨ 第一级中断处理
七、操作系统横向比较
计算机历史中出现了许许多多的操作系统,然后大浪淘沙,无情地淘汰了许多,只留下一些经历过市场考验的:
1。
桌面操作系统:
1)MSDOS:Intel x系列的PC机上的最早的操作系统,微软公司产品,曾经统治了这个领域,现在已逐渐被自家兄弟WINDOWS 9x系列所代替,现在除了一些低档机外已不多见。
2)Windows 9x:微软公司产品,从Windows 3。
x发展而来,现在是基于Intel x系列的PC机上的主要操作系统,也是现然个人电脑中装机量最大的操作系统。面向桌面、面向个人用户。
3)Mac OS:苹果公司所有,界面友好,性能优异,但由于只能运行在苹果公司自己的电脑上而发展有限。
但由于苹果电脑独特的市场定位,现在仍存活良好。
[1]4)linux:Linux是一种计算机操作系统和它的内核的名字。它也是自由软件和开放源代码发展中最著名的例子。
严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统(也被称为GNU/Linux)。
基于这些组件的Linux软件被称为Linux发行版。一般来讲,一个Linux发行套件包含大量的软件,比如软件开发工具,数据库,Web服务器(例如Apache),X Window,桌面环境(比如GNOME和KDE),办公套件(比如 ),等等。
2。
服务器操作系统:
1)UNIX系列:UNIX可以说是源远流长,是一个真正稳健、实用、强大的操作系统,但是由于众多厂商在其基础上开发了有自己特色的UNIX版本,所以影响了整体。在国外,UNIX系统可谓独树一帜,广泛应用于科研、学校、金融等关键领域。
但由于中国的计算机发展较为落后,UNIX系统的应用水平与国外相比有一定的滞后。
2)Windows NT系列:微软公司产品,其利用Windows的友好的用户界面的优势打进服务器操作系统市场。但其在整体性能、效率、稳定性上都与UNIX有一定差距,所以现在主要应用于中小企业市场。
3)Novell Netware系列:Novell公司产品,其以极适合于中小网络而著称,在中国的证券行业市场占有率极高,而且其产品特点鲜明,android仿微信源码下载仍然是服务器系统软件中的长青树。
系统 xìtǒng [system]∶按一定的关系组成的同类事物
[编辑本段]人体系统
由各个器官按照一定的顺序排列在一起,完成一项或多项生理活动的结构叫系统。
人体共有八大系统:运动系统、神经系统、内分泌系统、循环系统、呼吸系统、消化系统、泌尿系统、生殖系统。这些系统协调配合,使人体内各种复杂的生命活动能够正常进行。
例如:口 - 咽 - 食管 - 胃 - 肠(小肠 - 大肠 - 直肠)- 肛门(其中包括:肝、胰和唾液腺等器官)
系统:是指相互联系又相互作用着的对象的有机组合。
系统:是由相互作用和相互依赖的若干组成部分结合而成的,具有特定功能的有机整体,而且这个有机整体又是它从属的更大系统的组成部分
★八大系统的作用:
一、运动系统:运动系统由骨、软骨、关节和骨骼肌等构成。起支架、保护和运动的作用。
二、神经系统:神经系统由神经元组成,是由中枢神经系统和遍布全身的周围神经系统而组成。在体内起主导作用;一方面它控制和调节个器官、系统的活动;另一方面通过神经系统的分析与综合,使人体对环境变化的刺激作出相应的反应,达到人体环境的统一。
三、内分泌系统:内分泌系统由多种腺体组成。
通过分泌不同的激素(雄性、雌性激素、胰岛素、肾上腺素)对整个人体的生长、发育、新陈代谢和生殖起到调节作用。
四、循环系统:循环系统由心脏、血管和淋巴管组成。它将消化系统的吸收的营养物质和肺吸收的氧送到全身器官的组织和细胞,同时将他们的代谢产物及CO2运送到肾、肺、皮肤排出体外。
以保证人体的新陈代谢不断。
五、呼吸系统:由呼吸道和肺组成。吸入新鲜空气,通过肺泡内的气体交换,使血液得到氧并排除Co2。
六、消化系统:有口腔、咽、食管、小肠、大肠等组成。是食物的消化和吸收的功能。供人体所需要的书屋和能量。
七、泌尿系统:由肾脏、输尿管、膀胱、尿道等组成。
排出体内多余的水分及代谢产物或毒素。
八、生殖系统:产生生殖细胞,繁殖后代。
[编辑本段]网络操作系统
网络操作系统严格来说应称为软件平台,因为目前并非单一的网络操作系统一统天下,而是存在着多种网络操作系统并存的情况,这种情况是由以下两方面的原因造成的:
1 。
以目前常用的酶来说,主要有UNIX的系统,网络系统和Windows NT的系统。以推出的时间来说, UNIX的为最早,网络为第二, Windows NT的最晚。除去技术上的原因,依靠推出时间早的优势, UNIX的几乎独霸了最早具有连网需求的邮电,银行,铁路,军事等领域,而随着网络技术的发展,虽然出现了像视窗新技这样界面更友好的操作系统,但用户出于保护投资及使用习惯上的原因不情愿完全抛弃一种操作系统,从而导致了操作系统的共存与混用。
2 。各种操作系统在网络应用方面都有各自的优势,而实际应用却千差万别,这种局面促使各种操作系统都极力提供跨平台的应用支持。由于以互联网的TCP / IP协议为基础,而的TCP / IP协议正是的UNIX的标准协议,互联网的高速发展自然就为的UNIX提供了极大的机遇,微软早在Windows 中里就提供了内嵌的TCP / IP的协议,其的Windows NT网络操作系统当然更是把对TCP / IP协议的支持作为其重要的开发策略;而随着视窗客户的日益增多,使得UNIX的,均提供对网络的Windows的支持。
一个好的程序员至少应该具备哪些条件?
楼上的几位显然误会我的意思了,我并不是说不应当写文档加注释注重团队精神,看看下面的一篇文章,那位三天就写出UNIX的他需要写文档注释和团队精神吗,他用不着。哪个高手没有一点傲气和自信,他之所以敢对用户说:拿到你想要的,然后滚蛋,你已经很幸运了!是因为他有这个资本。天才本就不循规蹈矩,那样他就不叫天才了。
MIT BBS上说微软电话面试的一道题就是“Who do you think is the best coder,
and why?”。我觉得挺有意思的,也来凑个热闹。排名不分先后。
Bill Joy, 前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还
是vi和csh的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据
说他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD的前
身。当然是传说了,但足见他的功力。另一个传说是,年初的时候,DARPA让BBN在
Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了,拒绝把BBN
TCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了,端的是一箭封
喉,很快就写出了高性能的伯克利版TCP/IP。当时 BBN和DARPA签了巨额合同开发TCP/IP
Stack,谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿
个T-shirt出现在会议室(当时穿T-shirt不象现在,还是相当散漫的哈)。只见BBN问:你
怎么写出来的?而B伯伯答:简单,你读协议,然后编程就行了。最令偶晕倒的是,B伯
伯硕士毕业后决定到工业界发展,于是就到了当时只有一间办公室的Sun, 然后他就把
Sparc设计出来乐。。。象这种软硬通吃的牛人,想不佩服都不行的说。据Bill Joy的同
事说,一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处,B伯伯
发言,直切要害,提出漂亮的构想,让同事们彻底崩溃。对了,他还是Java Spec和JINI
的主要作者之一。
John Carmack,ID Software的founder和Lead Programmer。上个月和一个搞图形的师兄
聊天,他竟然不知道John Carmack, 也让偶大大地晕了一把。不过也许搞研究的和搞实
战的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。年代初只要能在PC
上搞个小动画都能让人惊叹一番的时候,J哥哥就推出了石破天惊的Castle Wolfstein,
然后再接再励,doom, doomII, Quake...每次都把3-D技术推到极限。J哥哥的简历上说
自己的专长是"Exhaust 3-D technology",真是牛人之言不我欺的说。做J哥哥这样的人
是很幸福的,因为各大图形卡厂家一有了新产品就要向他“进贡"
,不然如果他的游戏不支持哪种卡,哪种卡基本就会夭折乐。当初MS的Direct3D也得听
取他的意见,修改了不少API。当然,J哥哥在结婚前十数年如一日地每天编程小时以
上,也是偶们凡人望尘莫及的。对了,J哥哥高中肆业(?),可以说是自学成才。不过
呢,谁要用这个例子来为自己学习不好辩护,就大错特错了。那 Leonardo Da Vinci还
是自学成才呢(人是私生子,不能上学)。普通人和天才还是有区别的。对了,其实偶们
叫“达分奇”是相当不对的,因为Vinci是地名,而Da Vinci就是从Vinci来的人的意
思。换句话说,Leonardo Da Vinci就是“从Vinci来的Leonardo”的意思。叫别
人“Da Vinci”就不知所谓乐。嗯,扯远了,打住。
David Cutler,VMS和Windows NT的首席设计师,去微软前号称硅谷最牛的kernel开发
员。当初他和他的手下在微软一周内把一个具备基本功能的bootable kernel写出来,然
后说:“who can't write an OS in a week?",也是牛气冲天的说。顺便说一句,D爷
爷到NT3.5时,管理名开发员,自己还兼做设计和编程,不改coder本色啊。
D爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。 日常交谈fuck不离口。
他面试秘书时必问:"what do you think of the word 'fuck'?" ,让无数美女刹羽而
归。终于有一天,一个同样火爆的女面对这个问题脱口而出:"That's my favorite
word"。于是她被录取乐,为D爷爷工作到NT3.5发布。
Don Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,
学数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知到 Anders Hejlsberg,
或者学Linux不知道Linus Torvalds一样,不可原谅啊。为了让文章完整,就再罗唆几句
吧。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给别
人时收一两千美元,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高
爷爷不爽过,学者本色的说。想想那可是年代初啊,高爷爷写编译器写多了,顺带就搞
出了个 Attribute Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比
赛(有Alan Kay得众多高高手参加)总是第一,写的Tex到年就code freeze,还附带2^n
美分奖励等等都是耳熟能详的,偶就不饶舌乐。
顺便说一下,高老大爷是无可争议的写作高手。他给Concrete Mathematics 写的前言可
谓字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,而且没
有学究气,不失轻快跳脱。记得几年前读Concrete Mathemathics,时不时开怀大笑,让
老妈极其郁闷,觉得我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那
完全是高爷爷的功劳。说到写作高手,不能不提Stephen A. Cook。他的文章当年就被我
们的写作老师极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,总是面带
谦和的微笑,颇有仙风道骨,正好和他的仙文相配的说。
高爷爷其实还是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走,但他
捐献了好多作品,都可以在网上看到,比如著名的Mathematical Writing,MMIXWare,
The Tex Book等,更不用说足以让他流芳百世的Tex乐。
Ken Thompson,C语言前身B语言的作者,Unix的发明人之一(另一个是Dennis M. Riche
老大,被尊为DMR),Belle(一个厉害的国际象棋程序)的作者之一, 操作系统Plan 9的主
要作者(另一个是大牛人Rob Pike,
前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。年还是
计算机史前时代,普通人都认为只有大型机才能运行通用的操作系统,小型机只有高山
仰止的份儿。至于用高级语言来写操作系统,更是笑谈。Ken爷爷自然不是池中物,于是
他和DMR怒了,在年到间用汇编在PDP-7上写出了UNIX的第一个版本。他们并不
知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在年又把Unix用C重写,
于是C在随后年成就了不知多少豪杰的梦想和光荣。
Ken爷爷还有段佳话: 装了UNIX的PDP-最早被安装在Bell Lab里供大家日常使用。很
快大家就发现Ken爷爷总能进入他们的帐户,获得最高权限。Bell
Lab里的科学家都心比天高,当然被搞得郁闷无比。于是有高手怒了,跳出来分析了UNIX
代码,找到后门,修改代码,然后重新编译了整个UNIX。就在大家都以为“这个世界清
净了”的时候,他们发现Ken爷爷还是轻而易举地拿到他们的帐户权限,百思不解后,只
好继续郁闷。谁知道这一郁闷,就郁闷了年,直到Ken爷爷道出个中缘由。原来,代码
里的确有后门,但后门不在Unix代码里,而在编译Unix代码的C编译器里。每次C编译器
编译UNIX的代码,就自动生成后门代码。而整个Bell Lab的人,都是用Ken爷爷的C编译
器。
(6)Rob Pike, AT&T Bell Lab前Member of Technical Staff ,现在google研究操作系
统 。罗伯伯是Unix的先驱,是贝尔实验室最早和Ken Thompson以及Dennis M. Ritche开
发 Unix的猛人,UTF-8的设计人。他还在美国名嘴David
Letterman的晚间节目上露了一小脸,一脸憨厚地帮一胖子吹牛搞怪。让偶佩服不已的
是,罗伯伯还是年奥运会射箭的银牌得主。他还是个颇为厉害的业余天文学家,设
计的珈玛射线望远镜差点被NASA用在航天飞机上。他还是两本经典,The Unix
Programming Environment 和 The Practice of Programming 的作者之一。如果初学者
想在编程方面精益求精,实在该好好读读这两本书。它们都有中文版的说。罗伯伯还写
出了Unix下第一个基于位图的窗口系统,并且是著名的blit终端的作者。当然了,罗伯
伯还是号称锐意革新的操作系统,Plan9,的主要作者。可惜的是,Plan9并没有引起多
少人的注意。罗伯伯一怒之下,写出了振聋发聩的雄文 Systems Software Research is
Irrelevant,痛斥当下系统开发的不思进取,固步自封的弊病。虽然这篇文章是罗伯伯
含忿出手,颇有偏激之词,但确实道出了系统开发的无奈:开发周期越来越长,代价越
来越大,用户被统一到少数几个系统上,结果越来越多的活动是测量和修补,而真正的
革新越来越少。
就在罗伯伯郁闷之极的时候,google登门求贤来乐。如果说现在还有一家大众公司在不
遗余力地把系统开发推向极致的话,也就是google乐。随便看看google的成果就知道
了。具有超强容错和负载平衡能力的分布式文件系统GFS
(现在能够用,台廉价PC搭起一个巨型分布系统,并且高效便宜地进行管理的系统
也不多哈),大规模机器学习系统(拼写检查,广告匹配,拼音搜寻。。。哪个都很牛的
说),更不用说处理海量并行计算的各式google服务了。Rob在System Software
Research is Irrelevant里萧瑟地说现在没有人再关心系统研究的前沿成果了。想不到
他错了,应为google关心。google网络了大批功成总是试图吸取系统研究的最新成果。
想必Rob Pike在google很幸福。愿他做出更棒的系统。
Dennis M. Ritchie, 既然Ken Thompson是我的偶像,新闻组上人称DMR的Dennis M.
Ritchie自然也是,毕竟两人共同缔造了UNIX,而Dennis几乎独力把C搞大(当然,C的前
身是B,而B是Ken Thompson一手做出来的)。两人年分享图灵奖,是有史以来少数几
个因工程项目得奖的工程师(本来是唯一的一对儿,但Alan Kay才因为SmallTalk得奖,
所以就成了唯二的乐) 一个人一生能做出一个卓越的系统已经不易,DMR的C和UNIX长盛
不衰近年,至今生机勃勃,DMR此生可以无憾的说。
D爷爷也算有家学渊源:他老爸在AT&T贝尔实验室工作了一辈子,并在电路设计方面卓有
成就,还出了本颇有影响的书The Design of Switching Circuits,据说在交换理论和
逻辑设计方面有独到的论述。当然,D爷爷和他老爸是不同时代的人:他老爸的研究成
形于晶体管发明之前,而D爷爷的工作离了晶体管就玩儿不转乐。:-D
不要看D爷爷搞出了C,其实他最爱的编程语言是Alef,在Plan9上运行,支持并行编程。
Alef的语法和C相似,但数据类型和执行方式都和C大大不同。说到语言,D爷爷对后来
人有非常中肯的建议:抱着学习的目的来开发你自己的语言,不要冀望于它被众人接
受。这个建议不光对语言开发有用,也适用于其它大型系统的开发。别的不说,DMR后来
领导自己的团队在年和分别推出了Plan9和Inferno操作系统,又用多少人知道
呢?其实,D爷爷当初也没想过C会风行世界。他开发C的初衷和Eric S. Raymond
在Cathedral and Bazaar里阐述的一样,就是要消除自己对现有工具的不爽之处。谁
知D爷爷无心插柳,C竟然受到众多程序员的狂热拥戴,连D爷爷自己都大惑不解。在一次
采访中D爷爷说大概那是因为C的抽象程度碰巧既满足了程序员的要求, 又容易实现。当
然C一度是Unix上的通用语言也是原因。但不管怎么说,D爷爷对编程语言出色的审美意
识奠定了C广为流传的基础。
最后八卦一下。D爷爷的业余爱好和NBA大牛Karl Malone一样:开卡车。不过D爷爷更喜
欢开NASCAR,而KM独爱巨无霸。J D爷爷自称心中不供偶像,如果一定要说一个,那就
是Ken Thompson了。现在Ken爷爷退休当飞机教练去了,而D爷爷当了贝尔实验室系统开
发部的头,整日忙于开支票。他俩合作年,屡屡创造历史。这段令人神往的佳话,也
就长留你我心中乐。
P.S., 很多人都以为Brian W. Kernighan是C的作者。其实BWK只是写了那本经典K&R C。
据D爷爷说,他,Ken, 和Kernighan三人中,Kernighan最能写文章,他次之,而Ken写
得最少;但说到编程,Ken爷爷才是当之无愧的老大。
Edsger Wybe Dijkstra, 对,就是E.W. Dijkstra. 一提到EWD,很多人就会想起找最短
路径的Dijkstra Algorithm,就好像一提到Sir. Tony Hoare,就想起Quick Sort一样。
其实这些个算法不过是两个牛人在他们职业生涯中最琐碎的贡献。比如Dijkstra算法,
无非是戴爷爷在年为了展示新计算机
ARMAC的计算能力,初试身手的成果,属于他的算法处女作。据戴爷爷自述,他搞出最
短路径算法的时候连纸笔都没用。当时他和他老婆在阿姆斯特丹一家咖啡厅的阳台上晒
太阳喝咖啡,突然就把这个算法想出来乐。而且当时的算法研究还比较原始,牛人们忙
着用计算机搞数值计算,对离散算法不屑一顾。那时连一个象样的专注于离散算法的专
业期刊都没有。戴爷爷于是推迟发表这个算法。直到年,他才把这个算法发表
在Numerische Mathematik的创刊号上,权为捧场。:-)
EWD在多个领域牛气冲天,端的是理论和编程两手硬的高手。只不过他的很多工作比较
深刻,学校的老先生们觉得本科生接受不了,不给本科生讲而已。
戴爷爷大概因为最短路径算法一战成名,于是有人请他参加另一台计算机X1的设计工
作,并且把设计实时中断系统的任务派给了他。现在看来实时中断也许不算什么,但要
知到,X1前根本就没有实时中断的概念。实现它简直就是一场豪赌。戴爷爷起初还不情
愿,但经不住项目负责人Bram和Carel的轮番 “吹捧”:我们知道实时中断让您工作变
得非常困难,但象您这样的牛人肯定能做出来的说。结果戴爷爷被糖衣炮弹彻底击穿,
接下了这个烫手山芋。两三年后,他不仅搞出了实时中断,还围绕这个写出了自己的博
士论文,顺利戴上博士帽。
让戴爷爷真正成名立万的还是在X1上开发的Algo,最早的高级语言之一。戴爷爷没日
没夜地工作了8个月,就搞出了Algo,也因此获得了 年的图灵奖。因为Algo,
戴爷爷发表了一篇石破天惊的文章:Recursive
Programming,于是人们才知道,原来高级语言也可以高效地实现递归,原来从此以后,
所有程序员都不可避免地和戴爷爷发明的一个词(应该说是概念)打交道:堆栈。
而且Algo还让戴爷爷深入地思考多道程序设计的问题,最终发明了每个系统程序员
都绕不开的概念:semaphore。当然,戴爷爷总是把他发明的概念严格形式化,极具科
学家本色的说。和这些成就想比,他提出的吃饭的哲学家问题,也就没什么好说的了。
说来好笑,当时的大学(忘了哪所了)还是觉得戴爷爷没有受过正统的数学训练,也不是
专门搞数值分析的,所以最后不太情愿地给了他一个教职。这种小挫折并不能妨碍象戴
爷爷这样的牛人创造历史。他一边教数值分析(:-D) ,一边开始开发一个新的操作系
统,并培养计算机科学家。几年后,THE Multiprogramming
System横空出世。THE是第一个支持松散耦合,显式同步的进程并由此使得严格证明系统
没有死锁变得容易的操作系统。可惜戴爷爷任职的系不识货,还强行解散了他的研究小
组(年戴爷爷给他的系主任说他得了图灵奖,系主任的第一反应是你们搞计算机就
喜欢乱发奖)。这让戴爷爷相当郁闷,得了抑郁症。在极度郁闷之中,戴爷爷决定用写作
来治疗自己的抑郁症。于是经典就诞生乐:Notes on Structured Programming。戴爷爷
从此被尊为结构化编程的奠基人,而且他的抑郁症也被治好乐。
EWD太牛,结果他的故事也太多。先到这里吧。起,他的故事就在美国发生了。
Anders Hejlsberg,微软.NET的首席架构师,编程语言设计和实现的顶尖高手。他一手
做出了 Turbo Pascal, 也是Delphi, J++(尤其是WFC),C#, 和.NET的主要作者。这些作
品的名字足以为他立传。作为一个程序员,我在这样的大师面前实在无语。生子当
如Anders的说。李维的<>里已详细讲述了Anders的传奇故事,我就不用费舌了:
/iexploiter/posts/.aspx
Artima上有Anders谈C#的系列访谈。MSDN上有一段Anders导游的录像 。有兴趣可以去看
看牛人的丰采。