10個程序員必須學會接受的殘酷真相

>>>  創業先鋒 眾人拾柴火焰高  >>> 簡體     傳統

大多數時候,寫代碼都是挺有意義的一件事,不光能增加經驗值,解決難題的時候還特別爽。耐心、毅力、執著,再加上正確的工具——只要有它們的親密協作,優雅、漂亮的代碼就是手到擒來的事兒。


但是,緊接著拙劣的資源部署、新增的特性請求、糟糕的文檔更新洶涌而來,打破了我們的美夢。


但是這并不是說我們的努力就沒有價值。只是我們需要面對現實罷了。下面就是編程開發人員必須接受的10個殘酷真相。

1.編程就是if-then-else語句的運用



編程語言設計者討論、抽象化思考等等作為,其實都只是在舊的if-then-else語句上重新包裝一下而已。


這也幾乎就是硬件所有的功能了。是的,通過操作碼我們可以順利地移動數據輸入和輸出作運算和存儲,其余的則在比較的基礎上進行分支或者不分支。


而致力于人工智能的同志們更是為這些if-then-else語句包裹上了一件件神秘的外衣,通過這些語句,機器會按照我們的吩咐自動從一些數字矩陣中執行計算,查找搜索直到發現目標。

2.殘酷的開發真相No. 2: 互聯網其實就是存儲在表中的數據



在過去20年間,“互聯網”這個詞造就了神話般的財富、搭建了五湖四海的友誼、生產出更為便宜的產品、促成了更為快捷的溝通等等等等,除了治療癌癥,它幾乎就是無所不能。但是,說到底,互聯網的本質就是一堆存儲在表中的數據罷了。


Match.com?就是列滿頭發顏色、宗教信仰和興趣愛好的表格而已。ebay?就是一張記錄一筆筆合同的交易表。博客?就是一張每一行每一列寫下你天馬行空胡言亂語的數據表。無論我們怎么給它起名字,它的本質還是數據表格。


這一點也可以從編程語言中看出來。例如Ruby on Rails——當前操作web最為流行的編程語言之一,其實就是在數據庫中搞一個小天地:指定一個全局變量,Rails就會自動創建一個列,因為它的作用就是在數據庫中建立表格。

3.用戶有自己的想法



偶爾用戶會變得理智和通情達理,但是大多數情況下,他們都是古怪且難以琢磨的——甚至是非常苛刻的。程序員根本想不到這些用戶在看到產品時會出來哪些天馬行空的想法。因為用戶不是程序員,不會照著程序員的想法走。

4.你寫的大部分代碼將永遠不會被使用



這一點就不再多說了,說多了都是淚啊!

5.需求變更是必然的



有一位經理告訴我他的秘訣就微笑著和他的團隊說他們很棒,他很欣賞他們做的一切,然后在臨出門之間,他會說,“對了,還有一件事……”。就是這件事往往會顛覆整個項目,讓每個人都重新回到設計app的起點。


需求變更是項目結構的直接后果。管理人員會在事情開展之前做好所有的規劃工作,制定目標。


但是一旦事情交給開發人員,那管理人員就輕松了,然后開始無所事事了,成天胡思亂想吹毛求疵。這個按鈕放的地方對嗎?登錄頁面是不是應該改一改?反正一點點細微的想法就讓開發人員去做修改。


這在項目過程中頻繁發生,而且由來已久。要知道,就算是Ada Lovelace的分析機——被譽為第一段計算機程序,也有著需求變更的問題,源于將近一年的筆記討論中。

6. 沒有人理解你,特別是你的老板



我們可以將程序員分成兩種:第一種的老板是不會編程的,也不知道為了使代碼能成功編譯需要付出多大的努力;還有一種的老板以前也是程序員但是現在已經忘記了代碼編譯過程的艱辛。


第一種老板顯然永遠也不會理解你以及你的工作。不過這也是可以理解的,畢竟所學不同,術業有專攻。


而第二種老板,我們也可以理解。舉個例子吧,即使是最好的程序員,如果一兩個月不用API也會忘記這方面的內容。再則他們以前學的主流編程語言很有可能和現在的大不相同。


還有一點,如果你的老板自己知道如何解決問題的話,他往往會選擇自己熬夜解決它而不是費時費力地雇用其他程序員來解決。所以我們得感謝這些“不懂寫代碼”的老板。

7. 關于隱私,痛苦的糾結



我們都希望我們的服務可以保護我們的用戶和他們的信息。但是同時,我們也希望網頁簡單且易于操作。點擊深度——達到目標所需要的點擊次數——盡可能的少。


然而保護用戶的隱私就意味著,在用戶點入頁面之前得詢問用戶一些問題,以確定用戶已經知道這樣做可能帶來的后果。


隱私也意味著責任。如果用戶不希望服務器知道發生了什么事情,那么用戶就得自我承担責任,因為這樣做會導致服務器不能夠讀取用戶的資料。責任就意味著麻煩,從這個層面上說,隱私也是個麻煩。


隱私也意味著矛盾的邏輯思維。一邊希望能一個人呆著,另一邊希望知道大量的信息;一邊渴望安安靜靜毫無紛爭,另一邊則希望什么邀請函、購物優惠券、工作面試機會等等有多少來多少。


唉,俗話說,魚與熊掌不可兼得啊。總之隱私還是不隱私,it’s a question。

8. 信任是有代價的



項目Web 2.0聽上去很美!感覺只要把大家的代碼連接起來,就會有奇跡發生。你可以調用他人的代碼,別人也可以調用你的,相得益彰。


如果真能像你想的那么簡單就好了。事實是,首先在別人允許你使用他們的代碼之前得先填寫一些表格——大多數情況下會由專業人士起草——簽署“不平等條約”。你的回報是什么呢?將你辛辛苦苦寫出來的這么漂亮的代碼交給別人,卻不知道別人給出的是什么貨色?但是,沒辦法,你只能相信他們。


但是他們也不知道你是不是真有真材實料?搞不好你不過是個濫竽充數的家伙呢?但是他們也沒有辦法,也只能相信你。


而用戶則不得不信任你們雙方。哈,你說隱私?當然有了,每個人都承諾會使用最高級別的加密軟件,但同時卻堂而皇之地和所有人分享你的信息。不過你也不用担心。


結果往往是你得在這個項目上花上比你預計更多的精力和做更多的工作。這就是信任的代價。

9. 軟件有一定的生命周期



當你開工做新項目的時候,往往會利用最新出來的版本庫等一切資源。這時庫A的1.0.2版本出來了,但是它不能與庫B的最新版本兼容,因為庫A的程序員還停留在以前的發布上。然后庫C發布了一些你的老板真正需要你挖掘的新功能。當然這些功能僅適用于1.0.2版本。


如果說房子和船的腐爛是以一種潛移默化“潤物細無聲”的方式,那么代碼就是以一種復雜又迅猛的形式轟然倒塌。如果你想要庫C,那么就必須放棄庫B,同樣的,如果你選擇了庫B,你就不得不向你的老板解釋為什么不就近直接利用庫C的原因。


當然我舉的這個案例僅僅包含三個庫,但事實上,在現實項目里起碼不下十個,而且問題更多。更糟糕的是,很多時候這種消亡的趨勢我們還一下子看不出來。有時候甚至看上去是那么微不足道的一個小問題,感覺寫點代碼就能立馬解決。但是往往就是這么一個細小的不兼容性會猶如白蟻一般吃光所有的一切直到大廈坍塌。


生命周期的存在讓我們能更深刻的理解計算機。不要以為代碼沒有摩擦、沒有氧化、沒有微生物的繁殖,就是永恒的,就能永垂不朽,事實并非如此。

10. 在圍墻中生存發展



即使我們一再強調開放的重要性,但是有越來越多的證據表明,市場依然很小。而更糟糕的是,很多人往往不愿意在這方面投入成本。一些免費軟件倡議者堅稱社會應該提供免費軟件。總之很少有人愿意在軟件上面花錢。


這可能就是為什么Linux和BSD最大的采用者會將其專有代碼隱藏起來的原因。類似于TiVo的設備可能內部也會使用Linux,但是使它們顯得與眾不同的接口卻并不開放。Mac同樣如此。


隨便說一句,現在的Linux系統明顯比不過Windows系統。人們會想同樣的錢這邊只夠買Linux系統,那邊我都可以買到Windows電腦了,里面系統怎樣有什么關系呢?用戶如何選擇可想而知。


我只是希望以后會有越來越多的人愿意在軟件上為許可證付錢,這樣我們這一行業才能在這種四面圍墻的條件下生存發展。


譯文鏈接:http://www.codeceo.com/article/10-truth-programmer-must-know.html
翻譯作者:碼農網 – 小峰



CocoaChina 2015-08-23 08:42:38

[新一篇] Will Wright談游戲開發的過往及未來趨勢

[舊一篇] 如何創造AAA級的游戲玩法預告片,從而有效傳達游戲質量
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表