一位程序员的演变历程(The Evolution of a Programmer)

原创 2007年09月14日 08:50:00

这是来自新加坡国立大学的一个页面,它记录了一个程序员从入门到精通,再到黑客,再荣升经理和CEO时所写的代码,
正如我们访客所评论的那样,这位程序员从青蛙变成了蛤蟆,相信同为程序员的你,看了之后您会会心一笑,我们的生活何尝不是如此呢?

The Evolution of a Programmer

High School/Junior High

  10 PRINT "HELLO WORLD"
  20 END

First year in College

  program Hello(input, output)
    begin
      writeln('Hello World')
    end.

Senior year in College

  (defun hello
    (print
      (cons 'Hello (list 'World))))

New professional

  #include 
  void main(void)
  {
    char *message[] = {"Hello ", "World"};
    int i;
 
    for(i = 0; i < 2; ++i)
      printf("%s", message[i]);
    printf("/n");
  }

Seasoned professional

  #include 
  #include 
 
  class string
  {
  private:
    int size;
    char *ptr;
 
  public:
    string() : size(0), ptr(new char('/0')) {}
 
    string(const string &s) : size(s.size)
    {
      ptr = new char[size + 1];
      strcpy(ptr, s.ptr);
    }
 
    ~string()
    {
      delete [] ptr;
    }
 
    friend ostream &operator <<(ostream &, const string &);
    string &operator=(const char *);
  };
 
  ostream &operator<<(ostream &stream, const string &s)
  {
    return(stream << s.ptr);
  }
 
  string &string::operator=(const char *chrs)
  {
    if (this != &chrs)
    {
      delete [] ptr;
     size = strlen(chrs);
      ptr = new char[size + 1];
      strcpy(ptr, chrs);
    }
    return(*this);
  }
 
  int main()
  {
    string str;
 
    str = "Hello World";
    cout << str << endl;
 
    return(0);
  }

Master Programmer

  [
  uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
  ]
  library LHello
  {
      // bring in the master library
      importlib("actimp.tlb");
      importlib("actexp.tlb");
 
      // bring in my interfaces
      #include "pshlo.idl"
 
      [
      uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
      ]
      cotype THello
   {
   interface IHello;
   interface IPersistFile;
   };
  };
 
  [
  exe,
  uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
  ]
  module CHelloLib
  {
 
      // some code related header files
      importheader();
      importheader();
      importheader();
      importheader("pshlo.h");
      importheader("shlo.hxx");
      importheader("mycls.hxx");
 
      // needed typelibs
      importlib("actimp.tlb");
      importlib("actexp.tlb");
      importlib("thlo.tlb");
 
      [
      uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
      aggregatable
      ]
      coclass CHello
   {
   cotype THello;
   };
  };
 
 
  #include "ipfix.hxx"
 
  extern HANDLE hEvent;
 
  class CHello : public CHelloBase
  {
  public:
      IPFIX(CLSID_CHello);
 
      CHello(IUnknown *pUnk);
      ~CHello();
 
      HRESULT  __stdcall PrintSz(LPWSTR pwszString);
 
  private:
      static int cObjRef;
  };
 
 
  #include 
  #include 
  #include 
  #include 
  #include "thlo.h"
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"
 
  int CHello::cObjRef = 0;
 
  CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
  {
      cObjRef++;
      return;
  }
 
  HRESULT  __stdcall  CHello::PrintSz(LPWSTR pwszString)
  {
      printf("%ws/n", pwszString);
      return(ResultFromScode(S_OK));
  }
 
 
  CHello::~CHello(void)
  {
 
  // when the object count goes to zero, stop the server
  cObjRef--;
  if( cObjRef == 0 )
      PulseEvent(hEvent);
 
  return;
  }
 
  #include 
  #include 
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"
 
  HANDLE hEvent;
 
   int _cdecl main(
  int argc,
  char * argv[]
  ) {
  ULONG ulRef;
  DWORD dwRegistration;
  CHelloCF *pCF = new CHelloCF();
 
  hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 
  // Initialize the OLE libraries
  CoInitializeEx(NULL, COINIT_MULTITHREADED);
 
  CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
      REGCLS_MULTIPLEUSE, &dwRegistration);
 
  // wait on an event to stop
  WaitForSingleObject(hEvent, INFINITE);
 
  // revoke and release the class object
  CoRevokeClassObject(dwRegistration);
  ulRef = pCF->Release();
 
  // Tell OLE we are going away.
  CoUninitialize();
 
  return(0); }
 
  extern CLSID CLSID_CHello;
  extern UUID LIBID_CHelloLib;
 
  CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
      0x2573F891,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };
 
  UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
      0x2573F890,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };
 
  #include 
  #include 
  #include 
  #include 
  #include 
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "clsid.h"
 
  int _cdecl main(
  int argc,
  char * argv[]
  ) {
  HRESULT  hRslt;
  IHello        *pHello;
  ULONG  ulCnt;
  IMoniker * pmk;
  WCHAR  wcsT[_MAX_PATH];
  WCHAR  wcsPath[2 * _MAX_PATH];
 
  // get object path
  wcsPath[0] = '/0';
  wcsT[0] = '/0';
  if( argc > 1) {
      mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
      wcsupr(wcsPath);
      }
  else {
      fprintf(stderr, "Object path must be specified/n");
      return(1);
      }
 
  // get print string
  if(argc > 2)
      mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
  else
      wcscpy(wcsT, L"Hello World");
 
  printf("Linking to object %ws/n", wcsPath);
  printf("Text String %ws/n", wcsT);
 
  // Initialize the OLE libraries
  hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);
 
  if(SUCCEEDED(hRslt)) {
 
 
      hRslt = CreateFileMoniker(wcsPath, &pmk);
      if(SUCCEEDED(hRslt))
   hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);
 
      if(SUCCEEDED(hRslt)) {
 
   // print a string out
   pHello->PrintSz(wcsT);
 
   Sleep(2000);
   ulCnt = pHello->Release();
   }
      else
   printf("Failure to connect, status: %lx", hRslt);
 
      // Tell OLE we are going away.
      CoUninitialize();
      }
 
  return(0);
  }

Apprentice Hacker

  #!/usr/local/bin/perl
  $msg="Hello, world./n";
  if ($#ARGV >= 0) {
    while(defined($arg=shift(@ARGV))) {
      $outfilename = $arg;
      open(FILE, ">" . $outfilename) || die "Can't write $arg: $!/n";
      print (FILE $msg);
      close(FILE) || die "Can't close $arg: $!/n";
    }
  } else {
    print ($msg);
  }
  1;

Experienced Hacker

  #include 
  #define S "Hello, World/n"
  main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker

  % cc -o a.out ~/src/misc/hw/hw.c
  % a.out

Guru Hacker

  % cat
  Hello, world.
  ^D

New Manager

  10 PRINT "HELLO WORLD"
  20 END

Middle Manager

  mail -s "Hello, world." bob@b12
  Bob, could you please write me a program that prints "Hello,
 world."?
  I need it by tomorrow.
  ^D

Senior Manager

  % zmail jim
  I need a "Hello, world." program by this afternoon.

Chief Executive

  % letter
  letter: Command not found.
  % mail
  To: ^X ^F ^C
  % help mail
  help: Command not found.
  % damn!
  !: Event unrecognized
  % logout

 

一位程序员的演变历程(The Evolution of a Programmer)

这是来自新加坡国立大学的一个页面,它记录了一个程序员从入门到精通,再到黑客,再荣升经理和CEO时所写的代码,正如我们访客所评论的那样,这位程序员从青蛙变成了蛤蟆,相信同为程序员的你,看了之后您会会心一...
  • czxzz
  • czxzz
  • 2007年09月14日 11:04
  • 193

spring演化历程

1.spring1.0的出现彻底改变了我们开发企业级java应用程序的方式。spring的依赖注入和声明式事物意味着组件之间不存在紧耦合,也没必要再用重量级的EJB了。2.到了spring2.0 ,我...
  • qq_36369181
  • qq_36369181
  • 2017年08月09日 10:20
  • 138

The Evolution of a Programmer

High School/Jr.High (BASIC语言) 10 PRINT "HELLO WORLD" 20 END First year in College (pascal...
  • jj12345jj198999
  • jj12345jj198999
  • 2009年03月28日 14:09
  • 760

浅谈web架构之演化过程

前言 最近在开发过程中,遇到很多缓解配置的问题,工程很难启动,也不知道为什么环境需要这么多配置的意义。就在这个时候,一本好书《大型网站技术:核心原理与案例分析》给我带来全新视角,必须强势安利一把...
  • kingice1014
  • kingice1014
  • 2016年08月04日 14:06
  • 534

谦卑的程序员(The Humble Programmer) by E.W.Dijkstra,1972

谦逊的长者——Edsger Wybe Dijkstra,1930年出生于荷兰阿姆斯特丹,2002年逝世于荷兰纽南。他在祖国荷兰获得数据和物理学学士,理论物理博士学位,2000年退休前 一直是美国Tex...
  • HorkyChen
  • HorkyChen
  • 2012年07月25日 23:34
  • 4417

《中国国民性演变历程---专制制度的演进导致国民性格大倒退》 张宏杰

之前认真看过张宏杰先生的《坐天下很累》, 觉得很不错。 我也常常从不同的角度去思考问题, 用同理心去理解不同位置的人, 理解一些难以理解的事情。 后来, 又读了张宏杰先生的《中国国民性演变历程》, 却...
  • stpeace
  • stpeace
  • 2015年05月04日 22:18
  • 2665

操作系统发展的简单历程

从无操作系统计算机到脱机输入,输出,在后来的单道批处理系统到多道批处理系统,在到分时系统,实时系...
  • msdnwolaile
  • msdnwolaile
  • 2016年04月10日 12:08
  • 3692

IBM 总架构师:话说程序员的职业生涯

作者:IBM 软件集团大中华区总架构师 寇卫东 有一些年轻的程序员向我咨询,将来的路应该怎么走?俗话说,条条大路通罗马。不同的路都能走向成功。到底选哪条路,取决于自己的兴趣。可能有程序员会问:如果还...
  • u013883025
  • u013883025
  • 2015年03月04日 21:37
  • 633

Java的演变历程(发展史)

注:技术和语法只是其中的一部分,以影响程度作为选取描述优先顺。 Java语言的前身:Oak(橡树) Java1.0提出了“Write Once,Run Anywhere”的口号 JDK 1.1...
  • u014363151
  • u014363151
  • 2014年03月28日 15:23
  • 1335

Computer Systems: A Programmer's Perspective --- 读书笔记1

最后一次更新日期:2016-03-03 这本书的中文名字叫《深入理解计算机系统》。当我看到这本书第二章的浮点数部分时,回头发现前面的内容已经不怎么记得了。因此我打算通过写读书笔记的方式来强化自己的理解...
  • k0becheng
  • k0becheng
  • 2015年09月20日 21:29
  • 1030
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一位程序员的演变历程(The Evolution of a Programmer)
举报原因:
原因补充:

(最多只允许输入30个字)