從工作到現(xiàn)在,一直在從事電信級(jí)嵌入式軟件開發(fā)工作,自己的天地里只有嵌入式軟件的“規(guī)矩”:不允許出錯(cuò),處處要關(guān)心性能,巨大的代碼工程,超長時(shí)間的編譯構(gòu)建,一到兩年的版本發(fā)布周期...。仿佛世界上只有這一種開發(fā)模式,仿佛這就是天經(jīng)地義的,仿佛這就是軟件世界的全部。
直到最近兩年不斷耳濡目染互聯(lián)網(wǎng)軟件開發(fā)的模式,視野漸漸開闊了一些,也開始慢慢重新思考軟件的本質(zhì),在這個(gè)過程中,我反而更加認(rèn)可互聯(lián)網(wǎng)軟件開發(fā)的價(jià)值觀:軟件并不應(yīng)該天生追求零缺陷,因?yàn)檐浖怯扇藢懗鰜淼?,而人的犯錯(cuò)是不可避免的。
而互聯(lián)網(wǎng)軟件的價(jià)值觀,恰恰接受了人是會(huì)犯錯(cuò)的這個(gè)事實(shí),一切軟件都是基于不可靠來設(shè)計(jì)的。軟件本身出問題不可怕,只要可以快速恢復(fù)就行,甚至用戶感受不到你的軟件剛剛出了問題。在這種開發(fā)哲學(xué)的驅(qū)動(dòng)下,逐漸產(chǎn)生了微服務(wù)等軟件架構(gòu)。而一個(gè)個(gè)微服務(wù)的劃分,讓軟件的規(guī)模得以大幅降低,一切變得的靈活而快捷,這也是為什么互聯(lián)網(wǎng)軟件的發(fā)布頻率能夠如此之高。我們羨慕之余唯有感嘆。從互聯(lián)網(wǎng)公司來的新同事總是會(huì)覺得有一種束縛感,這就是差異,工作方式和價(jià)值觀的差異。
當(dāng)然,在這里并不是說要全部生搬硬套互聯(lián)網(wǎng)開發(fā)模式,每個(gè)行業(yè)有自己的特點(diǎn),電信級(jí)嵌入式軟件,沒有辦法完全做到跟互聯(lián)網(wǎng)軟件一樣隨意,它有很高的可靠性要求,很高的時(shí)延要求,這一切,都要求做到嚴(yán)謹(jǐn)。其實(shí)能夠玩轉(zhuǎn)幾百上千萬行代碼的產(chǎn)品,這本身就是一件了不起的事情。但是對(duì)于軟件愛好者來講,總是有一種束縛感,為了性能要犧牲漂亮的代碼架構(gòu),數(shù)據(jù)結(jié)構(gòu)和類的設(shè)計(jì)要遷就內(nèi)存,必須時(shí)刻小心翼翼,以至于達(dá)到偏執(zhí)程度,因?yàn)橐粋€(gè)宕機(jī)就可能讓你失掉全部獎(jiǎng)金,甚至丟掉工作。至于代碼的擴(kuò)展性、可讀性,沒有人關(guān)心,只有小心翼翼在原來的基礎(chǔ)上完成自己的工作就好。至于重構(gòu),一般人是絕對(duì)不敢動(dòng)的,那怕這次重構(gòu)是多么的合理,因?yàn)閾?dān)心會(huì)因此招致禍端,多一事不如少一事。
即便是軟件的質(zhì)量要求不同,但是編碼價(jià)值觀可以借鑒,我們不能一味盯著如何不犯錯(cuò)誤,還可以換個(gè)角度想想如何能快速恢復(fù)錯(cuò)誤。不能因?yàn)樽非笮阅軣o條件犧牲代碼的美觀,至少不能太偏執(zhí)(我曾經(jīng)被詬病過:短小函數(shù)使用太多,會(huì)影響性能)。這一切都是價(jià)值觀上的導(dǎo)向,而不是其它。需要一種氛圍,讓代碼成為一件件作品,而不是碼出來的一堆符號(hào)。因?yàn)榫幋a除了是一份工作,還應(yīng)該能夠帶給程序員愉悅的享受和成就感。
幾年的嵌入式軟件工作經(jīng)歷,對(duì)我來講也并非一無收獲,從事過嵌入式軟件開發(fā)的程序員會(huì)養(yǎng)成嚴(yán)謹(jǐn)?shù)暮昧?xí)慣,這種習(xí)慣是一份寶貴的財(cái)富,也恰恰是互聯(lián)網(wǎng)軟件開發(fā)程序員缺乏的。
怎么做軟件,怎么才能做好軟件,這是一個(gè)需要持續(xù)思考的問題。