分享是最有效的學習方式。
部落格:https://blog.ktdaddy.com/
地鐵上刷到一個話題,覺得挺有意思的,如下。
看到很多朋友在下面吐槽,有說加班是真的多,有說找物件是真的難,有說程式設計師愛穿格子衫是假愛背電腦是真的等等,大家吐槽得都挺歡樂的。
老貓也開始覆盤這些年的經歷,更多想聊的可能還是一個後端程式設計師的真實感悟。
入行
俗話說“男怕入錯行,女怕嫁錯郎。”相信很多朋友在進入一個行業之前都是深思熟慮的,亦或者是諮詢過一些人,亦或者是查閱了挺多資料。然而老貓入行則相當奇葩,不是蓄謀已久,而是心血來潮。
一切都得從一部電視劇開始,不曉得大家有沒有看過這部電視劇,佟麗婭主演的“我的經濟適用男”。
12年的一部電視劇,挺老了,主要女主放棄富二代的追求和"成熟穩重老實巴交的IT男"好上了的橋段。當時心智單純的老貓可謂看的是熱血沸騰啊。一拍桌子,“發可油,勞資今後就要當那個男主,這結局多好啊,抱得美人歸啊這是,我要學IT!”。當時老貓的專業是電子資訊類的專業,後來基本就放棄了本專業,大學基本逃課就跑去學軟體去了。
就這麼上了賊船,一晃十年過去了。多年前,躲在實驗室裡,開發了一個簡單的坦克大戰的遊戲,感覺自己是最牛逼的,子彈愛怎麼飛怎麼飛,坦克能開多塊就開多快,那時候覺得自己就是這個IT世界的主角,“control evety thing”。在這樣一個程式的世界裡,所有的事兒都是自己說了算。
踏上社會後,遭遇社會慘無人道地毒打之後,發現要做的就是提升造火箭吹牛逼的能力,工作中是個crud-boy。鍵盤上磨損最嚴重的那幾個鍵是“ctrl”,“c”,“v”,“x”。當年那個意氣風發的少年已經不復存在,我是一個弱雞螺絲釘。
工作十年
大部分後端程式設計師也主要是圍繞著業務在轉,所以crud可能佔了大部分時間。
話雖如此,但還是有點除此以外的收穫,這些收穫甚至潛移默化地影響著我的生活。
技術日新月異,今天這個框架,明天那個架構,今天這種實現牛逼,明天那種部署更6等等,到頭來發現自己一直都是在追著技術跑。也確實如果不奔跑的話,可能就會被淘汰。作為程式設計師來說適應變化也是程式設計師的一種品質,但是老貓覺得具備下面這些可能會更加重要一些,這些可能也是唯一不變的。
抽象思維很重要
第一次聽到“架構師”這個職位的時候,覺得那一定是一個需要超強技術能力的人才能勝任的崗位。
後來才發現原來架構師也分種類,“業務架構”,“技術架構”等等。再後來發現無論哪種架構,其實他們身上會有一種共同的東西,那就是優秀的抽象思維。
啥是抽象思維?百度百科上是這麼說的:
抽象思維,又稱詞的思維或者邏輯思維,是指用詞進行判斷、推理並得出結論的過程。抽象思維以詞為中介來反映現實。這是思維的最本質特徵,也是人的思維和動物心理的根本區別。
說的比較官方,甚至有點不好懂。
大家以前上語文課的時候,有沒有做過閱讀理解,老師在講課的時候常常我們概述一下這段文字到底講了什麼東西,越精簡越好,可能要求20個字以內。其實這個過程就是在鍛鍊咱們的抽象思維能力以及概括能力。
在軟體後端領域,當業務傳達某一個需求的時候,往往需要產品去提煉一道,那麼此時就是產品抽象,繼而產品又將需求傳達給相關的研發負責人,研發負責人設計出相關的實現模型,那麼這又是技術抽象,這些抽象的過程就是將複雜的業務流程和邏輯轉化為可管理和可重用的元件的過程。它的目的是簡化系統的實現,聚焦於應用程式的核心功能,同時隱藏不必要的細節。抽象後設計出各種基礎能力,透過對基礎能力的組合和拼接,支援複雜多變的業務邏輯和業務形態。
具備抽象思維,能夠讓我們從複雜的業務中迅速切入業務關鍵點。在生活中可能表現在透過現象看到本質,或者碰到問題能夠快速給出有效解決方案或思路。例如老貓上次遇到的“真-丟包事件”。
分層思維很重要
說到分層思維,應該準確地來說是建立在能夠清晰的抽象出事務本質的基礎上,而後再去做分層。
很多地方都會存在分層思想。生活中就有,大家雙休日沒事的時候估計會逛商場,商城的模式一般就是底層停車場,一層超市,二層賣服裝的,三層兒童樂園,賣玩具的,四層吃飯看電影娛樂的等等。
再去聊到技術上的分層思想,例如OSI七層模型,大家在面試的時候甚至都碰到過。
拋開這些,其實我們對自己當前負責的一些業務,一些系統也需要去做一些分層劃分,這些分層可以讓我們更好地看清業務系統之間的關係。例如老貓之前梳理的一張圖。
透過這樣的分層梳理,我們可能更好地理解當前的系統組成以及層級關係。(備註一下,老貓這裡畫圖工具用的還是wps繪製的)。
結構化思維很重要
結構化思維又是咋回事兒?
不著急,打個比方,咱們看下面一組資料:
213421790346567560889
現在有個要求,咱們需要記下這些數字,以及出現的次數。短時間內想要記住可能比較困難
如果我們把這些數字的內容調整下,變成下面這樣:
00112233445566778899
是不是清晰了很多?
所謂的結構化思維,就是從無序到有序的一種思考過程,將蒐集到的資訊、資料、知識等素材按一定的邏輯進行分析、整理,呈現出有序的結構,繼而化繁為簡。有結構的資訊更適合大腦記憶和理解。
人類大腦在處理資訊的時候,有兩個特點:
第一,不能一次太多,太多資訊會讓我們的大腦覺得負荷過大;喬治·米勒在他的論文《奇妙的數字7±2》中提出,人類大腦短期記憶無法一次容納7個以上的記憶專案,比較容易記住的是3個專案,當然最容易的是1個。
第二,喜歡有規律的資訊。有規律的資訊能減少複雜度,Mitchell Waldrop在《複雜》一書中,提出一種用資訊熵來進行復雜性度量的方法,所謂資訊熵就是一條資訊包含資訊量的大小。舉個例子,假設一條訊息由符號A、C、G和T組成。如果序列高度有序,很容易描述,例如“A A A A A A A … A”,則熵為零。而完全隨機的序列則有最大熵值。
老貓在寫文章的時候喜歡先列一下要寫的提綱,然後再跟著提綱一點一點的往下寫,寫定義,寫實現,寫流程。
雖然本文偷了個懶,沒有寫思維導圖,老貓一般再聊到乾貨的時候都會和大家先列一下提綱。這種提綱其實也是結構化的一種。當我們遇到複雜系統需求的時候,咱們不妨先列個提綱,將需要做的按照自己定義好的順序羅列好,這樣解決起來會更加容易一些。
太過理性可能也不好
程式設計師做久了,做一件事情的時候都會去想著先做什麼然後做什麼一步一步,有時候會顯得過於機械,不知變通,
有時候可能也會太過較真,大直男顯得情商比較低,會多多少少給別人帶去一些不便,記得在銀行辦理業務的時候會指出業務員說話的邏輯漏洞,然後不停地追問,最終可能導致業務員尷尬地叫來業務經理解釋等等。
程式設計師思維做事情,可能在日常生活中比較嚴謹,但是很多時候還是會顯得比較死板。
總結
以上是老貓覺得除了技術以外,覺得一個後端程式設計師應該具備的一些思考方式以及工作方式,當然也可能只是老貓的方法論,如果大家有其他的工作領悟,也歡迎大家留言,大家一起分享一下經驗。