大多數(shù)程序員都是被屏幕包圍的。
在家里,一臺筆記本電腦外加一塊34寸的顯示器是標(biāo)配;在公司,受限于辦公條件,程序員們也會想方設(shè)法用兩塊甚至更多顯示器來拓展視野。
即便如此,很多時候他們?nèi)匀挥X得屏幕不夠用,恨不得將所有信息都鋪開來一覽無余。
這是為什么呢?有人曾經(jīng)問我:“為什么沒有程序員用手機(jī)編程?”
這其實(shí)與程序員的工作性質(zhì)有關(guān)。
程序員如此“貪戀”屏幕,是因?yàn)樗麄冃枰瑫r處理的信息量實(shí)在太大了。
日常工作中,程序員往往需要打開十多個應(yīng)用程序:多個IDE用來編程、命令行窗口執(zhí)行各種命令、ssh終端登錄到服務(wù)器查看日志和執(zhí)行操作、刷硬件、查看芯片串口終端、用記事本記錄臨時信息、用sftp上傳各種資料、用各種文檔閱讀器查看開發(fā)手冊和廠家協(xié)議,當(dāng)然還有瀏覽器,用來查詢各種知識點(diǎn)。
而且,只要是支持多窗口的應(yīng)用,他們都會盡量多開幾個窗口,以便在不同任務(wù)之間快速切換。
面對如此海量的信息,別說手機(jī)了,即使是單屏,如果不停地切換應(yīng)用,也會讓人疲憊不堪,效率低下。
很多人以為程序員的主要工作是編程,其實(shí)不然。研究和分析才是占據(jù)他們大部分時間的工作內(nèi)容。
程序員需要了解、理解、學(xué)習(xí)、借鑒和掌握與需求相關(guān)的所有知識和技術(shù)細(xì)節(jié),然后梳理出三個關(guān)鍵要素:
● 業(yè)務(wù)邏輯
一個需求反應(yīng)到業(yè)務(wù)上,需要哪些功能模塊參與、它們是如何協(xié)作的、交互順序是什么樣的、各自都有什么樣的約束和資源需求。
● 系統(tǒng)架構(gòu)
前面鋪開的業(yè)務(wù)邏輯,最終需要收攏到系統(tǒng)架構(gòu)中。程序員需要分析系統(tǒng)的構(gòu)成要素、運(yùn)作機(jī)制、資源需求和約束條件,即系統(tǒng)的動態(tài)、靜態(tài)、開銷和約束。
● 知識點(diǎn)和技術(shù)細(xì)節(jié)
程序員需要掌握所有參與者的知識點(diǎn)和技術(shù)細(xì)節(jié),尤其是涉及接口側(cè)的,必須完全掌握。
根據(jù)需求的復(fù)雜程度、對系統(tǒng)的了解程度以及對各知識點(diǎn)的掌握程度,這三者的完備程度自然有所不同。
如何平衡這三者來協(xié)調(diào)成本、時間、產(chǎn)出和風(fēng)險,就是開發(fā)方法論的精髓所在。
所以說,程序員首先是工程師,而工程師的職責(zé)是解決問題。
編程只是解決問題的工具之一,而對問題的認(rèn)識、研究和分析能力,才是解決問題的關(guān)鍵,而這些能力與編程本身并沒有直接關(guān)系。
掌握了問題的認(rèn)識、研究和分析能力,即使工具升級換代,也能很快學(xué)會并應(yīng)用;即使行業(yè)發(fā)展變化,也能換個行業(yè)繼續(xù)發(fā)光發(fā)熱,一直干到退休都沒有問題。
反之,如果只關(guān)注編程技巧,而沒有掌握問題的認(rèn)識、研究和分析能力,那就不能稱之為工程師,只是一個熟練的技工罷了。
這樣的技工只能按照工程師給出的解決方案來施工,一旦新工具出現(xiàn)、解決方案變化、生產(chǎn)力跟不上,自然就會被淘汰,逃不過“35歲危機(jī)”。