讓你編程得到升華:開發(fā)者需知的10個(gè)真理



我們希望每次的努力付出能夠有著深遠(yuǎn)的影響,希望我們的應(yīng)用程序所依賴的服務(wù)器如同磐石一樣,然而編程的獲取方式卻是殘酷的。這并不意味著你所有的努力都是有價(jià)值的。相反,我們應(yīng)該學(xué)會(huì)如何面對(duì)這些殘酷的事實(shí)。一起看下文中羅列出的10條實(shí)踐真理,或許能為你的工作帶來一絲幫助。
1. 如果這一切只是if-then-else語句
開發(fā)者往往會(huì)因封存(closures)、字節(jié)(typing)和抽象化(amazing abstractions)而爭論不休,最終會(huì)選擇 old if-then-else statements,這幾乎是所有開發(fā)者的需求,包括輸入輸出內(nèi)存移動(dòng)數(shù)據(jù)的操作代碼和算法操作代碼。剩下的便是將分支或非分支兩者之間進(jìn)行比較。
圍繞if-then-else statements,開發(fā)者們開始為其添加一些奇妙的虛偽的外表,但在最后,聰明的統(tǒng)計(jì)推薦引擎會(huì)在矩陣的數(shù)組列表中選出的最大值或是最小值,該引擎通過執(zhí)行計(jì)算瀏覽所有的列表,直到你作出最后選擇,否則它會(huì)一直提示你“這是最大值嗎,這是最大值嗎?”
2. 大多數(shù)Web網(wǎng)頁將數(shù)據(jù)存儲(chǔ)在表單中
在過去的20年里,互聯(lián)網(wǎng)世界帶來了神話般的財(cái)富,更好的友誼,更便宜的產(chǎn)品,更快的通信等等。究其核心,大部分互聯(lián)網(wǎng)將數(shù)據(jù)存儲(chǔ)在表單中。
Match.com?表單里包含著各種信息,比如頭發(fā)顏色,宗教信仰和鐘愛的食品。eBay?這個(gè)列表收集了最高價(jià)的項(xiàng)目列表。Blogs?字里行間記錄了每一個(gè)投訴。OK,我們將其命名為table。我們有理由相信互相網(wǎng)是一個(gè)神秘的且充滿智慧的地兒,它是一個(gè)自動(dòng)化的文件文件“辦事員”。
從編程語言來看,Ruby on Rails這個(gè)貫穿Web開發(fā)最流行的語言之一,是一個(gè)數(shù)據(jù)庫框架。你只需要指定一個(gè)全局的變量和Rails就可為你創(chuàng)建一個(gè)列表,因?yàn)樗煜に袆?chuàng)建表單的數(shù)據(jù)庫表。
還有一個(gè), NoSQL非關(guān)系型的數(shù)據(jù)庫。現(xiàn)今的計(jì)算機(jī)體系結(jié)構(gòu)在數(shù)據(jù)存儲(chǔ)方面要求具備龐大的水平擴(kuò)展性,而NoSQL致力于改變這一現(xiàn)狀。目前Google的BigTable和Amazon 的Dynamo使用的就是NoSQL型數(shù)據(jù)庫。
3. 用戶有自己的主見
如果你想為語言和labeled“save”創(chuàng)建event listener監(jiān)聽事件,將程序拷貝到磁盤上。在現(xiàn)實(shí)中,用戶會(huì)期待看到一個(gè)神奇的按鈕,在自己損壞的文件中修復(fù)所有的錯(cuò)誤或添加到401(k)中,點(diǎn)擊打開并永遠(yuǎn)保存下來。
或許,用戶還會(huì)這樣想,我們創(chuàng)造了一個(gè)完美的機(jī)器,每當(dāng)用戶打開時(shí),每一個(gè)設(shè)計(jì)都是萬無一失的,避免出現(xiàn)任何一個(gè)故障。他們?cè)O(shè)想可以點(diǎn)擊發(fā)送并未存儲(chǔ)在磁盤上的數(shù)據(jù)。所有這些完美的設(shè)計(jì),他們想通過一種方式來點(diǎn)擊任何被他們所遺忘的東西。
有時(shí),用戶是通情達(dá)理的,但在大多數(shù)情況下,他們是非?量痰,行為較為古怪。程序員嘗試著去猜測他們的想法,當(dāng)以最終的代碼結(jié)果呈現(xiàn)在用戶面前時(shí),他們會(huì)是怎樣的?結(jié)果還是失敗了。因?yàn)榇蠖鄶?shù)用戶不是程序員,他們要求程序員像普通用戶的那樣思考問題就如同要求一只貓像一只狗那樣思考一樣,這根本就不符合邏輯思維。
不管你如何發(fā)明智能的或設(shè)計(jì)出優(yōu)雅的代碼,用戶不會(huì)按照你的想法來看待問題。因?yàn)樗麄儾粫?huì)用140個(gè)字符限制來表達(dá)他們的憤怒和欲望。
4. 部分代碼永遠(yuǎn)不會(huì)被使用
你的工具是否支持XML,CSV,Aramaic。我們的操作團(tuán)隊(duì)能否解析瑪雅象形文字,也許在2012年年底有這方面的需求,如果不具備該功能,ok,如果你能提供此項(xiàng)功能,將會(huì)獲得更多的項(xiàng)目訂單。
當(dāng)然,用戶不用關(guān)心太多,他們只想要一個(gè)按鈕,這個(gè)按鈕甚至可以把他們混淆了。這個(gè)完美的代碼當(dāng)你在編譯時(shí)能夠支持N-1按鈕,在QA團(tuán)隊(duì)中能夠很好的被執(zhí)行。
程序員不像藝術(shù)家,他們可以指望自己的父母或者親戚能為其帶來某些業(yè)績,而我們的父母不會(huì)通過執(zhí)行代碼來測試性能。
5. 項(xiàng)目發(fā)生變化不可避免
一位經(jīng)理人曾告訴我有關(guān)他的秘密,他總是面帶微笑并告知他的團(tuán)隊(duì),他很熱愛他們所作的事情即便是有危險(xiǎn)的,在他走出門的那一刻,他會(huì)說“哦,還有一件事”。那個(gè)弧線球部分覆蓋了該項(xiàng)目,并要求大家重新設(shè)計(jì)應(yīng)用程序。意思說作為一名管理者首先你得肯定團(tuán)隊(duì)的工作能力。
項(xiàng)目范圍的擴(kuò)張程度直接體現(xiàn)了這個(gè)項(xiàng)目結(jié)構(gòu)的最終成果。經(jīng)理人總是使出全身解數(shù)來清算報(bào)表,首先他們構(gòu)思出一個(gè)偉大的夢(mèng)想,建立一個(gè)經(jīng)濟(jì)結(jié)構(gòu)模型來證明他們需要多少投資預(yù)算。
開發(fā)者們辛勤付出后,將勞動(dòng)成果呈現(xiàn)在經(jīng)理人面前,你的經(jīng)理人什么也沒做反而擔(dān)心:這個(gè)按鈕是在正確的位置嗎?日志頁面看起來有什么不同之處?即便是輕微的意見,它也改變了我們最初的需求,不是嗎?
6. 沒人理解你——尤其是老板
有兩種程序員:一個(gè)是按照老板指定的計(jì)劃進(jìn)行工作,沒有任何計(jì)劃,也不知道如何努力編寫代碼;另一種是以程序員方式全身心的投入工作,努力編寫出色的代碼。
你的老板永遠(yuǎn)不會(huì)理解你或者你的工作,他們關(guān)注的是當(dāng)業(yè)務(wù)發(fā)展遇到瓶頸時(shí)刻時(shí)你能否給出一個(gè)出色的解決方案,而不是你解決了計(jì)算機(jī)芯片等某種問題。
如果你的老板知道如何解決問題,他會(huì)留下來并將問題解決。因?yàn)樗琅c你交流,刨根問底要比實(shí)際操作花費(fèi)的時(shí)間要多的多。
7. 隱私權(quán)是一種痛苦
我們希望我們的服務(wù)能夠保護(hù)用戶以及他們的信息(隱私問題),同時(shí)又希望網(wǎng)站能夠簡潔易操作,我們希望能用最少的點(diǎn)擊數(shù)來達(dá)到用戶想要的目的。
隱私意味著你要多挖掘幾個(gè)問題,這樣才能確?刂菩畔U(kuò)散,然而這樣也就意味著我們需要有更多的點(diǎn)擊數(shù)。隱私也體現(xiàn)出一種責(zé)任,如果用戶不希望服務(wù)器知道他們過多的隱私,而服務(wù)器又無法讀取用戶的想法,怎么辦呢?所以說,責(zé)任是一種麻煩,隱私也是件麻煩事。
當(dāng)然,它也有有利的一面,比如說根據(jù)你的喜好,網(wǎng)站可以自動(dòng)提供鏈接,讓你隨心所欲買到自己喜歡的物品,當(dāng)你有需求時(shí)可以為你提供幫助。
8. 與他人建立信任
Web 2.0的誕生,豐富了人們的生活,這種新的互聯(lián)網(wǎng)方式,通過網(wǎng)絡(luò)應(yīng)用 (Web Applications)促進(jìn)網(wǎng)絡(luò)上人與人間的信息交換和協(xié)同合作,其模式更加以用戶為中心。因此,你只需將代碼鏈接給某人,就會(huì)有奇跡發(fā)生了,你的代碼會(huì)被調(diào)用。
首先,在別人使用你的代碼前,請(qǐng)先填好這些協(xié)議,在多數(shù)情況下,該協(xié)議會(huì)要求你放棄一切,那么你會(huì)得到什么回報(bào)呢?其次,和用戶建立信任,在基于該協(xié)議下每個(gè)人都會(huì)承諾最佳的實(shí)踐方法和最高的加密軟件來分享你的信息。因此,不用擔(dān)心你的代碼會(huì)被竊取。
最終的結(jié)果會(huì)比你預(yù)期的要好的多,比如會(huì)給你提供更多的工作。期待好運(yùn)降臨吧。
9. 當(dāng)代碼遭遇腐爛
當(dāng)你啟動(dòng)任務(wù)時(shí),你可以獲取最新版本庫,利用這些庫來工作一至兩周,那么將誕生library1.0.2版本,當(dāng)然你不會(huì)使用library B最新版本,因?yàn)槭褂肁版本的程序員已經(jīng)更新了新版本,這時(shí)你的老板還會(huì)要求你在C版本的基礎(chǔ)上開發(fā)出一些新的功能,當(dāng)然只適用于1.0.2.版本。
打個(gè)比方,當(dāng)房子和船要腐爛時(shí),他們會(huì)以統(tǒng)一的方式腐爛。很多團(tuán)隊(duì)都有這個(gè)問題,一個(gè)項(xiàng)目的代碼本來開始設(shè)計(jì)得好好的,一段時(shí)間以后,代碼就會(huì)變得難以理解,難以維護(hù),難以修改。為什么呢?因?yàn)榇a的腐爛都是由于沒有深入理解的情況下修改別人的代碼導(dǎo)致的。
我們以3個(gè)庫為例,但在實(shí)際項(xiàng)目中會(huì)有十幾個(gè)甚至更多的選項(xiàng),問題也會(huì)隨之成倍的增長。更糟糕的是,腐爛不會(huì)立即呈現(xiàn)。有時(shí)隱藏在某個(gè)角落里,看起來是個(gè)不起眼的問題,時(shí)間久了就會(huì)感染到整個(gè)代碼。正是這細(xì)小的不兼容的代碼會(huì)毀掉整個(gè)系統(tǒng)。
我們應(yīng)該讓代碼像諺語一樣即使是在100年后依然完整無缺。
10. 開源世界茁壯成長
越來越多的數(shù)據(jù)表明開源的重要性,目前,開源只有一小部分市場,極少部分人愿意將代碼貢獻(xiàn)給開源社區(qū)。
這也許就是Linux和BSD代碼的最大貢獻(xiàn)者們轉(zhuǎn)為封閉私有代碼的原因。像TiVo這樣的設(shè)備也許會(huì)使用Linux作為內(nèi)核,但絢麗的交互界面卻不是開源的,Mac也同樣如此。
近日,Linux boxes與Windows boxes之間的競爭陷入了困局。很多人都在質(zhì)疑:花一樣的錢,既然能夠買到一個(gè)可以安裝Linux的Windows機(jī)器,為什么還去買Linux 呢?Mac筆記本的價(jià)格是普通PC的2至3倍等等這種案例很多越多。然而只有極少部分人知道,iPhone也是一款開源操作系統(tǒng)。
只有人們不斷的去關(guān)注開源哪怕只是細(xì)微的性能部分,開源世界才會(huì)茁壯成長。
北大青鳥網(wǎng)上報(bào)名
北大青鳥招生簡章