像寫詩一樣寫代碼
有人說過,代碼是人寫給人看的,順便讓計算機運行。
曾經和妹子裝逼,說過自己寫代碼就像寫詩一樣,可惜得來的是對於工科直男審美的無情嘲笑。雖然那嘲笑的小月牙和梨渦也很美,但是出於工科生的嚴謹,我還是要證明一下我寫代碼像寫詩一樣。
好的代碼當然是美的,就像詩一樣美,任何多餘的注釋都是對代碼本身的褻瀆。美的代碼有種攝人心魄的力量,讓你一看就會色授魂與,不僅僅是靠IDE規範出來的工整樣式,而是格式、數據與演算法的完美融合。甚至你還能從中看出程序員編寫代碼時的情感,是的,就像詩人寫詩一樣。
如果是為了趕deadline熬夜編程,那麼我的代碼就會沾染上我當時的昏昏欲睡與無精打采,隨意的使用著括弧的位置而不費神去安排他們的站位,隨心而至的功能編寫而沒有精巧設計模塊化的子功能。而在我用盡最後力氣裹著衣服爬上床倒去後,留下他陪著一堆warning入眠,或者難以入眠。
如果是為了打coding比賽而編程,那麼我的代碼是簡短的不能再簡短的,變數名從a用到e,如果不夠那麼就從aa再開始,因為f、ff以及fff家族是要留給函數的。高度緊張的情況下,我的代碼會吝惜得不近人情,甚至多余的一個換行符都捨不得給,害怕這兩秒耽擱了我搶奪一血的大業。和精短的軀幹鮮明對比的,是每個代碼都有著又長又重的預先寫好的代碼頭部,極盡我所能想到的頭文件以及用的非常順手的宏定義。希望她不是一個愛美的少女,否則一定要指著我的鼻子臭罵一頓然後扔出一堆error。
如果是在一個睡了午覺心情舒暢最好再有些太陽的午後,我的代碼就會裹挾著陽光下美好的味道,比如青草,比如歡笑,比如promise被首刀。變數命名一定是言簡意賅的,更不會出現拼音拿來當名字,實在想不到明顯含義的時候,還會有Alice、Bob等小夥伴出來救場,他們會上演一出我腦海中的好戲。功能會分解的盡量細碎,就像一個個飾品點綴在主函數中。
如果是在做一個繁瑣到討厭的課程作業,我會像寫八股一樣寫著代碼,應付著作業要求中的功能,懶于思考這些設計的整體性,就像懶散時東丟一塊西丟一塊的卧室,有時候自己都找不到某些部分的邏輯了。
從優秀的代碼中也能讀出詩意來。
傳統的老代碼,特別是經歷過那個磁碟都緊張的年代的代碼,會有經歷塵世的滄桑,經過了無數次的版本迭代,被保留到現在,或許已經跟不上新的特性,但是那種節省空間、節省時間的內在氣息,就像慈祥的爺爺奶奶在你耳邊叮囑著節約一點、再節約一點。
大公司出來的項目代碼有著「天生我材必有用」的睥睨,彷佛知道自己是為了改變世界而生的。這些含著金鑰匙出身的代碼,天然有一種貴族氣息,一行一止、一舉一動、一顰一笑都帶著規矩與大氣,和個人寫出來的或者小公司外包的項目如若雲泥之別。
大牛們個人精心雕琢的代碼,比起大公司生出的大家閨秀,有著一種小家碧玉的秀氣。雖然不是見多識廣、面面俱到,但是在某些功能應用上,往往有獨到的韻味。當你自己實現起來,才能知道一些「猶抱琵琶半遮面」的細節有著何等的神韻。
好的代碼是具有詩意的,好的程序員自然也是需要詩興的,慶幸自己還不用朝九晚九的在辦公室坐班,擠牙膏一樣擠出每天的任務進度。可以任憑著自己興趣做事,在想要算一個有趣的數學習題時,用python打兩行簡短代碼,在看到一個好玩項目的時候,fork到自己手裡把玩把玩。
我喜歡詩一樣的代碼,也想當詩人一樣的程序員。
推薦閱讀:
※還在用著5年前的cpu和顯卡,是一種什麼感受?
※熊寫代碼這三年:閱讀寫作與技術成長
※理論上任何代碼都可能沒有bug么?
※編寫整潔的 PHP 代碼