前端工程師做事的三重境界:我的進階之路

2022-02-05 前端那些事兒

共 2835 字,讀完需 5 分鐘。寫作本文的目的:構建自己關於前端工程師成長過程的認知模型,從自己的視角來分析 Programmer、Developer、Enginner 的能力結構與工程師成長過程的關聯,並分享出來給大家,期望能對入門的前端同學有所借鑑和啟發。需要提前說明的是,文中用到的工程師的不同叫法並不是要給工程師分類或者貼標籤,因為工程師的成長過程是連續的,喜歡鑽牛角尖的同學請自行繞路。

程式設計師 or 工程師

圈內對從事軟體開發的同學有很多叫法,如程式設計師(Programmer)、開發者(Developer)、工程師(Engineer),甚至是碼農,「碼農」是圈內人用來自嘲的,那其他幾個名詞呢?表面上看起來都是做軟體開發,叫什麼真的重要麼?

不得不說,叫什麼並不重要,不論是自稱還是他稱,什麼學歷、幾年工作經驗也不重要,真正重要的是人所具備的能力。那麼既然名稱不重要?為什麼還要談論它?名稱的真正意義在於能讓我積極拓寬自己的視野,不斷點亮自己的技能樹,在職業發展的道路上不斷積累、不斷提升。

工程師做事的三重境界是什麼?程式設計師、開發者、工程師這些叫法跟這三重境界又有啥關係?

第 1 重境界:把事情做成

把事情做成是公司對員工的基本要求,絕大多數入門同學就處在這個境界,這個境界的人可稱為程式設計師(Programmer),對於 Programmer 通常需要告訴他做什麼、怎麼做,他所需要的是執行力和基礎技能,這裡的技能包括:基本的編程技能,至少會一門程式語言,對這門語言的熟悉程度至少能夠讓他把基本需求解決。具體到前端領域,對 Programmer 的要求就是需要能夠使用 JS、CSS、HTML,並且熟悉編輯器、瀏覽器來完成基本需求。

以常見的 WEB 端統計為例,為了研究頁面關鍵元素的用戶行為,需要對用戶的部分交互添加事件統計(更常見的叫法是「埋點」),比如單擊事件,表單提交事件,如果使用百度統計,在頁面中埋點的方法大概如下:

<a onclick="_hmt.push(['_trackEvent', 'checkout', 'click']);">購買</a>

或者在 JS 中埋點:

// 需要發送統計的時候_hmt.push(['_trackEvent', 'checkout', 'click']);

接下來由於業務需要,相同的統計,需要往 Google Analytics 發一份,最簡單粗暴的解決方案如下:

<a onclick="_hmt.push(['_trackEvent', 'checkout', 'click']);            _gaq.push(['_trackEvent', 'checkout', 'click']);">購買</a>

JS 中也需要做同樣的修改:

// 需要發送統計的時候_hmt.push(['_trackEvent', 'checkout', 'click']);_gaq.push(['_trackEvent', 'checkout', 'click']);

如果網站的頁面規模、統計事件量小,變更埋點可能會比較輕鬆,但當頁面和事件數量隨著業務發展激增,估計程式設計師會埋點埋到手抽筋了。這個時候 Programmer 會不高興,很可能 Boss 也會不高興,因為埋點效率提不上來,並且容易出錯。聰明的 Programmer 會發現,僅僅從表面上把問題解決貌似還不夠。該如何破局?

第 2 重境界:把事情做好

具備什麼樣的能力才能把事情做好?對基本技術的熟悉程度超過(需要超過一大截)把事情做成的需要;對於業務需求有一定的前瞻性;能給出比較健壯的技術方案,能一次解決一類問題而不是一個問題,知道什麼樣的方案是不靠譜的,具備這些能力的人可稱為開發者(Developer)。

不可否認,Developer 是升級版的 Programmer,相比而言,Developer 大多數時候需要自行找到問題的解決方案並落地實施。通俗的說,面對具體的技術、業務問題,Developer 能比 Programmer 顧及到更多的點,想到更多的方案。但是要實現這兩個「更多」,需要的是努力、時間和經驗的積累。

當然,從 Programmer 到 Developer 的進階是可以加速的,需要壓縮自己的時間在更短的時間內做更多的事情,注意這裡不是把相同的事情重複 N 遍,如果是那樣就很容易出現 3 年工作時間半年工作經驗的尷尬。

回到上面提到的埋點方案,簡單粗暴的解決方式存在什麼問題?

首先,代碼擴展性太差,後續如果需求方需要接入自建的統計,前端的工作量並沒有減少,反而改起來會需要更加的小心翼翼;

其次,直接發送統計是否能保障精確送達,有沒有可能存在漏報的情況,細心的同學肯定能想到這種風險;

最後,前端代碼風格,其實不太推薦在 HTML 中內聯書寫 JS 事件,這就是髒代碼的典型例子;

Developer 會如何解決這個問題呢?先理清楚埋點代碼的本質:發送統計的動作、指定統計參數,其中發送統計的動作跟需要接入的統計平臺有關,確保統計到達也跟這個動作有關,這個動作跟統計參數無關,而統計參數本身跟節點的關係比較緊密,動作和參數可以解耦開。

基於這樣的認知,不難設計出下面的方案,在所有需要埋點的地方約定參數的標記方式,使用 data-event-* 參數標記事件名稱、事件類型以及額外的參數:

<a data-event-name='checkout' data-event-type='click'>購買

然後,在頁面級別監聽那些埋點的節點,並且恰當的時機發送統計代碼,簡化版如下:

// 相同的參數發送給所有已接入的統計平臺,如果平臺不同,適配工作也在這裡做const sendEventLog = (name, type, param) => {    _hmt.push(['_trackEvent', name, 'click', param]);    _gaq.push(['_trackEvent', name, 'click', param]);};// 針對單擊事件的處理,其他事件可以類似處理$(body).on('click', '[data-event-name][data-event-type="click"]', function (e) {    // 拿到事件發生的節點    const target = $(e.target);    // 獲取事件屬性    const name = target.attr('data-event-name');    const param = target.attr('data-event-param') || '';    if (!name) {        return;    }    // 這裡如果是連結跳轉,需要走單獨的邏輯    sendEventLog(name, 'click', param);});

上面探討了從 Programmer 進階到 Developer 的方法就是積累,那麼怎麼積累?我行動的基本法則是:做出好的東西先要知道好的東西長啥樣。一方面,多讀經典的書,仔細讀高質量的文章,注意這裡面讀遠比收藏重要,上哪裡去找經典的書和高質量的文章?這需要建立自己的信息篩選機制;另外一方面,遇到問題要學會去搜索,找更多的解決方案,然後比較,融會貫通。

不得不承認,從 Programmer 進階到 Developer 需要非常多的努力和積累才行,但是精進之路永無止境,下面說說第三重境界。

第 3 重境界:把事情做絕

能夠把事情做絕的人,可以稱得上是工程師(Engineer),那麼到底怎麼才算是把事情做絕?以統計埋點為例,能夠洞悉埋點需求的本質,把日誌發送和埋點標記解耦之後,將兩者都做到極致。現實中埋點需求的來源通常是運營和產品經理,所有的變更基本都是由他們驅動,如果能夠給他們提供工具管理頁面中的埋點標記(思路關鍵詞:XPath、微服務、瀏覽器插件,細節不在本文描述),就能把工程師從這種瑣碎需求中解放出來去做更有意義的事情,這樣也就改變了組織中不同員工間的協作方式,提高組織的效率。

想成為前端工程師,要先成為工程師。工程師應該具備怎樣的能力?要回答這個問題,我們不妨仔細思考下什麼是工程,WIKIPEDIA的原文如下:

Engineering is the application of mathematics and scientific, economic, social, and practical knowledge in order to invent, innovate, design, build, maintain, research, and improve structures, machines, tools, systems, components, materials, processes, solutions, and organizations.

簡單說,工程就是運用知識去設計、創建、維護、改進工具、系統、流程和組織的過程,而工程師是推動這個過程的最主要角色。

工程師,首先要具備很強的學習能力,能掌握完整的知識體系,知識的來源並不重要,可以來自於自學,也可以來自於學校,以及生產實踐的總結,只局限於一門程式語言或特定的幾個工具是遠遠不夠的,讓一個工程師切換到新語言不會有什麼障礙,紮實的計算機科學基礎是基石。具體到前端領域,基本的數據結構和算法、設計模式和變成範式、網絡、JS、CSS、瀏覽器、性能、設計,軟體質量、可維護性、可擴展性,軟體工程化(構建、部署、運維、監控)。

工程師,還要具備良好的抽象思維能力,有了抽象思維能力就能夠快速建立起系統運行機制的思維模型,也能把現實世界的業務問題轉化為了恰當的模型,然後用技術去解決。具體到前端領域,比如前端應用的典型信息架構,狀態機、棧、隊列這些數據結構在前端的應用。

工程師,還要具備良好的溝通能力,溝通能力的好壞決定了你是否能準確理解需求的本質,是否能把自己的的設計方案清晰的展示給同事,而溝通的形式就不那麼重要了,可以是書面文字,可以是白板、思維導圖,甚至是動畫演示。

工程師,還要具備平衡取捨能力,知道在哪些地方只需要做成,哪些地方需要做好,哪些地方要做絕,因為工程的要義就是取捨,在商業和技術之間尋求平衡點,這往往是很多人所忽視的能力。

冰凍三尺非一日之寒,成長為靠譜的前端工程師也不能一蹴而就,需要長時間的積累和沉澱,而到達這個境界之後就結束了麼?絕對不是,阻礙人前進的最大障礙就是他的心智,還是那句話,精進永無止境。

One More Thing

想看這個人接下來會寫什麼?掃下方二維碼訂閱前端周刊。


Happy Hacking

相關焦點

  • 前端工程師的進階之路
    又或者是網頁重構工程師,JS工程師,UI/UX,切圖仔等等。那麼歸根這些都是為前端服務的,說了這麼多,那麼前端的價值到底在哪裡呢?前端的價值在哪呢?第一點是前端的本職工作,是在功能上和後端的主要區分,也是前端崗位存在的原因。
  • 做事的三重境界
    做事的三重境界 2020-12-14 19:49 來源:澎湃新聞·澎湃號·政務
  • web前端開發工程師的三種級別
    隨著信息技術不斷發展,前端技術的發展也經歷了不同的階段。前端概念隨著移動智慧型手機的普及被正式提出,混合APP開始被廣泛開發。近年來,由於前端技術開始實現工程化,一些企業前端開發任務逐漸向後端拓展,邏輯思維能力也逐漸成為前端開發人員必備的能力。
  • 從新人到Director,淺談北美軟體工程師的進階之路
    對於在業界有一定影響力的科技公司來說,Lv3 Lv4級別僅僅只是工程師的過渡階段,如若4年內沒有辦法達到Lv5的話,被公司解僱的概率很大。所以用最快速度達到Lv5,不論是對於保住飯碗還是為未來的進階做準備,都是無比重要的事情。
  • 一名合格前端工程師的進階指南!
    本文將以王超的親身經歷講述,為什麼工程化是前端 leader 的必修課前端工程化是現代前端的必備技能Web 前端這幾年進化速度之快讓人咂舌,很多前端工程師都不禁吐槽「學不動了」。如今已經不是 HTML、CSS、JS 前端三劍客仗劍走天下的時代了。以我的親身經歷舉例。
  • 我是如何從零開始 Web 前端自學之路的?
    最後的機緣巧合下,走上了前端開發之路,作為一個非計算機專業且低學歷的人來說,自學編程其實不是件容易的事情,不過慶幸的是自己堅持下來了。目前工作還算不錯,收入在目前所在的城市不算高,不算低,生活也還過得去,繼續加油努力,也希望自己在今後更上一層。從 2016 年下半年開始,我真正接觸前端,到現在 2 年多的時間。
  • 一個Java高級工程師的進階之路
    一個Java高級工程師的進階之路想必Java新手們都想知道如何成為一個Java高級工程師,小編整理了一下Java高級工程師必須具備的一些專業技能供大家參考,希望可以幫到大家!宏觀方面JAVA要想成為JAVA(高級)工程師肯定要學習JAVA。一般的程式設計師或許只需知道一些JAVA的語法結構就可以應付了。
  • 如何零基礎自學編程 | 我的前端工程師之路
    從寫文字到寫代碼,再到順利找到工作,我的運氣還是不錯的✌️我最開始選擇學的是前端(當時覺得前端最簡單,作為入門最合適),HTML、CSS、JavaScript,主要是學習這三大語言,寫靜態網頁、動態網頁,響應式布局,再到跟後臺交互,一步一個腳印。
  • 寫給想成為前端工程師的同學們―前端工程師是做什麼的?
    從廣義上來講,所有用戶終端產品與視覺和交互有關的部分,都是前端工程師的專業領域。2005年的時候大多數網頁長這樣:現在的網頁一般是這樣的:前端工程師的發展之路和前景是怎麼樣的?前端是一個相對比較新的行業,網際網路發展早期(1995年~2005年)是沒有專業的前端工程師的。
  • 我的前端技術專家長成之路
    戳藍字「前端技術優選」關注我們哦!大家好,我是來自阿里巴巴的瓏晴,感謝 Scott 的邀請,非常榮幸能在女生前端專場給大家分享我這幾年的技術成長經歷。分享大綱 這是我的分享大綱,包括如下 4 部分自我介紹 我先介紹下我自己,我是 16 年校招實習轉正進入的阿里,當時是在聚划算前端團隊,隨著業務變化一路從聚划算到天貓再到現在的淘寶,負責日常活動營銷的同時,也多次參與大促會場&互動的研發,在支持業務的過程中不斷挖掘提煉創新,最終完成從前端小白到前端技術專家的蛻變
  • 前端 · 年薪百萬之路:高級 JavaScript 核心
    「如果你想進階為高級前端工程師,JavaScript 的核心基礎知識必不可少。
  • 前端工程師,還在學習那些永無止盡的框架麼?
    放眼前端這幾年的發展,經歷了移動網際網路時代的爆發,出現了以Angular、React、Vue為代表的三大前端框架,竟然成為了困擾前端工程師的一個「難題」——哪個框架最好?我該學哪個框架?一方面很多前端同學在抱怨前端發展太快學不動了;另一方面還有不少同學陷入瓶頸,懷疑自己甚至懷疑前端這個行業。
  • 【薦讀】高手做事的三重境界,你在哪一重?
    這不是一蹴而就的,需要我們在做事的三重境界裡乘風破浪,逐級而上。第一重境界有心理學研究表明,多數人做事存在「半途效應」,也就是俗稱的「三分鐘熱度」。面對這個不良習慣,無數人倒下了,但也有人克服了。要想做事成功,就一定要堅定信念,穩如磐石、不動如山。勇敢地面對各種各樣的困難和挑戰,壓不垮、推不倒,矢志不渝。古語有言:「審察其所先後,度權量能,校其伎巧短長。」意思是說,做事必先釐清事情發展的先後順序,衡量自己的權力和能力,進而再去較量技巧的短長。
  • 文字工作的三重境界
    近代著名學者王國維關於事業學問三種境界的論說,淋漓盡致地刻畫了探究學問、成就事業歷程中的酸甜苦辣,啟發人們按照正確的方向和路徑為學做事。機關文字工作看起來是「舞文弄墨」,實質上是一個人或一個團隊思想境界、業務水平、處事能力、文字功夫的綜合反映,其水平的提升有內在規律可循,大抵要經過三重境界。
  • 孔子人格修煉的三重境界
    概言之,孔子以君子、仁者和聖人三重人格境界來定位歷史人物和評價自己的學生。君子重在「修身」,道德修養是進階入善最為重要的標準,是個體獨善其身的入門功夫,是社會秩序良性發展的大眾要求。仁者立足「齊家與治國」,在君子個體人格修煉之上,進而以自己的修養關注身邊人事,從入門進而登堂影響周圍更多人。聖人放眼於「治國與平天下」,以自身更大的政治能量造福天下蒼生,從登堂進而入室為萬世開太平。
  • 為什麼2017年Web前端開發工程師薪資越來越高?
    從廣義上來講,所有用戶終端產品與視覺和交互有關的部分,都是前端工程師的專業領域。整個網際網路行業都缺前端工程師的原因?為了實現上述目標,前端工程師採用了從可視化到編程的多種工具 ,甚至有時要照顧市場、 UX 到內容tweakes等等。原因三:大量糟糕前端工程師的存在,擾亂了市場這或許是難以招到優秀前端工程師最明顯的原因。由於前端工程師的入門門檻非常低,JS、CSS、HTML並不是很難入門掌握的語言,似乎只要花一點時間,誰都可以通過網上教程和書本學會它。
  • 一等人才的三重境界
    他的作者呂坤將人才劃分為三個等級,分別是三等資質,聰明才辯;二等資質,磊落豪雄;一等資質,深沉厚重。何為深沉厚重?概括起來就是大工不巧,觸之不動,因果不昧。我們先說深沉厚重的第一重境界之大工不巧。《神鵰俠侶》中,在楊過的成長之路上有一個非常重要的窄門。那就是在獨孤求敗的墓地裡,他既放棄了凌厲剛猛、無堅不摧之劍,又放棄了以柔克剛的紫薇軟劍,最後選擇了那把厚重無鋒,大巧不工之劍。自此,楊過的桀驁不馴之中便有了一抹厚重的俠義。漢代有一位大將軍叫李廣,他非常像今天我們在電影院看到的漫威英雄。
  • 高手做事的三重境界,你在哪一層?
    這不是一蹴而就的,需要我們在做事的三重境界裡乘風破浪,逐級而上。 第一重境界 做得到 有心理學研究表明
  • 母雞與前端工程師
    儘管每年都有好幾萬新人加入,網際網路公司還是在喊,工程師嚴重短缺。我曾經不太理解,為什麼網頁開發工程師(或稱"前端工程師")這麼搶手。直到有一天,看到了一組雞蛋的統計數據,才想通了這個問題。3、中國是世界雞蛋第一大國。
  • 人生裡的三重境界
    有人說人生有三重境界。第一重如看山是山,看水是水;第二重如看山不是山,看水不是水;而第三重仍看山還是山,看水還是水。  第一重在人生的初始階段,可以是咿呀學語的孩童,也可以是情絮初發的少年。這是人生的第二重境界。周圍的一切都是人的主觀意志的載體。此時的人沒有精神上的目標,一切行為以私利出發。就會這山望了那山高,不停地攀登,爭強好勝,功利薰心,絞盡腦汁,機關算盡,永無休止和滿足的一天。什麼道德,什麼人倫常剛,皆拋在腦後。唯私利是生活的準繩。