1. 程式人生 > >程式設計師的自我進化:技術的廣度與深度怎麼權衡

程式設計師的自我進化:技術的廣度與深度怎麼權衡

程式設計師的自我進化:技術的廣度與深度怎麼權衡

工作2-3年了,如果你已經走在自己喜歡和感興趣的技術路上,那麼首先恭喜你了;如果你還在技術圈迷茫和困惑,也請保持微笑。無論你屬於那種情況,對於絕大多數人來說,不妨停下腳步來看看,我們應該如何看待技術。我們都希望自己的技術既有廣度又有深度,但事實上,魚與熊掌不可兼得,在有限的時間和精力裡,我們不可能掌握所有的技術,而且技術的更新速度很快。因此,我們需要有一個正確的態度來看待技術,更好的提高自己。

本篇文章,筆者從自身作為一名程式設計師的角度出發,通過認識技術的本質、技術與業務、如何做一個技術T型人才等方面,給出權衡技術廣度與深度的意見,為程式設計師將來的發展起到引導輔助作用。

技術的本質是什麼?

在《技術的本質》這本書中,著名的經濟學家布萊恩闡明瞭技術的本質及其進化機制,其主要表達了以下三個核心觀點:

1.幾乎所有技術都來自於此前已經存在的技術,就好比C、Java語言就是調動了多個功能最終實現一個功能。

2.技術都是由技術形成的,這句話可能有點難以理解。舉例來說,火車的發明其實包含了多種技術,比如蒸汽技術,但蒸汽技術又可以被分解為燃料技術、動力技術等等。

3.技術和生物一樣都會進化,但是生物的進化多來自變異,而技術的進化則來自不同技術組合所發生的變化。

布蘭恩強調,技術並不會憑空發生。萊特兄弟發明飛機之前花了大量的時間來研究製造飛機的各種可能性,研究了飛機的不同部件應該怎樣組合。“沒有一項技術是其發明者在洗澡時想到的。發明一項技術一定需要很長時間的積累。”

N.Wirth(沃斯)曾提出:程式=演算法+資料結構的經典公式。其中,資料結構指的是資料與資料之間的邏輯關係;演算法指的是解決特定問題的步驟和方法。

計算機技術,無論從前端還是後端,無論是過時還是被炒得很熱,其本質技術都來自於此前已經存在的技術,都要求具備良好的演算法和資料結構,在此基礎上不斷衍生出許多新技術。

這也是為什麼很多公司都看重基礎的緣故,良好的技術基礎,才會帶來技術的創新。

技術重要還是業務重要呢?

上面給出了技術的本質,對於大多數程式設計師來說,我們通常說的技術泛指開發程式的技術、技巧,目的是寫出安全有效的程式碼。

對於業務來說,業務就是需要處理的各種事務,通常偏向指客戶實際作業涉及的事務,業務最終的目的是完成工作所做的所有事務。比如取款就是一種業務,ATM 機內運轉的軟體,要解決的業務就是取款。再比外賣訂餐也是業務,口碑、美團這樣的APP就是為解決訂餐業務服務的。

而業務和技術的關係則指用技術來解決現實世界中的業務,並給人們的工作帶來便利。比如到餐館吃飯,要下樓、排隊、現金支付,又麻煩又消耗時間又浪費精力,而口碑、美團 App ,通過把訂餐這種現實業務虛擬化,為人們省去了奔波、排隊、找零、耗時的麻煩。

因此,軟體是現實業務虛擬化的載體,技術最終是為了解決業務問題。從這個角度講,所有的開發者,其工作最終都是指向某個特定業務問題的。沒有業務,技術的存在就沒有意義。技術不能解決實際問題,不能給人們帶來便利,就沒有價值。

但從另一方面來講,技術是現實業務虛擬化的必要條件,沒有技術,現實中的業務就無法被虛擬化。而且,同一種技術又可以實現多種業務的虛擬化。

關於業務和技術的關係,這裡總結3點:

 - 技術是為了解決業務問題的,只有在實現業務、給人們帶來便利的前提下,技術的存在才有意義,所以,多數時候,是業務決定技術、業務統領技術;

 - 沒有技術,業務就無法被虛擬化,生產效率就很難有效提升;

 - 業務和技術具有相互促進、相互依存的關係。

我們回到開發者身上來看,很多開發者會用割裂的眼光來看待業務和技術,比如把增刪改查(CRUD)看作是無意義的業務程式碼,把實現 Redis 這樣的框架看作是有技術含量的事情。事實上,寫業務程式碼多一些,還是所謂的技術程式碼多一些,沒有高下之分,只是個人取向和組織結構、職責分工的不同而已。

但是,作為剛入門1-5年的程式設計師,為了更好的職業發展機會,有2個建議:

1.剛入行時作為普通程式設計師,技術是基礎,有技術才能實現業務,公司在招人時也以技術水平為門檻,從這點出發,一定要在短期內迅速提升技術。

2.工作了 3 - 5 年的熟練開發者,可以獨自負責一個業務模組時,需要更好地理解業務,這樣才能更好的從技術上實現,此時業務和技術並重。

如何權衡技術的廣度和深度?

俗話說,技多不壓身。對於一個想在事業上有所發展的人來說,你還應放眼未來,多學幾門技藝,不把希望只押在一個地方,這才是明智的選擇。如同猶太人有一個不把雞蛋都放在同一個籃子裡的道理,就是用此來分攤現實風險。

但是,隨著社會分工日趨細緻,技術日新月異,我們發現技術在廣度和深度上越來越難以平衡。想深度發展自己的技術成為某領域專家,心裡卻不甘心亦或擔心自己技術會被淘汰;想廣度發展自己的技術讓視野變大,卻常常感覺精疲力盡,熱門技術都懂一點卻又不深入,感覺啥都會又啥也不會。

面對出現上述現象的程式設計師,筆者認為,讓興趣來引導自己,把本職工作做到公司無人替代的位置,而不止步於此,並在此基礎上廣度發展。

下面具體來說說要如何權衡自己的廣度和深度:

1.廣度為輔,深度為主。人生、時間有限,我們不可能精通所有的技術,但我們可以努力地精通工作相關的、有前景的、感興趣的技術。

2.基礎紮實,深入底層。只是解決工作上的問題是遠遠不夠的,應該在工作之餘去學習更底層的技術,所謂知其然還得知其所以然。比如說我們使用java做開發,僅僅會使用是不夠的,我們還得再理解JVM的原理等,多多思考:為什麼要這樣用?怎麼實現的?還有更好的辦法去實現嗎?

3.觸類旁通,適度學習。學任何的知識都要形成一個體系,才能學得深,記得牢。

如何正確的做一個技術 T 型人才?

權衡技術的廣度和深度,更需要有一個正確的學習方式,端正的態度,而目標是做一個技術 T 型人才。

那什麼是T型人才呢?

T型人才是指按知識結構區分出來的一種新型人才型別。用字母“T”來表示他們的知識結構特點。“—”表示有廣博的知識面,“|”表示知識的深度。兩者的結合,既有較深的專業知識,又有廣博的知識面,這類集深與博於一身的人才。

如何成為一個T型人才,大家常用的一種方式就是輪崗。輪崗的意思是,當你成為某一方面的專家後,跳出自己的舒適區,轉而到一個新的技術領域從頭學起。輪崗的意思絕不是在一個技術方向上三心二意,每一次轉換技術方向,都應該是對前一個技術方向至少做到熟練掌握的程度才行,而我自己覺得,不經過1-2年的實踐,很難稱作熟練掌握。所以,輪崗的行為是低頻的。

如何正確的做一個技術 T 型人才,這兒有一些建議:

1.制定自己的職業發展路線;
2.技術和興趣結合;
3.選擇熱門、成熟的技術。

最後,借用莎士比亞的一句話:笨蛋自以為聰明,聰明人才知道自己是笨蛋。做技術先有深度,再有廣度,然後腳踏實地的去做!

如果要放棄技術,如何優雅的從技術轉產品呢?

對於產品經理和程式開發一職,在業內有一個生動的舉例:“產品經理好比打車的人,知道要去哪兒,並且知道哪條路最短;哪條路繞一點但是最順暢;如果哪條路限行了,該走另外一條路。那麼,程式開發團隊就相當於是司機。打車的可以不會開車,但是要知道目的地,知道如何可以省錢,省時間。司機可以接不同的人,走不同的路線,只要能走到目的地就行。

那麼司機如何變為那個打車的人呢?

[轉型產品經理必看 | 我是如何從程式設計師一步一步走向產品經理]一文中,作者提出來轉變工程思維、功能思維、產品思維三個階段,並指出思維決定心態和行動。

工程思維下的產品產出更像是一個工業品,而不是一個能站在人的角度解決現實問題的產出。它是技術產物或者說是科研成果,遠離實際需求和場景,最後會發現,這樣的產品投入市場後幾乎處於不可用狀態,這是非常嚴重的問題。

功能思維下的產品產出具備了一定的可行性,因為它結合實際需求,在功能思維下我對整個移動App的產品功能設計有了深刻的認識,從資訊架構到產品互動設計和部分視覺設計都形成了自己的思維模式。

產品思維下,這個階段關注更多的是業務價值和業務目標,在充分理解商業戰略的前提下來完成產品定義和產品設計,通過充分了解產品所圍繞的業務場景去提升產品的可用性和易用性,改善業務體驗和產品體驗,提升整體的使用者體驗。返璞歸真,迴歸產品的本質。

如何優雅的從技術轉產品呢?其實產品和技術一樣,需要通過不斷的學習和積累加上不斷的思考才能突破才能破局,也要經歷學習、理解、掌握、整理、思考、突破的過程。從開始的好奇、憧憬,到中途的迷茫、自我否定,直到慢慢開悟和真正理解產品。

整個過程也是心態的轉變,正如:放下,是一種修行,對過去的珍重和告別;拿起,是一種歷練,是對未來的信心和期待。

總結

前面我們分 5 個部分,分別闡述了技術的本質、業務和技術的關係、權衡技術的廣度和深度、做一個T型人才、優雅的轉身為產品經理等。

總結一下,關鍵的其實有 3 點:

 - 幾乎所有技術都來自於此前已經存在的技術,注重構建自己的知識體系,並在此基礎上把自己打造成一個T型人才;

 - 技術是手段,業務是目的。軟體開發工作是以業務為導向的,但是沒有技術又無法實現業務。

 - 不管做什麼崗位,做什麼職業,最終都是人生態度的轉變,放得下、拿得起。


參考文獻以及推薦閱讀:

1.《技術的本質》,作者:布萊恩·阿瑟。

2.[轉型產品經理必看 | 我是如何從程式設計師一步一步走向產品經理]