1. 程式人生 > >【轉】你的程式碼寫的很爛

【轉】你的程式碼寫的很爛

我有一個很熟的朋友,他現在忙的不可開交。他手上有一大堆沒有完成的合同,而且一個跟他一起開發的助手也離他而去。於是,在三個大客戶的催命鬼時的督促下,他已經連續好幾個星期沒休息了。

其中有個客戶跟他討論他給這個客戶做的iPad應用程式,客戶告訴他“我們花錢僱了另外一個程式設計師來審查你的程式碼,他說你的程式碼寫的很爛。”

當他告訴我這個故事時,我只是微微一笑,想起了我以前是怎麼唾棄別人的程式碼的。當我剛開始程式設計時,我看到過一段程式,我認為那是毋庸置疑的寫的很爛的,我刪掉了那段程式碼,用自己認為更好的方面重新寫了一遍。當我變成的成熟後,我回頭再看,發現我所刪掉的那段程式碼其實是用了一個很好的設計模式,而我重寫的確是醜陋無比。

我就這樣被上了一課。

之後的日子裡,我經常會遇到我認為是醜的不能再醜的程式碼。儘管如此,我也不通篇否定它們了,我只會在其中找一些特別的無法容忍的部分重新編寫。可10次中有9次,當我快要完成時,我發現了一個問題使我不得不對自己說“哦,怪不得他們要寫成這樣了”,然後把程式碼恢復成原樣,或也使用同樣“醜的不能再醜”方式完成它。

現在我變的更成熟了,我可以充滿自信的告訴你,我再也不會看著別人編的程式碼說“哦,這程式碼很爛”了。我知道,在沒有了解整個程式的解決方案之前,你不可能就那麼輕易的判斷程式碼的好和壞。真的,有時候它看起來很傻,或完成的不好,或沒有文件標註(我的意思是自我註釋),然而,你根本就不可能知道程式設計師在寫這段程式碼時腦袋裡是怎麼思考的。更多的情況是,他們要選擇這樣做是有一定的理由的,除非去深入的研究它們,你不可能再有其他簡單快速的方法來理解程式的上下文環境。

所以,每當聽到有人看著別人的程式碼說很爛時,我只會微微一笑,讓我想起我當年的天真和盲目自信。的確,我以前堅信自己是個出色的開發人員,堅信知道每種演算法的最優設計。我很想念當時的自大,但是我很高興現在學到的這些理念,我知道,我唯一能鄙視的程式碼只能是我自己的程式碼,鄙視的原因就是我不能使它變的更好。

[英文出處]:Link

相關推薦

程式碼

我有一個很熟的朋友,他現在忙的不可開交。他手上有一大堆沒有完成的合同,而且一個跟他一起開發的助手也離他而去。於是,在三個大客戶的催命鬼時的督促下,他已經連續好幾個星期沒休息了。 其中有個客戶跟他討論他給這個客戶做的iPad應用程式,客戶告訴他“我們花錢僱了另外一個程式設計師

會用哪些JavaScript迴圈遍歷

總結JavaScript中的迴圈遍歷定義一個數組和物件 const arr = ['a', 'b', 'c', 'd', 'e', 'f']; const obj = { a: 1, b: 2, c: 3, d: 4 } for() 經常用來遍歷陣列元素 遍歷值為陣列元素

做了那些事情,導致老板下調了對的評價

提前 方案 掌握 但我 真的 周期 事情 未來 所在 別像死魚一樣 在我的團隊裏,出現過不少次這樣的情況,就是你發個消息在工作群裏,沒人回應,比如我看了一篇比較好的營銷文章,發到運營群裏,問大家覺得這個怎樣?然後就出現了死寂的沈默,nobody say anything,除

delphi讀txt檔案

1. memo控制元件讀取txt memo1.Lines.LoadFromFile('E:/*/*.txt'); 2. Procedure NewTxt(FileName:String); Var F : Textfile; Begin if fileExists(Fil

真的懂select Socket模型嗎?

你看到的這個文章來自於http://www.cnblogs.com/ayanmw 轉自:http://www.cppblog.c

[程式設計師]多些時間思考 少程式碼

導讀:作者陳皓在微博上說過這樣一段話:“聰明的程式設計師使用50%-70%的時間用來思考,嘗試和權衡各種設計和實現,而用30%–50%的時間是在忙碌著編碼,除錯和測試。聰明的老闆也會讓團隊這樣做。而愚蠢的老闆,愚蠢的程式設計師會拿出來100%-150%的時間來忙著趕進度,

C/C++ Memory Layout

為什麼需要知道C/C++的記憶體佈局和在哪可以可以找到想要的資料?知道記憶體佈局對除錯程式非常有幫助,可以知道程式執行時,到底做了什麼,有助於寫出乾淨的程式碼。本文的主要內容如下: 原始檔轉換為可執行檔案 可執行程式組成及記憶體佈局 資料儲存類別 一個例項 總結 原始檔轉換為可執行檔案 原

不再害怕指針——C指針詳解(經典,非常詳細)

有一個 情況 value 第一個字符 接下來 意思 strcpy abcdefg 數值 前言:復雜類型說明 要了解指針,多多少少會出現一些比較復雜的類型,所以我先介紹一下如何完全理解一個復雜類型,要理解復雜類型其實很簡單,一個類型裏會出現很多運算符,他們也像普通的表

手摸手,帶用vue擼後臺 系列二(登錄權限篇)

userinfo ogr abort 變化 再次 狀態碼 quest -o 監聽 前言 拖更有點嚴重,過了半個月才寫了第二篇教程。無奈自己是一個業務猿,每天被我司的產品虐的死去活來,之前又病了一下休息了幾天,大家見諒。 進入正題,做後臺項目區別於做其它的項目,權限驗證與

一個通用的事件偵聽器函數

else arguments handle 加載完成 || document 完成 amp 能力 // event(事件)工具集,來源:github.com/markyun markyun.Event = { // 頁面加載完成後

這些JavaScript編程黑科技,裝逼指南,高逼格代碼,讓驚嘆不已

min 最短 window cat 最大值 暫時 哈哈 over 比較 【轉】這些JavaScript編程黑科技,裝逼指南,高逼格代碼,讓你驚嘆不已 Javascript是一門很吊的語言,我可能學了假的JavaScript,哈哈,大家還有什麽推薦的 本文秉承著:你看不懂是

在IIS上部署的ASP.NET Core項目

target put 環境 mic conf ima 日誌 spn for 概述 與ASP.NET時代不同,ASP.NET Core不再是由IIS工作進程(w3wp.exe)托管,而是使用自托管Web服務器(Kestrel)運行,IIS則是作為反向代理的角色轉發請求到Ke

如何理解雲計算?簡單,就像吃貨想吃披薩了

公司 如果 pan 雲技術 cit 分類 本地應用 style 分發 你一定聽說過雲計算中的三個“高大上”的概念:IaaS、PaaS和SaaS。這幾個術語並不好理解。不過,如果你是個吃貨,還喜歡披薩,這個問題就好解決了!好吧,其實你根本不是一個吃貨,之所以自我標榜為

如果有人讓推薦Python技術書,請讓他看這個列表

實現 的人 arr word 練習 block ati -c swa 入門級 《Head First Python》+ 入門級 + 微信49票 + 豆瓣評分 9.5 推薦語: 66:淺顯易懂,編排的順序特別,有大量插圖、對話,不感覺枯燥 古心:通熟易懂,配有大量の圖片,不

解決“沒有權限訪問,請與網絡管理員聯系”

sign cfa 允許 bd09 blank 風險 data- 中心 大文件 解決“你沒有權限訪問,請與網絡管理員聯系” 局域網共享時提示你"沒有權限訪問,請與網絡管理員聯系請求訪問權限".局域網共享無法訪問被共享的文件夾。 方法/步驟

關於編程,的練習是不是有效的?

分享 關於 一個人 gpo 酷炫 合成 2.4 anon cal 對於我來說,提升技能的項目會有四種: 純興趣驅動的項目。即我的Idea列表上的一個個酷炫的項目,先滿足自己再說。 理論驅動的項目。這一類的項目會比較少,因為我們需要牽強地驅動出這樣的項目,然後以理論的方式驅

如何好.babelrc?Babel的presets和plugins配置解析

問題 編譯bind mbo gin browser 聲明 尊重 short node 什麽是Babel The compiler for writing next generation JavaScript.   官網是這麽說的,翻譯一下就是下一代JavaSc

Android開發筆記(序)在前面的目錄

animator 進程間通信 scrip cst 調用 receiver 手勢 打包 數據庫基礎 原文:http://blog.csdn.net/aqi00/article/details/50012511 知識點分類 一方面寫寫自己走過的彎路掉進去的坑,避免以後

怎樣一個解釋器

else 取值 attr 依賴 第一個 一點 等等 做成 函數定義 寫一個解釋器,通常是設計和實現程序語言的第一步。解釋器是簡單卻又深奧的東西,以至於好多人都不會寫,所以我決定寫一篇這方面的入門讀物。 雖然我試圖從最基本的原理講起,盡量不依賴於其它知識,但這並不是一本編程入

跟我一起 Makefile

軟件 linux下 是我 main c++ class 情況 如果 反斜杠 概述—— 什麽是makefile?或許很多Winodws的程序員都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程序員,makef