No hay dos sin tres, ni tres sin cuatro en este caso.
Navegando por ahí, he topado con un texto que describe a la perfección como evoluciona la mente de un programador a lo largo de su vida. Aunque en ingles, creo se entiende a la perfección el mensaje, que voy a pasar a copiaros:
La evolución de un programador:
High School/Jr.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
>> (cons 'Hello (list 'World))))
>>
>>
New professional
>> #include
>> void main(void)
>> {
>> char *message[] = {"Hello ", "World"};
>> int i;
>>
>> for(i = 0; 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 &perator<<(ostream & const string >> &);
>> string &operator=(const char *);
>> };
>>
>> ostream &operator<<(ostream &stream, const string >> &s)
>> {
>> return(stream <<>> }
>>
>> 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 <<>>
>> 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.
>> To: ^X ^F ^C
>> % help mail
>> help: Command not found.
>> % damn!
>> !: Event unrecognized
>> % logout
¿Y tu? ¿en que etapa de tu vida te encuentras?