可能除了哲學家以外,我認為程 序員是最懶的一群人。他們的職業看起來又似乎有一定的勞動強度。想想看,生物學家要親自做所有的實驗...給數百隻小白鼠注射藥物不可能自動完成。醫生必須給病人進行身體檢查;教授每年都要教授同樣的課程;建築師從各個角度制定方案,並手工地將方案一筆一劃繪製出來。
讓我們再來看看更為辛苦的一些職業,情況更糟。營銷人員要不斷重複地進行同樣的產品宣傳;理髮師日復一日地做著同樣的事情;收營員每天都以相同的方式對貨物進行結算...工廠工人...
你面前呈現出了一幅,世界上有很多這樣的人,他們每一小時,每一天,每一年,有些甚至一輩子都在重複做著幾乎相同的事情。
來看看程式設計師
每當我們想連續兩次做同樣的事情時—我們會嘗試想乙個方法來自動完成此過程。每當你寫的**是完成同樣的一件事時,你會開始尋找乙個庫;每當你啟動乙個類似的專案時,你會去尋找乙個模板。
程式設計師的生活就是致力於消除重複的工作將瑣碎地任務從我們的工作流程中剔除,這能讓每個人生活得更輕鬆。這裡有乙個經典的笑話,說乙個程式設計師情願用一周的時間來寫乙個拷貝指令碼,也不願意將相同的檔案複製貼上兩次,儘管複製貼上可能只需要兩分鐘。
該死的,我們要遵循dry(don』t repeat yourself不要重複自己)的原則。這個原則的基本內容是寧願建立乙個令人費解的抽象類,也不要將不相同但非常相似的**寫兩次。
這當然會導致很多問題。
一般的軟體專案充滿了在頂層抽象類上構建的抽象類,你慢慢地會不清楚這些頂層抽象類將如何工作。甚至你完全不知道其**在做什麼。「dizzying but invisible depth」,涉及到這個問題時,你真的應該讀讀這篇短文。
另一方面,懶惰本身已經證明了歷史上許多科學和工程發展所帶來的背後推動力。用有輪子的拖車運東西比人工搬運要輕鬆;用船在水中前行比游泳來得容易;甚至如果***的想炸掉一座城市,你投擲一顆原子彈也比投擲幾千個小炸彈來的容易。
所以這也許並不是說程式設計師是懶惰的。也許真正懶惰地是工程師們。只是恰巧在這樣乙個歷史時刻,程式設計師作為工程師中最鮮明的一類,總是將世界向更好更光明的未來推動。而其它大多數領域已經在某種程度上穩定下來,或者需要更長的時間去適應新的工具。
這裡有乙個重要的問題要問:程式設計師天生就懶嗎?聰明懶惰的人容易被程式設計工作吸引嗎,或者這是一種社會效應?懶惰源於最好的程式設計實踐?還是最好的程式設計實踐源於懶惰呢?
乙個比較
最近,我有機會將乙個建築專業學生的一天與乙個電腦科學專業的學生(就像我自己)的一天進行比較。
大多數的建築系學生的生活充滿了這樣或那樣勞動密集的任務,這些任務是她工作的一部分。在任何時候,她都有可能要對一些模型進行拼湊粘合,在autocad中從50個不同的角度對同乙個物體進行繪圖,或者在其它3d建模軟體中重複相同的事情...然後將這些匯入到photoshop中成為真正好看的圖。
這種事會接連不斷的發生。我估計她花費在課程作業上的時間比她實際上課的時間多一倍還不止(事實上她說花了5倍還多)。更糟糕的是,更好的完成這些任務並不能真正加快完成任務的程序,這只是意味著你多知道了幾個鍵盤快捷鍵,意味著下次畫圖時你可能會少犯幾個錯誤。
熟練和精通完全無法優化關鍵的部分。
相比之下,當我不上課時,我通常都在做自己的專案。因為我可以,因為我有充足的時間。當有作業布置下來時,一般情況下,我都可以在幾個小時內完成...即使是最關鍵最重要的專案,老師也很少給我們超過一周的時間來集中完成作業,最多兩周。
基本上你能夠快速地實現眼前的任務,你工作中大部分時間都在致力於使你的任務完成得更加漂亮。但這對於你手頭的任務來說其實並不重要,你這樣做是因為你可以。
甚至於當程式設計師對自己的優化工作都產生厭倦時,他們會立馬轉而去建立工具來完成優化工作。
事情就這樣周而復始地重複著。
接下來的傢伙會使用他建立的新工具,使實現過程變得更快,接著優化它直到他最終厭倦,然後建立了乙個新的更好的工具。
所以...是辛苦的工作?
但回到我最初的觀點,辛苦工作對程式設計師的生產效率存在多大的影響?對於那些每天辛苦工作13小時以上,以取得競爭優勢的創業者來說,這又意味著什麼?這是值得考慮的一種優勢嗎?
辛苦的工作可能對程式設計師工作效率產生負面的影響。它掩蓋了背後所做的優化工作「哦,我可以手動把它完成,這將只需要10分鐘時間」(其實這需要20分鐘)。下一次,乙個相似的任務到來時,你可能需要再次手動把它完成,長此以往...
但是,我仍然沒弄懂,到底是懶惰的人更喜歡程式設計,還是程式設計使他們變得懶惰...
懶惰程式設計師的神秘天賦
假如說,你是乙個經理,環顧所有的員工 嗯,所有人都在忙著噼里啪啦敲鍵盤 對著電腦瘋狂點選滑鼠,咦,不對,有乙個傢伙不是這樣的!這個傢伙躲在角落裡 他在幹什麼呢?慢悠悠的,像乙隻蝸牛一樣轉悠。哦,等等,現在他回到了自己的座位!這個傢伙真的是在工作嗎?你的第一直覺肯定告訴你這個傢伙是最糟糕的員工,他的工...
高效程式設計師的特徵 聰明,懶惰
這裡我使用了聰明,懶惰和程式設計師這幾個詞。我說的這幾個詞的意思是 聰明 能夠周全的思考問題 不是那些耍小聰明的人 懶惰 就像是程式中的lazy loading,是指延後寫 的時間 而不是無所事事的人 正確的軟體開發應該是懶惰式開發,也被稱作忍耐式開發 這種開發方式的表現是,在真正動手寫 前,程式設...
高效程式設計師的特徵 聰明,懶惰
這裡我使用了聰明,懶惰和程式設計師這幾個詞。我說的這幾個詞的意思是 正確的軟體開發應該是懶惰式開發,也被稱作忍耐式開發 這種開發方式的表現是,在真正動手寫 前,程式設計師要花大量的時間通盤考慮所有可能的解決方案和途徑。這可以看作是延緩寫 在沒有完全理解問題前絕不動手寫 先把問題理解清楚,確保將要寫的...