當前位置:
首頁 > 最新 > 解決問題的途徑

解決問題的途徑

新技術是解決問題銀彈嗎?何時才需要使用新技術呢?

01

必須用新技術嗎?

知乎上有一個討論「為什麼有不少互聯網公司在面對開發中的問題時,會傾向於使用新技術解決?"的帖子,我看大多數回復都是說新技術的價值以及為什麼要用新技術。這裡先不要糾結「新技術」的定義,任何新出現的理論、方法、工具、語言等都是這裡討論的「新技術」範疇。我認為作者拋出的這個問題還得仔細分析,首先」開發中的問題「必須都要新技術來解決嗎?

比如解決並發的問題就非得用go嗎?Erlang這種支持電信級高並發、容錯的語言已經30多年的歷史,不能算是新技術吧;退一步說,」開發中的問題「用現有的語言,比如Java就不能解決嗎?這裡面不可避免的夾雜著諸如「喜新厭舊」、「裝逼」等各式各樣的人性因素。一個典型的例子便是DevOps,鋪天蓋地的文章、案例隨處可見,但當DevOps被炒得爛的差不多的時候,現在又開始AIOps了,然而DevOps我們搞好了么?

回顧一下我們小時候學的曹沖稱象的故事可以給我們很多啟發。首先要搞清楚為何要用新技術,即要問自己新的技術能否解決目前的問題,實際上大部分問題均是因為沒有把握問題的本質導致。新的技術引入開始或許會簡單,但是隨著問題的深入,後面還會遇到新的問題,那麼問題固有的困難是什麼?實踐經驗告訴我們這些固有的困難往往是與編程語言無關的。

上圖是我們看到過各種技術,列舉它們並不是說這些技術不好,也不是說下面的就比上面的技術更有效,比如我就比較喜歡測試驅動開發,也喜歡領域驅動的技術,它們同樣都能解決我在開發中遇到的問題。列出它們的目的是想問一下,xxx系統要解決的問題必須要用這些「時髦」的技術嗎?俗話說「一寸長一寸強,一寸短一寸險」,各個技術都有各自的優缺點,我們在解決問題時需要綜合考慮,達到一種平衡。

02

何時採用新技術?

那是不是不用新技術了呢?非也,而是不能不經研究而隨便用新技術。歷史上有不少通過使用新技術完美地解決問題的例子。

為了研究「動量的變化率」,弄清楚速度就能滿足牛頓的要求,而速度是位置的變化率。對這個問題的研究,使他掌握了揭開變化率及其度量的全部秘密的萬能鑰匙--微分學,由變化率產生的「怎樣計算一個速度每時每刻都在變化的運動質點在給定時間內跑過的全部距離」的問題又使牛頓掌握了積分學。最後,牛頓又發現了微分學和積分學的密切聯繫,這就是「微積分學的基本定理」,微積分學的創立,極大地推動了數學的發展,過去很多用初等數學無法解決的問題,運用微積分,這些問題往往迎刃而解。

有成功案例也就有因為技術局限性而失敗的例子。在「程序員的範疇論」(category theory for programmers)中舉了一個例子,法國的博韋有一座未完工的哥特式教堂,它的設計試圖在高度與採光方面擊敗所有的教堂,但是建造中卻出現了一系列的崩塌。當時不得不用鋼樑木柱臨時做成支撐架構來阻止崩塌,但於事無補,因為很多東西在設計上就是錯的。這個例子說明,有些事情必須要使用新的技術、工具才能完成,所以學習和應用新技術也是很重要的。

當我們在解決問題的過程中,發現解決的問題缺少相應的技術和工具時,這時就需要研究、創造新的技術和工具。

03

思考

新技術不是解決問題的銀彈,如果不去思考問題的本質而去追逐新技術"令人眩目"的特質,顯然是本末倒置的。在何時使用新技術這個問題上,更應該以全局的眼光和理論的態度學習「流行」技術,只有深入的了解問題才能發現本質並找到解決方案,而也只有深入了解新技術才能掌握它應對的問題域,進而在設計上進行取捨。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 星雲學社 的精彩文章:

TAG:星雲學社 |