作者 | Java聖鬥士 | 原創圖文,轉載請註明出處
過度神秘化的設計模式,更應服務於生活的算法
一提到設計模式,不論是剛入行一兩年的小菜鳥,還是工作十年以上的資深業界大佬,都會不寒而慄,倒吸一口冷氣。
這是一個來自於《設計模式》一書中的神秘概念,在那個“混沌的”年代,編程界的四位大佬——GOF四人組,總結而得。閱此書者,如能習得一招半式,也會燃起劍指架構師寶座的雄心!
但是,為何說10年以上的資深大佬也會倒吸涼氣?
就是因為設計模式的變化無常,招無定式。
相比於其他的一些語法概念,二十多種設計模式更像是武俠小說中的內功心法。
常用的設計模式大概有5到10種,包括但不限於以下這些:
單例模式、工廠模式、適配器模式、裝飾器模式、代理模式、觀察者模式、MVC模式、策略模式等等。
瞧瞧這些極富畫面感的名稱,不得不讓無數Java工程師望而卻步。
就拿最簡單的“單例模式”來說,光是解決性能和空間的問題,就可以衍化出四五種寫法(參考《情景對話,一篇帶你參悟單例模式》),更不要說抽象了又抽象的“抽象工廠模式”。
而算法,光是研究算法就已經足以另闢一個新的職業領域——算法工程師。
數據結構和算法一直是程序員繞不開的話題,和設計模式一樣,任何IT大廠都不約而同的要求服務器端程序員有一定的算法和數據結構知識。
但我要說,不論是設計模式還是算法數據結構,都被我們看的太過神秘。
設計模式是一種軟件編程中會用到的最佳實踐,是為了更好的構建出更通用、更健壯、更不易出錯的代碼。
如果把時間拉回到我們曾經備戰高考的那段日子,就會發現,設計模式不就是語文作文中的各種優秀作文結構套路嗎?比如什麼議論文的總分總、三段式。
老師總是告誡我們要善用這些文章結構,讓閱卷老師更快速地領會文章主旨,發現我們文中的優點,從而獲得高分。而設計模式同樣具有相同的作用,比如工廠模式中的命名factory、單例模式中的getInstance()方法,等等,不僅可以使我們的代碼結構更加緊湊,同時也具有見名知意,達到一種自解釋的效果!
當我們站在巨人的肩膀上一層層揭開設計模式和算法的面紗,就會發現,這些前人總結出來的“內功心法”其實都源於生活。
一個音樂高材生,給整個Java界帶來了春天
“Don't Reinvent the Wheel”。
這是西方國家的一句諺語,意思是——不要一遍一遍地發明輪子。這個輪子原理被Spring框架的製作者再一次提來,並作為Spring框架的核心哲學。
其自身最大的核心特性之一IOC就是基於對象管理來提供開發者服務的,包括與其他各種技術的集成,都在不遺餘力地傳達著一個思想——“我已經幫你把你需要的東西都管理好了,你直接用就是了,不要重複造輪子!”。
由於Spring在Java界的霸主地位,也讓這句清新脫俗的諺語傳入國內,成為很多Java開發者信奉的真理!
然而,這一切的締造者,卻是一個音樂學博士——Rod Johnson。
他是Spring Framework的創始人。“很難想象Rod Johnson的學歷,真的讓好多人大吃一驚,他是悉尼大學的博士,然而他的專業不是計算機,而是音樂學。不明白那個禿頂的腦袋瓜裡怎麼會同時擁有如此高深的計算機技術和高雅的藝術細胞,只能驚為神人。”
世界上很多大佬,並不是隨隨便便就能成為神話,看看這位大神的腦袋,我們就能知道,對於科研工作,他究竟付出了多少個燃燒腦細胞的日日夜夜。
很多人都把自己侷限於一個很狹小的領域。
而我覺得,人的潛力真的比你想象的要大,就算是音樂和軟件開發如此八竿子打不著的兩個領域,依然可以有人做到鳳毛麟角。
我們還有什麼理由畏難懼苦呢?
好好學學這位大叔吧!
限制我們工資的,不是算法和設計模式,而是你的決心!人人都有改變命運的本領
要說聰明與愚鈍,自古有之。
聰明的人有改變自己能力的本事,然而卻因此而缺乏了一顆持之以恆的決心,最後也變得和普通人一樣碌碌一生。
而愚笨的人,由於意識到自己的才智不如常人,卻加倍努力,不畏險阻,最後終有所成。
在Java程序員求職面試的時候,經常會被問到一些常用設計模式,其中最為多見的是單例和工廠模式,還有就是會問到在工作中使用過哪些設計模式,或者Spring中用到了哪幾種設計模式。
算法的話,當然是需要能說得上一些Map和Collection的實現原理,以及冒泡排序等等。
這些看似工作中根本用不到的知識,為什麼能成為面試中的核心必考點?
原因我覺得並不總是直接考察一個人的硬實力,也同樣在考察Java程序員想要變得優秀的決心和未來規劃。
說到未來規劃,你有自己的規劃嗎?
5年以內工作經驗的Java程序員,只要不是特別想做一條鹹魚,必然會在學習的道路上鑽研設計模式和算法相關知識,面試這些知識,也恰恰是在考驗你是否有過這方面的學習計劃,同時檢驗你實施這些規劃的進度。
我依然相信這世界上存在我們學不會的東西,但在日常生活中往往是很難碰到的。
圍繞我們的困難,往往都是紙老虎,設計模式如此,算法更是如此。
任何大的難題都可以拆解成非常小的問題,也就是問題的本質,這些本質其實都非常原始,可以和生活中的很多事物產生聯繫。
為什麼說程序員聰明?
就是因為程序的世界,往往就是現實世界問題的一種0101的翻版。
我們用代碼模擬了這個世界,同時也在改變著這個世界。
世界都可以被程序改變,為什麼我們卻要停滯不前?所以,我相信,只要有所決心,人人都有改變自己命運的本領,願所有IT工作者勇往直前!
往期精彩:
《能否成為架構師?抽象工廠模式,真正考驗你抽象能力的時候到了》
《對話式情景剖析,String被final修飾的真正原因!一篇足矣》
---歡迎關注【Java聖鬥士】,我是你們的小可愛(✪ω✪) Morty---
---專注IT職場經驗、IT技術分享的靈魂寫手---
---每天帶你領略IT的魅力---
---期待與您陪伴!---