隨著互聯(lián)網(wǎng)在中國的發(fā)展,程序員這一職業(yè)已經(jīng)越來越被看重,更有越來越多的年輕人把這作為一門安身立命的手藝,除了程序員的薪資優(yōu)厚意外,在婚戀市場上,錢多話少任干活的優(yōu)質(zhì)男標簽頁早以填在了眾多程序員的身上,不論是即將從業(yè)的大學生,抑或是準備轉(zhuǎn)行的行外人,在初嘗試這門手藝之前,你需要學習的東西有很多,但關(guān)于軟件編程,你需要記住一些更重要的事情。以下是藍鷗在行業(yè)內(nèi)浸淫多年的講師總結(jié),僅供大家參考。
沒有魔法
軟件100%和魔法無關(guān)(雖然我們說它有很多創(chuàng)造性的手段!)。你看到的每一個行為,你運行的每一個效果,它之所以發(fā)生只是因為一些代碼使之發(fā)生的緣故,而且總是能夠跟蹤那些代碼。
當然,這并不意味著跟蹤總是有用的。有時候你需要知道,有事情發(fā)生和它為什么發(fā)生并不真的相關(guān)。這導致我們陷入了下面的困境:
松鼠綜合癥
在你深入研究的時候,你會發(fā)現(xiàn)軟件充滿了無窮級數(shù)的干擾和如同鼠穴一般錯綜復雜的走向。如果你放縱內(nèi)心想像松鼠一樣囤貨的欲望,你固然可以學到很多東西,但如果你能退一步,每隔一段時間問問自己是否真的需要探索這條特殊的鼠洞,那么你能收獲更多。嘗試停留在一個小的范圍內(nèi)可以幫助你達到
領(lǐng)域
軟件是極其復雜的,復雜到足以讓我們定期創(chuàng)建出沒有人能一次性明白的代碼。我們通過更小和更獨立的部分,通過定義各部分之間的接口來構(gòu)建軟件,實現(xiàn)其復雜。這樣一來,如果你能在你的腦中適應(yīng)更小的一部分,那工作于那個塊和相信其他部分正常的時候多少更安全一點(至少當一切順利的時候)。
完全獲取哪怕更小的塊中的一個到你的頭腦中也可以是很難的,但與此同時,你可以做到一些諸如只知道你正在看的代碼行是錯誤的,以及如何修復這樣的事情。那就是軟件的領(lǐng)域了。這非常重要,并非因為你全力以赴,而是因為如果你沒有身處那個領(lǐng)域,那么想要做對一切事情幾乎是不可能的。而這給我們帶來的是
中斷
中斷使得你腦中丟棄了一些來之不易的內(nèi)容,從而阻礙你完成任何事情。十分鐘的中斷當然殺不光所有:但是它需要45分鐘才能讓你的腦子回到你中斷的地方。
這可能是有關(guān)軟件工作最難向人們解釋的事情——盡管大多數(shù)領(lǐng)域都有這樣的事情,但沒有我們這么悲劇。發(fā)生差異的部分原因是
直覺失敗
許多我們認為的“直覺”的確有效利用了我們大腦中的結(jié)構(gòu)——歷經(jīng)超過百萬年進化,已經(jīng)變得高度優(yōu)化——來幫助我們管理我們周圍物理世界的復雜性。但是,從事電腦工作并不是我們周圍物理世界的一部分:我的筆記本電腦創(chuàng)建了她自己的世界延伸,而我必須去這個延伸的世界工作。
軟件工程的力量在于那個世界的擴展是非常非常具有可塑性的——這力量是驚人的。不過,詛咒之一就是由于我們不再工作于物理世界,我們的直覺就不再有用,這讓一切都變得很難理解,除非我們做一些額外的工作來確保我們的直覺可以幫助我們。
打破我們直覺的主要事情之一是
時間是不可思議的
現(xiàn)在的時代計算機的運行是極其快速的。即使你手機運行的時間尺度比我們的大腦快十億倍:一秒時間傳遞給我們就像過了31年,不論是給予還是獲取,僅僅一個傳遞過程。這意味著我們不能實時觀看計算機正在做什么。
相反,我們不得不發(fā)明方法強制機器來匹配我們極其緩慢的步伐,通常為要求計算機等我們,或記住它正在做的一切事情且留下日志可供我們稍后讀取。當然,這些技術(shù)是如此地拖累事情的發(fā)展,以致于任何與時間相關(guān)的問題通常都會消失,或者至少看起來不同。
極端的話,我們最終還是盲人摸象,一點也不知道為什么代碼之所以脫離軌道。為了避免出現(xiàn)這種情況,我們不得不做一些真正的事情來安排代碼向我們解釋其決定。這工作往往很難且沒有吸引力——但它至關(guān)重要,因為受到了以下定律的重大影響
墨菲定律
在計算機運算中,墨菲定律可以重新表述為“如果你不能證明它是不可能的,那么它一定會發(fā)生——而且往往很快?!边€記得十億分之一的加速嗎?如果你一秒內(nèi)做十億次操作,且每次99.99999%%可靠,那么你會發(fā)現(xiàn)每秒出現(xiàn)了100個故障。
我們對于概率和機會的認知已經(jīng)根深蒂固:“不太可能”真正的含義是“在我思考的時間里可能不一定“。徹底地改變時間尺度,那么所有都將改變。