灰色十月

灰色十月

By 马冬亮(凝霜  Loki)

一个人的战争(http://blog.csdn.net/MDL13412)


2011年的十月注定了其灰色的格调,计算机科学领域痛失了两位天才--史蒂夫·乔布斯和丹尼斯·里奇先后驾鹤西去。

作为晚辈,特别是还在上大学的学生,我自知人卑言微,但是我还是想编纂本文以表我对先人的无限仰慕与缅怀。


史蒂夫·乔布斯大家都很熟悉了,苹果创始人之一,人生几经沉浮,其传奇的一生被全球果粉所传颂。其人生的第二

次辉煌始于1997年的临危受命,拯救苹果于水火之中。以其超人的胆识和卓越的战略前瞻性与微软达成协议,获取

1.5亿美元的资金,虽然当年引起了不小的争议,也受到了不少人的冷嘲热讽,但是苹果就是凭借着这笔资金,华丽

转身。这就是乔布斯,他将即将倒闭的苹果带上了科技之巅,在2011年8月11日,苹果正式超越埃克森美孚,成为

全球最有价值的上市公司,迎来其值得纪念的巅峰时刻。


在乔布斯的带领下,我们这代人先后见证了iMac,iPod,iPhone等传奇产品的诞生,见证了苹果在乔布斯的带领下

是如何改变世界的,见证了其在全球市场绽放出灿烂的奇葩。今天的苹果已经不是一个产品,它更像是一个宗教,

有着乔布斯这个伟大的精神领袖,绽放着璀璨的光辉。
    

对于非业界人士,这大概就是人们对乔布斯的全部认识,可是你们只看到了成功的乔布斯,看到的是作为商人的乔布

斯。可是大神乔布斯不仅仅是一个成功的商人,其也是一个技术天才,遥想当年创业的乔布斯,其传奇的Apple I和Ap

ple II,足以将其划归到伟大的计算机科学家行列。后来的iMac,iPod,iPhone更让我们领略到了乔布斯的先知先觉,

让我们惊讶于其是否真的拥有一台时光机,乔布斯真正做到了活着就是为了改变世界!

在此要对各位果粉说声抱歉,乔布斯的故事只能讲述到这里了,关于乔布斯的故事网上有更华丽的词藻。作为一名专

攻C++的程序员,请允许我用剩余的篇幅去缅怀另一位天才,C语言之父,同时也是Unix之父的丹尼斯·里奇。

如果非业界人士不认识丹尼斯·里奇,那我并不惊奇,但是某些所谓的“C程序员”居然能把谭浩强当成C语言之父,我掩

饰不住我内心的愤怒,请允许我深深的在内心鄙视你的存在。同时对于认为谭浩强编写的教材是对C语言的完美诠释的

人,请将自己一并归入到我鄙视的行列。

乔布斯改变的世界大家看得到,而丹尼斯·里奇改变的世界,只有你对编程和技术有了一定积淀后才能领会的到。作为

当今主流的程序设计语言C++(作为C++程序员,请允许我把C++排在第一位),JAVA,C#。。。当然包括苹果的Obj

ect-C都源自C语言,这些语言正改变着世界,让我们的生活向数字化生活前行。可以说没有C语言,就不会有当今飞速

发展的电子技术,就不会有我们今天的数字生活。我认为世界没有乔布斯,我们可能会没有漂亮,强大的iPhone,但

是如果没有丹尼斯·里奇,那么可能就没有苹果,而计算机还是计算机科学家才能使用的“玩具”,个人计算机的普及将

会遥不可及。

大师丹尼斯·里奇一生专注于学术研究,著作极少,其中国人熟悉的可能就只有和肯·汤普逊合著的《C程序设计语言》

这本书了,大家习惯称之为K&R。但是很多人对这本书存在一个误区,认为其不是标准C语言,其实这本书的第一版可

以称之为K&R C,而第二版就完全是标准的C语言了,所以特此纠正一下,大家购买此书的时候可以没有顾虑了。这本

书用200多页的篇幅将C语言完美阐述,引领无数程序员步入程序设计的殿堂。大师还有一本著作是关于Unix的《Unix

Programmer's Manual》,本人虽然属于*nix阵营,但是没有拜读过,就不发表评论了。

我个人的编程生涯比较特殊,我的第一门编程语言是x86汇编,是高三的时候自学的,大学伊始学习C语言,自此和专业

(自动化)完全脱轨,专攻软件开发。不知道这个世界有多少人在敲出printf("Hello World");的时候,在内心中激起一阵

小澎湃,可惜我的第一个程序不是它,而是一个在TC环境下开发的,图形化的汉诺塔演示程序,虽然这个程序现在已经

没有编译器能正确编译并执行,但是就是这个程序坚定了我走软件开发这条路的决心。

虽然现在使用的是C++进行编程,但是由于C++源自于C语言,而且我的C语言功底非常扎实,所以我也可以算是一个C

程序员。在此我以C程序员的身份向大师的离去表示我深深的追悼,默哀五分钟。。。

大师的Unix为我们今天的现代化操作系统奠定了坚实的基础,可以说没有Unix,我们今天就不会有许许多多强大的操

作系统。本人使用的Fedora 15隶属于RetHat公司,外界称之为GNU Linux,而它本身就是一个类Unix系统,所以说

大师的成就无时无刻不再改变着我的生活。看看今天风靡全球的Android系统,其使用的是Linux内核,这是对大师

成就的肯定与升华。

大师的主要成就还包括Plan 9和Inferno操作系统以及Limbo语言,但是本人的知识面有限,不足以领略大师的风采,

只能对大师表示无限的崇敬之情。

大师一生致力于学术研究,1983年的图灵奖可以说是对大师成就的充分肯定,

注定大师会在时代的长河中写下浓墨重彩的一笔。

大师的魅力不仅仅体现在其精湛技术上,其低调的作风及严谨的研究精神,值得今天每一个人学习,再次向大师致敬。

两位天才的离去给业界带来了无法计量的损失,我们无力改变什么,我们只能沿着大师的轨迹走下去,我们将大师

的成就发扬开来,融入到我们未来的生活中,这可能就是对大师最好的缅怀。不论时代如何变迁,不论技术如何发

展,我们都会谨记大师的成就,谨记大师在历史的天空中划过的金色曲线。

后记:
下面附带一份我的第一个C语言程序,这是自学C语言一个星期的产物,

由于当时没有任何软件工程的概念和编码规范,代码写的不是很好,大家见笑了:-)

#include "stdio.h"
#include "dos.h"
#include "conio.h"
/*定义两个数组a[4][11],b[4],其中a[4][11]用来指向柱子上的内容(碟片),b[4]用来标志柱子上的碟片高度*/
int a[4][11]={{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0}},b[4]={0,0,0,0};
FILE *TEMP;
/*定义一个移除碟片的函数,void removef(起始位置,高度,碟片的大小)*********************************/
void removef(char start,int height,int size)
{
         int zb_x;
         textbackground(3);
         switch(start)
         {
                   case 'A':zb_x=11;break;
                   case 'B':zb_x=32;break;
                   case 'C':zb_x=53;break;
         }
         for(;size>0;size--)
         {
                   gotoxy(zb_x-size,11-height);
                   cprintf("%c",0);
                   gotoxy(zb_x+size,11-height);
                   cprintf("%c",0);
         }
    delay(35000);
}
/*定义一个重建碟片的函数,void createf(移动到位置,高度,碟片的大小)*******************************/
void createf(char end,int height,int size)
{
         int zb_x;
         textbackground(0);
         switch(end)
         {
                   case 'A':zb_x=11;break;
                   case 'B':zb_x=32;break;
                   case 'C':zb_x=53;break;
         }
         for(;size>0;size--)
         {
                   gotoxy(zb_x-size,11-height);
                   cprintf("%c",0);
                   gotoxy(zb_x+size,11-height);
                   cprintf("%c",0);
         }
         delay(35000);
}
/*汉诺塔递归算法,并讲结果写入文件指针TEMP指向的文件*********************************************/
int move(int N,int A,int B,int C)
{
    if(N==1)
    {
       fputc(A,TEMP);
       fputc(C,TEMP);    
    }
    else
    {
      move(N-1,A,C,B);
      fputc(A,TEMP);
      fputc(C,TEMP);
      move(N-1,B,A,C);
    }
}
main()
{
         void removef(char,int,int);
         void removef(char,int,int);
         int move(int,int,int,int);
    int N,i,j,k,m,n,hei,counter=0,height0,height1,size,disksize;
    char cur_char;
    /*建立一个用于存储递归函数输出的文件********************************************************/
    TEMP=fopen("D:\\MDL.txt","w");
    fclose(TEMP);
    /*让用户输入汉诺塔的层数,并初始化a[1][]的内容***********************************************/
    printf("input number(1-10):");
    scanf("%d",&N);
    for(m=N,n=1;m>0;m--,n++)
    {
       a[1][11-n]=m;
    }
    /*初始化A柱子上碟片的高度*******************************************************************/
    b[1]=N;
    /*初始化汉诺塔模型**************************************************************************/
    clrscr();
    textbackground(0);
    for(i=1;i<=10;i++)
    {
       gotoxy(11,i);
       cprintf("%c",0);
       gotoxy(32,i);
       cprintf("%c",0);
       gotoxy(53,i);
       cprintf("%c",0);
    }
    for(i=10,j=N;i>(10-N)&&j>0;i--,j--)
    {
       for(k=1;k<=j;k++)
       {
                gotoxy(11-k,i);
                cprintf("%c",0);
                gotoxy(11+k,i);
                cprintf("%c",0);
       }       
    }
    textbackground(3);
    gotoxy(10,17);
    cprintf("汉诺塔图形解法           作者:09自动化3班--马冬亮");
    /*初始化界面完毕,进行递归算法,并将递归结果输出到一个临时文件中保存**************************/
    TEMP=fopen("D:\\MDL.TXT","at");
    move(N,'A','B','C');
    fputc('E',TEMP);
    fclose(TEMP);
    /*汉诺塔操作过程递归完成,并已经写入文件保存,接下来进行读取**********************************/
    TEMP=fopen("D:\\MDL.TXT","rt");
    /*进行碟片操作******************************************************************************/
    do
    {
       counter++;
       cur_char=fgetc(TEMP);
       if((counter%2)!=0)
       {
                switch(cur_char)
                {
                         case 'A':{height0=b[1];size=a[1][11-height0];}break;
                         case 'B':{height0=b[2];size=a[2][11-height0];}break;
                         case 'C':{height0=b[3];size=a[3][11-height0];}break;
                }
                removef(cur_char,height0,size);
                switch(cur_char)
                {
                         case 'A':{height1=b[1];b[1]-=1;disksize=a[1][11-height1];a[1][11-height1]=0;}break;
                         case 'B':{height1=b[2];b[2]-=1;disksize=a[2][11-height1];a[2][11-height1]=0;}break;
                         case 'C':{height1=b[3];b[3]-=1;disksize=a[3][11-height1];a[3][11-height1]=0;}break;
                }
       }
       else
       {
                switch(cur_char)
                {
                         case 'A':height0=b[1]+1;break;
                         case 'B':height0=b[2]+1;break;
                         case 'C':height0=b[3]+1;break;
                }
                createf(cur_char,height0,size);
                switch(cur_char)
                {
                         case 'A':{b[1]+=1;height1=b[1];a[1][11-height1]=disksize;}break;
                         case 'B':{b[2]+=1;height1=b[2];a[2][11-height1]=disksize;}break;
                         case 'C':{b[3]+=1;height1=b[3];a[3][11-height1]=disksize;}break;
                }
       }
    }while(cur_char!='E');
    gotoxy(10,19);
    cprintf("演示完毕!!!");
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MDL13412/article/details/6886046
个人分类: 永远的金色曲线
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭