像Swing這種已經不太用的技術,大學還在教,到底要不要學?

程式猿DD發表於2021-06-11

一直以來,寫日常問題、前沿技術和架構思考類的文章比較多,今天為什麼突然來說說Swing這個陳年老技術呢?

因為在CSDN上看到了這樣的一篇文章:

可以看到作者對於學Swing還是挺憤怒的,不過確實Swing現在很少用了。但我的觀點還不是那麼絕對,因為從個人成長來說,Swing的學習確實給到了不少收穫。開始也沒打算專門來寫篇文章說說看法,然後上了一下掘金,居然就又看到了這篇文章(強大的推薦機制):

開始看標題格式還以為是同一篇,仔細看才知道原來是駁前面那篇的,對於後面那篇的不少觀點,個人還是比較認同的。

同時也因為作者的觀點,聯想到經常有讀者跟我聊遇到職業瓶頸的問題,與我給出的建議有很多不謀而合的認識,所以還是想寫一篇文章來說說。

首先,我尊重每個人對技術學習的觀點,這裡不評論到底誰對誰錯,我就結合自己的學習和成長路徑,談談這個問題的看法吧。如果螢幕前的你是正在讀書的學生或是遇到瓶頸的在職者,強烈推薦看完本文!

Swing對我的最大收穫

Swing,這個算是Java領域裡非常古老的一個技術點了,主要用來做客戶端程式的介面。

記得上大學那會兒,Java課的大作業、暑期實踐和後來研究生時期的實踐專案都有所涉及。還清晰的記得,當時跟宿舍小夥伴,一起做的是模仿當時MSN的掃雷對戰遊戲實現的一個支援聯網的客戶端小遊戲,介面部分就是用Swing來實現的。

在這個時期,我覺得最大的收穫就是在學完了Java之後,通過Swing可以實現一個看得見的,讓自己很有成就感的作品了,這樣的學習反饋其實對學習者來說,是非常棒的,也是感受程式設計樂趣的重要開始。這個時候其實是會有一些驕傲的,因為在實現的過程中,碰到了很多問題,也不斷的嘗試著去解決了很多問題。對於程式設計的思維模式是一次很棒的鍛鍊。

在驕傲之後,隨著後續課程的跟進,馬上就會迎來一次打臉和進步的課,就是設計模式!這個時候就會發現之前的實現有多糟糕,記得開始最多碰到的問題就是各個Panel之間的操作聯動,由於開始沒有學過設計模式,不知道觀察者模式等高階設計,一股腦的搞了很多靜態變數,以實現各種聯動,最後導致的就是程式耦合性非常高。

再之後,也是用Swing做了不過不少東西,比如:向量圖的畫板,無服務的聊天室。進一步學到了狀態模式的應用,網路相關的程式設計等。

也許有讀者會說,那你不會直接學Spring Boot + Vue來搞不是很多也都能實現麼?我覺得這兩者之間就學習上來說最大的衝突並不是將來會不會用,而是Swing應用的技術是非常純粹的,只要你學了Java,你就能馬上上手。而對於Spring Boot這樣已經封裝上幾層的框架,加上Vue這樣的前端框架,已經建立在了太多基礎內容之上,可能跟著教程去做,可以完成一些固定的東西,但要去深入理解這些技術的本質和更為重要的程式設計思維,幫助就沒那麼大了,而且從程式設計啟蒙、進階、深入的認知過程來說,初期我並不太建議把技術棧搞的太雜,反而容易覺得亂,不利於學習和培養興趣。

大學時期我們學的Swing,雖然最後在工作中並沒有給到我任何直接的幫助。但在學習的過程中,對於鍛鍊基礎的程式設計思維作用是非常大的,尤其對於設計模式的應用,作為來學習Spring MVC也好,Vue也好,很多設計思想上都是共同的。通過一個足夠單純的技術內容,對思維模式的理解更容易上手,掌握之後再去類比著學習其他的就會非常快。

大學專業課程對我的最大收穫

其實不光Swing,很多大學裡的專業課程,在我們未來的職業生涯中往往都不會直接用到。

比如:

  • 我們學了作業系統原理,就要去做作業系統嗎?
  • 我們學了計算機網路,就要去做網路裝置嗎?
  • 我們學了資料庫系統原理,就要去做資料庫產品嗎?

既然我們未來都沒有去做這些基礎設施的工作,那我們還學了幹嘛?乾脆別學了?書扔了算了?大學期間,我雖然順利的完成了這些課程的學習,但以前我也有過這些極端的想法,我們將來都去做業務應用了,這些東西有個鬼用!

然而,在不斷的實踐和挑戰中,我發現對於框架知識的掌握程度能幫到我們的範圍非常有限,而真正讓我能夠突破上升瓶頸的恰恰是這些當初覺得不那麼重要的課程所帶來的認識。因為這些內容裡所蘊含的設計思想和思維模式是未來指導我思考問題尋找解決方案的重要源泉!比如:很多就作業系統這一門課來說,其中設計到的各種併發場景解決方案快取加速設計等重要思想,都能對應到如今我們經常遇到的高併發、分散式場景下的各種問題。因為有這些基礎認識的加持(方法論),你在思考難題和設計解決方案的時候,會更有想法,更容易找到好的辦法!

在實際的工作過程中,對於開發童鞋在解決難題時候的一個特點。一些在大學裡對這些基礎課程掌握紮實的,往往只需要給他們直接講一遍設計思路,基本上馬上就能get到要點,因為他有了這些設計思想的基礎,通過類比的方式去理解就會非常容易。而對於這些經典內容或者基礎知識掌握欠缺的童鞋,往往你就得講的更加細緻一些,給他一步步介紹為什麼要這樣,他才能理解這麼做的原因。

所以,如果你是專業科班的學生,那我強烈建議你這些基礎課程一定要好好上,不要覺得將來用不到,就不用心學,甚至不學!如果你是培訓班出生,一樣強烈建議把我上面說的三個基礎課程好好自己補一下,因為培訓班基本不會教你這些,他們只管教會你一些企業在用的東西,讓你能快速的上手成為一個CRUD開發者

後記

我認為在一定程度上,對於基礎知識的掌握決定了你在技術生涯這條路上的上限

“知其然,更要知其所以然”。只有瞭解了本質原理,這樣不論問題如何變,我們都能靈活的去解決它。就像我對很多想做架構的讀者建議的,架構的本質一定要理解,一些基本原則要爛熟於胸,這些基礎方法論是未來指導你實踐最核心的內功心法。

切勿沉迷你過去的某一個成功經驗來指導你未來的所有工作。架構工作最怕生搬硬套,學了微服務,到哪裡都推微服務,學了中臺,管他多大團隊就幹中臺。最後,不但自己失敗,還給團隊和企業帶來巨大的損失!這樣的例子,這幾年太多了,相信大家也都碰到過,之前我也寫過一些不好的案例。究其原因,就是設計者對基礎、對本質的理解不到位,一味求表面,趕新潮框架,追熱點架構所導致的。

那麼最後,你覺得大學裡的這些過時的、未來不會用的基礎知識重要嗎?有必要花大力氣學嗎?留言說說你的看法吧!

一直尋思著交一些在校的學生朋友,但苦於長期接觸的都是在職的小夥伴。也許這篇文章學生讀者會多一些,順手建了個在校Java初學者群,大家對於Java方向的技術學習或者未來職業認知和規劃上有什麼疑問都可以在這裡提,工作快10年的我可以給大家一些或許有用的建議,少走彎路從加群(點選加入沖沖衝)開始吧!

相關文章