【筆者感悟】筆者的學習心得【六】

2023-07-25 12:00:26

個人經歷

  任何心得寫出來都需要個人經歷,否則憑空想象真想不出來,然而有趣的是筆者這篇感悟並不是在工作中得出來的,而是在一個和軟體開發完全不相干的領域中得到的靈感,昨晚EDG和TES鏖戰五局,儘管最終EDG還是沒能戰勝自己的心魔TES,為什麼,不得不說選手的戰術執行得很差,但是EDG深厚的戰術儲備仍然讓TES在比賽結束後心有餘悸。筆者是一個電子競技迷,曾經一度也幻想過當電競選手,當然筆者這個年齡不可能再去打電子競技,所以只好跑來和大家搶飯吃了。

  今年MSI關注LOL賽事的同學們我想應該不用多說,我們就看堅守到最後的三支隊伍,就會發現最後這個結局並不出人意料,LCK賽區傳奇的隊伍T1,陣容是去年的世界賽亞軍,然而在今年的MSI中,卻先後敗給了LPL的JDG和BLG,只能遺憾退場,從比分上來看如果說T1對上JDG是打得滿頭大汗,那打BLG就明顯顯得戰力不夠。

  為什麼這樣的結局,除開選手的個人發揮,另一個原因就是因為今年T1的戰術儲備實在是太少,只要ban掉Faker的奎桑提,基本上就贏了一半。在JDG打出了T1的壓箱底陣容後,BLG只需要照貓畫虎,就輕鬆地送走了T1,同樣的道理,先後戰勝了兩支LCK的隊伍的BLG最後還是沒能打贏JDG,原因何在?其中一個原因也是戰術儲備的問題,只要看決賽的第一把就知道了,JDG的戰術儲備明顯佔優勢,手裡還有泰坦打野的陣容。

  大家發現筆者今天要講的是什麼了嗎,是的那就是:戰術儲備

技術實戰

  如果說有同學是一整個系列的部落格看到這的話一定會奇怪,筆者之前教大家用搭積木的思維去做專案,這會兒又提到戰術儲備,是不是精神分裂,當然不是,這兩個東西並不矛盾。

  我拿一個和積木非常相似的東西來給大家做個比喻,七巧板大家肯定都不陌生,如果現在大家去參加七巧板比賽

  比方說我只是要你拼出一條魚,那肯定難不倒很多同學,但是如果我後面加要求,這條魚不能太胖,或者尾巴不能太大。這個時候是不是就考驗你平時的有沒有拿著七巧板各種玩的經驗啦。

  那麼放回到程式設計中其實也一樣,事實上給你足夠的時間和空間,你可以用暴力演演算法解決世界上所有的問題,但是實際中使用者肯定不會那麼寬容,他一定要你做出來的東西火力又猛又輕巧。所以,這就解釋了很多時候暴力演演算法是一個可行的解決方案,但並不是一個合適的解決方案

  對於很多經驗不足的同學,上來肯定無師自通暴力演演算法,但是相信同學們在刷演演算法題的時候也會有所感受,用暴力演演算法往往只能算出來一部分結果。

  所以遇到真正解決實際問題的時候,就考驗你平時有沒有足夠的經驗積累,從中選出最合適的方法來解決當前的問題,也就是我所說的戰術儲備問題

  在筆者有限的開發經驗中,筆者發現儘管程式語言的知識很龐大,但是在實際開發中,用到的所謂的高大上的知識並不多,大部分用到的技能都還是停留在基礎知識部分。有的同學肯定又要問,難道只有基礎知識就可以做出大量的戰術儲備了嗎,當然可以,同學們知道七巧板可以拼出來的圖形有多少種嘛,據說有1600多種,所以同學們試想一下,哪怕你只學一門程式語言的基礎知識,也能整理出一本小冊子,也夠你組合半天了,這還沒算上你學的演演算法思想,資料結構等等,一個程式中也從來沒說過只能有一種演演算法或者資料結構

  順帶也給同學們解釋一下,為什麼很多開發崗位要求三年工作經驗,原因很簡單嘛,三年他的戰術儲備經驗肯定是到了一定地步的。很多同學可能理論學的很多,甚至有的同學一本書都啃了好幾遍,但是走到實際開發仍然顯得比較苦手,原因很簡單,你手裡抱著一堆零件,沒有組合經驗,那隻能是看上去像學渣文具多。

  有的同學可能盲目地把實戰和做專案畫等號,事實上這個說法是有問題的,因為做專案只是把功能實現了,但是並不一定你用的是最合適的方法實現了功能。就算你想把實戰和做專案畫等號,你也得學著多去重構程式碼,那才叫實戰。但是,我想有點經驗的同學都知道,重構的代價有時候很大,甚至會把整個專案結構都破壞掉。所以,筆者個人是不建議直接把做專案和實戰畫等號的。

理論積累

  如果說同學們走到上述這一步,那證明同學們已經走到了入門階段。那麼是不是說,我只需要學基礎,後面的那些高階知識看一看就行了呢。當然不是,俗話說巧婦難為無米之炊,筆者拿七巧板給大家只是做個比喻,基礎知識到底能組合出多少東西筆者也不知道,但是肯定只能覆蓋一小部分。如果真的可以解決全部問題,後面那些知識點就沒有必要存在了。

  大家終究還是要搞清楚理論學習和技術實戰的目的,技術實戰的目的筆者在先前也說明了,是為了戰術儲備。那麼理論學習的目的是什麼,就是原始積累,要搭積木首先得要有足夠的零件,而理論學習的目的就是這個,你手裡有足夠多的零件,才能組合出無限的精彩。

  所以,筆者也再次提醒大家,離開了學校也必須要持續學習,否則三板斧終究是走不遠的。

  理論積累和技術實戰是兩個相輔相成的部分,既有區分又有聯絡,在這裡光靠筆者給大家講終究是停留於表面,大家一定要去學著多實踐

專案設計

  筆者在之前一篇部落格中也提到了,這個時候積木數量足夠了,我們的對積木的瞭解也已經足夠透徹了,現在就到了搭積木的時候,做專案包括模組劃分,介面設計,結構優化種種內容,如果說技術實戰是戰術儲備,那麼專案設計是什麼?戰略規劃,這就是另一個完全不同的模組。

  戰術設計是指在戰略規劃的基礎上,制定具體的行動計劃和實施方案,以達到戰略目標。類似地,功能開發是在軟體設計的基礎上,根據具體需求和設計方案,實施具體的功能開發,以實現軟體的功能和特性。

  戰略規劃是指在整體上確定目標和方向,制定長期計劃,以實現組織的願景和使命。類似地,軟體設計也需要在整體上確定軟體的目標和方向,考慮軟體的整體架構和設計原則,以滿足使用者需求和實現軟體的目標。

  事實上戰略規劃也是可以放入到平時的實戰的,想必很多同學都知道我們作為軟體工程師後面的一條出路是什麼?是的,那就是架構設計師。架構設計師,針對軟體整體架構進行設計,而不負責具體的專案開發,因為他做的是戰略規劃,具體的戰術設計,怎麼實現功能是交給下面的一線開發人員去做的

  很多同學為什麼走不到這個地步,因為一開始就沒有注重練習,舉一個最簡單的例子,筆者做一個圖書管理系統和做一個外賣點餐系統,是不是軟體的整體結構是有所不同的?因此,平時也一定要注意練習

  筆者之前也在部落格中提到了,有時候做個人專案的時候感到非常迷茫,為什麼?現在我想大家應該明白了吧,相當於戰略規劃和戰術儲備都是臨時白手起家的,那可不就得困難重重嘛。

附註

  那麼今天就和大家聊到這裡,希望筆者可以給大家帶來一些幫助,早日克服困難,做出屬於自己的獨家專案,筆者接下來會更加努力的工作,給大家帶來更多的經驗分享,希望同學們工作順利,早日升職加薪、當上總經理、出任CEO、迎娶白富美、走上人生巔峰,想想是不是還有點小激動呢