至今約10年的工作經歷。剛畢業的頭兩年,是在工控領域做自動化工程師,用PLC編程。之后,興趣使然,做了軟件工程師,用JAVA編程。曾在互聯網公司擔任過技術專家,管理過技術團隊。隨后又在創業公司做過架構師、技術總監等職位。
不能說經驗太豐富,多少也可以提供一些視角,供大家參考。
關鍵詞一:解決問題
很多零基礎學編程的文章,都列出了“勸退清單”,要入門就得學這些:數據結構、算法、Java、Spring、MySQL、緩存、消息隊列、數倉、分布式,極其各個細項,一大堆東西。別說零基礎,十年基礎看得也要慌。我認為如果一個人不出于解決實際問題,而整日看一些概念的技術書,是一個非常不人道的做法。
當然,當代程序員不得不看,因為廠里招人就是這個要求。一旦內卷,那大家都沒法好好生活。這是現狀,沒有辦法,我們也許只能接受,但是我希望的,在你接受現狀的時候,你也要眼里有光。編程到底是一個應用性很強的學科,它的目的在于“解決問題”!自己念三遍吧。
如果你看完這篇文章,甚至于我假使寫了無數篇文章后,只想讓你記住的四個字,那么就是“解決問題”。
比方你大學前端后端人工智能統統都學了,靠年輕之力記住了非常多的細節,你面試通過了,隨后你做的是后端工程師。那么,基本上你可以忘掉所有前端知識,只要記得那是在展示,即可。這是在做什么?是在基于抽象層級地學習。我們總說要搞明白抽象層級,基于接口編程,遷移到學習中,也是一樣的。你要相信你的接口,相信自己不用去深入跨領域的每一個細節,相信不用去搞明白底層的每一個細節,也能解決你的實際問題。
有個理論叫SOC——Separation Of Concern,關注點分離。運用到編程中,一個具體場景就是不要讓子程序的變量超過7個,為什么,因為人的短期記憶,就是只能處理7±2的概念數,一旦超過,你會極不舒適,你不舒適老板無所謂,但如果出了差錯你就完了。剛入行的時候經常看到有人寫幾百行的方法,寫完之后我看他人也不大好了,你要問他這是在寫啥,教教我,他脾氣也會變得很不好,這也就算了,他還想顯得自己挺懂,這就很難相處。
另外,我是一個平常心看待中間件的人,認為這也是另一種業務開發,不過它們的業務是某個中間件罷了。我們可以“去心中神”,不是做了某個底層領域就一定很厲害。事實上,每個領域的專家都厲害,每個領域的菜鳥都不厲害。我更喜歡這樣的工程師,知道世上新出了某些技術,隨后使用好這些技術,解決了某些實際的業務問題。至于要多么地深入這個工具的底層,就取決于場景是否需要。我們都知道不斷有新技術出現和淘汰,但又萬變不離其宗。
我自己來到創業公司后還有個感悟,中間件團隊一定不是中小廠的必備,甚至在資源有限的情況下,往中間件多投入一分都是錯誤的選擇。因為你投入小了不會有成效,投入多了沒這個資源。那怎么辦,緩存,隊列,都要用啊?答案很簡單,買。現在各種云服務非常多,他們提供的服務也遠比一些二線互聯網公司自建的中間件團隊要穩定。在當代,如果仍在堅持自建IDC機房,那很可能都過不了等保審計。比如這個問題——你如何容災備份。
說了以上這些,就是希望你重視“解決問題”,解決問題是需要有“場景”的,而非閉門造車的。這是我們的第一個“關鍵詞”。
關鍵詞二:完整理解。
我們已經知道了要學什么,是有一個限定范圍的。但是我們依然需要具備對問題的“完整理解”。
也許你會問,那這不是矛盾了嗎?剛才還說要有限定的學習和理解,怎么現在又要“完整理解”了,這不就是啥都要學嗎?
不是的,打個比方,公司的CEO知道基層員工在做啥嗎?大概率是不知道的,但是影響他管理好這個公司嗎,不影響的。
我給出的編程領域的“完整理解”,是需要你知道這一點——編程所做的一切,都是關于信息及對信息的處理。
拿一個公司技術團隊的標配來說,包含前端工程師、后端工程師、算法工程師、測試工程師。這些崗位,拿到的是同一批“信息”,但是大家對這些“信息”的“處理”不同。前端負責信息的展示,后端負責信息的邏輯,算法負責信息的洞察,測試負責檢查大家的工作。
再從中間件的角度去看信息的處理。大廠有專崗負責中間件。常見如,應用服務器、數據庫、緩存、消息隊列、數倉等等,還有很多。同樣,它們拿到的也是同一批“信息”。應用服務器負責計算,數據庫負責存儲,緩存負責熱點數據的加速,消息隊列負責緩沖,數倉負責分析。其中一些中間件的功能會有交集,但是他們擅長的領域不同,比如大學籃球隊隊長和我都會打籃球,隊長和我也可能都會編程,但籃球比賽就是得他去打,編程的事就得我去做。
如果你還是有些迷茫,很正常。因為現在說的還是太抽象了。我給你的完整理解的具體行動是這樣的:
找到所有常用的技術中間件,列一個清單,隨后通讀他們的介紹,找到這幾個問題的答案——他們叫什么,應用場景是什么,即可。
如果是從零開始,列這么個清單就有點難,那么我拋磚引玉,來給你這么一個清單。
技術名 |
場景 |
使用頻率 |
域名 |
網站名 |
低 |
IP |
主機標識 |
低 |
DNS |
域名和IP的映射 |
低 |
負載均衡 |
將請求分流 |
低 |
路由器 |
外網與內網的中轉站 |
低 |
交換機 |
內網與內網的中轉站 |
低 |
服務器 |
一臺電腦 |
低 |
數據庫 |
放數據 |
高 |
業務應用 |
負責計算 |
中 |
緩存服務器 |
放熱點數據 |
中 |
消息隊列 |
先把數據丟進去,排隊等著處理 |
中 |
文件存儲 |
存文件 |
中 |
搜索引擎 |
類似數據庫,但是能支持復雜的搜索 |
中 |
配置中心 |
專門放配置信息 |
中 |
郵件服務 |
發郵件 |
中 |
短信服務 |
發短信 |
中 |
Jenkins |
幫你串命令自動化發布的工具 |
中 |
Java |
你的編程語言 |
高 |
以上,是一些通俗的寫法。如果需要非常準確的定義,教科書里有一大把。但我自己的學習過程中,往往是通過教科書中的閱讀,隨后總結成這么一句簡單的話。盡管不一定準確,但很實用。并且,你也不要用我的總結作為你的總結,如果你能總結的更好,為什么不呢?
這里,我想到了一個《三傻大鬧寶萊塢》的場景,非常的生動,建議大家有空可以看一下。
再來看一眼表里的內容。你能看到,其中大部分都是中頻,甚至對于這些中頻的技術,都可以通過封裝的方式屏蔽其中的復雜度,對你來說只需要無腦調用即可。那么,剩下的,就是如何學會那兩個高頻,Java和數據庫。問題是不是簡化了不少。
關鍵詞三:哲學三問
你從哪兒來?現在在哪里?要到哪兒去?
我覺得我們務必要搞明白這些,這樣才會有行動的動力。拿我自己來說,我曾經是一名科幻愛好者,最喜歡的小說是《三體》,喜歡的電影有《星球大戰》、《星際迷航》等。既喜歡里面的科幻元素,也喜歡里面關乎勇氣和探索的故事。我自己也曾寫過一些故事,感動了自己,也感動了一些我強行投喂的朋友。
在寫程序前,我是一個非常喜歡寫故事的人,寫程序后,終日在恐懼和不安中學習,滿眼所及,永遠是學不完的知識。而學技術的過程也不再能體會到樂趣,只有焦慮,時刻擔心被職場淘汰。這些焦慮下的學習,不見得提升了我的價值,反而讓我倍感疲憊,忘了初心。如果你一生大部分的時間都是焦慮的,那么你一生就是不成功的。
所以,現在的我相信人是最終的意義,我們所做的一切,都是為了讓自己過的開心。而我們的價值,也不是能解多少面試題,而是能處理多少的實際問題。從人出發,滿足人的需求,將這些需求層層細化,就成了你手里的業務問題。這也是獲取財富的邏輯。
人生苦短,愿我們現在和以后,都能開開心心地工作和學習。