這些沒有可讀性的代碼,卻又體現出程序員對語言的高度理解力


對於一個程序來說,最重要的自然是“正確性”。在保證了程序運行以及輸出結果的正確性之后,我們還會對程序提出其他的要求,比如容錯性,可移植性,高效性(運行速度快,使用空間小)等等。

而為了能夠更好地進行維護修改、傳播分享、閱讀學習,我們還會希望寫出來的代碼具有“可讀性”。也正是為了“可讀性”,程序里有了那么多的注釋,有代碼縮進,語法高亮,甚至還有代碼規范。

在編程的學習過程中,我也被反復強調要寫出來可以讓人類閱讀的代碼,而不僅僅是機器能看懂。我也被反復提醒,如果沒有注釋和文檔,過不了幾個月我再回頭看一定看不懂以前自己都寫了些什么東西,干嘛這么寫(事實也是如此)。而及時是寫注釋,也要注意《五種應該避免的代碼注釋》。

 

不過就是有那么一些人,他們不願意跟從常理,寫出的代碼完全超出正常程序員的理解能力范圍。

 

國際模糊C代碼大賽

The International Obfuscated C Code Contest歷年會評比出那些最難以閱讀的C程序,但是這些程序卻又是可執行的,甚至是十分有用的應用。

最新一屆比賽的獲勝者,是一個叫akari.c的代碼,如果看到它的代碼,我想你會說:這是在作畫還是在寫程序呢。

我只能欣賞畫作,實在無力看出代碼的含義,可能只能看看hint來知曉個用途了。

 

                                       /*
                                      +
                                     +
                                    +
                                    +
                                    [         >i>n[t
                                     */   #include<stdio.h>
                        /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1;
                     */int/**/main(int/**/n,char**m){FILE*p,*q;int        A,k,a,r,i/*
                   #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%"   "d\n%d\40%d"/**/
                 "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**"
          "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*="
       "yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?"
      "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/**
     */"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2"
     ":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[
     i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1]  !='\0'))?fopen(m[1],y+298):stdin;
      /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m]    =<2<5<64;}-]-(m+;yry[rm*])/[*
       */q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{     }[*/:fopen(m[2],d+14);if(!p||/*
       "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++"  <)<      ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)
    return+printf("Can "  "not\x20open\40%s\40"    ""       "for\40%sing\n",m[!p?1:2],!p?/*
  o=82]5<<+(+3+1+&.(+  m  +-+1.)<)<|<|.6>4>-+(>    m-        &-1.9-2-)-|-|.28>-w-?-m.:>([28+
 */"read":"writ");for  (   a=k=u= 0;y[u];  u=2    +u){y[k++   ]=y[u];}if((a=fread(b,1,1024/*
,mY/R*Y"R*/,p/*U*/)/*          R*/ )>/*U{  */   2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\}
*/sscanf(b,d,&k,& A,&           i,  &r)&&        !   (k-6&&k -5)&&r==255){u=A;if(n>3){/*
]&<1<6<?<m.-+1>3> +:+ .1>3+++     .   -m-)      -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/
u++;i++;}fprintf   (q,    d,k,           u      >>1,i>>1,r);u  = k-5?8:4;k=3;}else
  /*]>*/{(u)=/*{   p> >u  >t>-]s                >++(.yryr*/+(    n+14>17)?8/4:8*5/
     4;}for(r=i=0  ;  ;){u*=6;u+=                (n>3?1:0);if    (y[u]&01)fputc(/*
      <g-e<t.c>h.a r  -(-).)8+<1.                 >;+i.(<)<     <)+{+i.f>([180*/1*
      (r),q);if(y[u   ]&16)k=A;if                               (y[u]&2)k--;if(i/*
      ("^w^NAMORI; {   I*/==a/*"                               )*/){/**/i=a=(u)*11
       &255;if(1&&0>=     (a=                                 fread(b,1,1024,p))&&
        ")]i>(w)-;} {                                         /i-f-(-m--M1-0.)<{"
         [ 8]==59/* */                                       )break;i=0;}r=b[i++]
            ;u+=(/**>>                                     *..</<<<)<[[;]**/+8&*
            (y+u))?(10-              r?4:2):(y[u]         &4)?(k?2:4):2;u=y[u/*
             49;7i\(w)/;}             y}ru\=*ri[        ,mc]o;n}trientuu ren (
             */]-(int)'`';}             fclose(          p);k= +fclose( q);
              /*] <*.na/m*o{ri{                       d;^w^;}  }^_^}}
               "   */   return  k-                -1+   /*\'   '-`*/
                     (   -/*}/   */0x01        );       {;{    }}
                            ;           /*^w^*/        ;}

這位作者的作品還不止這一件,你可以到他的網站上慢慢欣賞。

C++標准庫代碼

C++的標准庫是十分常用和實用的工具,特別是里面容器(stl container)執行效率又高,功能簡潔又方便,模板實現支持類型又廣。

但是每當不小心step in標准庫的模板時,心里就是陣陣悸動。各種模板套模板,一層調一層的,比Inception還要深入。

  template<typename _Tp, typename _Alloc>
    typename vector<_Tp, _Alloc>::iterator
    vector<_Tp, _Alloc>::
    insert(iterator __position, const value_type& __x)
    {
      const size_type __n = __position - begin();
      if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage
      && __position == end())
    {
      this->_M_impl.construct(this->_M_impl._M_finish, __x);
      ++this->_M_impl._M_finish;
    }
      else
        _M_insert_aux(__position, __x);
      return iterator(this->_M_impl._M_start + __n);
    }

 

JavaScript

受到網絡傳輸的限制,為了更好的應用資源讓頁面呈現得更快。網站開發人員總是會將JavaScript等文件進行壓縮,去掉空格去掉空格,定義最簡短的變量名。於是乎,很多時候打開一個js文件一看:盡然只有一行代碼,但拖動水平滾動條,卻怎么也找不到那結尾在哪里。

當前web開發中很流行的jQuery就是這個典型的例子。

 

想從Production版本里看出jQuery是怎么實現的,恐怕眼睛和腦袋都傷不起呢。

其他

酷殼coolshell上還有很多好玩的程序,也是叫人看得抓狂卻又不驚嘆厲害。

比如《6個變態的C語言Hello World程序》,《如何加密/混亂C源代碼》等等。

 

 

寫出這些代碼的人絕對不是那些2B程序員。他們是牛逼程序員,或者套用流行的說法他們是“文藝程序員”。因為,他們更懂程序是什么,他們掌握程序的規范,他們深知程序的心。

不過這種藝術不是每個程序員都能學會的,所以我們還是好好做個普通程序員,認真追求正確性,高效性和可讀性吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM