一位程序员的演变历程(The Evolution of a Programmer)
2007-09-14 08:50
507 查看
这是来自新加坡国立大学的一个页面,它记录了一个程序员从入门到精通,再到黑客,再荣升经理和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
- The Evolution of a Programmer
- The Evolution of a Programmer
- The Evolution of a Programmer
- The Evolution of a Programmer
- The Evolution of a Software Engineer(程序员进化之路)
- a joke---The Evolution of a Programmer
- The Evolution of a Programmer
- [转]程序员成功之路 ——The road ahead for programmer(演讲稿)
- 程序员成功之路 ——The road ahead for programmer(转引)
- [翻译]Team Geek -02- Chapter 1 - The Myth of the Genius Programmer(完)
- 动态网络拓扑演变:局部动态到全局的相变|TopologicalEvolutionofDynamicalNetworks: Global Criticality from Local Dynamics
- 程序员成功之路 ——The road ahead for programmer(演讲稿)
- 《程序员》 -- 解读游戏设计的奥秘——《The Art of Game Design》作者Jesse Schell访谈
- What technical details should a programmer of a web application consider before making the site publ
- What are some of the most basic things every programmer should know?
- [读书笔记]C++语言的设计与演化[The Design and Evolution of C++]
- The demise of the low level Programmer
- 注重实效的程序员(The Pragmatic Programmer)
- Here is the Book List of a programmer who want to upgrade his/her skill (zz)