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