Юмор → Эволюция Программиста на примере Hello World

The Evolution of a Programmer



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;

     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(<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\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 <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
     CoInitiali, 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

   % cat
   Hello, world.
   ^D


AXE System programmer

   LL0:
           .seg    "data"
           .seg    "text"
           .proc 04
           .global _main
   _main:
           !#PROLOGUE# 0
           sethi   %hi(LF26),%g1
           add     %g1,%lo(LF26),%g1
           save    %sp,%g1,%sp
           !#PROLOGUE# 1
           .seg    "data1"
   L30:
           .ascii  "Hello, World\012\0"
           .seg    "text"
           .seg    "data1"
   L32:
           .ascii  "Hello, World\012\0"
           .seg    "text"
           set     L32,%o0
           call    _strlen,1
           nop
           mov     %o0,%i5
           set     L30,%o0
           call    _printf,1
           nop
           cmp     %o0,%i5
           bne     L2000000
           nop
           mov     0,%o0
           b       L2000001
           nop
   L2000000:
           mov     0x1,%o0
   L2000001:
           call    _exit,1
           nop
   LE26:
           ret
           restore
          LF26 = -96
           LP26 = 96
           LST26 = 96
           LT26 = 96
           .seg    "data"

   0000000 0103 0107 0000 0060 0000 0020 0000 0000
   0000020 0000 0030 0000 0000 0000 0054 0000 0000
   0000040 033f ffff 8200 63a0 9de3 8001 1100 0000
   0000060 9012 2000 4000 0000 0100 0000 ba10 0008
   0000100 1100 0000 9012 2000 4000 0000 0100 00 ba10 0008
   0000100 1100 0000 9012 2000 4000 0000 0100 0000
   0000120 80a2 001d 1280 0005 0100 0000 9010 2000
   0000140 1080 0003 0100 0000 9010 2001 4000 0000
   0000160 0100 0000 81c7 e008 81e8 0000 0000 0000
   0000200 4865 6c6c 6f2c 2057 6f72 6c64 0a00 4865
   0000220 6c6c 6f2c 2057 6f72 6c64 0a00 0000 0000
   0000240 0000 000c 0000 0608 0000 006e 0000 0010
   0000260 0000 060b 0000 006e 0000 0014 0000 0286
   0000300 ffff ffec 0000 0020 0000 0608 0000 0060
   0000320 0000 0024 0000 060b 0000 0060 0000 0028
   0000340 0000 0186 ffff ffd8 0000 004c 0000 0386
   0000360 ffff ffb4 0000 0004 0500 0000 0000 0000
   0000400 0000 000a 0100 0000 0000 0000 0000 0012
   0000420 0100 0000 0000 0000 0000 001a 0100 0000
   0000440 0000 0000 0000 0020 5f6d 6169 6e00 5f70
   0000460 7269 6e74 6600 5f73 7472 6c65 6e00 5f65
   0000500 7869 7400
   0000504


% axe_generate -f system.uhdl
Application 'Exchange' generated
2324042350000000 source code lines
No Errors detected.
Hardware retrieval...done OK
Certification Test...done OK
Packing..............done OK
Delivery.............done OK
Application 'Exchange' delivered to customer
23456000 bytes/sec.
End processing, 2345 seconds.

Ultra high level programmer

   system.uhdl :

   SYSTEM
     CREATE ScreenWin
       SIZE 20000000/Unit=One
       DESTINATION Order.dest[One]
       OUTPUT CHARACTER['Hello world']
     END
   END


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 all

I need a «Hello, world.» program by this afternoon.

Chief Executive

% message
message: Command not found
% pm
pm: Command not found
% letter
letter: Command not found.
% mail
To: ^X ^F ^C
help mail
help: Command not found.
>what
what: Command not found
>need help
need: Command not found
damn!
!: Event unrecognized
>exit
exit: Unknown
>quit
%
% logout

Bipppp!
— Mrs. Thompson? Please page Tommy for me. NOW!

Источник тут.
  • avatar
  • Gleb
  • 8060
  • +6
  • 06 октября 2010, 01:04

Комментариум (15)

RSS свернуть / развернуть
+
0
avatar

makenskiy

  • 06 октября 2010, 14:05

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
0_о XD
+
0
avatar

Gleb

  • 06 октября 2010, 22:19

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
В 2006 я смеялся до слёз… Как раз элементарную вещь переделывал с классами «потому что это ООП». Косил под профи))) CASE-систему в KDE даже нашёл.
+
0
avatar

terra

  • 08 октября 2010, 23:16

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Зачетно=))) Про ООП: подключать кучу библов, написать, а затем кидать в стек несколько классов для вывода «хелло ворлд» это чисто майкрософтовский подход, а не Master Programmer! Даже хедеры: windows.h, ole2.h об этом говорят;))))
+
0
avatar

Gleb

  • 09 октября 2010, 00:19

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
В конце 90-х аналогичный код под линь никто бы и не узнал. Было бы и не смешно, и непонятно.
+
0
avatar

terra

  • 09 октября 2010, 01:21

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
… если не секрет: чем код под линь отличаица от кода под вынь, если не касаисся API? =)))
+
0
avatar

Gleb

  • 09 октября 2010, 01:23

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
ну там нет ни OLE, ни COM… массовый прграммер раздутый до смешного пример пол линь не понял бы))
+
0
avatar

vnuk

  • 29 ноября 2010, 18:12

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Честно скажу, что понял дай бог 2%,
но суть не в том, теперь зато догадываюсь
откуда растут ноги другого баянищя=)
Не трудно догадаться на какой я намекаю=)
+
0
avatar

Gleb

  • 29 ноября 2010, 18:14

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
мне трудно, но любопытно. Ссылку в студию)
+
0
avatar

vnuk

  • 29 ноября 2010, 18:19

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Да ладно?
Далеко ходить не нужно=)
+
+1
avatar

vnuk

  • 29 ноября 2010, 18:23

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Да ладно?
Далеко ходить не нужно=)
через тег почему то не отобразилась=(
попробуем апнуть по старинке
www.itbuben.kz/blog/humor/135.html
+
+1
avatar

Gleb

  • 29 ноября 2010, 23:51

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
а, ложная тревога)… Симпсоны и Гриффины. Вроде, оба мультика про семью… а в остальном отличаются всем))
+
+1
avatar

vnuk

  • 30 ноября 2010, 00:23

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Да у меня просто возникло подозрение, что про льва в клетке
это вариант переложенный для более массового потребителя=)
Скорее всего так и есть. Это конечно ИМХО и догадки.
+
+1
avatar

Gleb

  • 30 ноября 2010, 00:33

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
нет, второй это пародия на широко известную в научных кругах задачку времён издания «физики шутят». Ну а первый, это про программисткое горе от ума — «мы не ищем легких путей!». У новичка все просто, потому что не владеет сложными методами. У опытного всё сложно ибо владеет))
+
+1
avatar

vnuk

  • 30 ноября 2010, 01:49

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Это я все понял.
Не считай меня полным дауном=)
Но анология в этих шуточках просматривается явная.
Про программеров я уловил именно общую канву, смысл же мне малопонятем и подозреваю, что многое теряется для меня в этой шутке.
Впрочем не буду уподобляться Капитану Очевидности=)
А вот второй очень понятен, он более доходчивый в сило хотя бы того, что все играли в игрухи, под все я как минимум имею в виду участников itbuben.kz =), в это число явно не входят вьетнамские лесорубы и спортсмены литрболисты=)
+
+1
avatar

Gleb

  • 30 ноября 2010, 02:01

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
XD Надо же, вот и я уже пытаюсь говорить о смысле прочитанного. Старею…

Пишу подробно, потому что не ты один читаешь))

Мне первый нра, потому что каждый из программеров упорно повторяет (даже находясь в изоляции) этот путь развития!

В моем случае начиналось с консольных текстовых игрулек на QBasic, потом Turbo и графика под DOS4GW, и наконец Си++ с Direct3D и OpenGL.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.