Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

The Evolution of a Programmer

Agosto 14th, 2005 - [Enlace local]

Navegando sin rumbo fijo por la embravecida información contenida en del.icio.us, me topo con un gran documento que, doy por sentado, deleitará al público informático presente.

Se trata de The Evolution of a Programmer, un elocuente manifiesto en clave de humor que refleja el ciclo de vida de todo buen programador que se precie. Desde los más dulces inicios en tiempos de instituto y acné facial, enamorado del Spectrum y BASIC, hasta la decadencia del propio ser en el lado oscuro de la fuerza ;-) Cuando lo leáis, entenderéis mejor de lo qué estoy hablando jaja.

Aunque el texto apareció publicado originalmente en la página web de Iavor S. Diatchki, está firmado de forma anónima, por lo que a priori se desconoce el autor del mismo.

No revelo más, espero que disfruten del genuino (y sano, aunque no lo parezca :P ) humor informático. Con todos ustedes, las etapas del 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
  (print
    (cons 'Hello (list 'World))))
New professional
#include <stdio.h>
void main(void)
{
  char *message[] = {\"Hello \", \"World\"};
  int i;
	
  for(i = 0; i < 2; ++i)
    printf(\"%s\", message[i]);
  printf(\"\n\");
}
Seasoned professional
#include <iostream.h>
#include <string.h>
	
class string
{
private:
  int size;
  char *ptr;
	
  string() : size(0), ptr(new char[1]) { ptr[0] = 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(<windows.h>);
    importheader(<ole2.h>);
    importheader(<except.hxx>);
    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 <windows.h>
#include <ole2.h>
#include <stdio.h>
#include <stdlib.h>
#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\", 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 <windows.h>
#include <ole2.h>
#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 <windows.h>
#include <ole2.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#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 <stdio.h>
#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
% echo \"Hello, world.\"
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 (#)

Impresionante ¿eh? Yo me quedo con la última etapa, es genial :-D Y además de una gran verdad; en el momento que dejas de practicar, comienza tu proceso de oxidación (y, éste, tiene límites insospechados como se puede observar jajaja). Y la cosa no queda aquí, para quien quiera más dosis que no se pierda la sección de jokes, chistes, de Iavor.

Y para terminar, también os dejo con The Evolution of a Haskell Programmer, un enlace a un texto en la misma línea pero enfocado a programadores de Haskell y bastante más trabajado por cierto.

Anotaciones relacionadas:

» Leer más, comentarios, etc...