如何評價阿當的文章《當我說前端基礎時,我在說什麼》?
引文:當我說前端基礎時,我在說什麼? —— 最近幾年在前端圈的觀察和反思
作為一個非前端開發人員,看完這篇文章後我的感受是:認認真真,系統科學地學好計算機基礎課是多麼重要的一件事情。計算機的基礎課程里會教你:
- 如何做一門 DSL 語言 ( css )
- 如何在屏幕上正確的顯示像素 ( html layout and rendering, canvas, webgl, svg ) - 一門編程語言長什麼樣子 ( javascript )- 數據結構是什麼,我們平常解決問題會用哪些演算法 ( virtual DOM, DOM, Render Tree )
- 進程,線程,~~攜程~~協程都是神馬 - 從外部存儲器讀取數據到內存中是怎樣一種體驗 - 還有很多...然後 web-browser 做的事情就是幫助你把這些東西用比較通用的方法包裝好,讓你可以在掌握了固有基礎知識的前提下,很靈活的運用他去做一些創新和拓展。
所以,當你掌握了基礎知識後,看待前端那些「技術」時,你會和這些技術的開發者們產生共鳴而不是排斥或抵觸。你會欣賞其他人的解決方案,或者會因為他們的奇思妙想而衍生出新的靈感,從而觸動你產生自己的解法。
比如 css,從一開始的 less,sass,stylus 到 postCSS 以及 w3c 近幾年對 CSS next 的提案。大家努力的重心從來沒變過,就是如何做好一門 DSL。你理解本質需求,就不會害怕這些衍生品,反正大家思路都差不多,思路古怪的,政治不正確的,你憑藉自己的科班能力早就判斷出來了。
再比如 MV* 和 Flux,都是在努力解決數據流向和數據展示的問題。而我從來沒覺得這些框架的推出是「追新」,反而是因為 CPU/GPU 發展使得過去因為機能限制,瀏覽器優化不夠,市場佔有率等問題而不能去普及的技術方案,可以在現有背景下重新去嘗試和推廣。當你看到諸如 React 這樣的框架推出的時候,你應該感到興奮而不是像這篇文章的作者那樣去抵觸和害怕。興奮什麼呢?如果你的計算機基礎學科知識紮實,你會興奮大家過去幾年都想到一塊去了,很多「如果 (what if)」的美好願景竟然有了這般實現。
再比如 Canvas,WebGL,過去我需要從非常底層去搭建圖形程序的周邊,才能開始進行一些圖形編程的實驗,現在都有了非常方便的方式方法,我會由衷地感謝標準委員會和為此努力的廠商和程序員們,而不是如作者說的那樣:而近些年,隨著前端越來越被重視,越來越多的server端或者其它GUI技術(flash、webgl等)轉做了前端,這種情況發生了根本性變化,無論在國內還是在國外。這一波新前端們,對編程是熟悉的,對框架是熟悉的,而對css和html是相對陌生的。
這個觀點太可笑了,我一個對前端編程完全不懂,但比較認真學計算機基礎學科的人,只要你跟我說 css 是一門 Layout + Rendering 的 DSL,我至少就懂個三分了。然後我肯定問你呀,Layout 是怎麼計算的?你告訴我瀏覽器坐標系是 Screen Space,原點在左上角,Y 軸向下,我懂四分了。然後你跟我說,除了固定坐標定位還可以根據節點高寬來動態定位,定位時也會根據文字數據做處理,我懂五分了。然後我問你 Rendering 是什麼鬼?你告訴我瀏覽器也就能畫矩形,貼圖片和渲染文字。我肯定問你渲染優化策略是什麼,你說 Tiling + Dirty Rect 我大概就懂六分了。然後我問你能用矩陣么?你說有 Transform,不計入排版。我問你能伸縮么,你說有 Flex 但父節點高寬必須能推算出來。我問你能拉曲線么,你說有 SVG。我問你能打點么,你說有 Canvas。你不用說了,我知道怎麼畫東西了。到此你已經懂七分了。剩下三分,真的覺得細節不懂,你只要去看一看開源的瀏覽器實現,比如 Webkit 或者 Gecko 中關於 Reflow/Layout 部分的實現即可,有什麼難理解的?幹嘛一定這麼高冷的認為只有一小戳的人才能玩某個圈子?
所以啊,同學們,我跟你們講,大學的時候認認真真的學好計算機基礎課程,即使你以後只是像我這樣做個打雜的民工,也不至於因為技術日新月異的變化而感到害怕和焦慮。不過是狗熊所見略同而已,就是比比誰的爸爸好,誰的時間多。
吐槽結束,繼續潛水。。。好久沒有正經答過題了。正好今天我對面的同學一早就特別有興緻的,對我說:『哎,老大老大,你看,這個阿當又開始噴人了……』
粗略的看了一遍微博,因為白天太忙也沒多想,反正人家自己的微博號,愛發什麼文章就發什麼文章,和別人也沒什麼關係,老早就註銷了微博(當時我還在微博工作,測試還要借同事的號),就因為微博上這種對噴,引戰的人太多,不過當初我都是拉黑的,可惜我這種微博只有一千多粉絲(大部分都是殭屍號)的小透明,沒人在乎而已。
剛才睡醒了又看到tl,又被刷出來了,回去又翻了一遍原文,越看越有意思,畢竟他不是我的衣食父母,所以沒必要太在意說(噴)了什麼,但是新舊技術如何選擇,對於每個幹了這麼久前端的高級工程師(暫且這麼叫這位前輩吧),應該每個人都有一套自己的思維了。
首先我把自己摘出來(我就是個菜雞。。),回答一下答主問題,如何看待這篇文章,總體答案就是毫無營養,待我一段一段的分析:
當我說前端基礎的時候,其實我在說什麼?我在說的是css和js library。
1,我覺得css和js是肯定是基礎,廢話一樣,但是更基礎的應該是html,如果單純說基礎,我覺得把html排除掉有失偏頗。
2,library是指什麼呢?我暫且理解為css和js庫吧。面對基礎者一上來就談library,我不覺得這是基礎前端初學者該考慮的問題(暫且不說目前library是否還是個趨勢),單就library的一些實現上來說,如果沒有大量的業務和經驗積累,是完全做不出來的(看國外輪子也白搭),因為國內環境和國外相差太多,沒有實際的工程經驗,根本無法自己組織一個library,最多是一個utils的集合而已。總結來說,根本不知道第一句他在說些什麼。。(漏了html,又把library當成前端基礎,要我說dom api,bom api,javascript內置對象api,css2/3的選擇符,布局方法,一些兼容hack,html的doctype聲明差異,語義化標籤的使用,以及html的各種基礎屬性的使用意義和場景)這些才是要面對基礎者應該說的,而不是什麼library。
早些年,前端工程師大多數是從csser或者設計師轉型過來的,沒辦法,早期時候並沒有前端工程師這個崗位,有的只是「網頁設計師」這個崗位,這些人對編程和框架並不擅長,但css基本功是相對較紮實的,因為它們的技術之路是始於css這種DSL的。
1,早些年,不知道要追溯到多早,csser或者設計師轉前端的這個數據不曉得有什麼支撐,但是我們看一下前端圈的這些國內大牛們,哪一個是設計師轉的?哪一個又是csser轉的?winter?好像不是個美工出身,玉伯大大?好像也不是。。,我知道的淘寶的小馬?也不是。。都是曾經的java工程師出身,我們再看看新浪的比如饃大?貌似也不是切頁面出身的。教主?應該也不是(就我個人的觀察,錯誤的話請指正),還有誰,豆瓣的克軍?還有360的月影?還有我們知乎的大大 賀老?貌似這些大牛們沒一個是csser或者設計師轉的前端,這些人可能對編程和框架也都比較擅長,更不可能是技術之路始於css這種DSL。
2,你可能說我舉例的都是大牛啊,沒意義,但是小牛們貌似又不符合這個『早些年』,也許可能只有答主他自己是設計師轉的吧,或者說自己的技術之路是始於css這種DSL的吧,所以才能下了這個結論,因為他誰也代表不了啊,只能代表自己。
而近些年,隨著前端越來越被重視,越來越多的server端或者其它GUI技術(flash、webgl等)轉做了前端,這種情況發生了根本性變化,無論在國內還是在國外。這一波新前端們,對編程是熟悉的,對框架是熟悉的,而對css和html是相對陌生的。由於這種從業人員的經驗差異,這些年產生了一系列的工具和框架,比如bootstrap、coffeescript、less、angular、react native等都是典型的非前端社區從自身習慣出發的產物。我在最近的幾篇文章里都提到了偽前端和跟風的問題,細細反思一下,其實源於這裡。
1,近些年,我理解成2011年之後吧。flash,webgl(卧槽什麼時候他們不算是前端的一種了?)我記得阿當同學當初所在的團隊應該就叫做博客RIA吧,為什麼叫RIA,應該就是說,包含了flash技術吧。。什麼時候近些年flash變成了非前端技術了呢?又何來轉型。。。
2,前端本質上來說,都是從server端轉移出去的,這無可厚非,不僅僅前些年,很早很早以前,2005年夠早了吧,css2還沒出來,行內style滿天飛,table布局天下無敵的時候,我不相信那些人不是後端程序員轉型的。前端本來就是後端開發中分離出來的一部分,何來轉?3,無論國內國外一波新前端(早幾年就變成新前端了,這個排資論輩我給你滿分),對框架和編程熟悉,不代表對css和html陌生(作者又開始意淫了)css作者一開始就說了,是dsl,sql也算dsl,正則也算dsl,正因為這些人的加入,才讓之前的css和html開發模式產生了巨大的飛躍,但是在阿當眼裡,這些成了異種。(因為老子是csser出身啊,臣妾看你們裝逼我著急啊)這麼多年的開發經驗都白乾了,還不如一些『近些年的』小毛孩子研究的東西新,研究的東西有意思,『我很苦惱啊』,於是這些產物在我眼裡通通都是異類。4,一些在職工程師,title就是前端開發,被一個不認識的人點名,你丫是偽的!我也是醉了……好像你給人家發工資了一樣。。
我並非不歡迎這些新的成員和新的工具,其實前端圈越來越繁榮是件非常好的事情,而且我期待了幾年的spa和web app形式,也越來越有望得到深遠的推進。然而我擔心的是,新一波不同技能樹的轉型同行或者說半同行們,會不會在宣揚它們的解決方案時,讓技術的傳承出現了斷層。web前端在國內乃至國際上真正興起,源於2006年前後的css重構風和web2.0引起的前端框架熱。到2011年h5開始火熱,包括@老趙@flashlizi 這種其他社區的人開始了前端的轉型或者半轉型,再到後來的node開始熱起來,backbone、bootstrap、less、angular、react、coffeescript等等等等,情況很快出現了很大的轉折,技術風向變得我開始看不懂了。其實一開始我都是微微一笑的態度,心想這種非核心的輔助性技能應該引起不了太久的重視,很快就會像javascriptMVC這種仿ror框架或者GWT這種為java工程師設計的前端解決方案一樣,迅速沉下去。
1,第一句話不看了,內心獨白是無力的,因為每句話的後面如果跟了個『但是,然而』,我的語文老師很早就告訴我了,只能無情的回以『呵呵』。
2,既然你這麼覺得自己的spa和web app厲害的不要不要的,我真心希望帶帶我們這些小透明們飛,每周發幾篇幹活博文,而不是發這種沒營養的吐槽文。
3,斷層問題,有的回答非常好,優勝劣汰,不用作者自己操心,基礎不好,那必然幹不了活,幹不了活必然被崗位淘汰,這個隱形的市場調節機制保證了絕對不會出現斷層,如果說因為一些人推崇新技術,而淘汰了舊技術,只能說是,市場需要這些新技術。
4,2006年的css重構風和web2.0到前端的library熱,現在至少證明,老的library確實已經死的差不多了,但是小而精的,解決單一場景下的獨立模塊越來越多了,backbone就是一個典型。我真無法理解為什麼要把bootstrap和less還有angular,react等東西合一起說,這些東西毫無關聯啊(也許在作者眼裡這些東西都是些弄潮兒,反正我不會,通通都是異類,看都不想看)。
5,技術風向看不懂(給你99分吧,真怕你驕傲)
6,微微一笑(1分加到這裡)
7,javascript mvc,ror,GWT,就我目前來看,毫無下沉趨勢(我給自己滿分。)因為我現在和曾經的項目(近1-2年)都在用。
8,node躺槍。
但後來的發展,完全出乎我的意料。沒想到包括@玉伯也叫黑俠@勾三股四 在內的大量前端經驗豐富的業界大牛們也在跟這種風,還包括@拔赤 這種我非常認可的同學當年居然也在跟風coffeescript,我非常詫異。像@johnhax@w3cplus 同學在跟一些框架或者工具什麼的,以我對他們的了解,我能理解背後的原因,就不細說了。但前面提到的這些同學居然也在跟這種風,我就很難理解了。你們的技術基本功夠,你們可以去嘗試性地玩玩這些玩具,然後回來分享下試用心得我覺得是對的,但如果你們大力在推這些方案,我就真的懷疑你們「起點高,以至於脫離群眾」了。你們可曾想過,csser出身的同學在這樣的環境下如何跟上時代?你們可曾想過新入行的同學們,對css和組件的基本功是否會引起足夠重視?你們一路從當初那個蠻荒的年代走過來,對css、js底層、js library等等都有非常深的認識,而這也花了你們不短的學習和練習的時間,對嗎?為什麼在今天,關於基礎的傳承,基本看不到「技術社區」的作用了,有的只是「引領風向」,而這風向在我看來還很可能是錯的(我相信持和我相同觀點的人不少)部分同學相信國外的這種風向是對的,我估且相信是我們觀點不同而已,但可怕的是,當下居然沒有辯論的聲音,而這表面一團和氣之下,是很可怕的技術斷層。從我和最近面試的小朋友的了解中來看,這種情況到了不容忽視的程度了,這也是為什麼前幾天我跳出來吐槽的原因。如果一個工作經驗兩年甚至三年的同學,css基本功、js組件基本功很差,沒有看這方面書的意願甚至覺得沒有必要,想學的是angular框架和web pack打包工具,這合理嗎?健康嗎?
1,at了一圈人,都和我意見不合,我很出乎意料。(確實,你不發他們工資,他們的便當也不會因為符合你的口味而多加一個雞腿)
2,大力推廣是人家的自由,至於為什麼推廣,每個人都有每個人的原因,但是總比不推廣不說話的『大牛』做的要好的多了。
3,時至今日還在說bootstrap,less,angularjs是玩具的人,我很難想像如果社區都是這樣的開發者會是個什麼樣子。
4,csser和新同學如何跟上時代,說一句冷酷的話,基本功不合格不會找得到工作的,找到了之後早晚要自己補回來的,別人家的同事的事就不要多管閑事了,自己是在招不到厲害的人,找新手培養就不要再嫌棄新手上手慢了好不好,基礎不牢,幹不了活,你要他進公司幹什麼,這不是社區需要傳承的,而是這個崗位的職業要求,而社區,引領風向,一點錯也沒有,如果非要照顧新手的感覺,請去培訓機構吧。(哎呀,那些連dom api都用不⑥的人都找到工作了,你怪社區風向不對)你應該怪,面試官瞎了。
5,錯了,我們都錯了,因為這風吹的太大,一時半會拐不回來了。
6,技術根本沒有斷層,因為需求和業務量大了,老的手藝可以做,也有人一直在做,新手藝解決了新問題,其樂融融,辯論的聲音怎麼沒有,那麼多小同學辛辛苦苦造輪子,這就是對老技術的調研和傳承,拋棄壞的舊的,進化成好的。
7,2,3年的同學css基本功,js組件基本功很差,沒有意願提高,說白了,這是人的問題,我覺得這種人去學web pack,去學angular也是學不會的。你怪社區毫無道理,就像你有一個天真任性的女朋友,你不讓他去社會上碰碰壁,以後吃虧的還是她自己,更何況社區單身狗那麼多,沒必要照顧你啊。
高喊「技術升級」,「時代不同」,「熱愛學習」口號的同學,其實大多數是11年後入行,然後程序底子還不錯,也比較好學有鑽研精神的同學。他們大多數沒有經歷過過於複雜的項目,或者沒有經歷過切專題頁或者多人合作的折磨,我能理解那種對技術的熱愛和有所建樹的心情。只是,對這些同學,我只想問一下:「對css的掌握和js組件這些基礎,你到火候了嗎?」,如果答案是肯定的,那麼我覺得你可以去折騰了。如果答案是否定的,從長遠來看,我建議還是補下基本功吧,畢竟,真實的項目需求才是你每天的工作內容。
1,11年到16年也有5年了,我真就不服,5年經驗的工程師會沒有經歷過複雜的項目?會沒經歷過多人合作的折磨?真實 * 了 *了。。
2,請列出火候的標準。否則無法討論。
3,最後一句話等於沒說。。完全整段話都是在自己的主管意志上表述的。(總結來說就是自己面試的大部分5年工作經驗的人,都是基礎知識極差的人,好高騖遠的人)這種招聘體驗真的是棒棒的。。你不要他就是了唄。。。
4,喊口號總比不喊口號要好,至少態度沒問題。熱愛學習,技術升級,在我看來不是貶義詞,沒必要圈上引號。對於愛喊這些口號的人,我覺得沒什麼不恥的。
對於11年後加入前端圈的同學們,如果你是激進的,我能理解,如果你是迷茫的,你是受害者。而技術前輩們,如果你們「忘了」告訴新同學們,基礎是什麼,我覺得你們有責任為技術的斷層負責;如果你們對新同學們的基礎過於有信心的話,我覺得你們不配做團隊leader;如果你們希望通過新玩具來保持自己「技術的領先優勢」,我的感情就很複雜了。。。
1,開篇你基礎就說錯了。
2,你不給我開工資,你又沒有懷了我的孩子,我憑什麼對你負責。3,基礎好不好,每個團隊leader有自己的理解,能幹活和基礎好不是什麼必然關係,邁過基礎門檻晉級為小牛是每個人的目標,leader對公司和團隊負責,但是團隊里的人都是18歲以上的成年人,很多道理沒必要一遍遍去灌輸,我還是那個理念,如果你自己覺得自己不行了,那你就真的不行了,20多歲的人,如果還需要leader提醒自己基礎不好或者自己基礎到底好不好還需要別人告訴的人,真的我覺得,也可以別幹這一行了。4,做不做的了leader,不在於社區的想法,在於老闆,而你不是其他團隊leader的老闆。5,別人也覺得莫名其妙的。ps:想起幾年前@老趙 這個偽前端還在玩自己的jsex的時候,說過一句對前端圈的點評「前端圈的同學普遍不自信」。當時我不以為然。從這幾年明顯的其它社區的前端解決方案居然在前端圈如此之受重視和某些技術居然劣幣驅逐良幣來看,老趙的評價是對的。
最後的最後,to 小白同學們,看書是解救你們自己唯一的路了。別追風,會害了你們。
1,我覺得不自信有時候是一個優點,而因為普遍不自信,前端才有了今天。
2,老趙躺槍,或者老趙變成了槍。3,不是和我說的,我應該不算小白了,而小白們吃不吃這一套,看微博下面的評論就知道了。。。我想了想我到底匿名不匿名呢,算了別匿了,畢竟打了這麼多,我怕別人噴我,我關了評論好了。
純屬個人看法,深夜無聊,說著玩的。阿當還是很厲害的一位前輩,我很尊敬他。
因為我是玻璃心,所以我關了評論,哈哈哈。我並非不歡迎這些新的成員和新的工具,其實前端圈越來越繁榮是件非常好的事情,而且我期待了幾年的spa和web app形式,也越來越有望得到深遠的推進。然而我擔心的是,新一波不同技能樹的轉型同行或者說半同行們,會不會在宣揚它們的解決方案時,讓技術的傳承出現了斷層。
優勝略汰,並不是所有的DNA在自然界中都能代代傳承。技術也一樣,環境在變化,應用場景在發展,一些古老的技術隨著時代的發展就應該寫入歷史了。當年Web1.0時代沒有Ajax,人們在Web頁面裡面塞入一個iframe模擬非同步請求,這種古老的技藝在Ajax和WS橫行的時代早已淡出我們的視野。很多類似的技術都應該在時代發展的潮流中慢慢被拋棄。
還有不同技能樹的同行或者半同行的說法讓我感覺就是把前端孤立在計算機科學以外。前端編程難道不是GUI編程的一種?看看GUI編程的歷史,前端遇到的一些問題可能是別的領域早已經玩爛的問題了。上個世紀七十年代施樂公司在用Smalltalk開發圖形界面程序的時候為了解決GUI視圖和數據管理問題提出了Smalltalk-80 MVC模式,後來服務端把它借鑒過去提出了我們服務端喜聞樂見的MVC Model2。求問一下現在比較流行的服務端Web框架哪個不是基於MVC模式的,但誰能想到它的根源是來自於GUI編程?再到後來的MVP,微軟WPF的MVVM。然而到了2009~2010年我們才有了類似MVC的Backbone,才有了前端MVVM鼻祖Knockout(還是微軟出來的人寫的)。有些問題真是別的領域也許在十幾年前就已經玩爛的問題。如果這些優秀的GUI編程思想能早點進入前端,前端會發展得更快,甚至倒逼標準的發展。而把前端孤立出去就有點固步自封的味道了。
但後來的發展,完全出乎我的意料。沒想到包括@玉伯也叫黑俠@勾三股四 在內的大量前端經驗豐富的業界大牛們也在跟這種風,還包括@拔赤 這種我非常認可的同學當年居然也在跟風coffeescript,我非常詫異。
你們的技術基本功夠,你們可以去嘗試性地玩玩這些玩具,然後回來分享下試用心得我覺得是對的,但如果你們大力在推這些方案,我就真的懷疑你們「起點高,以至於脫離群眾」了。
我是看著玉伯的文章、分享、源碼成長的,我相信這些大大們獨立思考的能力都是沒有問題的。玉伯大力推requirejs了嗎?沒有,他自己寫了一個seajs,因為requirejs沒能滿足他的應用場景。如果他們在大力推一些東西,說明這些東西確實能夠解決他們的問題。「跟風」這個詞踐踏了他們的經驗、思考和實踐。
只是,對這些同學,我只想問一下:「對css的掌握和js組件這些基礎,你到火候了嗎?」,如果答案是肯定的,那麼我覺得你可以去折騰了。如果答案是否定的,從長遠來看,我建議還是補下基本功吧,畢竟,真實的項目需求才是你每天的工作內容。
基礎需要補。但更重要的基礎是:計算機網路、數據結構、操作系統。
這是一篇披著勸小白「補基礎」外衣的幽怨吐槽文(也許是撕逼?),如果真心要勸小白們補補基礎可以比較客觀地寫出來,並且給出一些學習步驟、指引等,小白們會不勝感激。「你們知道打火石的重要性嗎?你不會用打火石打火,有一天你家的煤氣爐點不著了怎麼辦?(打電話叫外賣。)有一天你的汽車熄火了怎麼辦?(打電話叫拖車。)」
這種抒情散文不像議論文,不能一點一點地反駁,也沒必要,所以我就說一點吧。
五年前十年前的 CSS 專家,隨便說個現象他就能正確說出這個 bug 的名字。IE 有上百個詭異的 bug,大家給它們取名子,有名子就能搜到 hack 解決掉。當然也有英文不好的中國專家,不知道那麼多英文名字,把一切記在腦子裡。
現在這些 IE bug 都成為歷史了,所有這些專家知識也失去了價值。基礎要學 CSS,學什麼呢?我覺得大多數人入門是不需要學多少 CSS 的,能用 Bootstrap 就行。這事情就如同當年 Windows 開發用控制項一樣,交互界面不一定完美,但基本的人機交互是能完成的。有朝一日你發現你要改 Bootstrap 了,你自然就會去搞明白為什麼它要這樣寫。
把歷史知識當作基礎是不對的,否則 DOS 程序員應該先出來普及硬體適配知識。硬體適配不了,屏幕直接花屏了,哪輪到你說什麼瀏覽器適配否則差多少個象素的事情。自己不寫代碼,脫離生產線---&>招不到人---&>懊惱憤怒---&>覺得新人都喜歡搞新技術的團隊---&>發文抨擊新技術,勸新人不要搞新技術---&>發現大神們都不支持自己---&>再發文拉大神下水,說大神們不務正業,不「繼承」,導致新人喜歡玩新技術---&>發現大神們要麼不說話,要麼反對他
其實吧,就是因為自己沒上新技術棧,停留在過去,發現招不到人了,然後發現玉伯之類的大神也去研究新技術,不站在自己這一邊,就慌了……
核心在於:固步自封,招不到人,發文抨擊,還是沒人首先一句結論,我認為作者的文章看似為新手著想,實際是不想承認自己已經學不下去,但作為老人還是來刷新一下存在感的。
文章嘛,不可能所有的都是錯的,比如基礎這個東西,他是確定以及肯定的重要。
可是css/js就真的是基礎了么?說實話我覺得如果只把這個作為基礎那前端可真的是把自己的的圈子畫的很小了。另外,新技術都是偽前端么?
脫離業務談技術都是扯淡,那我們就來實際業務來談一下。
這個圖就是我目前主要負責的一個後台CRM產品開發,是一個可視化的報表生成器。1.作為前端開發,面對這麼個東西,最最最需要的一個就是模塊化開發的能力,現在使用的是webpack+ES6,順帶直接解決了之前使用r.js需要解決MD5命名問題。OK,這裡已經已經用到了一個作者認為是偽前端排斥的新工具。2.針對第一個頁面,PM要求,當主表欄位在某一維度被選中之後,其他維度內不能再出現此欄位。按照作者來說,jQuery完全可以勝任。我不否認,我不依賴任何框架也是可以解決的,並且這個系統原來就是jQuery乾的。可是呢,這裡我是不是需要一個局部Model來做統一狀態管理了?ok,現在在用的是一個我自己寫的Model分發/同步結構,正在遷移到vuex上。好了,又一個新東西,為什麼我會用呢,因為解決了我對於統一狀態管理。用jQuery?增加幾倍代碼量去吧…
3.針對第三張圖的編輯器,重頭戲來了。他需要生成一個報表模板+對接數據源完成整個報表的生成工作,其中又需要拆分為上下文控制類組件(下拉框,下拉樹,級聯下拉),展示類組件(表格,圖表,透視表,平面表),流程式控制制類(查詢按鈕),標註類(文本框)。
怎麼樣組織報表模板?OK,這裡涉及到通過一個組件樹描述來解決報表模板問題(數據結構基礎),以及構建數據模型(又來數據結構了,雖然比起各種後端大大們的高達上數據結構差很多,但是也並非是不需要設計的)來負責組件渲染(主要複雜的是那個表格,具體就不說了,是一個多維多指標可下鑽表格…說多了都是淚)。其中表格要求減少後端壓力,最好做前端排序(對樹的節點排序,嗯,演算法基礎來了)這前面所講的基礎,還沒涉及到js/css的問題去呢。
接下來,組件開發,上面說的那個數據模型為什麼需要統一呢?因為這個系統定位是平台,要有第三方組件接入的能力(按照一定標準開發)。那這裡就說說組件吧,原來系統用的是公司某大神寫的組件庫,大概是4年前,那個時候看起來的話,這東西實現的很不錯,但是呢,外包看不懂啊,整套東西就玩壞了啊!需求越來越複雜(就是那個萬惡的表格),組件代碼被改的那叫一個面目全非,沒轍,改吧…於是乎vue重寫之,並且還集成了前端排序,收起,展開(原來的邏輯是每次都重新請求數據,然後整體rerender)……嗯,說一下成果吧,不算html模板以及樣式,純js邏輯7000行 vs 500行……組件化封裝完了呢,就是一個標籤,給我指定的數據,我給你生成表格,有事件了,事件冒泡回調解決之(安利下vue,組件化封裝實現的真心贊)。咦?有點眼熟,跟最早那批jsp控制項,http://asp.net的控制項,好像很像了哦。不過我生產力又提升了,數據驅動組件,並且外包人員看了文檔也知道,哦,指定數據結構,引一個標籤就行了。咦?這東西按照作者所說已經不算是前端了么?或者說這東西沒什麼用?我用jQuery照樣解決?嗯…排期…可維護性…
PM來了,XXX,我們一直想要控制項局部換膚功能啊,之前負責的都跟我說實現不了,只能整體換膚啊,你看看能解決么?為啥之前會說解決不了呢,css作用域啊,會相互影響啊,現在呢?嗯,vue-loader + stylus func替換變數生成樣式,解決了…你問我原來前端能不能搞?能啊,多給我幾倍時間吧。(又多了倆新技術…作者說了,這是偽前端)
最後整體項目構建,上面都說了一個組件都做到了7000vs500,那麼可想而知最終打包也一樣,直接說結果吧,打包時間3min vs 30s,代碼整體體積 8M vs 4M(包含圖片等資源)
這些問題都解決完了,開發時mock/真實api對接,請求轉發,聯調,部署,涉及到了各種計算機網路知識,嗯,貌似作者沒提到網路技術算是前端基礎。
項目的部分到這裡,發現了么,痛點並不在於單純的css/js,而是一系列問題的結合,那麼如果真的要算作基礎的話,這些應該全部都是(目前為止開發的東西還沒有脫離前端範疇)。
補充一點,作者所謂的一系列偽前端技術,都極大的解決了我目前的痛點,既然作者說了不談項目論技術,那麼我這裡已經概括著說了,可作者那些批判型的言論,又有哪個實際說了具體項目應用場景呢?引用@尤雨溪 大大之前在另一個帖子里的回復,你連個readme都懶得看就開噴,我看浮躁的應該是你吧
——————————分割線————————————————我認為什麼是基礎,各種規範加上計算機網路,數據結構,演算法,操作系統等等一系列計算機基礎知識。這些重不重要?非常重要,業務開發時候需不需要呢?重要。業務開發時候會不會用的到呢?不一定。有什麼用處呢?幫你理解你的代碼是如何跑起來的,真正的執行機制是什麼樣子,以及面臨一門新技術的時候能夠快速理解並使用。
微博上已經有很多大神們出來說了,前端開發已經越來越複雜,也的確是走了很多其他方向的老路,借鑒過來沒什麼不好。如果只為了業務需要,其實基礎可能根本用不上。那麼為了混口飯吃,尤其是對於很多外包公司人員(無意放地圖炮,但是的確佔大多數)來說,我會用xxx框架,xxx工具就足夠我吃飽飯就行了,我為啥要去打基礎。對於剛入行的新人,通過業務開發逐漸開始去了解自己所使用的工具,未必不是一個好的方式。記得公司FE群里有個RD說如何學前端,幾個冒泡的扔出來的話都是:跟倆項目折磨個半年就差不多了。
不好意思跑題了很久,繞回主題,作者說偽前端技術讓他們不知道風向了。
我只能說,呵呵,我轉行前端的時候less,sass滿天飛,backbone,bootstrap遍地走,angularjs在國外已經開始火起來了,這不也是一路走過來了(雖然現在也還是很渣)。作為一個有心學習的人,自身的迷茫跟風向是沒關的。自己不想學還非要怪風氣不好的,跟掩耳盜鈴真心沒什麼區別…
PS:突然想起來之前那群學生,跟我說你教我會彈幾首歌就行了,我會彈唱騙騙小姑娘就行了。你要指望這群人能夠創作出優秀的音樂作品,那無異於痴人說夢,但是這類人永遠佔大多數…
而作者給我的感覺呢,就是早些年馬路牙子吉他手現在做酒吧老闆的,突然發現來了一群玩拉丁,玩古典,玩爵士的吉他手來,於是跟那些新學吉他的人說,你們要小心不要別被風氣帶壞了,馬路牙子吉他才是精髓…觀點還可以,我也無數次說過,新手入門應該狠狠打基礎,而不是追新求異。
但這個作者這個說法,很容易讓人產生這樣的理解:1. 他看不懂 Web 界的新技術,如 react/angular 等,思維停留在 Web 重構時代;2. 他看不慣新手們急功近利、追新求異、基本功差,卻把板子打到了新技術的實施者身上,而忽略了別人的使用場景。無論這理解是不是他的原意,這會導致他的文章 credibility 下降。之前玉伯有個回應,大意是說他和阿當都曾經是 Web 牛,現在有點過氣了,之所以會這樣說,就是出於這個理解。
Web 不是玩具,Web App 是真實的需求,儘管技術上的一日千里確實產生了大量的學習成本、快速的技術迭代,但這個趨勢不是一兩個人所能阻擋的。與此同時,傳統的 Web 重構需求也沒有消失。
只是在這種背景下,新手入門往哪裡走,有的時候真的要耐心一些,把基礎打好,別看新鮮玩意一個一個冒出來,過一兩年都要淘汰的,學工具不如學語言,以工具為綱,乃是捨本逐末。
其他的,這個問題下的答案都說的挺好,可以一看。
http://www.zhihu.com/question/38924821/answer/78832576首先是尊敬阿當前輩
我以為這個爭論之前已經過去了,沒想到...
技術是個工具,它是一個工具,工欲善其事 必先利其器
打個比方從北六環到東二環,有自主選擇權的情況下,可選擇到達的工具是兩條腿,自行車,汽車等(先只說這三個)
我覺得如果不是想鍛煉身體的話,應該會選擇汽車,就說汽車這個工具還分公交,計程車,自購好壞汽車的
說回來,技術本身是為了解決實際問題,一種技術在你自己的實際業務場景下能夠解決全部問題這是最基本的需求,能夠優雅舒服地解決問題這是二等需求,能夠優雅無痛滿足日益增長的複雜需求這是一等需求
世界上沒有銀彈,所以在沒有一個用得順手的,讓自己開心的工具的時候,有功力擼一個那自然是好的,但現實是不是誰都有這個精力和時間去造一個這樣的輪子,你答應,領導還不答應呢。當然這和公司決策有關係。
但如果市面上有這樣被證明過的好工具為何不用呢,好比我要從北六環快速到達東二環,我總不能自己現造一輛車吧
再說基礎,沒人會否認基礎的重要性,沒人會完全放棄對基礎的鞏固,我覺得大部分人基礎都不是很牢固,因為你沒有個標準說,什麼是基礎好,蓋個房子地基還分抗震等級呢,抗不過強震,不能說房子不好,不能住人吧
再說人,如果每個人都嚴格要求自己,那世界早就大同了,可是不是啊。不是每個人都特別喜歡自己的工作,有人喜歡傾注全部,有人為養家糊口,對於前端工程師來說,照道理說我們應該要求自己打好基礎,來面對各種各樣的問題,這是工程師的準則,可現實是公司是要結果的,可以先出結果,對技術本質的追求公司不會要求你,都是自我要求,這就得看人了,個人所求不同。
我們喜歡找一些自我要求高的人一起工作,一方面我們本身是這樣的,工作交流順暢,一方面還能互相激勵共同進步,畢竟都是有追求的人
說這麼多,對個人而言,只要保持學習的態度,在面向工資編程的基礎上被不斷鞭策,技術基礎到底重不重要,技術工具是否好用,都是會被證明的,不用充當說教者,都是成年人了,三觀已基本形成了,每個人都迷茫過,都碰過壁,還都在碰壁的道路上繼續前進,所以let it go,let it go...
前端菜鳥弱雞留沒什麼好評價的,我的能力勝任我的工作,而且,我的興趣在於學習東西。
以後,希望我能自己做輪子在前端交流群里一直有人問:「這個select在bootstrap里怎麼寫啊!」「這個checkbox用bootstrap怎麼實現啊!」我真想對他說,這都要用到bootstrap?另外你有看文檔么?bootstrap沒這些組件,這些都是要麼自己寫要麼用插件。而且你是個前端你還用bootstrap?另外,我認為前端要補的基礎知識是數據結構、網路協議、計算機系統、英語閱讀以及資料檢索等能力。我就不說我猛然發現github issue和stackoverflow後再也不用在群里跪求人了。想找個slider?上github搜一搜。這個bug是怎麼回事?上stackoverflow搜一搜。太爽了。
一個前端,在沒有搞清楚基礎知識(這裡的基礎知識不是饃大經常說的計算機基礎,要求不要這麼高,畢竟前端都不算程序員的,哈哈)之前,還是不要跟風了。如果項目需要,就學學,不要為了技術而做技術選型。如果基礎知識紮實了,再緊跟前沿技術嘛。嗯,我見過寫了半年 angular 的人不知道 angular 的 app 是何時啟動的。就這樣~
轉載,侵權聯繫可刪除
技術總是在不斷的進化,即使是css和js本身和10年前相比也加入了很多新特性,而這些新特性往往就是來自業界最前沿的技術,就拿最近的es6來說,各種吸取借鑒,說不定css的下一個版本會吸納less,sass,postcss等技術的特性,也說不定下一個html版本會吸納angular,react,vue的特性。
所以說新技術絕對不是無中生有的,恰恰相反正是由於老技術存在的一些缺陷才會促使新技術的誕生。由於css沒有變數,不支持繼承,不支持運算,不支持邏輯判斷等等才會誕生less,sass,postcss等技術;由於DOM的操作過於繁瑣,html沒有組件規範,才會誕生react這種屏蔽dom操作,面向組件的技術。
最後說基礎,基礎重不重要呢?基礎當然重要,沒有一定基礎的人我相信是玩不轉這些新技術的。反過來說即使在jquery橫行的年代,我也見過很多$().parent().parent.parent().closet().....這樣的代碼,所以說把基礎不好這事賴在新技術上,這鍋背得有點冤枉。都有不同的環境脫離環境來說都是雞同鴨講反正我最不入認為他說的內個基礎算是基礎跟我說的打好基礎里的基礎差老鼻子了
倒是真沒覺得斷層,反而是一種逐漸成熟和融合,更有計算機技術的一個分支的感覺。
以前感覺是比較封閉的很淺的小圈子,總認為前端和程序猿不同,和設計師不同,是獨特的群體,有特殊的工作技巧和招人標準。現在隨著技術體系演化,就像以前只看到一片葉子,現在看到了後面的樹枝,枝幹。
這個變化很大,從比較孤立的群體,變為可以相互借鑒融合的更有活力。很多都是外來技術引入導致前端技術的更新,說明前端這塊其實更開放了,這是好事。
再用csser視角看,其實也是好事,以前陷在DSL語法或解析原理裡面,能研究多深呢,僅會css,對於前端本身,又能有多少促進呢,就像以破譯密碼的不是語言學家,而是圖靈。他會發現,看到:哦,前端並不特殊,也是計算機分支的一種,可以融合,也可以玩別的。他不會為自己圈子小和缺乏空間而痛苦,他會找到更大更廣闊的天地,找到更多在計算機領域並肩而行的夥伴,學到更多0和1之上的技術味兒,也更容易在橫向縱向上遷移,有了視野和空間是很有益的。
斷層,某種視角看,也是一種突破性的進步。觀念其實都是視角不同,沒有對錯,當然,作者的提醒是很好的,不要盲目追新,一直浮在水面,沒有根系是不長久的也不能成長,也特別敬佩作者對前端的責任感,幾年前,在糾結業務實現的一畝三分地的時候,作者當時已經呼籲前端同學要努力探索前端應用場景,推動前端技術發展,而不是等著別人推動。這個視角的超越,影響至今。
而且文字這東西,很容易表達和理解脫節,有興趣可以倒著看看阿當的博客,看技術人的成長和視角,再來理解說的東西而不是急著評論自己的看法,會比較全面中肯些:真阿當 - 博客園。情況很快出現了很大的轉折,技術風向變得我開始看不懂了。其實一開始我都是微微一笑的態度
各位,引以為鑒啊,微微一笑,懶得學習,懶得理解,自以為新事物不過是舊事物,然而並不是,漸漸就落後於時代了。
「偽前端」、「技術的傳承出現了斷層」,可笑而可憐。技術、業務、產品被顛覆,新舊交替,在這個行業里是常態。「你們可曾想過,csser出身的同學在這樣的環境下如何跟上時代?」,跟不上時代,是自己不思進取,不懂得不斷學習的後果,怪誰?csser,只會寫css的人?淘汰活該。從應用技術學起,然後深入底層深入基礎,誰不懂呢?用得著他說?用angular,用react,就代表不看基礎書籍了?看到別人用著自己不認同的應用技術,就認定別人基礎不行,不懂css、js基本功,只不過是尋求一種虛妄的心理平衡而已。基本功紮實,且心態開放,技術走在前沿的人,大有人在,這些人才是初入行的人的標杆,而不是阿當這種早就遠離一線,已經看不清形勢,只剩下虛名的人。讓我知道能一輩子寫程序真是有天賦(或者肯努力?那種意願也是天賦的一部分吧)的極少一本分人。因為當你五六十歲的時候,世界早已不是原來的樣子了,你如果還想在技術界出頭而不是只能做將要或已經被淘汰的工作,挺不容易的吧。
不管是react還是angular 之所以能夠流行起來 不是因為大家覺得這個東西有多麼酷炫 而是因為它們確實為廣大前端開發者帶來了實實在在的開發效率和體驗的提升 作者提出讓初學者打好基礎的觀點我可以認同 但是他所謂的基礎很大一部分都是過時的東西 而他頑固地拒絕嘗試和否認這些新技術 甚至阻礙自己的團隊在生產環境使用 簡直是不可理喻 說到底 開發效率直接和錢掛鉤 為了自己的守舊和錢過不去 也是到了一定的境界
因為我也時不時寫一些沒什麼人看的文章,也在知乎上時不時寫一些沒人贊的答案,所以我對於寫文章這事兒,不害臊的說,有自己的一點兒見解。
我相信,在網路上,尤其是在技術圈子裡面,很少有人會真正因為觀點不合而爭得很不開心的。觀點不同,證明有不一樣的想法,對於搞技術的,一般來說都是高興的,畢竟開了眼界,擴了思路,對當事人,對旁觀者,都不是件壞事。
很明顯,寫小白文章,是不會被罵的,寫錯了,很多人還會幫忙指正,但不會說:「傻逼,寫這麼入門的東西」吧?畢竟大家都是從不會到會,誰沒有入門階段呢?於是我認為,能夠挑起事端的一般都是表達觀點的方式有問題。
能夠以搞技術為職業的了,幾乎都是成年人了,或者說是學生,也正是在大學裡面自由散漫叛逆的階段。誰也不願意聽著一個遠在幾千公里以外、比自己大不了幾歲的人,以一種高姿態,傳授人生哲學,教自己做人的道理。打人不打臉,罵人不罵娘,這是耍流氓的基本公約對不?
有的時候,別人也指出我說話不得當,我自己的確很難承認,但我有時候也會反思,別人質疑我,如果我體會不到他所描述的那種不適感,覺得這是在抬杠,是不是我潛意識裡已經把這種(可能令人不適的)說話方式當成正常的方式了?是不是平常我就已經對我身邊的人這麼說話了?如果是的話,那真是太可怕了。
平常的生活圈子裡面,和我們密集交往的也許只有幾十個甚至十幾個人,要遷就他們的感受,還是不太難的。而且,越是親密的朋友,就越無所謂說話的口氣,因為互相之間已然有了默契,知道哪些話是隨口一說,哪些話是動真格的,哪些話是插科打諢,哪些話是棉里藏刀。
但網路太廣闊,一旦把自己的觀點、言行暴露在網路上,尤其,是以寫文章這種主動展現的姿態的時候,可能面對的是成百上千的人。如果這些人當中有看得起我的,把我寫的東西讀進腦子裡去了,他們會不會感受到不適?我會很擔心、會很謹慎,盡量的把內容控制在「表達觀點」,而不是「提供建議」。畢竟沒有任何人的人生軌跡是完全相同的,經歷是不能複製的。我自己入行也才四五年,以我的資歷,要給人提供建議,萬一誤導了別人怎麼辦?況且「教誨」這種東西,連我自己都不愛聽,我覺著吧,我要真說出來,別人當然也不會愛聽。
我一直愛打一個比方,如果我跟一個人打架了,那麼可能是對方的問題。但如果我短時間內跟10個人打架了,那麼很有可能就是我的問題了。原來沒聽過這個人,因為看到他在創業,覺得可能技術上有兩把刷子才關注了他的微博。哪知對技術的理解如此淺薄,感覺他根本不是真心喜歡前端開發這個行當。文章裡面全是槽點,都不知從何說起。但是時至今日還在說bootstrap,less,sass是玩具,這隻要寫過css都知道這些工具的思想能解決啥問題吧,而且使用起來只有好處沒有什麼副作用,這都能被噴,說明他原來對css開發的理解也非常膚淺。感覺他自己才應該多補點基礎。
推薦閱讀:
※研三通信女生,現在轉前端晚嗎?
※前端開發工程師如何給自己取個高大上的Title?
※為什麼部分開發工程師不喜歡調節界面的 UI 細節?
※專業前端和偽前端的區別?
※關於ECMAScript5官方文檔中執行環境的組成中詞法環境和變數環境的區別?