2019-03-11 09:37:47分類:硬件開發7180
關于全棧開發者,人們存在一些迷思。人們可能會認為全棧開發者是非常厲害的人,他們無所不知,既懂后端又懂前端,一個人可以包攬所有的編碼工作。但事實是這樣的嗎?作者從企業招人的角度和自己作為一名前端開發者的角度剖析了全棧開發者這種角色,觀點非常新穎。
作為一名 Web 設計師,在我的大部分職業生涯中,我都非常愉快地與程序員、工程師和擁有計算機科學學位的人共事。在這種共生關系中,每一方都有一個安全且明確的工作角色,并且能夠從事他們最擅長的事情,享受他們的工作。
計算機科學家們并不會把全部時間花在寫代碼上,他們做架構,我負責完成通信、表單和互動方面的事情。我們都需要寫代碼,因為我們是在做 Web 開發,但我們以不同的方式編寫代碼,以實現不同的和互補的東西。
但對于那些根本不寫代碼的人來說,事情就沒有那么明顯:他們很容易認為寫代碼的人會包攬所有的代碼——因為對于代碼門外漢來說,所有代碼都是一樣的。
這種誤解造成了糟糕的后果,而非編碼人員通常是招聘技術人員的人,這反過來加劇了這種后果。萬惡的資本主義總是從最少的資源中榨取最多的價值,因為這是他們賺取利潤的方式。如果他們能找到愿意包攬所有編碼工作的人,那么就可以極大地減少最重要的開銷:人。
因此,市場上就出現了全棧開發者,就像從骯臟的胎盤中破繭而出的強獸人:更強大、更好,同時問題也更多。
為什么會有問題?HTML、CSS、JavaScript、Python、C# 和 SQL 都是代碼,但它們實際上是完全不同的代碼,適合不同類型的人。以前端技術為例:HTML 是一種元語言,與語言、敘事和意義密切相關,屬于作家的領域。CSS 屬于印刷師和圖形藝術家的范疇,而 JavaScript(在這里通常指客戶端,但它其實是計算機科學家使用的真正的編程語言)用于處理數據傳輸和事件。
也就是說,如果你讓某人負責所有這些事情(包括 API 和關系數據庫設計等等),那么他們在某些領域很可能會比在其他領域要薄弱得多。更糟糕的是,他們往往沒有興趣去改善他們沒有意識到的領域或者他們沒有獲得成就感的領域。根據我的經驗,男性更擅長于 JavaScript 或 Python,并通常會從中獲得更多的贊譽,但卻很少能夠從 CSS 技能中獲得這些。CSS 讓頁面看起來更“漂亮”,偏向于“女性化”一些。
一個全棧開發者(實際上是一位同時編寫 HTML 和 CSS 的計算機科學家)需要對所有代碼負責,盡管這些代碼的語法和目的存在根本差異,并成為某些類型代碼(一些人根本不關心寫得好不好)的守門人。這有兩個不利的影響:
糟糕的代碼質量;
一群能夠(并且喜歡)寫出好代碼的人卻失業了,只能在一旁嘀咕“WTF”。
讓人們成為這種守門人的最明顯的問題之一是糟糕的 HTML 輸出質量。大多數全棧開發人員來自計算機科學背景,他們在學習程序控制結構同時并沒有學習 HTML 的文檔結構。他們并不擅長這些,但我們卻他們也承擔了這些工作。
對于“經典”的計算機科學家來說,CSS 可能非常難以捉摸。像級聯這樣的功能可能讓他們摸不著頭腦。為了讓 CSS 更容易編寫和管理,他們用他們更熟悉的東西把 CSS“吃”掉了,于是出現了 CSS-in-JS。
從技術角度講,CSS-in-JS 通常被定義為一種解決方案(從業者的定義)或者一種問題(反對者的定義)。我認為它不會讓 CSS 變得更好或更糟——它只是一種不同的編碼方式。但這并不是說它不造成嚴重的文化問題:
將 CSS 放入 JS 中,那么任何想要編寫 CSS 的人都必須學習 JavaScript。而且不僅僅是 JavaScript,還很有可能是 JavaScript 的另一個特定的“風味”,比如 React。更糟糕的是,JavaScript 愛好者不希望在他們的地盤上使用 CSS。
我最近在一家公司工作,這家公司里有數十個全棧開發人員,卻沒有前端開發人員。我們要開發一個網站,但沒有人懂 Flexbox,除了我。當然,我很樂意提供幫助,但我必須學習 React 才能完成手頭的工作。所運的是,我很快就學會了,但換了另一個 CSS 專家可能就沒有那么幸運。CSS 專家能給你帶來的價值是他們的 CSS 技能,而不是他們的 JavaScript 技能,所以將 JavaScript 作為對他們的一項要求是荒謬的。
總之,我認為我們需要解決以下幾個問題:
我們需要意識到這是一種剝削。雖然有一些干得很愉快的全棧開發人員,但他們承擔了太多的責任,而且他們其實不愿意或應當為所有事情負起責任。
我們需要解決 HTML 和 CSS 被低估的問題:性別偏見。如果沒有那些為計算機科學做出創舉的女性,我們也就不會有計算機科學,但現在男性卻“反客為主”。任何算不上“真正的編程”的東西現都被認為是微不足道的、愚蠢的,更適合女性做。對于抱有這種想法的人,應該狠狠地揍他們一頓。
我們需要重新審視關注點分離原則。為了完成某些事情,卻要花大力氣掌握所有的東西,這對人們來說是個沉重的負擔。我們現在用自包含組件來概念化設計,這是件好事,但它應該是一種心理模型,不能造成技術方面的搶奪。
最重要的是,我們需要教育那些根本不寫代碼的人,不同類型的代碼可以用來完成不同的事情,以及每個人的對代碼的理解和寫代碼的方式存在差異。希望通過這種方式能夠讓更多的人編寫適合自己的代碼,而不是花時間在焦慮上,比如不知道自己在做什么,或者承擔了太多的責任。當然,這并不是說如果你愿意承擔編寫 JS、CSS、HTML、SQL 和 C# 代碼的任務或者有足夠的時間也不應該去寫這些代碼!