程式設計師的定位:『應用型工程師』或『科研型工程師』

Summer發表於2019-12-10

社群裡經常看到新人有類似的困惑:

做過一些專案,算入門了,現在找不到學習方向,該怎麼辦?

以上與下面這幾個問題有相似之處:

怎麼樣才算熟練掌握了這一門技術?Laravel 開發怎麼樣我才會算學會了?

這些疑問屬於我們程式設計師的焦慮。至少我之前也焦慮過很長的一段時間,後面隨著工作中專案經驗的積累,慢慢會變得從容點了。不過每到學習新的語言,或者新的技術時,就會再度陷入這個焦慮。思考的多了,偶爾也會總結下,在此分享此觀點希望對同樣困惑的你有所助益。

兩個方向

我喜歡把程式設計的方向分為以下:

  • 應用型
  • 科研型

應用型 關鍵詞是『應用』,以 Web 開發為例如:部落格、CMS、論壇、電商(B2C, C2C)、CRM、企業內部管理系統、視訊、實時聊天、直播、外賣等。跟現實生活比較貼近的,能通過程式設計來實現產品功能,以此來改進社會生產效率的領域。

科研型 例如在以 PHP + Laravel 為主的 Web 開發中,專注的話題有程式內部架構、設計模式、演算法、編譯原理、PHP 原始碼、PHP 原生 C 編寫擴充套件等。這些比較抽象,相比應用來講比較『抽象』,經常被我們稱為『底層』的領域。

關注點不同

應用型工程師 主觀上把技術當做工具,重點放在如何利用技術去實現產品的商業邏輯上。不拘泥於技術細節,專注點在於要做出來的東西上。

科研型工程師 對技術的態度是追本溯源,他們熟知 PHP 底層的執行機制、變數的底層實現、垃圾回收機制等,甚至接觸 LAMP 常見技術堆疊的原始碼。關注的是程式碼執行效率和工程合理性。

能力區分

應用型工程師能力 的衡量標準有兩點,『一是專案的型別要泛,另一個是專案量要多』。當然這些專案最好是獨立完成編碼或者參與了大部分核心技術架構的設計與實施,如資料庫設計、API 機制的設計、技術堆疊的選型等。

以過往經驗來看,應用工程師需要經歷 5 個以上不同型別,10 個以上的專案才能算畢業。這些專案大部分情況下是自己獨立完成的,他們需要對這些專案的技術構架都瞭如指掌,這要求在接觸每一個專案時有意識的去主動學習。

科研型工程師能力 如果說應用型是『廣』的話,科研型就是『深』。衡量標準是清楚知悉架構的缺陷,知道當現有架構出現問題時,如何優化。他們注重效能,深入研究各種周邊技術。

例如 PHP 領域大拿鳥哥(部落格 http://www.laruence.com/) 。鳥哥是 PHP開發組核心成員,PHP7主要開發者, Yaf(C 寫的 PHP 框架), Yar, Yac 等開源專案作者。

舞臺各異

應用型工程師 信條是『天下武功唯快不破』,擅長專案的快速開發和迭代。因此他們比較適合開疆擴土、快速推進商業專案上線的場景,創業公司尤其喜歡這類員工。他們也更能適應需求多變,技術堆疊靈活的工作狀態。

科研型工程師 相對比來講比較穩紮穩打。他們比較適合大公司。大公司一般都有比較穩定的盈利模式,商業邏輯變動一般不會不大,也就是說產品穩定。技術部門本著『不求有功但求無過』的思路,底層技術架構很少做太大的變動,再加上使用者基數大(大流量)帶來的高壓環境,為深入研究技術提供了需求和條件,大公司也是培養 科研型工程師 人才的沃土。

如何選擇方向?

決策的因素會有很多,例如個人喜好、特長什麼(例如有些人邏輯推理能力強,有些人數學好,有人產品意識高),這些我們就不展開了。

這裡推薦從自己的目標出發,也就是 :

你學程式設計的終極目標是為了啥?

如果你學程式設計就是為了以後某一天可以出來創業(你怎麼這麼想不開啊),做技術合夥人或者自己主導創業,然後走向人生巔峰 ~_~。大部分初創的科技公司技術負責人必備技能是:組建技術團隊,並帶領他們推進產品上線和快速迭代,熟知各種網際網路產品的功能,以及清楚地知道這些功能的開發難度,懂得在開發效率和商業機會上權衡,懂得如何避坑。那麼推薦你從現在把自己定位為 應用型工程師 ,然後開始積累專案經驗。可以理解為打怪升級,不惜一切代價接觸新專案,積累一個個的專案經驗,10 個專案算畢業,30 個專案算資深。

如果你的目標是進大公司,也就是抱大腿走穩定路線,那麼推薦你把自己定位為 科研型工程師。從今天開始死磕文件,把主要相關技術文件看很多遍,閱讀各大開源專案的原始碼,可以嘗試參與原始碼貢獻和改進,或者寫一些高效能的原生擴充套件。

怎麼樣才算熟練掌握了這一門技術?

方向選好後,就好辦多了。

如果你是 應用型工程師 ,那麼在你做了幾十個專案後,一般專案中經常用到的技術,你都很熟練了,並且隨著每一個專案經驗的累積,眼界的提高,你也會越來越自信。

如果是 科研型工程師,不斷深入,不求甚解,多做記錄,長此以往幾年十來年後也會有所建樹。屆時你的深入細緻的博文,或者技術文獻,或者開源影響力,都會成為你驕傲的成本,自然也就不會有『算不算掌握了 XXX』的疑惑了。

結語

區分兩個方向後,有所側重,相比同時學習兩個方向,學習難度和耗時都會有所降低。再加上舞臺各異,精準定位後,能更快實現個人目標,也算是讓自己的人生更高效。

這兩個方向也不會有衝突,應用型工程師 偶爾學習一些底層的技術,對自己的技能精進會很有幫助,而 科研型工程師 偶爾關注當下流行的產品應用,也可以避免陷入閉門造車的困境。

以上就是我的一些見解,關於這個話題大家有啥思考也可以給我留言哈。


Practice makes perfect.

相關文章