Web 前端的路該怎麼走?

剛畢業,一直做的是前端開發,在學校學的都是一些基礎知識,畢業之後自己自學了基礎前端如(javascript),在這個公司,要求不高能搭頁面就行,可是想提升自己,求各位前輩指點!

PS:此問題是剛畢業的時候發的,獲益良多,感謝各位大大百忙抽出時間指導和我類似經歷且迷茫的小白們。-----2017.06.14

相關問題:

本科生如何系統地學習前端開發? - 網頁設計 (Web Design)


這是個很長的故事,講述的是一名電競玩家轉行文字編輯後的程序歷程與開發感悟。

-----------------
目錄
-----------------

  • 引言(一)
  • 引言(二)
  • 一,奇葩的轉行
  • 二,第1個電商項目
  • 三,一個階段小結
  • 四,第2個電商項目。
  • 五,第3個電商項目(上)
  • 六,第3個電商項目(下)
  • 七,第4個電商項目
  • 八,前端開發者快速升級通關的一些個人經驗總結
  • 九,談談互聯網項目環境對於前端開發者向高階晉級的影響
  • 十,個人職業發展的超級野路子——准職業選手轉編輯再轉php開發再轉前端開發
  • 十一,個人素養與coding(一)——我是如何反覆「打怪」強化「代碼素養」的
  • 十二,個人素養與coding(二)——電競/編輯經歷對開發基本功素養的影響
  • 十三,個人素養與coding(三)——開發者的戰術素養和程序的正與邪,開發者的道不同不相為謀
  • 十四,個人素養與coding(四)——開發者的戰略素養對職場嗅覺的影響
  • 後記:第4個電商項目——分裂,生存,可能還有崛起。

======================
這裡是序。
======================

這是一篇長文。

任何一篇長文或專題,都是應該有一個序。
這是做為一個合格的媒體編輯/記者非常重要的技能點,要反反覆復地訓練。我曾經訓練過很多次,但時間已然有些久遠,已經好久沒有動筆寫這樣的序,借這個機會,讓我再次嘗試做好一名編輯該做的事情。

這篇文章主要是對我個人這兩三年從事前端開發以來的「升級打怪」經歷的回顧和總結,進而來回復題主對於「前端開發工程師」這一職業存在怎樣的發展空間,而它進入高階之後需要具備怎樣的能力以及這些技能或知識可以從哪些地方、項目或企業中獲取得到的,等前端coder職業發展上存在疑惑的問題,來發表一些我的個人見解。

然而,我是沒權力也沒有義務告訴任何一個人Ta未來的路該怎麼走,但卻可以告訴你我是如何走的,而且我的路子是很野的,真的很野,對於很多大咖來說,絕對不能說是成功的,但對於沒有機會進入一流互聯網項目歷練的大多數程序開發從業者而言,或許我的經歷會有那麼一點點借鑒的意義。

其實我曾想過,是不是要把自己這個跳躍性如此之大的從業經歷寫下來,是持有懷疑態度的。曾經某獵頭在把我推薦給BAT某家時,建議我不要把媒體編輯的經歷做太詳細的描述或直接去掉,而我確實也用一些編輯手段弱化了那段經歷,還是將它放在簡歷裡面。我覺得,這不是什麼問題,寫文字一直是我的興趣,並且曾經是我的謀生手段,而且還做得不算太差,只是和程序開發的關聯性少了一些。

當然了,是獲得了電話面試的機會,但第一輪就被KO了,那只是1年多以前事情,但3個月等於1年的電商開發節奏,現在我已經忘記了當時的情形,只記得那個電話來到的時候我剛剛通宵完成一個項目的公關,那會兒腦子是一塌糊塗的。

當然,那時我的能力應該達不到人家的要求,但如果現在還有從來一次的機會,我覺得自己應該有能力拿下這樣的offer,但暫時沒有這個必要。

請別誤會,並不是說BAT級別的offer對我沒有吸引力,而是對於現階段的我而言,暫時不能為了這樣的機會離開現有的項目和團隊,而且現在的項目可以讓我做擅長的和感興趣的事情,並基本都能夠按照自己的意志去落實下去,而大公司一般只能是做螺絲釘,不能有太多個人意志的,而且好的機會已然被老人們佔據了,只是為了去鍍金而去當別人的打手或救火隊員,這顯然是不理性的。

另一方面,我其實發現了程序開發者要想快速成長,不一定非要進入BAT或一線的互聯網企業中進行歷練,創業項目一樣可以快速成長,只要你把握好機遇和機會。請相信我,這是絕對是可行的,這就是我想把自己的經歷寫下來的原因。

ok,在開始之前,我覺得預先告訴各位看客,作為一個由平面媒體編輯/記者轉行做互聯網開發的Coder,本人的碼字功底還是不錯的,因此篇幅會很長,很長,很長。

如果你確實不感興趣,建議不用浪費時間,聊技術或開發理念終歸是有些枯燥的,也可能存在我寫得不夠清楚而讓你看不明白的地方。不過,如果你真的對一名先是由編輯大跨行轉php開發,再由php轉前端切圖,然後是如何用2年時間從月薪8K漲到月薪35K的職業經歷感興趣的話,那就一直往下看。

此外,如果這篇文章有幸被某個單位相中,想轉載的話,那麼該給這篇文章起一個怎樣的標題,我就不再代勞了,標題黨的功力已經退化得差不多了。還有,我是知道有不少錯別字的,但已經逃離媒體行業很久,好不容易不再為錯別字太多而擔心稿費被扣,那麼我真的不想再為這個問題而煩惱這不再是我的職責,而是你的。不砸別人的飯碗,這是做人的本分,不是嗎?

當然,我的版權意識是比較濃的,畢竟咱也做了好多年的寫手、編輯、記者。我的意思——轉載可以,但記得署名,只要署名(知乎的名字就可以了),永久免費。但對於不署名的,我保留追究的權利,並至少按1000字/千元(RMB)的稿費標準收取稿費。不要覺得貴,這是我當年做寫手的後期可以拿到的最高稿費標準,也就是我認為我的文字值這個價,請按此執行,不謝。

再勸一次,篇幅真的很長。

=======引言1=======

一夜之間來了這麼多贊,倍感欣慰。

正好今天我們部門要搬家,正好沒有發版需求和特緊急的開發任務。我打算偷懶讓人幫我打理桌面,哈哈,我好抽時間,繼續補充一些關於前端開發或程序開發方面的想法,希望把這個話題擴大,讓更多人來關注和討論,期待真正的前端大牛來分享職業發展的經歷,會有人需要的。

順便說一聲,我還是想求贊的。這不違法吧?

嗯,先讓我回想一下,為啥這個題目會讓我願意投入這麼多精力來碼字,願意出來現身說法?

我覺得,這肯定是一個好問題。題主想要在職業選擇迷茫期獲得前輩提供的經驗,而決定是否要繼續走前端開發這條路線。事實上,這個問題具有普遍性意義。不管是在校學生,還是工作了,但依然對前端這個工種到底有啥可玩的,它能發展到哪個位置,前端能出技術總監或CTO嗎?

男怕入錯行,女怕嫁錯郎。因此,任何的回復都會對題主或關注這個話題的人的職業決策帶來影響。因此,我才會對意識流的高票答案用了一些刻薄的語言來回復,並不想賣弄文字技巧,先說聲抱歉,但我是故意。

職業路徑選擇,是一個嚴肅的話題。

補充在最後,是關於個人對程序修養的看法或理解。為啥說這個?這和前端開發或各種程序員的職業發展有啥niao關係嗎?我認為是有關係的,而且很大,約往高處,關係越明顯。可以這麼說,個人的修養好壞在很大程度上會決定一個人的職業發展高度,寫代碼也是一樣的。這似乎很哲理化,但我的觀念就是這樣的。

當然,也是個人的觀點,你可以不用同意,甚至覺得我在扮高調,放屁。但我希望你回得有理有據,咱們用文字約戰。

==========引言2===========

暫時沒有看到讓人滿意的回復,忍不住回復。

先對題主說:這個問題其實有很多類似的提問了,這裡有一個集合前端開發知識的整理文章,知乎上,前端開發領域有哪些值得推薦的問答? - JavaScript,在裡面可以找到很多你趕興趣的問題與答案。

開始之前,我要對於目前的高票答案進行吐槽。

高票答案說的確實是有點點道理的,但對於從事前端並陷入迷茫的提問人來說,絕對是然並mei啥卵yong的。不知為何大家給高票,如果只是因為答主用了一個新鮮的說辭,而大家覺得有點意思就順手點了個贊,那麼,我認為這對於知乎的嚴肅性是一種傷害,當然對於知乎的娛樂化則是一種推動。也可能,大家更喜歡意識流的答案,抑或是,我太嚴肅了。

好吧。我嘗試用嚴肅又有點輕鬆文字表達方式來回答題主的疑惑。到底前端的路可以怎麼走?

純屬個人路線,僅供參考。如有雷同,請勿代入。

==========================
一,奇葩的轉行。
==========================
先var身份。

首先,前端一枚。30++++了,算是老猿吧,年紀不小了。至今沒啥拿的出手成績,就喜歡coding,不談天荒地老,只希望能寫到寫不動。

其實,我也不知道自己的水平在什麼段位,年初拿到了兩個一線互聯網的offer,被定位在相當於阿里P6/P7樣子,也不知道怎麼評的,自己覺得最多P5的水準,自感能力有限和性格不適合大公司,主要是被現在領導忽悠說那些大公司政治鬥爭非常厲害的,我又特擔心自己EQ值太低,經不起考驗被掃地出門而顏面無存也就放棄了,所以還是一起做電商創業項目比較實在,薪水別太離譜,有感興趣的活干,說話分量也有那麼一點,關鍵是上班能自由一點點,其實也挺好的。

當然,不是本人逼格有多高,有些大企業還是比較嚮往,比如企鵝廠比如狼廠,但是人家看到我這種奇葩的半路出家的野路子和尚,就連HR初期的篩選都過不了,更別說去面談做題什麼的了。哎,說起來全是淚,傷心得一塌糊塗。不說這個,還是說開發經歷吧。

在開發人員裡面,我的經歷應該算是比較奇葩的。怎麼個奇葩法呢?

首先,做過幾年的媒體編輯,對的,是平煤(對文字要求嚴格,錯別字個數有嚴格限制的),客串過記者(採訪過不少上市公司的總裁,如果說互聯網的話,最牛逼的是現在京東的4個總裁之一,辛棄疾的後裔,如果他還記得我的話...),曾經寫過不少IT媒體的專欄,比如電腦報、電腦商情報、電腦愛好者之類的媒體,後來看到IT媒體日薄西山,就半路出家。當然,不是去少林寺做和尚,只是轉行做了另一種和尚——程序猿。

嗯,跳躍似乎有點大,好多以前的同事不忍直視,其實自我感覺還好,因為業餘就愛好博客,經常玩弄各種php開源博客系統,純屬自娛自樂,雖然沒有參加過任何技術培訓班(其實是因為寫稿的真沒幾個錢可以用來交學費,都挺貴的),不過不管怎樣,經過一通自我學習和努力,總算混進程序開發這一行當。

現在每天就是T恤+牛仔+拖鞋+電腦背包,非常標準的coder。所以說,曾經是個文藝青年的我,在coder這個隊伍裡面,自我感覺文字控制能力還算是不錯的,也不知道算不算個開發技能點?

==========================
二,第1個電商項目。
==========================
當然,奇葩的轉型,那麼開發的經歷也就比較崎嶇了。

先幹了一段時間的php+前端混合開發的外包,就是那種用開源項目套頁面做簡單功能的二次開發類型項目,觸摸最多的如wordpress、phpcms、discuz!,drupal之類的,框架也玩弄了thinkphp、CI,不過做外包的開發累死累活也沒幾個錢,技術也不會有太明顯提高。

後來機緣巧合吧,前前前東家要做個電商交易平台,一時半會找到合適的負責人,感覺我還看得過去就被趕鴨子上轎轉做了項目主管,負責整個項目基礎設施建設,其實就是招人和分配任務等,不過幹得最出色就是切圖和切圖,雖然當時開發方式還屬於未開化的刀耕火種,於是乎將自己定位成前端是比較靠譜,而php的活就兼顧一點是一點。

還好,雖然技術比較爛,但是那個項目發展得比較順利,拿到了A輪(號稱3000W美金,水分可能比較大,不過那也是兩三年前的事情了,按互聯網的3個月=1年的節奏,感覺真的好遙遠),有錢之後引入了一批更牛逼的開發人員(主要是前端和php),雖然是我的手下,但那波人能力在當時來看絕對是很強,我也從來沒敢把人當手下,甚至很多問題都得向人家請教,技術不行就要虛心請教,這沒什麼好害羞的。

人家確實也比較牛逼,帶來一些先進的前端開發理念,比如前端構建,前端MVVM,純靜態html+restful api構建web網站的開發方式。這些前端開發理念在2012年-13年那會兒絕對算是非常先進的玩意,那時nodejs還未成熟,而grunt也才出來不久,fis可能還在萌芽階段,而各大互聯網公司對於nodejs也只是內部嘗試探索。

後來,隨著項目發展,前端的需求越來越複雜,需要嘗試MVVM、SPA的前端開發技術了,而我作為當時項目的前端負責人,也需要對前端代碼做了重構才能適應項目的發展要求,就是做類似這樣的事情——

如何將一個已經上線的項目前端部分平滑過渡至組件化和工程化? - 前端開發

這是我做的第一個的大規模的前端項目重構,當時的技術總監評估給到我的時間是10天,但我拖到了20天才基本完成,基本天天9-10的節奏。從現在的角度看,絕對是一次失敗的重構經歷。但是,個人從其中獲得了很多有價值的經驗,讓我有機會嘗試了許多新的前端技術,包括:

1,構建工具使用gulp,那時才剛出來不久,之所以選擇它也就是圖個新鮮,這是前端開發的通病吧;
2,基於less預編譯的css模塊化,watch監控自動編譯;
3,基於gulp.spritesmith的雪碧圖自動構建,根據watch監控雪碧圖目錄,自動按目錄生成sp圖和一份less,less保存到CSS的模塊中,進而自動觸發less的自動編譯;
4,js模塊化是AMD方案,模塊載入是用requireJS。我們只做了一點點小改進,那就是通過gulp自動生成require.config(開發和生產各一份),第三方js模塊的路徑根據一定規則自動構建,而不是手工配置。

js模塊按目錄的方式打包,打包後的文件帶上MD5戳,非覆蓋式發布,解決AB版迭代和緩存問題。現在看來那種按目錄整體打包方式是相當粗暴的,代碼冗餘非常嚴重,但無奈當時的水平也就這樣而已。不過呢,將需要重複手工配置的有規律的前端資源調度實現自動化,其實就是前端工程化的雛形,至少是給我打開了前端工程化探索的大門。

事實上,這種開發思維不是當時的我所能想到的,而是項目所引入的前端人才提供的開發思維。非常感謝這位同事,雖然一起共事的時間只有短短3個月,而我們也只是點頭之交,甚至你現在還可能鄙視那時技術那麼爛的我,但卻還當著你的領導。不管怎樣,感謝你讓我看到了前端開發往深入發展的另一種可能。

應該說在很多大公司的互聯網公司裡面,前端開發在很多年前已經有成套的而且相當成熟的前端工程化開發體系,但對我個人或那個項目的而言,這種方式在當時絕對是非常非常新鮮的,以至於我們那個團隊的人逐步離開後(那波人中的前端現在基本也是前端領域的能手了,有在YY的有在VIP也有在UC的),接手的前端無力接管這種不太一樣的開發模式,而又只好用原始的方式來生產新版的前端靜態資源。當然,絕對不是我留了什麼後手,而是交接了一個月多,也找不到能夠很好理解的前端。

大家別笑話,現在還有很多創業型項目的前端開發模式還依然停留在刀耕火種的開發模式下,包括很多已經名聲在外的電商。在中國,電商從來都不是以技術為第一生產力的,技術很重要,但卻沒技術人想的那樣重要,大家一開始都是以實現業務邏輯為前提,先把業務跑起來,領導管你用神馬開發模式,老是不能按時出貨就得滾蛋。

有興趣,大家不妨研究一下一些知名電商的前端代碼,沒有模塊化的知名項目還不少(包括上市的項目),而甚至還有各種裸奔的代碼在線上跑的,當然這些其實是創業期發展過快的後遺症,發展太快就可能沒有很好的契機做基礎設施建設,那麼現有的業務代碼過於複雜,後來的人只能在原來的基礎上改改改成能滿足業務需求就萬事大吉了。這其實是國情決定的,業務需求的實現大於一切,電商業務發展就像高速的列車,一旦開動起來就很難停下來。

這種情況下前端代碼模塊化和重構難度就非常非常大了,你見過哪個師傅敢說給一輛高速跑的列車換零件的嗎?這種坑不是一般人有信心往裡面挑的,誰碰誰倒霉。另一邊卻是代碼生產和發布效率的日漸低下,可能只是改一段靜態說明文字抑或是修正一個小bug,發布流程都要跑上個把星期才敢放上線,但是大家不也活的有滋有味的嘛。從業務的角度,技術真沒那麼重要了。

==========================
三,一個階段小結。
==========================
扯太遠了,回一下神。回歸主題。前端的路該怎麼走——

我個人認為初中級前端要想快速進步,最好的方式:

①一定要在一個有多人協作的前端團隊呆過。通俗地說,要和比你牛逼的人一起干過活,見過牛人長啥模樣。
②一定要找到一個在業務上對前端有較高要求的公司或項目,特別是各種奇葩甚至噁心的需求,對於技術人來說其實是快速進步的機會。

第二點很重要。重要的事情要念3遍,不去外包公司,不去外包公司,不去外包公司。當然,第一點更加重要。但是,有牛人願意帶,在很多時候這屬於小概率事件。即便有機會進入這樣的項目,你也千萬別期待別人會手把手教你什麼。我只能告訴你,耳濡目染的能量還是非常強大的。

因此,從兩個角度看,樓主現在項目既對技術要求不高,也似乎沒看到牛人,是時候換一家公司了。還是那個意思,技術的進步一定來自於業務的不停變化,當要求你必須實現各種奇葩需求,而你又把人家的需求給實現了,那麼就意味著進步。

當然,如果天賦異稟,而且非常自律自學能力也牛逼,就當我沒說。至於能否偶遇牛人,這就得看個人造化了。如果你發現某項目的確有大牛存在的,薪資要求甚至可以降低以求獲得快速進步的機會。技術人要明白,你能拿多少,在一定水位之前,基本和技術能力成正比關係的。

==========================
四,第2個電商項目。
==========================
似乎又跑題了。咱們繼續聊程序人生。

我的第一個電商項目的經歷很不成功,但是可能由於公司管理和文化方面的原因,導致了那一撥我認為非常不錯的技術開發人才來到項目後,均不到半年都另謀高就出走了。而我認為自己需要進一步提升,也就選擇了離開。

說得直白點,就是技術能力/經驗都漲了,薪水還是萬年不變(本來就夠低的,不知道有沒有人聽說過給技術經理級別的薪水定位是月薪稅前8K的電商項目呢??的我白痴痴的還一干就幹了整整2年,雖然自己能力可能就值這麼多而已,要麼乾脆點把我換掉要麼給點點和崗位匹配的薪酬,對吧?),又沒有更牛逼的人供你參考膜拜,離開是唯一的選擇。你懂的。

這個時候時間來到了2014初了,我跳槽到了一家做在線教育的電商創業項目,月薪Double,title是前端項目經理(這叫法有點點怪怪的),做的事情其實就是前端那一塊的事情,我在這個項目前後只呆了半年的樣子,加入這家公司只是為了看看自己到底值多少錢,其實項目並不是很感興趣,只是給我Double的薪資,也就加入了。

這個項目的總負責人其實是電信那邊出來的,職業的資歷可能比較牛逼,但對技術其實一概不通的,而我的直接上司是技術總監但感覺也不怎麼懂技術,更像是個項目經理,只會催進度,而技術的細節怎麼去實現,或者前後端分工協作的模式該如何界定,他並沒有任何腹案。

也正因為他們對此沒有概念,而我從上一個項目重構經歷得出了一些前後端分離的經驗,給他們分享了一些最新的前端開發模式的信息,告訴他們前端這一塊必須儘早進行模塊化構建,而那時項目才剛剛開始,我正好有機會從頭做起。對我來說是很好的實驗機會。

和上一版本相比,構建的流程沒有太多變化,模塊化只有css和js模塊化,我只是對規範和文檔要求嚴格一些,改善了一些構建工具的監控開發體驗問題,比如gulp.watch監控文件編譯,如果發生語法錯誤就自動跳出watch問題。

如果要說一個比較大的改變,實際是項目需求帶來的變化,該項目由於需要移動端開發,而移動端需要用到前端模板引擎(artTemplate),我們在維護模板引擎的時候需要反覆地維護類似這樣的代碼:

&

在這個項目中,我最大的進步就是項目需要前端mvc模式開發,使得我有機會進一步改善前端自動構建的htm模板維護機制(html模板編譯js化),優化Watch即編譯的前端開發體驗問題。但是這時候,由於我的家庭原因,需要請長假(還少1個月),經過考慮後我辦理了離職,但給這個項目的前端留下的前端工具和模式基本沿用了下來。

==========================
五,第3個電商項目(上)。
==========================
家裡的事情解決後,我又得重新找工作。當然,技術和經驗又漲了一點點,同時一些互聯網求職的經驗也漲不少(主要是在線教育這個項目有個UC出來的產品經理在這方面溝通比較多,偷師了一些經驗),不再向以前那樣白痴痴地不調研市場行情就傻乎乎地投簡歷。我學會了通過內推或獵頭的方式找項目,至少行情比自己投簡歷要好很多。大家別笑話,可能還有很多人木有意識到這點,特別是像我這種半路出家沒有在很像樣的互聯網公司呆過的同學,這方面的意識是比較滯後的,往往會落得同工不同酬的悲慘結局。

2014年6月底,經過獵頭推薦來到了一家化妝品起家的互聯網電商。這個公司的業務規模很大,我進入的是一個會包含PC、H5、APP(安卓和IOS)等多端並行開發的海淘項目,進去的時候是以其前端開發主管的身份進去的。咱們是現實的屌絲一名,在薪水的提升面前,其實title沒那麼重要啦,對吧?

這個項目在一個很高大上的,反正是和屌絲身份格格不入的地方辦公。創始人是化妝品電商行業比較牛逼的,而且一直做的是電商,所以這家公司的互聯網氛圍還是比較濃厚,但也意味著快速開發迭代的節奏。我進入的時候項目的第一期已經上線,並且已經獲得了千萬美金級別的風投。

進去那天,上午是超級簡單的入職培訓,下午熟悉項目,第2天上午就來了一個緊急需求——3個專題活動頁面需要快速上線,隔天就得見到東西,因為項目投放了一個演唱會地推,線上必須在演唱會開始之前見到相應的推廣活動頁面。

當時我所負責的組員有3個(其中1個,家人出事請假了),也就是能幹活的包括我,就三個人。好吧,那時我其實還叫不全兩名組員的名字就大夥分工,一人一個頁面,用原始的方式切切切,把東西弄出來。那天,我們三個前端、兩個php以及一個測試的妹子(可能是姐姐)搞到了凌晨3點多。

這是我第2天上班的節奏,現在還記憶猶新。其實,真的有點被嚇到了。那時候(其實才是去年,但電商的節奏讓我感覺已經很久很久以前的事情了),項目的後台系統很不完善,沒有啥可供運營使用的東西,專題快速部署的系統當然也不會有的,那麼前端的工作就被限制在一些生效效率極度低下的專題頁面的開發上,而且沒啥大多沒啥技術含量,就只能靠人力維持。

隨著項目的發展和投入的逐步加大,活動頁面需求越來越多,人力維持是不太現實的,我們需要一個專題快速生產的系統。經過項目和產品需求分析後,務必要控制在2個星期內完成,而實際給到開發的時間其實只有1周。。。但主要工作其實對編輯器二次開發,後台編輯器上傳圖片時,可對圖片進行二次修改編輯,我們二次開發就是要增加圖片生成商品錨點定位、倒計時,甚至後來還提出了直接將錨點商品加入購物者的功能。。。

這其實主要是前端的要啃下來的活,php只是從屬配合,把生成錨點代碼和展示配置保存到資料庫。如果有人問我前端有什麼需求值得去每個前端都去嘗試,那麼我會將web編輯器列為其中一個。誰弄誰知道。

這個項目是我做電商前端開發以來的最難搞的需求,沒有之一。當然,如果開發周期預計得足夠長,一切難點都不是問題,難就難在限時實現,和參加奧數比賽類似。由於時間有限,項目經理幫我們找了個有類似功能實現的kindeditor編輯器插件,但是人家是加密了的,我們只能把代碼扒了出來進行反編譯,接入到我們的後台編輯器裡面(ckeditor),接下來就是兩個人接力coding,住了好幾天7天連鎖。。。尼瑪,現在回想起來,沒有在馬桶上坐掛,那是命不該絕。後怕。

這個編輯器項目總算如期交付,雖然後期有很多兼容性bug,但還都在可控範圍內,解決了專題發布效率低下的問題,而前端開發也由此從手工維護專題的漩渦中解脫出來。我也因此在不到1個月時間內被列入了核心開發的崗位,並提前轉正加薪(稅前應該大於20K了)。其實,我當時很想著離開的,畢竟開發的節奏太快了,壓力著實有點大。只是作為已過而立之年而且轉行跳躍非常大的一個人,這些年過得有點昏昏噩噩,沒啥成就,如果在這裡學會了放棄,以後可能會變成一種習慣。而且,這份經歷可能成為職業污點,畢竟開發圈子其實很小,不是東家就是西家,也就堅持了下來。現在回頭看來,是正確的。誰沒有過放棄的念頭呢?

==========================
六,第3個電商項目(下)。
==========================
但是,項目需求迭代的速度並沒有因為我們程序開發經常通宵,也不會因為某個人可能存在放棄的念頭而會慢下來。這才是『正常的』互聯網電商的節奏,因為去年開始做海淘的項目開始噴發,有點當年千團大戰的感覺,如果你把節奏慢下來,可能意味著落後,一步慢就會步步慢。

Boss發話說,我們第一期發版後的UI界面和性能體驗實在太糟糕了,而好多頁面的首屏載入速度讓人難以忍受,甚至有白屏情況,讓要我們儘快出台優化方案。其實,上線只有1個多月,前期又沒有太多時間做基礎設施建設,整套系統都是在一個相對完整的商業系統上二次開發而來,能有多少好的性能體驗呢??

但是,在民營企業裡面,Boss的話就是聖旨。就得立刻響應和執行。

於是,我們整個技術團隊就對前端性能優化做了一次相對完整的評估,雅虎XX條軍規,出台了一些優化方案。這個方案實施,我提出了要響應快速的迭代需求,前後端模式需要建立起松耦合的開發協作體系。其實,這個時候阿里前後端開發體系的一系列文章才出來幾個月,對於業界的影響還是有的,至少這個項目來自後端開發的傳統程序員基本能接受這種開發思維,但是問題是如何建立?

對於一個已經在線上跑的項目,徹底的打翻重構是不現實的。我又一次面臨了一個有難度的前端模塊化工程化、前後端分離開發體系建立的需求。但這次不同,這個項目代碼規模更大,業務更複雜多變,而且一直是高速運行的。

入職後的1個多月里被專題和編輯器羈絆住了(中間還請了一個星期的假),網站的其他業務其實我沒有太多精力去顧及,還好另外一個同事手腳麻利,維護性質的需求一般能很好地解決。當我有機會從頭梳理前端以及服務端View層的代碼邏輯時,還是被那些商業電商系統混亂的前端代碼結構給震住了。

我就不說哪家了,國內的開源或不開源的電商系統,大部分精力放在後端的業務實現層面,而前端這邊壓根是啥沒有模塊化概念的。當然,為啥這個項目的技術選型要選這樣一個系統?鬼才知道呢,反正我是不知道的。但是,既然負責這一塊,別人挖的坑就得由接手的人來填。這是行規,你懂的。

在電商這個領域,解決前後端耦合的問題,主要要做好服務端模板層的規劃,控制權儘可能只壓在前端或後端,多方維護的情況儘可能減少。以PC端為例,這裡是要求SEO的,那麼頁面的渲染必須在服務端完成。當然,這裡會涉及頁面性能優化和前端資源調度的問題,服務端模板層最好是由前端團隊來掌控。然而,不是每個前端開發人員都是懂後端語言的,這個其實是提高了前端人才的准入門檻,但這又是必須的。

至少我前面幾個電商項目都是這種情況,其他電商的做法就不清楚了。這裡簡單說我們的做法:

1,服務層按功能分層、分域,服務端view層獨立開發域。

比如,核心底層基類分出一個開發域,通用函數或組件也可以一個開發域,後台各種管理運營或配置系統劃分為不同的域,而前台的,比如首頁、列表頁或專場、搜索、詳情、購物車、登錄註冊找回密碼、會員中心也可以分別各一個域。此外,即便是服務端模板層的開發語言,無法前端團隊沒能力決定,也至少單獨一個開發管理的域。這是前後端松耦合的關鍵。

當然了,不是各種開發域分得越細就越好,務必要根據按開發團隊的人數以及實力來確定。如果分的太多太細了,代碼合併管理的重複量會提升。每個人可能同時負責好幾個域的開發,解決了代碼耦合,但卻降低了開發效率,而且增加系統間聯調的風險,這是不合理的。

2,對服務端模板層進行公共頁面、組件抽象。

比如全站的很多頭尾部是共用的,變化的部分相對較少的,進行公共文件剝離和抽象。垂直類電商一般是以頁面為顆粒度的,頁面展示大多以大塊大塊的圖文列表出現,太精細的抽象是沒必要的,至少我所負責的項目大抵如此。其他大眾類電商因為要展示的商品種類多,頁面可能會做的非常細膩,以更精細的頁面組件來組織view層代碼結構才會顯得有必要。

3,開發前端靜態資源調度機制。

為什麼要做這個事情?這個問題我就詳細展開了,太多了。理論層面的,可參考
大公司里怎樣開發和部署前端代碼? - 前端開發
當然,因為業務不同,我們有自己實現機制。但需要解決的問題基本上,張雲龍講得比較通俗易懂,我也就不班門弄斧。

4,我們遇到的問題——TTI延遲引起的前端構建框架重構

前端模塊機制是建立在requireJS基礎上的,但之前我做的是非同步的方式,在以前的項目中其實對於性能優化沒有那麼苛刻,但是這個項目不一樣。是當前競爭最慘烈的一個垂直領域——海淘。因此,任何一個可以改善用戶體驗的優化,對於項目的意義都是巨大的。

從用戶體驗出發的幾個核心時間指標包括:Start Render、DOM Ready、Page Load、TTI。不同的性能指標對用戶體驗的影響是不同的,而指標本身受哪些因素的影響也是不同的。一般的前端優化都會考慮前面三個的優化點,而最後的TTI優化往往被忽略。我們卻碰到了必須解決這個問題的點,業務場景發生在需要加入購物的按鈕上。比如詳情頁的下單按鈕。

不好意思,我不好拿原來自己做的項目來做說明,就隨便找一個電商的詳情頁來替代 因為大家的問題是類似的,比如這頁面 姬芮(Za)隔離霜聚美訂製禮盒

如上圖所示,兩張頁面是載入先後的兩次截圖對比。當用戶打開頁面時候,頁面結構的渲染很快就完成了,但一些非同步的請求較慢,SKU的計算也需要耗費一些時間,但問題用戶可以看到加入購物車的按鈕啊,大紅色的很吸引人,讓人點擊的慾望是很強烈的。但是,有些時候網速稍微卡斷一點,那麼這個加入購物車的按鈕就一直點擊不了的。很多小白用戶就可能會問,為啥不能點擊加入購物車啊?我敢肯定一定有這樣的投訴,只是看網站開發者如何對待這個問題而已。

這個就是典型的TTI問題。

什麼是TTI?? 最好百度。簡單滴說,Time To Interact指的是頁面可交互的時間。這個應該越早越好,如果頁面因為需要等待非同步請求的結果才能計算,而非同步的數據可能是回不來的,那麼就不要讓用戶可以這麼快地看到可交互的元素,因為它會吸引人去點擊,但卻沒有響應,投訴就必然。

當然,這個問題發生在我們的網站很多地方,比如詳情頁、購物車以及生成訂單的頁面,要知道這些頁面的交互分分鐘對轉化率產生影響的。然而,採用requireJS非同步請求模塊的方式,這個TTi問題就會更加突出。

因為頁面首次渲染會發生在css載入完成之後,如果不做任何處理,加入購物車的按鈕就會很早呈現在用戶面前而觸發用戶去點擊,但由於頁面一方面要等待非同步的js完成,還要等js發起的ajax請求返回的數據做進一步處理,即便是我們對按鈕做loading狀態處理,但require非同步的js可能會發生很多意外,頁面的購物車按鈕區域一直在loading,而導致用戶無法點擊加入購物車。

也就是說,我們用requireJS框架代碼的模塊化管理,但卻不能在生產環境中直接使用它的非同步機制,因為它會對TTI延遲帶來影響。怎麼辦?

ok,到這裡你可能對js模塊化有些很反感,有這麼多毛病幹嘛還要模塊化啊?這個問題很深刻,但問題不能單純從一個角度看待,任何事物都是有兩面性的。

其實,如果用其他模塊化方案,只要是非同步載入js的,都會存在類似的問題,包括seajs。要知道模塊化開發一定是團隊配合的必然選擇,既然已經選擇了requireJS作為模塊化機制,那麼它帶來的問題,我們就要著手研究解決方案。

5,前端模塊化開發與TTI延遲問題的解決

首先,我們的前端團隊已經熟悉了requireJS,基本都能掌握AMD模塊開發要點。首次重構的代碼已經發布上線後,必須先將TTI問題嚴重的幾個頁面,做loading狀態處理,讓用戶等待。

但這只是過渡方案,更優化的解決方案是要對前端開發構建流程做優化調整,把非同步的模塊在發布生產時必須合併起來,作為同步載入的模塊,放置在頁面最底部,而且合併的文件應儘可能降低代碼的冗餘。

但是頁面js資源不僅僅只是優化一個頁面,將一個頁面combo成一個模塊就完事了,應該想服務端模板一樣,js也要分層,將最底層最核心的類庫抽離出來單獨combo,多個頁面之間共用的模塊也要單獨combo(這種形式的combo結果可能有多個,因為如果共用模塊過多,按一定的大小來合併,我們的原則是mini化之後不能不要超過200K一個文件,如果超過了,就要另起一個文件,當然,這個要靈活處理),前面兩者是在頁面之間可以相互繼承的,而只有當期頁面私有邏輯的js模塊則應該是一個單獨的模塊。

那麼,網站js最終的形式可能是這樣的:

這是我們希望得到的模塊combo結果。我們採用的線下combo,然後將combo的結果發布到CDN,這樣就需要解決以下的一些列問題:

1,如何區分核心js和頁面共用js?
2,構建流程上如何解決它們的修改,然後編譯的版本迭代問題?
3,對於開發的角度,在本地開發能夠快速調試,包括源碼調試以及combo狀態調試?線上的問題代碼,如何方便開發人員調試?
4,私有模塊化如何調用共用模塊的方法,或採用怎樣的機制來對共用模塊進行單獨的實例化?
5,多個模塊化之間,combo的先後順序是什麼?
6,內嵌資源比如img圖片引用,如果引用的圖片發生了修改,如何解決它的緩存問題?
7,如果業務模塊很多,比如好幾百個(電商的業務很容易達到這樣的量),那麼可能因嚴重影響代碼發版的速度,是不是考慮增加構建的緩存機制,或服務端combo的機制?
……

好吧,這些問題最終演變出來的,其實就是一整套環環相扣的前端工程化解決方案。

這裡面,單獨就js而言,要涉及很多代碼規範問題,比如js通用模塊開發標準,私有模塊開發標準,私有模塊提升為公共模塊的機制,第三方插件的改造規範,js模塊的碎片化程度如何掌握?這是一個度的問題,等等。

因為加入CDN網路後的,強緩存解決方案是更換URL路徑,而對於訪問量大一點的電商來說,非覆蓋式發布是最佳的選擇。前端架構的開發機制還會涉及服務端模板引擎的如何載入前端靜態資源的問題,如果是純靜態的移動端網站優化,可能還需要你自己設計一套開發機制以及靜態html開發的具備模塊化能力的模板引擎,來解決動態變化的css或js引用問題以及開發調試的體驗問題。

好了,這其實是業務邏輯開發以外的,高階前端開發者需要面臨上述的前端痛點問題。這會涉及方方面的調整,比如前後端邊界的處理,前後端交互的API規範,開發調試環境、測試以及發布流程的設計,版本迭代回滾,以及性能監控等等一些列衍生問題。。。

我可以負責任地告訴,不同的項目,前端架構設計是不太一樣的,因為業務邏輯不同,前後端開發人員配比以及能力模型也不同,那麼前端架構就可能得採用不同的設計方案。

當你的業務發展要面臨這些問題時,可能前端就沒有大家想想中那樣簡單了?

「一葉障目不見泰山」
「前端說白了只是語法糖,一種編寫頁面的容器api和程序語言的封裝,是計算機發展的大樹長出的小枝椏。」……

如果我說了這麼多,舉了這麼實例和理論分析,如果大家還認同這樣的看法,就當我什麼話頁沒有說過。就此打住別再往下看,但我也勸你別再干前端了。對於這種似乎是很文藝的表達方式,咋一看,好像挺有意思的,但如果要想玩文字遊戲,我們就得按遊戲的規則來把問題說清楚:

請問什麼是前端的「一葉障目不見泰山」?
請問什麼是語法糖?
請問什麼又是計算機的大樹?
請問計算機的小枝椏又是什麼?

作為前端從業者,我對於這樣的無厘頭描述是表示反感的。因為這是一個很嚴肅的話題,而編程又是要求邏輯嚴謹的工作,任何意識流的或空泛的描述都應該是不被允許的。當然,如果我的文字傷害了答主,或違反了知乎的遊戲規則,那麼該對我關小黑屋的就關小黑屋。我沒有意見。

是的,前端從某個角度上看,業務本身的實現並不難,不會涉及太多深層次的演算法問題,但是如果要將頁面優化做到比較好,解決方案誕生的過程中一定涉及很多計算機底層的邏輯演算法的問題。

比如facebook這種的網站,是上萬個AMD模塊的代碼規模,不同國家的用戶進入同一個頁面要載入的css和js組合可能是幾百萬種時,人家可是要找博士來研究前端架構的解決方案!當然,這個不是我說的,如果認為我在吹牛散布假消息,大家記得找張雲龍大俠來問清楚——
https://github.com/fouber/blog/blob/master/201508/01.md

當然,絕大多數項目是沒有到達這樣的量級的,比如我們也就幾百個js模塊,但是對這些模塊的依賴關係處理,就已經涉及遞歸、排序、排重、對比以及插入等底層演算法,只是很多人還沒有接觸到這一層面而已,並不意味著前端開發就不需要。此外,如果你的前端團隊如果要用到nodejs做中間層開發,前端開發人員還會面臨大量的服務端開發的問題。這是另一個話題,我就不再說了。

總之,在我看來,前端開發的難點不在於某個業務邏輯的本身實現,而在於規模化生產的前端工程化問題的解決。

==========================
七,第4個電商項目。
==========================
這是第3個項目電商的延續,因為是同一撥團隊繼續乾的項目。這份經歷暫時不方便透露太多,只能說這是以我原來的第3個電商項目的技術團隊核心成員為班底的,又一個從零開始的項目,同樣是海淘。經過半年多一點,現在已經走到了B輪,暫時只能透露這個消息。

對於做海淘的電商而言,因為我們屬於後進者,節奏要比其他項目要快一些,要不是沒有任何機會的了,也就意味著別人可能是半年或3個月就融資一次,那麼我們就得基本上2個月就進行一次融資,至少在C輪以前必須是這樣的速度,要麼只有等死。可想而知,要能完成這樣的融資節奏,那麼開發、推廣和運營是怎樣的節奏呢?

作為參與者當然是非常非常辛苦的。這幾個月不能說天天有發版,但基本上每周二周四會有一個小版本,1周或2周就得完成有一個中級版本,可能是多個版本交替迭代的,而一個月就一個大版本更新。競爭激烈,我們必須按這樣的速度去迭代才可能有活路。

那麼,單就前端開發而言,如果沒有很好的模塊化、自動化、流程化的控制體系,你能想像搞這種速度的開發迭代,哪個程序員會和你玩?還好,半年來30來號技術開發,技術團隊的離職率基本為0,技術負責人的項目管理能力非常厲害的(我知道的就是,華為那邊出接近100W年薪挖他,他沒走,當然我也是跟著他混)。

ok,不能再說了。只是有感而發,差點停不下來。如果哪天這個項目有個完結了,比如我離開它,或項目走到了上市或被收購,或資金斷流散場,我會回來把這份經歷補充好。埋坑。

==================這裡是分割線=================

八,前端開發者快速升級通關的一些個人經驗總結。

這純屬個人經驗,不一定適合你。還是那句話,如果感興趣就往下看,不強求。

在評論裡面,我說了,從轉行做全職前端,從切圖開始升級發展到做電商前端架構,只是花了2年時間。不管你信不信,這絕對是事實。當然,我是有好幾年php+前端混合開發基礎的,不算是從白丁開始的,但轉行那時候的前端技能最多就是初中級別,只會用jq插件完成邏輯。

我現在的好幾下屬,做前端的時間都比我長,有個已經5年了,但依然找不到方向。我平時在招聘前端時,面試的前端好多都幹了3-5年了,還是那樣。不是我想笑話這樣的人,或絕對自己真的可以吹牛逼,我只是覺得可能是大家沒有看清楚前端這個工種的未來,沒踩准快速升級通關的節奏。當然,也可能你還不夠努力。反正,種種原因吧,各有不同,我只能說我自己的。

這兩年,我手機裡面全部是前端開發書籍,沒有100本頁有50本,背包裡面總有一本關於技術開發的書籍。每天除了上班幹活,吃喝拉撒睡外,全部時間幾乎全部放在看書寫代碼寫demo上面。以至於忽略了很多事情,包括對家人的照料。這些努力是你看不到的。當然,除了自身努力外,我確實也踏對了前端開發迅猛發展的節奏,比較早地接觸了Nodejs,比較早地看到了前端構建前端工程化的價值。

不過,有時候一個人的價值往往不僅僅是看他的代碼能力有多少,經驗有多少,還要看你能號召多少人跟你一起干。就好比一個人的財富,並不只是他所擁有的銀行存款、固定資產或者股票等等他直接控制的財富的總和,而是除了這些意外,他能調動多少資源,所有他能調動的資源頁都是他的財富。

技術人做到一定程度之後,再往上發展,需要有一定的號召力,因為絕大多數企業不會給你開那麼高的薪酬,甚至給你股份期權。當有幾個人願意跟隨你的時候,那麼在找項目談價格時,就會掌控議價的主動權。因為,你已經不是一個人在戰鬥,你的價值絕對不是以一個人的開發技能來衡量的,而是由跟隨你的團隊的整體實力來決定。

當然,有人願意跟著我,是因為這兩年我除了一直站在代碼開發的第一線外,還堅持了以下幾樣東西:

1,從不藏私。把你知道的東西,毫無保留地分享給你周圍的同學,記得是毫不保留。知道多少,分享多少,這樣才會不斷促使自己去知道的更多。技術層面不存在教會徒弟餓死師傅這種事情,如果你抱有這樣的想法,那就太狹隘了。

2,對代碼要有潔癖。潔癖到什麼程度?包括一個空格,一個標點符號,不要覺得無所謂,一定要覺得有所謂。要追求能力極限上的完美,包括邏輯判斷的嚴謹、文檔的完善、代碼格式的完美。

3,言出必行。一個需求來到我這裡,只要我有答應別人的時間節點,不管如何也要想盡辦法把它實現了。如果確實無法按時,一定提前溝通,但二次調整的時間一定一定要準時,下死命也要完成。事不過三,不給自己留任何後路或找理由。

總之,言出必行既是項目管理能力問題,也是個人誠信問題,這樣團隊里的其他人才會願意相信你,依賴你,跟隨你。

其實,很多時候技術和經驗積累到一定程度之後,業務處理上的能力或技巧,大多數人的差距其實很小的,但拉開差距的往往不是技術本身,而是對待人,對待技術,或對待需求的態度不一樣。我不敢說,技術層面有多厲害,即便是現在的項目給我的技術評級是P7,之前也有拿到的幾個offer給我技術評級也是P6/P7,但我自認為沒有到達這個水準。

既然如此,可能是對待人,對待技術,或對待需求的態度上做得不錯。

舉個新鮮的例子:

前幾個月我們有一個微信jsSdk分享有禮的需求,這個需求非常重要,我決定自己書寫前端邏輯,避免耽誤與外部的合作。但這個需求關鍵的點是需要獲得兩次微信用戶授權,一個是交易授權簽名,一個是分享授權簽名。但由於後端開發同事沒有經驗,只做了交易授權簽名,但他也已經非常努力了,基本通宵達旦了,但當我發現另一個授權簽名沒有服務端介面時,前端的邏輯是走不通的,等別人調休完成再做嗎?但項目其實是務必在第二天提測,要不無法按時上線,而廣告已經投放出去了。


如果是你會如何處理?


當時已經是凌晨5點了,後端的同事都疲憊不堪回去休息了,我決定自己來書寫服務端另一個授權簽名的api,但這裡有一個坑,授權簽名的演算法裡面要求前端post一個url,而這個URL必須是不經過轉義,但微信jsSDK裡面沒有特別說明這個(可能是我沒看仔細忽略了),從安全的角度我習慣對前端ajax的url欄位進行了轉義處理,導致一直調試不通,找了各種原因,還是沒找到原因。。。已經是早上9點多,別人已經又來上班,而我還沒有下班,但已經很困很困了,但知道這個需求很重要,咬牙再堅持,碰巧在這個頁面 微信 JS 介面簽名校驗工具 看到了問題所在,如圖

在php端對這一欄位反轉義,調試就通了,在那天中午前能夠按時提測,最後沒有太大問題終於是上了線。雖然還有不少細節沒處理好,但至少別人接手可以輕易解決。那天我回家修休息已經是下午3點了。也即是,我從前一天10點開始,一直干到了第二天的下午3點,就為了完成當初承諾的時間節點。

事實上,這個需求不是很難,但技術開發有非常明確的截止時間,而需求又是我自己親自做的。如果是其他同事,看到api似乎是服務端的事務,其實作為前端開發的你,人家都走了,你也跟著走人,最後擔主要責任的一定不是前端開發,對吧?但是,這不是我的做法,因為這個項目既然是由你來接手,並評估可以按時完成的,那麼不管哪裡出了問題,這都是你的問題。因此,我會去書寫服務端的api邏輯,儘管這似乎不是我的責任。


好了,說了這麼多。其實快速通關可能是需要時運,但更多是個人的努力與堅持。這個沒有什麼訣竅的,而且很多時候和技術本身沒有關係,而是對待困難的態度要有點點不一樣。


最後,回歸到樓主的問題本身——到底前端的路可以怎麼走?

前面提過兩點,如果當你要從中級跨入高級前端,這除了項目環境外,還需要你要有一定的堅持,並且選對前端未來的發展路線,至少我認為有以下幾種路線可供選擇:

1,業務層面的高手,做到非常了解某個領域的業務邏輯。比如垂直類電商的業務邏輯,這樣你其實可以嘗試帶隊,做項目管理,最終發展做項目經理。

2,前端工程化解決能手。就是我在第六章羅里吧嗦列舉出來的一堆問題,你都能有腹案去解決,每個項目的工程化方案都是不一樣的,這種人才的需求也很旺盛,尤其是哪些基礎設施建設不太完善的項目。

3,nodejs服務端方面開發。這個可能在崗位上更像是後端開發了,只是前端可以通過這個方向進入服務端開發的領域,做的牛逼,其實做一下CTO的夢還是可以做一做的。。。

4,如果上面覺得都不適合你,但你對前端開發又比較了解,那麼轉行做產品頁也是不錯的選擇。具備開發思維的產品,在很多時候是一個優勢。

5,創業。

按現在的行情,前面4個方向任何一個方向做好了,作為打工者,你的收入都不會太低,一般不會低於25W年薪吧?
如果第一點和第二點你都能做得很好,前端架構師這種崗位就可以去試試,35W以下年薪可以不用考慮;
如果你連第三點也做得不錯,那麼系統架構師職位是可以去嘗試的,50W年薪的崗位就應該在你的考慮範圍;
如果你連這4點頁都做的比較到位,我覺得你最合適干第5點,這個值多少錢,就不知道了。

此外,移動互聯的前端開發也是一個很不錯的發展方向,你也可以嘗試做webapp和hybrid app的開發。。。多端的開發能力,也是前端開發人員不錯的發展方向。

=================================
感謝,周末碼的字能感動到人,還是比較高興的。希望我的這份回答能成為個人在知乎的一個亮點,因此我決定繼續分享一些東西,順便預先挖一個坑。
================================

如果要說一個通行的經驗,我會說——做一行就愛一行。

我想以後自己不寫代碼了,經過這兩年開發歷程,自認為做其他職業其實也不會太爛。這可能很性格有關,就比如當初我做編輯,也不算差,還算是當時報社的第一打手,好多黑報道幾乎出自我手,只是當初好單純的說。


=======================

九,談談互聯網項目環境對於前端開發者向高階晉級的影響。

=======================

(上)

我在前面曾經提到過一個觀點——「技術人要明白,你能拿多少,在一定水位之前,基本和技術能力成正比關係的。」


什麼是一定水位之前?什麼又是一定水位之後?


這裡我覺得要對這兩個名詞做一下解析,避免大家對我的這種說辭產生誤解,以為是這位編輯是在玩弄文字遊戲。

所謂的「一定水位」,就是指當一個前端開發者的開發能力進入中高級之後,不同特點的前端開發者再往深入發展時將會出現後續發展路徑上的選擇差異的那個狀態或時刻。

名詞解析總會是有點繞的,但這是我所能表述的最簡單的一種解析了,希望看官你能明白我所指的是什麼。但在這裡,我應該要對中高級前端的開發能力進行一個定位,否則我們並不清楚這種「水位」到底該如何度量。


當然,這個不同行業/企業對「中高級前端開發」的定位或理解是不一樣的。單就電商而言,我覺得是基本上能夠獨立解決各種業務需求,獨擋一面了。如果非要有一個衡量的標準,那麼我們公司的定位是具備以下技能點:

1,html、css和js較為紮實的基本功,尤其是js方面能力,要能脫離jq/zepto之類的工具類庫也能幹活,具備良好的面向對象編程的思維,能夠書寫和維護較大規模的前端業務代碼。

2,熟練使用Sass、LESS、Stylus等CSS 預處理器中的一款。

3,掌握至少一種前端模塊化開發規範及其相關框架,比如AMD(requireJS)或CMD(seajs)。

4,掌握至少一款前端MVC/MVVM框架,並有一、兩個項目實戰經驗。

5,熟悉至少一門熱門的後端開發語言,比如php,java。

6,團隊協作方面,有在具有較大規模的電商開發經驗,必須具備至少一個有多人協作開發的項目參與經驗,掌握SVN或Git中的一種。

7,熟悉前端頁面的優化原則,熟悉http協議的通訊機制,對靜態資源緩存機制較深入的了解。

8,熟悉HTML5和CSS3,有移動H5網站開發經驗。

把H5開發經驗加上,是因為移動互聯網已經是幾乎所有的互聯網項目的業務發展重心,隨著時間的往後推移,以後這一點應該成為前端招聘JD的標配。但我之所以把這項列在最後,因為從PC端切換至H5端開發,其實並不是那麼難,只要項目需要,給一點點時間,任何一個有經驗的前端都能快速切入,如果連這點快速學習能力都不具備,Ta不可能是一名中高級別的前端。


到了這一層面,按當前的市場行情,基本可以以20K為分水嶺(就是這個話題——月入20k的前端該具備什麼能力? - 前端開發)。不同的公司略有差異,一流公司不差錢,這個閥值一般會更高一點。我沒有在一流的公司裡面呆過,但在三四流的電商項目中跑了一圈,了解到的情況就是這樣子。當一個開發人員越過了這個分水嶺,絕大多數企業都不太可能只會讓他單純地去寫代碼,而不要求他做其他事情。不同的環境,安排的代碼外的事項一般這樣子:

1,開始要求帶新人,負責項目需求的跟進與開發任務的實施。職位一般表現為主管或經理,或即便是沒有職位上的直接提升,但乾的活都是要求帶人,日常工作就會涉及需求評估,分配任務和難點攻關,重要或緊急需求的實現(救火隊員),等等。

2,代碼能力比一般的前端高了,也有可能被安排一些底層的前端工具研發,以提高前端的生產效率為主要任務的團隊中去。

後面這種情況,在規模大且核心業務已趨於平穩的互聯網企業可能會碰到,比如百度的FIS團隊,比如阿里螞蟻金服的前端工程技術團隊。了解Web開發的都應該知道,由於前端開發語言本身的局限性,導致前端開發工作的碎片化非常嚴重,重複的工作非常多,開發體驗是相當不好的,規模化生產的效率低。企業的規模越大,這種糟糕的開發體驗就對其生產效率的負面影響頁就越突出。因此,像BAT級別的企業才會設立專門的部門來解決這個問題。

但是,其他快速發展的項目則普遍是第1種情況,尤其是快節奏的電商,比如唯品會、聚美、蘑菇街,等等,還有N多。為什麼?因為電商務必要快!那麼人才培養成熟後(或招攬的人才具備同等水平),往往被優先安排到業務最繁忙的事務上。因為這樣才能最快地出成績,而前端生產效率低下這種負面影響並不是那麼的重要,甚至可以說一點也不重要。

因為中國的電商幾乎都是以市場營銷為導向的,滿足業務需要才是最關鍵的。只要業務發展快,融資節奏跟得上,前端這一技術細分領域是否模塊化,是否工程化,就顯得真的不那麼重要了。頁面少幾個連接數還是多幾個連接數,並不會有立竿見影的影響,高並發上來了,頂不住的話,有大不了我多幾台伺服器就是了,但營銷需求的開發一定要優先滿足。

而規模更小或創業初期的互聯網項目,如果能用得起這樣前端的,往往都是除了開發外,還有做更多的事情,包括招聘、培訓、帶團隊、需求評估與跟進,書寫業務邏輯,甚至還要自己切圖,事情多,工作雜,加班加點是正常的,每天過得累死累活,比如我就是這麼過來的。

於是,有前瞻意識的前端leader才可能會去考慮前端構建、前端模塊化以及工程化方面的事情,而把一部分精力投放到提高前端團隊的生產效率的構建工具開發上面來。當然,我算是比較早就意識到這一點的前端之一吧,所以才能快速地成長。

那麼,這兩種不同崗位安排,對開發者後續的影響又有什麼區別呢?

在規模越大的團隊,工作劃分得越細膩,專註的點就越深,但同時就可能會被限制在某個狹窄點上,成為某個角落的技術專家。但頁會因為缺少去了解具體業務細節的機會,而讓他的發展受到限制,那麼這種人才往往是不太適合去做創業的,一直呆在大平台上才更容易創造高價值。

就前端這個工種而言,如果它的發展都不跳出前端這個範疇,那麼我的理解是這樣的:

在大平台的前端團隊中,一般容易批量生產技術專家類型的人才,這些人才對他所在技術領域的研究會足夠深,但也可能(只是一種相對較低的可能性,不是絕對)不太容易誕生前端架構類型的人才。為什麼?因為做前端架構必須要深入了解業務,同時要務必了解業務團隊的能力模型。

比如:
我們都知道,解決規模化生產的javascript開發模式有很多種,未必一定是AMD或CMD,還有以命名空間或類繼承為原子模型的js組件化架構,等等。但是,不同類型的多人協作開發模式,對於前端開發者的能力要求是不一樣的。很顯然,AMD或CMD規範的模塊化方案對於開發者的能力要求是最低,而以一個通用基類+繼承的組件化方案,對開發者的要求可能是最高的。

為什麼我會這麼說?

因為很多初中級的前端還可能還不知道何為類,何為繼承。js的類和繼承並不是那麼的直接,請問你要他如何在這種開發模式下書寫業務邏輯?而AMD或CMD就不一樣了,我可以不要求你務必理解規範的意義,但我可以強制要求開發人員嚴格按照規範的實施標準,依葫蘆畫瓢,讓前端組員快速參與到業務邏輯的開發中。

相比之下,AMD的規範更加死板,但也更加容易對入門的開發者進行強制要求,對於小成本的創業型項目,就能快速地通過簡單培訓,讓初級的前端也能參與到業務的開發上來,這也就是我為什麼一直使用requireJS作為前端架構的模塊化方案的原因。

因為它足夠簡單,入手的資料也齊全,我連培訓文檔都不用自己書寫(像阮一峰這樣的大神分享的知識、文檔給創業項目太多的幫助了),而我所經歷的都是創業項目,初期的給到手上的工程師質量是層次不齊的,從4k-5K到10K+++不等,請問這樣的原材料,如果要像不缺錢的項目那樣使用各種高檔的性能可能更好的模塊化方案,可行嗎?換做是你會這麼幹嗎?

創業一定要壓縮成本,以最小的成本做出價值,這才是一個合格的架構師該考慮的,性能啊,設計模式啊,這些都不是最重要的。請問如果一直是在高大上的項目打滾的前端工程化設計開發者,咱們花大成本挖他過來,給到創業項目的方案可能是無法落地的。

我所在的第3個電商項目就出現了這樣的情況,花大價錢挖來了一批來自BAT的前端高工,但是出來好多前端解決方案都是無法落地。當然,我從他們給出的解決方案以及相關的代碼中,學到了很多,讓我見識了淘寶、百度之類的一些內部前端開發模式。

在這裡,我可以給半路出家沒有機會進入頂級公司的人,你真的想知道別人如何做的,或想了解細節是什麼。說實在的,有太多的途徑了。最簡單的一招就是——比如利用招聘需求,發布一個高要求高薪資的崗位,讓HR幫你把對應的人給約過來,多聊一聊,就基本能知道了。誰叫大公司的HR喜歡帶有色眼鏡看待半路出家的人,難道你就不能以牙還牙以眼還眼嗎?

這種招數我確實用過一兩次,但畢竟是灰色手段,用多了對身心健康是有害的。最佳的方法是多看人家分享的演講視頻,多參加行業交流。比如這兩年我通過自費參加的行業分享會的事情,報名費和路費沒有萬把塊也有好幾千了吧,當然如果能通過公司層面的企業間交流或引入高級人才來獲得成長機會當然是最好的。越是高端的人才,掌握的核心知識點就越多,當然價值會越高。半路出家的和尚一定要把握好這種智力資源,務必要對高端知識有良好的嗅覺!!!

對的,能力比你強的人,對你來說就一種活著的智力資源,而不是你的職場對手,做人別那麼狹隘。
比如我第1個電商項目,從2012年開始到2013年公司融資成後引入了一批優秀的人才,我當時是拿著8K的薪水,干著項目經理的活,而引入的手下卻拿著你兩倍甚至更高的薪酬時(我是主管,手下的薪酬我一定是有辦法知道的,不管公司層面再怎麼保密也是沒法的,當然這種屬於非常初級別的權力遊戲,如果你連這點手段都不會使,你可能需要回爐去做最底層的開發者),作為主管的你是會不會覺得心裡極度不平衡?

不患寡患不均,這是人性的弱點。當然,我也沒那麼高尚,那時候也一樣有些覺得不忿。但是,當你看到別人確實比你強悍,理念比你先進的時候,請一定把這種人性中醜陋的一面藏起來,敞開你的心胸去接受這種事實,並虛心向比你優秀的人學習。

=======================
(下)
=======================
打住,有點跑題了。咱們還是來聊前端這份職業的發展問題。

職業發展其實是一個很虛但又很實際的話題,我其實給不了具體的答案。我儘可能嘗試寫出一點點有價值的看法。我認為,談論任何一種職業的發展,都得先從企業需求的角度來分析,到底這個市場需要怎樣的前端開發高階人才,這樣才有讓我們這些開發從業者有機會去思考滿足需求這個問題,進而才能正確地確立一個可行的職業發展方向。

咱們做開發的應該很明白這個邏輯——先要有開發需求,然後才會有你去寫代碼,實現需求;而不是我先寫一份代碼,誕生某種需求,然後你要企業來為這個需求買單吧?很顯然,這個邏輯走不通的。

ok,讓我們把時間坐標往前挪動一下。回想一下,10年甚至更高以前,有多少企業會需要前端開發這種工種?可能沒有多少吧?比如我們耳熟能詳的淘寶,一開始前端都是後端兼顧著去做的,不是嗎?哪來前端一說呢?

但是時間再往後推移一點,來到2010年前後,互聯網進入了高速發展期,尤其是電商,除了淘寶天貓、京東等先期的玩家外,還大量湧現了如唯品會、美麗說、蘑菇街以及以美團為代表團購類電商等等一大批玩家,並很快獲得了巨額融資而進入高速發展期,堪稱野蠻成長。

當然,從技術的角度,野蠻成長的背後是有代價的,前面我反覆強調過,電商是以市場營銷為導向的,絕大多數開發資源都要以滿足營銷需求為第一要務,追求極限的業務發展速度,而可能忽略了技術層面技術設施的建設。

當然,這也是技術人的角度。從企業的角度並不是這麼一回事,除非技術項目的管理者(最好是創始人)在一開始就意識到,前端技術精細化是有價值的,企業才會重視前端技術基礎設施建設的問題,而預留部分開發資源來解決這一問題。當然,絕大多數現實並不是這樣的,我們可以通過相關的前端代碼來分析得出這個結論,但還是存在不少有這樣眼光的企業,而在技術上的具備某種優勢,比如天貓。

當然,這還是技術層面的觀點。但你不能否認天貓的前端基礎設施建設是國內所有電商中做得最好的吧?因此,這個觀點至少是站得住腳的。正因為有需求,所以才會有給我們前端從業者快速成長的機會,這一段時間湧現了大量的前端頂尖人才以及相應的解決方案,比如seajs、kissy等技術方案雛形就是誕生在這一個快速成長市場背後。

所謂時勢造英雄,說的就是應該是這個道理。

那麼,我扯這麼多幹嘛呢?和你我的前端職業發展有什麼關係嗎?當然有關係啦。在一線的互聯網企業優秀的人才儲備更勝一籌,頂尖人才對於未來技術的探索和思考一般會走在前面,包括前瞻性的開發理念和開發意識。

比如,一般的項目(特別是外包項目)還採用前後端混合開發的時候,人家已經在探索前端模塊化的解決方案,當你還直接把js寫在服務端模板層上的時候,甚至一些js方法和邏輯還需要用後端語言來輔助做判斷的時候,人家已經在實施前後端分離開發這個事情了……但問題是你知道別人在做這些嗎?知道了,那麼你又能意識到這些東西的價值嗎?

比如這種:

我也就是隨手下載的一個開源商業系統,隨便一點就找到了這種『漂亮』的模板,外包項目基本就是天天做這種活的,很多電商創業初期就是從這種模板系統開始的。請問這種項目該如何做重構,如何做前後端分離?我可以保證,絕大多數項目到死也沒有把這個問題解決。不過如果你有能力做好這件事情,那麼你的價值就不會太低的,當然,我覺得自己有這個能力,你呢?

正是因為我曾經在外包或企業網站級別的項目中做過2-3年,但始終得不到很好的成長,表現在薪酬上一直難以寸進,甚至比不上寫稿,當然我做外包項目的同時,為了生存只能堅持給媒體供稿,包括和編輯合作寫槍稿,稿費很高,但很不客觀,甚至自己都覺得噁心。不過這是為了生存,也不怕你笑話,誰沒有過低谷呢?你說對吧?

因此,如果大家有機會進入這樣的企業歷練那就抓住,這是快速成長的最佳途徑。當然,如果你沒有機會,那麼也不用太沮喪。

隨著時間再往後推移(就是2012年左右吧,nodejs逐步穩定起來之後),越來越多的企業開始意識到,前端技術精細化的價值,包括二線三線四線的電商企業。那麼,如果你沒有機會進入一線的企業,在一些二線三線的電商裡面也可以獲得非常不錯的發展機會。這樣的機會依然大量存在,這兩年新創的具備電商基因的企業實在是有點多。

你會發現,我之所以能快速成長,其實是因為我一直呆在電商這個領域。這個領域的特點是技術會跟錢直接打交道,你開發的程序控制著錢的流向以及要負責它的安全問題。因為錢這個玩意,大家都是很在意的,少一毛多一毛都是敏感的。

比如你搶個1毛錢紅包都是很值得高興的事情,正因為如此,涉及錢的平台,它背後的技術力量就需要更加小心而謹慎了,用戶對此是非常非常敏感的。你一個按鈕稍微反應慢一點點,就可能讓用戶對你的信任度減少那麼一點點,而這個市場並不只是你一個玩家,更加極致的用戶體驗就可能成為分出勝負手的關鍵。那麼,用戶體驗的最佳解決者的價值就呈現出來了,因此具備電商基因的互聯網項目都必須對前端重視起來。

其實,廣義的角度,絕大多數的互聯網項目都或多或少要和錢打交道的,間接或直接罷了。

========================
到這裡我不想再說太多了,免得超越了太多人文字閱讀的極限。因此,我需要對篇幅進行控制。不要誤會,不是我沒有東西可說,只是這裡似乎已經不再適合。

ok,還是從我自己說起。

這兩年的求職經歷告訴我,當我轉行前端並獲得的高速成長的機會,事實上得益於互聯網電商野蠻成長背後,一開始對前端精細化的不夠重視帶來的機遇,如果前幾年企業就已經意識到了這一點,並對前端技術設施建設有一個良好的規劃,並安排相應的開發資源,那麼我這種野路子和尚是的價值就可能打一些折扣。可以預計得到,一旦前端技術設施建設完善,那麼支撐前端精細化背後的工程化技術的價值就會被弱化。

但是,現在前端精細化的進程才剛剛開始,甚至現在市面上連一本闡述前端工程化方面的解決方案的教育性書籍都沒有(我建議 @張雲龍 大俠出一本,但不要放入太多百度的東西,如果有行業的編輯看到,我建議可以組織這樣一個話題書籍,會有市場的)。我這麼說,你能感受到這裡面的職場機遇嗎?

這是前端從業者的舞台,歡迎加入。

十,關於我的轉行和職業發展的超級野路子——准職業選手轉編輯再轉php開發再轉前端

先來一張大家很熟悉的圖,後面幾章我會聊聊此圖與coder,可能會是不客觀的,甚至是主觀的臆斷,但我可以保證話題還是有一點新穎性的。不過,我需要做比較長的轉行鋪墊,所以務必請客官您見諒。我還是建議能看則看,看不下去就真的不要勉強。

但如果你對這個話題有興趣,不妨將就一下看看。

(一)
如果有人問我,做寫手、編輯的經歷對我現在有影響嗎?對我個人來說,是正能量,還是負能量?我會不假思索地告訴Ta,有深刻影響,並且是正能量。從某個角度,是非常大的一種優勢,而且這種優勢可能是從始至終的。

為什麼?

當然,從剛開始切入寫程序的時候,可能會有點點羈絆,畢竟從寫文字進入到寫代碼,這是非常規的跳躍。碼字是一個相對感性的過程,太過理性的思維是寫不出讓人拍案的文字的,那些文采飛揚的作品大多是那些性格憂鬱、內心情感豐富的人留下,或在不太理性的狀態下寫出來的,比如酒醉之後,情感受傷之時,抑或是人生失意的那些時刻。這種作品很多很多,就列舉了。。。

當然,我的文字能力遠遠達不到這種級別,可能一輩子也沒有這種能力,最多就是能用文字把自己的意思表達清楚的水平,這點自覺我還是有的。因此,我是做不了大眾文化類的編輯記者的,沒這個能力,但是有很多對文筆要求並不高的媒體可供選擇,比如IT類媒體。

當然,我並不是說IT類媒體就對文字能力就沒有任何要求,只是相對低一些。而我所在的報社其實是具備完整的新聞采編資格的(那時候網路媒體還不被承認,網媒大多是沒有新聞采編資格的),因此即便文字能力再爛,我也得努力去提高自己的文字水平,做一些參悟文學修養的事,要不老是寫一些沒什麼修養的文字,你也不太可能有資格去做更深層次的內容,或去做採訪這種高難度的動作,對吧。

因此,我也曾經修鍊過類似《如何提高新聞編輯的職業素養》,參閱各種文學作品,甚至也嘗試去考取《新聞記者證》這種事情。當然,努力過但無奈能力太弱了,拿不到,簡直就是失敗編輯的典範。哎!

經過深刻反思後,我覺得自己該轉業了,否則一方面平面媒體下坡路的速度在加快,IT類媒體更為明顯,另一方面文字修養的缺失,自己是走不好靠碼字來生活這條路的。怎麼辦?

當時我是很迷茫的,並不知道自己未來該做什麼。但危機意識相對強烈的我,深深地知道,該重新找活路了,但我並不是特別明確具體的方向在哪裡?那時我已經27-28了。如果有類似的經歷,你一定能感受得到,那種內心的彷徨與掙扎。

(如果你能看到這裡,我想你應該給我點個贊吧?)

但畢竟我所在的媒體和IT很近,很近,經常和各種IT軟硬體人士、互聯網人士有接觸,包括幫他們寫寫槍稿什麼的。

我的客戶譬如3721、阿里巴巴、百度、網易、搜狗、華碩、微星等,對的,沒準某個xxxx平台商家入駐的成功案例就出自咱的手筆,只是你未必知道那是俺們這些文編的隨意捏造,但做軟體或互聯網產品市場運營的人士一定一定知道這裡面的貓膩。這是灰色的運營手段,但大家不也天天用嗎?而且,很多互聯網產品就是這麼運作起來的。

世界就是這麼好玩,許多知名的互聯網產品或平台也有它的原罪,也需要通過灰色的手段來完成原始的積累,甚至需要通過「坑蒙拐騙」的方式來教育市場,激活潛在的需求!

打住,不能再說了,跑題了。這絕對是我個人的臆想,請別亂猜測,沒根沒據的,我只是寫個故事,你不能當真。

(二)
得益於多年媒體的經歷(其實也沒幾年了,3-4年吧,只是大學就開始寫稿了,算起來也是碼字生涯的一部分,所以對我自己來說是很長的了),或多或少讓我具備了比一般人相對靈敏的嗅覺,特別是對行業未來的發展層面上的觀察與思考——認定互聯網是未來的必然趨勢,裡面應該有很多職業的機遇,就這樣我想著去從事和互聯網相關的事情……

另一方面,也是因為我喜歡搗鼓研究各種自己不太擅長的東西,比如玩玩吉他(這樣是覺得妹子會喜歡),搗鼓計算機軟硬體,以及開發程序什麼的,例如玩玩wordpress和自己弄一套模板,用phpcms/dedecms等內容系統建個素材站,也或者搞搞dz論壇系統,順便業餘借個企業網站外包的單子,當然還有很多。。。

甚至,為了給電腦報、電腦愛好者寫出高質量的稿件,我認真地去啃類似《深入解析Windows操作系統 (豆瓣) 》這樣的巨作,膜拜大神級偶像Mark Russinovich,經常去逛人家的博客 Mark Russinovich"s Blog,意外地鍛煉了英文閱讀的能力。

當然,還會拆開電源、音箱、顯卡甚至CPU,研究它們內部線路細節什麼的。真的,什麼是好電源,什麼是爛顯卡,CPU多核心與多進程的區別,這些我還算比較清楚的,不過CPU這個玩意真?比較深奧。。。

當然,為了努力提高自己的編輯/記者的素養,《如何成為頂級記者》這種作品是要讀的。為了改善文字能力,或增長見識吧,還閱讀了不少經濟類、金融類以及品牌營銷類作品,譬如《博弈論》、《貨幣戰爭》、《營銷管理》、《定位》、《品牌之源》,甚至《資治通鑒》、《變態心理學》這種玩意都還涉獵過……

其實,我還未曾告訴你,咱一度+差點成為了電競職業選手,要不咱們來玩玩《星際爭霸》,曾經水平大約在VS平台16/17級的樣子,Terran選手,現在最多5級,老了打不動了,APM太低了,操作不了那麼多兵種,TVP、TVT的機械化玩法或許還能搞搞,但極限暴兵流或TVZ的SK打法是玩不了的,對APM要求太高了,但給點時間,讓我找回點點意識,或許跟你玩玩超低APM的意識流大招,黑死你……對,「意識流」,這個詞上面我用過,這是電競行業術語,我沒有亂造詞吧?

如果沒有記錯,我似乎和魔獸人皇sky有過星際的對戰記錄,那時他還在打星際(真的他曾經打過星際,Home戰隊),每當我職業發展不順的時候,還偶爾到浩方平台扮鳥,找心理平衡,當然也經常碰到被找平衡的。

大家應該知道的,電競是1萬個人中可能只有1-2個人有飯吃,其他人都沒得吃的行業,這明顯不適合資質普通的玩家,比如我,電競是玩不的了,那只有轉行當寫手吧。其實,那時我大學還沒玩完,就出來做編輯了,也就是沒畢業就做和專業無關的事情,碼字的編輯。

為啥?通宵練級是要錢的,沒錢就給IT媒體寫寫稿子,掙網吧費。你說這個法子,可行吧?

你知道的,電子遊戲玩得不賴的人,電腦知識還是很豐富的,那就給IT媒體供稿其實不是什麼有難度的事情,而且那時候IT媒體稿費比大眾文化類媒體還要高一點,畢竟懂電腦的人真的不多,而電腦知識的普及初期就必然讓擁有這方面知識的人價值高那麼一點點。真的,如果騙你,那就讓我的代碼天天爆出bug,這麼毒的誓言,你不會不信吧??

玩電競遊戲的,其實都是窮鬼,擁有一個遊戲以外的謀生手段是必要的,所以我就開始多多寫稿,寫著寫著就成了編輯,這個過渡還算自然的,對吧?

尼瑪,這位答主明顯在吹牛了……都說了,這一章不會那麼客觀的,只是我的個人臆想,就是在努力說明我的路子有多野,僅此而已。

再次,我真的要請你不要當真,權當這一章是答主我在寫一篇半路轉行當程序員的YY小說好了。因為連我自己都覺得,這樣才是符合邏輯的。嗯,就是這樣才符合邏輯,要不這樣的職業路子,誰都走不通,形成不了閉環。

不過呢,如果你想約我打星際,有空我們可以找個地方聯機,比如QQ對戰平台,沒玩過星際的或只能和電腦玩玩的,我讓你一個SCV或讓你再加一家電腦玩家,輸贏無所謂,就當娛樂,做個朋友也行,咱們「不能打一輩子星際,卻能做一輩子朋友」,有興趣私信約戰吧。

-------------------------------
不說遊戲了,我覺得這一章有點點亂,需要稍微簡單整理一下,從大學開始之後的事情以及職業發展線路:

大學與遊戲
大一 --&> 好好學習 --&> 大二 --&>開始變壞,玩遊戲 --&> 大三 --&> 變得更壞,通宵玩遊戲 --&> 玩出花樣了,參加比賽 --&> 反覆被KO --&> 投入更多時間練習,燒錢(小錢) --&> 沒錢,掛科 --&> 大四補 --&> 沒錢升級 --&> 寫稿掙錢 --&> 白天寫稿,晚上打聯賽 --&> 發現寫稿似乎可以致富(大四上半學期基本每月可以拿到4K左右的稿費,別人找工作大多數是達不到這個水位的)--&>賣力寫稿 --&> 大四下半學期被招安當編輯(非編製內的),結果是忙於寫稿和打比賽忘記把學位這玩意拿到手裡面了。。。甚感遺憾

編輯與槍手
上班 --&> 寫稿 ,玩遊戲 --&> 上班 --&> 寫稿 ,偶爾玩遊戲,研究php系統 - -&> 上班 --&> 寫稿,寫槍稿,搗鼓php開源系統 --&> 危機(06/07年),IT媒體日漸衰落,軟體硬體廠商的廣告投放開始縮水,並逐步向網路媒體傾斜,比如太平洋、zol之類的。。。怎麼辦?--&> 痛苦中寫稿,寫更噁心的槍稿 --&> 偶爾發現企業網站開發需求,用dedecms/phpcms/dz接單 --&> 轉行外包

外包項目--&>企業站開發、維護,可能包括運營+運維,此外還是要做外包
……
(痛苦的經歷,不想再寫了)

電商 --&>電商 --&>電商 --&>電商 --&>now
……
(請回頭看上面的章節)

(這種路子夠野吧?請記得點贊!!我需要鼓勵,要不這程序沒法繼續跑下去了)

十一,個人素養與coding(一)——我是如何反覆「打怪」強化「代碼素養」的?
打住!一定要打住了。鋪墊大約就這麼多了。咱們還是回來說說素養和coding這兩件事情。

兩個詞,coding就不用解析了吧?咱們來談談何為素養?素養_百度百科

素養,謂由訓練和實踐而獲得的技巧或能力。《漢書·李尋傳》:「馬不伏歷,不可以趨道;士不素養,不可以重國。」 宋陸遊 《上殿札子》:「氣不素養,臨事惶遽。」 《後漢書·劉表傳》:「 越有所素養者,使人示之以利,必持眾來。」

  1. [accomplishment]∶由訓練和實踐而獲得的技巧或能力

    比如 軍事素養

  2. [attainment]∶平素的修養

    比如 理論素養

我的語文在高考這件事情上,是不及格的,所以我的解析也只是抄的,希望這個解析大家還能理解,這是能力極限了。不能理解也關係,我們把範圍縮小一點點,只聊「代碼素養」,畢竟我們是玩代碼的。

所謂代碼素養,其實就是由demo訓練和項目實踐而獲得的代碼技巧或代碼能力。

這麼說,還算通順吧?代碼素養越高,意味著代碼能力或技巧越高,而這種高度是可以通過demo反覆訓練和項目重複實踐來獲取或提高。當然,你的代碼素養越高,你的級別也越高,當然,能產出的價值也就越高,這個邏輯也還算通順吧?

是的,反覆訓練和重複實踐,這兩點非常重要,在相同類型的項目中反覆訓練,別人做一兩次,我能力弱一點,就多作幾次。簡單列舉一下參與過的垂直電商中必須要通關的,而反覆訓練的關卡:

  1. 攢一套適合電商創業項目的前端工程化解決方案框架,前後迭代了5個大版本,包括pc端和H5端的,至少n個細分小版本。
  2. 以成型的開源商業系統為雛形的電商項目中,做全站的前端性能優化、前端代碼模塊化,前後端分離開發模式設計,4次。其中,2次是全新項目,2次是已經跑起來的項目。
  3. 登錄註冊找回密碼等業務模塊開發,頁面形式的3次,全站通用彈窗2次,https協議的1次,最近一次就不想再搞了,把機會留給沒弄過的小弟。
  4. 電商首頁首屏性能優化項目,3次。
  5. 電商全站通用側邊欄切圖+js交互邏輯開發,3次,(對,就像tmall、聚美優品、VIP右側黑黑的那條東西,其中要求兼容IE6的1次)
  6. 購物車、訂單提交、付款等前端邏輯開發或重構,2次。最近這個項目,我實在是不太想再寫了,不過代碼review這種事情一定要好好處理的,這裡涉及錢,很重要。
  7. 商品詳情頁切圖+前端業務邏輯開發或重構,3次(有一次還包括自己書寫php端的部分業務邏輯),也是最近一次不想再寫了,只負責review。
  8. 後台專題發布和管理系統的專用編輯器開發,1次,這玩意實在太噁心了,很難搞。
  9. SPA項目開發1次,首次接觸前端MVC,Ant.js+Underscore.js ant.js/doc.md at master · antjs/ant.js · GitHub 有人用過這個玩意嗎?當時還不知道存在backbone/AngularJS 這些更高大上的玩意。
  10. webIM項目開發1次,首次接觸http://SOCKET.IO這個牛逼的庫,但這是一個爛掉的項目。
  11. 全靜態html+restful api交互的H5項目開發,2次(1次是部分參與,1次是從零開始)。最近在寫nodejs版本restful代理,打算再上一個能夠解決SEO問題的但由前端完全控制的版本,後端只提供API,view層邏輯不想他們參合進來,頁面優化這個事情還是由前端來主導的好。
  12. 微信JSSDK介面開發,比如分享領紅包、優惠券功能(類似滴滴打車那種分享有禮的營銷需求),1次。我有預感,還會有更多這樣的需求。
  13. 此外,還包括創業電商項目的各種疑難,譬如全站兼容IE6,就是第3個電商項目,老闆說了,人家淘寶、唯品會、聚美優品能做到的,我們也得做到,這個要求不算很過分吧?提出這個需求的時候,項目上線已經有2個月了,而我手下已經有3個前端人才了(都不用10K的哦)。
  14. 還有秒殺活動、滿減滿贈、邀請註冊送優惠券、首次登錄送現金券,等等一大堆雜七雜八的,不記得多少了,反正不是自己寫就是督促別人寫,但遇到困難或解決不了的問題,還得你提供解決方案,甚至自己來寫的需求
  15. 還有挺多的,開發節奏太快了,一時半會想不起來了。

ok,如果你要做垂直類電商,相信我,這些關卡你至少都要碰到通關一次,除非不用市場運營就也能玩出花樣的,可能是例外。

對了,差點忘記提醒了,記得簡訊介面被刷這個事情,特別是你有送消費券的時候,一定有人來研究獲得更多優惠的法門的。。。切記,防刷機制要弄好,驗證碼別搞那麼簡單的。

真實的慘案:
我們曾一個晚上被刷過了幾萬塊錢簡訊(創業項目一開始不會有太充裕簡訊介面費用預算,你懂的),導致手機用戶一直無法註冊,結果我們發現後快速上了新的驗證碼機制,結果人家半天就出了新的破解fa,最後……嗯,暫時不能沒有最後的。

-------一個小結--------
上面是通過反覆「打怪」強化「代碼素養」的一些方法,大家可以參考著做,儘可能以最快的速度地通關一遍,你的代碼素養一定能快速提升的。我足足用了2年的樣子,挺長的時間,希望你可以更快速通關。

十二,個人素養與coding(二)——電競和編輯經歷與開發基本功素養的關係

咱們繼續聊聊素養,希望把這個玩意能聊出點花樣。

素養,即平素的修養。嗯,咱們需要聊的其實是「修養」,聊聊程序員開發者的「修身養性」這個問題。

這YY類文章著實容易寫得很長很長。你還記得我上面曾經說過要「對代碼要有潔癖」這個句話嗎?如果不記得,你可以回去找找,大概在第8章的樣子。嗯,不要誤會,我生活中並有「潔癖」沒這回事,老婆總是說我挺邋遢的,和潔癖有毛關係都沒有。

我只是要對代碼有潔癖,這又啥好處呢?代碼的潔癖是什麼?嗯,我又想來對文字下定義了,這習慣必須堅持。

所謂的代碼潔癖,是對代碼素養的一種形象化描述。

這麼說吧,當我們形容一個人有潔癖時,你會覺得這個習慣可能不太好,但你一定不會覺得這人生活中是邋遢的,只是這傢伙很講究衛生而已,包括個人穿著打扮,生活環境修理,等等。只是我們大多數時候並不太喜歡這種人,因為TA可能太講究衛生了,而導致無法很好地與人相處,甚至要求別人和TA一樣必須講究衛生。而在這種人的生活習慣或態度方面,認為這是理所當然的,坐的凳子必須是一塵不染的,喝水吃飯的傢伙一定要反覆反覆消毒殺菌後才能使用的……

但是,如果擁有潔癖的人,當在與人相處時並沒有強制要求別人與之一樣,並適度容忍別人的不幹凈(ta眼裡的),那麼我們是否可以認為這種人是有修養的呢?相信你是有答案的。我的答案也應該和大多數人一致。是的,這是人有修養的一種表現。好吧,別跑題了,我們還來談談代碼的潔癖。

我還是習慣對抽象的進行實例化,實例的東西才容易理解,因此我儘可能列舉所能想到的,並適當地展開加上我個人的理解和分析。我認為,程序開發者的素養包括代碼基本功素養、戰術素養、戰略素養等三個層面的素養。

這裡先聊聊,第一個基本功素養。

這個基本功的範圍其實很大,但前端這一塊就是css、html和js這三板斧。比如這些東西:
js的變數類型,基礎語法,又或者例如代碼格式的統一,整潔等。如一個空格,一次換行,使用單引號還是雙引號,這些都要按照自己認為的最佳標準來實施,並極可能地去堅持。
如圖:

如圖2:

看到這種規範標準,你認為有多少可執行度?並且這種東西對於業務邏輯的完整有影響嗎?當然是不會有影響的,當然知道沒有多少人會去落實和堅持的,這只是我給前端團隊設置的一種代碼建議性質的規範。
很顯然,堅持這種東西,不會對你的能力有立竿見影的。但我自己會儘可能按照這樣的標準去書寫我自己的代碼,僅此而已。在很多人,特別是越是低級別的選手,越會對這種規範嗅之以鼻,認為這種東西是很沒有道理,何必堅持,甚至作為一種規範。

但為什麼我會這麼做?

這其實受我以前玩競技遊戲,做戰隊選手打比賽(在當時的戰隊我都是一線的打手),和大量高手對決而得出來感悟。如果你有一定玩競技遊戲(比如星際、魔獸、cs等)的經歷,並能看懂高手之間的對決,你一定能理解高手對決,決定勝負的可能就是當初那個資源採集快那麼一點點的那位選手。

比如,星際裡面4個採礦農民一開始是否同時被分配到分別去採集4個礦,而這種分配的操作手法是非常重要的基本素養,就是要反反覆復聯繫並成為一種基本技能的,甚至對於不同出生點而帶來的採礦距離的些小差距,都可能是決定勝負走向,戰術選擇的決定性因素,有興趣大家可以去看看星際職業比賽錄像(很多視頻網站是有的),職業選手是多麽在意這一點的不一樣,但許許多多的入門選手是不會這麼做的。

當然,我自己做得還不錯,並獲得了和許多職業選手對決的機會,負多勝少。很顯然,普通玩家或低級別的選手是看不懂高級別選手是如何獲得優勢的,當你的玩家素養和對手有著不可彌補的差距時,別人想怎麼玩你就怎麼玩你,除非這種差距不大,那麼戰術選擇、操作的好壞,抑或是運氣才會成為決定勝負的關鍵,否則你可能覺得別人在作弊,或誤以為你的戰術不行或運氣太差。別亂想,我告訴你這只是表面原因,深層次的原因可能就是基本功素養,這種很抽象的概念。

然而,良好的基本功素養並不是一早一夕能養成的。這需要你一開始就要意識到,一旦養成了不好的習慣,這種習慣到後面就可能無法調整了,因為它已經成為一種習慣。例如你是用哪個手指來按shift+1、ctrl+1鍵的?當你習慣用大拇指而不是小指去按,這種習慣一旦形成就很難更改了。這樣的實例你能明白吧?

好吧,這種按鍵習慣就是職業選手要非常在意的,因為不同的按鍵方式在操作大量兵種作戰時,連續操作的速度和細膩程度是不一樣的!為什麼韓國的職業選手那麼厲害?就是因為別人在打基礎的時候已經有意識並刻意地練習這些東西,而絕大多數人已經養成了不好的習慣,當你似乎到達某個高段位的時候會發現,在怎麼努力也難以寸進,其實這是基礎素養沒有做好。

我這麼說,你能理解什麼是基礎素養了嗎?

其實我在一開始就意識到這個問題的重要,所以當我獲得同樣的練習機會時,哪怕我的年紀大一些,記憶力差一些,甚至精力也比你弱,可能就比一般的同學進步要快一些。這種基本素養的高低還和時間有關係,我轉前端的時間並不長,所以紮實程度就是我和頂級選手的距離,這需要時間來彌補。

不過,你不覺得代碼格式這種基本功力,和平面媒體對於標題、文字格式、標點符號甚至大綱提煉等編輯規範或素養是一脈相承的嗎?其實啊,一部分基本我很早已經練好了,但你未必知道而已,我缺少的是對於開發語言基礎知識的了解,這個不會有多難的,對吧?

「良好的編輯素養就是我做程序開發的先發優勢,而這種優勢可能是從始至終的。」這話說得並不是沒根沒據的,對吧!?

--------------------
個人素養與coding(三)——開發者的戰術素養和程序的正與邪,開發者的道不同不相為謀

(一)
紮實的基本功需要長時間地做針對性的反覆練習,這個是沒有捷徑的。但是戰術層面的東西卻是可以快速提升的,只要你獲得足夠多的項目實戰機會。我通過哪些項目獲得實戰訓練,這個上面才剛剛說了,並列舉了好多電商領域必須嘗試的對戰「地圖」和「關卡」,我就不再贅述。

在這裡,我似乎又得對戰術這個詞進行一下解析了。要不可能你無法理解這個東西與前端開發有什麼關係,它們之間的相互又邏輯是什麼?

何為戰術?戰術_百度百科

所謂戰術,就是指導和進行戰鬥的方法。主要包括:戰鬥基本原則以及戰鬥部署、協同動作、戰鬥指揮、戰鬥行動、戰鬥保障、後勤保障和技術保障等。

ok,我們來造一下句子。嘗試用「開發」來替代「戰鬥」,試試語句通不通順。

所謂戰術,就是指導和進行開發的方法。主要包括:開發基本原則以及開發部署、協同動作、開發指揮、開發行動、開發保障、後勤保障和技術保障等。

咦!還是很通順的嘛!那麼,開發前面再加一個修飾詞,變成「前端開發」或「後端開發」。其實,都是通順的,不是嗎?這就是項目開發和戰術的基本關係了。很多東西是相同。

咱們這裡既然是談「術」這種高層次的話題。那麼,我就不是從一個低階的開發者角度來思考的了,請你務必要把層次提一提。好吧?

我先說,不同的戰役,指揮官要根據不同的地形、地貌,甚至是戰鬥人員能力結構,以及要攻克的目標特點,做不一樣的部署,採用不同的戰術或方法來解決戰鬥。

這麼說沒問題吧?我認為,任何一種架構設計(戰術設計),離開了具體業務場景(戰鬥場景)來談它如何設計,或評估其價值的高低,都是不科學的,也是不理性的,甚至是耍流氓的。

為什麼可以這麼說?還是從我的個人經歷說起。

就在今年年初,我還不是特別確定是否接手現在這個電商項目的時候,曾經被獵頭推薦去面試過一家做郵箱系統項目開發的前端架構師一職。跟對方的中間層首席架構師聊,對方是做java的,而我是做js或php的,當我把我做過的電商前端架構設計方案或理念拿出來和對方溝通時,對方其實沒有什麼反應的,甚至我說電商對於用戶體驗的要求是苛刻的,但對方卻很難理解這種苛刻到底是什麼?

而被對方問到,郵箱系統到底該如何做前端架構設計時,我其實是沒有腹案的,我又怎麼能有腹案呢?對於郵箱的業務我是一點點也不了解,但是他會認為前端架構不都是一樣的嗎?這種認知我很難在面試的過程中,用三言兩語的方式描述清楚,更何況對方並不是一個前端,對吧?

最後的結局當然是,我認為這個項目的前端架構職位不適合我,他們也認為我不是適合的人選,鄙視我做過的東西或項目,甚至我壓根沒資格來應聘這樣的崗位。其實,我就是想了解一下郵箱系統到底怎麼弄出來的,並沒有想過獲得這樣的offer,對方是怎麼想的,我其實一點兒也不關心。當然,如果真想去做郵箱系統的前端架構,我可能不會這樣貿然地去應聘這個職位,而是降職的方式去做郵箱系統的一般前端業務開發,當我熟悉了業務,知道這裡面和電商項目不一樣的地方,那麼我就會嘗試給項目做一次架構層面的重構,進而把自己提升為事實上的架構師。

ok,這就是技戰術層面的選擇。也就說,如果企業想要招前端架構,我是不建議跨行業去招聘的,最好的方式內部物色一個有潛力的進行培養(容許他犯錯,只要不是根本性的),或者從同行那邊挖人才是最快的。如果非要跨行業也不是不可以,但你可能要讓人家拿著架構師級別的薪酬來做一般前端的事情,等他熟悉業務之後,再讓他來做架構,否則是不可能有合理的方案出台的。

很顯然,不是每個公司的決策者都能有這種意識的,不是嗎?誰傻啊!當然,我碰到的並不是傻子。

(二)
ok,我們再就戰術中的「術」聊一聊。

在這裡,我嘗試談談,何為開發者的道不同不相為謀?誰是光明正大的程序員,誰又可能是心術不正的碼農?話題還是新穎的。

術有正邪,道則一也。

首先,我們要接受這個觀點(不是我的,不知道那個佛學書籍或道學書籍中的一句)。也即是,術是有正術和邪術之分的。

1,何為正義?何為邪惡?

看到這個話題,好多同學可能會這麼想——尼瑪,寫代碼都寫出正邪之分了,這個會不會太誇張了點?是的,代碼本身並沒有正邪之分,但人心卻有善惡。

如果你用善意的心態去書寫代碼,那麼就可以定義為正,但如果你心存惡意地書寫代碼,那麼就是邪。大多數情況下,這種東西是「只可意會不可言傳的」,但越是高階的開發者,你用善意還是惡意的心態去書寫代碼,這種影響是非常明顯的,甚至是深遠的。我這麼說,你都還能理解吧?

不懂的話,我們先來觀摩兩篇文章:

如何編寫無法維護的代碼(現實中有的程序員就是這麼乾的)
如何寫出無法維護的代碼

這個話題相信不少人討論過,對吧?其實,當一個程序開發者的開發能力進入到中高階之後,只要你願意,寫出無法維護或很難維護的代碼其實並不是很難的事情,不是嗎?

拿破崙說過,「永遠不要(把自己遇到的問題)歸因於(他人的)惡意,這恰恰說明了(你自己的)無能。」這話是非常有哲理的。但是我認為,這是偉人對自己的要求,這是沒問題的,要時刻讓自己保持強大,沒有決絕不了的問題,即便遇到問題那也是自己能力不足。

但是,我們要知道拿破崙這種牛人估計是千年一遇的,而在現實的生活中,絕大多數人都是很普通的,包括你我他,雖然很多人並不這麼認為,但現實就是這樣。ok,我就不把話題扯得太遠,還是說會項目開發。

我的意思是,在任何一個團隊中,絕大多數人的能力是有限的,無所不能的人畢竟是少數。因此,「書寫不可維護的代碼」這種事情要儘可能避免,如果某個隊員的能力比其他隊員高,他一定能都寫出更加簡單易懂的更可維護的代碼。

當然,如果我們在書寫代碼時只是為了讓自己看得懂,而不考慮他人是否看得懂,那麼,我會主觀上認為你是自私的,即便你是無意的。就好比意外傷人,那也是傷人,也是需要負責任的。

如果,我說的是「如果」,你是故意書寫不可維護的代碼,那麼這就是一種惡,雖然你可能只是為了保障你不被替代,不得已的一種選擇。如果這個項目不需要任何其他人來維護,或許這種做法沒什麼問題,但是如果需要別人來維護,那麼這種做法是我個人所不認同的。

從維護代碼的開發者角度,一旦碰到這樣的代碼,其實你只能像拿破崙說的那樣,「不要把自己遇到的問題歸根於別人的惡意」,否則只能證明你的無能,一旦項目交到你手中,你就得把問題給解決了,企業層面只會看結果,而不會問過程。

但是作惡者就能逍遙快活了嗎?我覺得,如果你碰到這種事情,在問題得到解決之後,必須向上一級反饋問題。至於如何處理,合格的上級會做出合理的響應。

其實說了這麼多,我還是很難對開發者的善惡下一個明顯的定義,因為不同的環境,不同的團隊,對於善惡的標準其實是不一樣的。但是,我很清楚自己的善惡:

善:代碼書寫要符合既定規範;惡:代碼的書寫總是破壞既定規範。

善:代碼邏輯的書寫應該簡單易懂,不書寫高度抽象的函數,照顧維護者的理解能力;惡:常常定義各種高度抽象的函數,不考慮維護者的理解能力。

善:根據團隊成員的能力模型來做技術選型;惡:技術選型時不考慮團隊成員的能力,盲目地甚至根據個人喜好來決定技術選型。

還有很多,無法一一列舉,也沒必要列舉,畢竟這只是我個人的善惡。這是從術的層面來探討開發者的善惡,在我看來判斷善惡的標準其實是,「善」的術其實就是要考慮他人(包括維護者和企業)的感受,開發者的「惡」則表現為不考慮他人的做法,不在乎他是否帶有惡意。

事實上,善惡是可以通過內部規範(企業法律法規)來避免或降低其影響的。在這方面,成熟的大公司往往做得更好,而創業項目或高速發展的企業往往忽視這方面的建設,進而讓「惡」的開發者擁有了發揮的空間,甚至一些內部規定促使良善的開發者推向了惡的舞台。對於這種情況,開發者或許需要反思,但更應該反思的是企業!

2,何為開發者的道不同不相為謀?

首先,何為道?

道,出自老子所著《道德經》」道可道,非常道,名可名,非常名「,又在另一段落解釋說」有物混成,先天地生。獨立而不改,可以為天地母。吾未知其名,強名之曰道「。在翻譯《聖經》時,也借用這個詞說"太初有道,道與神同在",道就是神.太初指的是,還沒有時間,沒有世界以前,道已經存在了,道是永存的。

這是百度詞典給出來的解析,其實我還是無法理解何為道。這個話題太龐大了,客官你只能自己去理解,就不糾結這個問題。但是,「道」這個東西其實是被實例化的。

比如道路,通往「道」的路,指達到某種目標的途徑,事物發展、變化的途徑。那麼,這裡我想說的就和道路的「道」一致。

在項目開發中,我們用來完成目標的方法和途徑是很多的。但是,不同的道,對於同一個企業或項目而言,其成本和風險是不一樣的;同理,相同的道,對於不同的企業或項目而言,其成本和風險也是不一樣的。

這是一個非常淺顯的道理。如果你是「道」的決策者,只要真心站在企業或項目的角度其思考,我相信絕大多數決策者的選擇都會是大同小異的。但是,不同的道對於個人而言,得失可能是不一樣的,甚至是個人獲得名利,而企業可能付出成本更大和風險更高。

舉一個開發者都能理解的例子:造輪子。

前端開發領域的輪子很多,而且很多輪子是在反複製造,開發者往往不亦樂,並樂此不疲。但是,造輪子和道什麼關係呢?我想說有關係,但要結合項目環境,因為不同的環境,不同的道,其影響是不一樣的。

這是我的親身經歷。在我經歷的第三個電商項目的開發過程中,發生過這樣的事情:我們有一個商家入駐平台需要開發,在技術選型上,由於後端所能投入的開發資源非常有限,只能提供API,而所有的業務邏輯主要由前端開發者來實現。

也就是說,這是一個前端主導的項目,很重要,是平台商品的入口,但是這個需求其實也是限時實現,開發周期其實2個星期,開發人員是3個(1個後端,2個前端),如果項目交給你去負責,請問你會選擇怎樣的前端技術方案?

當然,這種需求其實是一個管理後台,基於純API的前端交互相對複雜,而且表單很多,因此雙向數據綁定的MV*框架是最合適的,再考慮到時間周期較短,如果給我做技術選型,會選擇一款開源的MV*(比如angular、avalon、Vue、backbone等)+jQuery,學習成本低,有問題也容易在相應的社區找到解決方法或思路。

但這個項目並不是我負責,而是由另一位前端經理來做技術選型,他的方案是自己開發數據綁定的框架,重新實現一個可雙向數據綁定的底層框架來搭配jQuery。當然,他造輪子的能力很不錯,基本完成自己的輪子的同事,大約用了1個月的時間完成了項目的開發。事實上,1個月的開發周期是上面對這個項目的底線,因此這個項目還是很受領導認可的。

當然,他選擇自造輪子可能是出於對技術實力的自信,這是無可厚非的,而且從個人角度觸發,有機會造輪子就別放過,這對自己技術的提升是很有好處的,而且有機會應用到商業項目中,這樣的機會簡直是千載難逢。

但是,我不會這麼做,並為此和他產生了衝突,吵了一架,搞得需要領導來調和。其實這個項目又不是我負責,別人的死活與我何干?與他的衝突是開發理念層面的,也就是我所謂的道不同不相為謀。

因為我們還是創業型項目,而前端開發人員整體技術能力都是很一般的,不要說造輪子了,能夠順利完成業務邏輯就已經謝天謝地了。就在這樣的情況下,他並不是選擇成熟的、開發文檔完善的方案,而是選擇自己造一個輪子(開發文檔是沒有的,因為沒有時間,單元測試更不要說了)。

即便項目是完成了,但這樣做的後果就是,以後這個項目除非完全重構,否則只能由他來負責到底,這完全是一種長期綁架的做法,和書寫不可維護的代碼有何區別?但是他用的是一種比「術」高層次的方式,實現了自己的「不可替代」,這就是「道」。

當然,如果我們是一個大公司,有很多具備造MV*輪子能力的前端開發人才,其實多造輪子這種事情就不會是什麼大問題,比如BAT級別的廠子,他們的前端就特別喜歡造輪子,企業層面也放心讓這些開發者造輪子,因為輪子造好了之後,即便製造之人離開了團隊,也有很多人能夠替代、接管,但對於絕大多數創業或高速發展的項目而言可能是一種奢望。

後來當我嘗試去了解其MV*數據綁定的實現時,發現他居然沒有提供源碼,而是放在自己私人的代碼倉庫裡面進行管理,對於這種做法,我只能「呵呵」了。我原以為他已經到了「道」這種層面,其實還只是一種「術」罷了。

從技術實力上,即便給同樣的時間我未必有能力去造一個MV*輪子,但是他這種做法對我而言基本上就是不相為謀,矛盾其實是難調和,也為第4個電商項目的前端團隊分裂埋下了伏筆(後面的故事我增加一則後記)。

這是我的「道不同不相為謀」。

十四,個人素養與coding(四)——開發者的戰略素養對職場嗅覺的影響

這裡談的是戰略,也是非常高大上的話題。

對於這樣的話題,我表示無法駕馭,畢竟不是什麼牛人,也沒有啥成績,就是一個小公司的前端開發者。在這裡談這樣一個只有成功項目CEO、行業大咖,比如這樣的 一個公司CEO應該有的戰略修養,甚至只有馬雲、史玉柱之類的人才有資格的話題。

尼瑪,我這種小蝦米談論戰略,事實上就有點兒不自量力了,讓大家見笑了。因此,我只限於一個非常狹窄的領域——前端開發。我覺得,上述這些牛逼的人物應該沒有我這個小人物精通這一塊,比如咱們的馬首富和我切磋切圖、寫js,大夥覺得誰更勝一籌?(不能請外援)

如果覺得小人物更牛逼一點,那就往下看吧。

我們都知道,前端是一個相對年輕的工種,大家對此依然存著各種各樣的疑惑:
有人 為前端工程師很難找 而發愁;
有人對於 市場上優秀的前端少 而心存抱怨;
也有不少人為 如何招聘到一名優秀的前端工程師 而傷神;
還有人對前端心存不屑,認為Web前端是不是被過度的炒作了?
更多的同學因為不知道 Web前端的未來會怎樣 而迷茫;
……

從這些疑惑中,我們可以看出前端其實是一個比較有爭議的開發工種,但是能夠被人熱議,至少說明了前端並不是一個不值得關注或討論的話題。同樣都是web程序開發,後端為何沒有這樣的疑惑呢?

如果你有詳細看這篇回復,應該知道我其實是從php開發轉過來做前端的,可能已經在後端這裡領域的經驗或能力已經退化了,甚至就一直只是一個入門的開發者,從始至終都沒有進化過,專做前端開發是不得已的選擇,但至少我不會看輕後端,也不會覺得前端沒有前途。

從更長遠的時間維度來思考,前端並不受重視是因為以前它確實不那麼重要。這點很多前端開發者會極力否認,但事實就是這樣。尤其是2010年以前,絕大多數項目都是後端兼顧著寫js,而切圖則是設計師的活,擁有專職前端的項目其實是極少的。

但是隨著互聯網競爭不斷深化,特別是電商領域的互聯網項目不斷興起之後,激烈的競爭讓這裡面的玩家對於用戶體驗提出了更高的要求,極致的用戶體驗甚至成為了勝負的關鍵,也因此讓前端開發走到台前,成為一個必須的開發工種。

這一點我在前面已經反覆強調,這就是我轉型前端的主要原因。當我有機會介入電商開發這個領域,由於我尚淺的開發能力,從事後端開發其實有點兒不從心的。這是實在話,當我看到前端的無線潛力之後,就一直專註於這一個領域,並且選定一個快速提升的點——前端工程化解決方案。

事實上,這深受我當編輯、做寫手那一段經歷的影響。儘管和很多大眾媒體編輯相比,我的文筆能力是有所欠缺的,這是硬傷,也是轉型的重要原因。但是對於編輯素養的要求,專業的IT媒體並不比其他媒體低,而我就是在一個極度專業的IT媒體中渡過了快5年。

或許有人質疑我的專業,比如PC行業的發展對我個人而言基本上可以從誕生到現在,如數家珍可能說不上,但重要的變革一定和你聊得起來的。比如我們的對手書寫的這種評測文章 藍寶石R9 Fury Tri-X風冷之下潛力窺探,1999元值不值?體驗40英寸小米電視2,2014年顯卡、硬碟技術、產品回顧,請問有多少人能夠看得懂嗎?我基本上還是秒懂的,因為曾經寫過快5年這類的技術分析和評測報告。

可以說,能夠書寫這種技術評測、行業分析報告的編輯其專業素養一定不差。這裡的專業素養就包括對於技術趨勢的掌控力度,觀察更深刻,而嗅覺也就比一般人要靈敏。很顯然,互聯網其實是PC硬體高速發展的延續,什麼技術在未來會更有價值,作為專業IT編輯素養的一部分,專業的IT編輯一定比普通開發者要清晰。

快速地解讀專業知識,善於分析和總結,並且對於未來技術要足夠敏感,這就是專業IT編輯最重要的素養,而這些東西和程序開發本身並沒有直接的關係。

或許有,畢竟我非常了解計算機底層的硬體及其原理,很容易理解為何寄存器是最快的,而網路存儲則是最慢且最不靠譜的。但是,當程序開發還在入門階段時,相對豐富的計算機底層知識並沒有太多用處,只有到了開發能力到達一定層次之後,這些知識才會讓我更容易理解那些更接近底層的程序邏輯和做法。

比如一台nodejs伺服器開啟多少線程來對外提供服務才是最佳的,如果你了解CPU的多核心和多線程的原理及其區別,很容易得到答案。當然,這種專業素養對於開發者程序開發能力的影響其實是有限的,而善於分析和深入洞察這方面的素養則對我能夠精確選擇一個可高速發展的點,其影響才是最為直接的。

只要你是超過2年的前端開發者,前端技術高速發展的機遇你也一定遇到過,比如:nodejs出來之後,或者requirejs或seajs出現之時,抑或是grunt/gulp誕生之後,reactJs開源之後,HTML5標準發布之時……

面對這些前端領域變化,你會意識到它們會給前端開發者帶來怎樣的機遇嗎?你會知道思考這些東西可能會改變前後端協作開發的模式嗎?我只是意識到了其中一點,它們會改變前端的開發模式,讓前端的編輯工作自動化,前端代碼發布生產是需要構建的,就像傳統的java、c、c++靜態語言一樣,需要經過編譯才能用於生產!

這就意味著前端已經演變成為和其他開發語言一樣,具備了通用軟體語言的特性,那麼就意味著web軟體開發不僅需要後端架構師,也需要前端架構師,而這樣的職位就是我切入前端開發時,接觸到nodejs、requirejs以及gulp之後就感知到了。那是2013年的事情了,似乎已經有些遙遠。

在我看來,任何一個人都可以談戰略,這並不是非得到達某種普通人不可觸碰的境界之時才有資格談論的話題,它其實很淺顯,戰略就是一種相對長遠的目光來審視當前的一些細微的變化,多花一點點心思考慮這些細小的變化可能產生的價值,會帶來怎樣的連鎖反應。

當你長時間堅持這種行為,那麼在某些時刻就會成為一種比別人看的更遠,這就是戰略素養。

很顯然,戰略素養很多時候和你具體開發語言沒有任何關係,更多是思想層面的感悟、想法等,這些東西需要你閱讀很多與技術開發無關的書籍來提升,比如《博弈論》、《黑客與畫家》、《定位》、《品牌之源》等等,甚至可以是《變態心理學》這種奇葩書籍。

高階的程序開發者一定要有自己的開發理念,而理念這種玩意一般和技術無關,而是和個人的其他修養有關。就好比在一大隊流氓裡面,當老大的往往不是武力值最高的,而是最有文化的那個,例如劉邦,例如劉備。

戰略素養其實就是要做一個有文化的流氓。

---------------
後記:第4個電商項目——分裂,生存,可能還有崛起。

這是我個人進入前端開發後的最新經歷,發生在2015年3月-現在。

2015年農曆大年過後,我所在的項目由於投資人打算退出的原因,整個團隊面臨解散,但我們所做的領域其實還有很多機會,而且技術團隊的核心成員很多也認同這裡面還有可為,於是我們在尋找機會。

事實上,其他部門有相同看法的同僚不少,並且出手更快,他們很快找到了新的投資人,需要技術團隊快速切入,於是我們原班人馬的核心成員商量後決定跟著他們繼續干。

當然,我和他(之前提到過的另一名前端負責人)都是原班人馬的核心成員,但開發理念上存不可調和的矛盾。我們之間應該是心知肚明的,只是其他人未必不明白這一層面的衝突意味著什麼。隨後在新項目的技術選型階段,我在原來的技術上對前端開發架進行了升級改版,並獲得了技術團隊的一致認可,但新方案裡面並沒有包括他的MV*框架,而是選擇了更成熟穩定的方案。

就這個情況,技術團隊的負責人其實很為難,他希望我們能夠誠心合作,但相互之間的不認可其實已經無法調和了。這個時候我其實已經打算退出,讓他全權接管,畢竟他的項目管理能力的確比我優秀,對於一個全新項目而言,這方面的能力可能更適合,而我留下的前端工程化解決方案,他應該不會全部打翻重來的,否則就太小家子氣了。

2015年4月初,我在基本決定放手給他接管的情況下,收到了另一家上市電商的前端架構offer,並且做好了過去的準備,就在這個時候,新項目(我的第4個電商創業項目)出現了變故。他在沒有和項目發起人進行溝通、交接,而且還沒有徹底完成服務端技術選型的情況下,他毅然回到了原來那個技術團隊,擔任技術中心的項目經理(事實上的技術中心負責人)。

對此,我們一班子核心成員都表示無法理解,後來我才知道,他可能沒把我當一回事,或許我的能力確實不如他,而他瞄準的卻是整個技術中心負責人這個位置,至於提供這個位置的項目或企業在哪裡,有沒有前景並不是他關心的,所以他回到了原來那個團隊,並且帶走了3個實力相對較好的前端和1個php,留下3個能力相對一般的。

當然,為什麼有人願意跟著他回去?是因為新項目其實還完全沒有頭緒,而且薪資層面沒有任何變化,保持和原項目一致(就是第3個電商項目拿多少,做新項目也不會變化),這對於許多技術人員而言是不可接受的,而原來的技術團隊有人接盤,並且留下的人全部有一定幅度的漲薪。

一邊是漲薪,並且接盤的投資人來頭更大,資金實力更雄厚;另一邊則是錢沒漲,而且是前途未卜的全新項目。換做是你,你會做何選擇?這個時候,對我而言考驗更加明顯,因為有4個選擇:
1,回到原來的項目,根據能力漲薪10%-30%。
2,新的電商項目,漲薪要到A輪以後,當時只是天使輪而已。
3,移動遊戲項目(BAT背景),高級前端,薪資高,但從最底層做起。
4,上市電商,前端架構,按級別分配有股份,薪水也不錯。

按整體評估,去上市的電商做前端架構應該是合理的選擇,而且我一直都在創業項目裡面打滾,沒有一家可以拿得出手的,如果可以在上市項目中鍍一下金,以後不管到哪裡基本不會因為沒有牛逼的經歷而在第一輪就被刷掉了。

當然,如果沒有那傢伙的攪局,我肯定過去了,而且體檢報告都準備好了,就差去報名了。但這個新項目其實大家一開始認同的,我其實也認同項目是有可為的,並且大多數選擇留下的核心成員都是非常有幹勁的,但面臨的風險和困難依然是非常大的。

在我猶豫的時候,和技術負責人(原來第3個電商的項目經理)進行了幾次深刻交流,他也覺得我得到的機會可能對我個人的未來更好,並沒有勸我留下,而是為我在上市公司複雜的政治環境下生存而出謀劃策,但他希望我將這個項目帶到正軌,然後再做其他考慮,那邊的offer可以往後壓一壓。

當然,此項目的第1個完全自主研發的版本有很多困難,希望我能夠到5月中旬的時候再走。我答應了他,為此和上市公司那邊的HR溝通,爭取到5月底才過去報道,並且對方也接受了這個請求。

就這樣,為了項目能夠順利發布,從4月到5月這段時間我基本天天1012的節奏。在大家的共同努力下,新項目終於在520發布上線,並且獲得了投資的認可並即刻增資,我們拿到了PreA輪。

事實上,如果這個內部版本如果不能再6月前發布上線,那麼就意味著這個項目沒戲,這是投資人給的時間界限。但是,我們不僅順利發布新版,而且呈現出來的技術架構布局以及品牌理念大大超乎對方的想像,因此我們生存了下來。

當然,獲得PreA輪融資這個事情是我事後才知曉的,但項目經理知道比我早,為此他表現出來挽留我的意願。事實上,在我負責第1版本的研發過程中已經做好了選擇,並不需要他的挽留,我都會選擇留下,並且已告知那邊的HR放棄他們的Offer。

這個項目有沒有希望,其實自己做的過程中完全能夠感知,而且親自將一個項目從零帶到正軌,這本身就是一種成就。牛逼的背景和實際的項目經驗相比,後者的價值其實更高,並且上市公司基本上天天招人,放棄這次機會並不代表以後就沒有機會了,對吧?這個信心我還是有的。

事實上,項目經理在我獲得其他offer的同時,他手裡也捏著幾個很有分量的offer,包括華為年薪近百萬的offer,但他比我更堅決地選擇留下,為的其實是為了那幫跟著他一起過來的兄弟。

說好了「不放棄」,那就做到「不拋棄」。

接下來的故事,還在進行中,現在這個項目已經走到了B輪,按流量我們已經屬於同領域的前幾名,但轉化率還不讓人滿意。當然,這是我的故事,它依然未完待續。

(未完待續)


前端的路該怎麼走,想分享一些我的觀念

  • 不要再把職業發展簡單理解為「我該如何繼續學習」,學習不是美德,只是你應該做到的最基本的事,從現在開始想想「作為技術,我如何讓自己成功」
  • 用你的技術去做你真正想做的事,公司項目的重複是你控制不了的,但是你自己想做的事寫的代碼是可以控制到每個位元組的,所以不要把自己的停滯簡單歸罪工作重複,而要想想「我」可以如何突破,我能做點什麼,在做自己的項目的時候,你得到了重新出發的機會
  • 不要過早定位,我是」前端「,我是」JS「程序員,JS可以干所有事,所以Python不學了,lisp有興趣也不看,沒用。如果沒有領域拓展,很容易固步自封的,不久你就會覺得自己用的棧是最好的東西了。你不是X程序員,你是程序員
  • 跨界,交互設計,產品管理,項目管理,投資學,人工智慧,創業實踐,沒有人攔著你。

做所有這些事的目的都是給自己機會,讓自己能跳出單純技術的狹隘思維方式,讓自己看到技術在不同領域中的實際價值。單是前端技術只管積累就行了,是無所謂」深度「」廣度「的,而」你「有了深刻廣闊的認知,再回顧來看技術,有了新的認識,掌握的東西找到了新用處,新用法,這才是insight。


歡迎關注我的在線Live:
小芋頭君 的 Live -- 前端開發者成長之路 https://www.zhihu.com/lives/779682228367024128

不沒人邀,不開心,強制來答,入了前端的坑也有五六年了,這五六年的歷程基本都被我寫成文章發表在自己的網站上:我的工作歷程

之前幾年是一起總結的,最近兩年每年年終都會寫年終總結。偶爾回頭看看也挺有意思的。

前端生涯連載 第一篇 走上前端路
前端生涯連載 第二篇 淘寶第一年
前端生涯連載 第三篇 大學畢業正式工作第一年
前端生涯連載 第四篇 爬上高峰,跌到低谷
前端生涯連載 第五篇 自由職業者?自我懷疑?自我認知?
我的2014年年度總結
我的2015年年度總結

有啥問題可以在評論里提,我會在這裡挑選回答。

第一個問題:你的技術積累主要是在什麼階段?阿里的時候?創業的時候?還是漂泊的時候?

答:不同的階段其實都有所積累,大概說一下。
在阿里的時候主要是入門的時候的初始積累,和接觸了很多大牛和大流量大邏輯場景後的小範圍爆發。
後來自由職業的時候主要是橫向的積累,因為沒工作壓力,我學習了一些周邊技術,例如nodejs,ios開發等,並且有時間深入實踐。
後來創業的時候,我積累的主要是團隊開發,團隊組建,從0開始構建一個產品直到發展到20多人的前端團隊中間的一些積累,太多了,沒法詳細說。

第二個問題:做自由工作者怎麼接活的?在中國做自由職業的程序員會遇到哪些問題?

首先要擁有自己的一些渠道,例如我那時候有一個博客,也就是前端亂燉的前身,一個個人博客,不少乾貨,所以也算一個小渠道,我寫了篇文章,把自己明碼標價,然後就有不少人來找我。
後來,一些靠譜的合作者會介紹其他人,其實自由職業者不需要太多事情的,兩個月做一個項目,一個項目2W左右的預算,就不錯了。
做自由職業者的最大的問題是,很難自律,其實生活也挺沒保障的,一直在做一些很初級的事情,沒有什麼積累,也沒有什麼交流,其實還是不建議程序員做自由職業的,不如找幾個人一起接外包或者做做小軟體什麼的。

第三個問題:這些年的程序員生涯,大概的作息時間是什麼樣的,感覺累么

剛開始的時候因為要學習很多基礎知識,大多時候不是很通暢,經常通宵調試小問題,作息很不穩定,開始幾年的確感覺挺累的,身體也有些不舒服,特別是鼻炎患者,工作時間長了很難受。
後來自由職業後那時間更沒法控制了,後來演化成白天追劇,晚上寫代碼,生活極其不規律,貌似還患上了輕微的腸炎。
創業後,公司任務沒有那邊變態的重,然後幫我分擔任務的人也變多了,對於技術的把控也更熟練,很少熬夜很晚,輕鬆了很多,身體也好多了,一般12點就會睡,偶爾早睡偶爾晚睡,晚上寫代碼也比以前少了,偷閑的時候主要寫寫看看東西什麼的。

第四個問題,多推薦一些前段面試的流程,和技巧吧。自學前端的小白!!!感謝

以前寫過的如何面試前端工程師,可做參考:如何面試一名前端開發工程師?


大家讓開,我要開始裝逼了。

前端開發這個行業目前來說已經不算是個新興的行業了,越來越多的人在這2年開始轉型做前端開發,但是在2010年之前這個崗位還是很不受開發人員重視的,好一點的叫js工程師,不好一點的叫美工或者切圖的。

那個時候如果哪個學計算機的說我立志要當個切頁面的!恐怕自己都會臉紅一會。看見別的開發也都是繞著走吧。哈哈。

突然這幾年一下子前端開發就火了。好多人,真的可以說是各行各業的人,都開始湧入這個行業,我見過的學管理,文學,歷史,美術,音樂,法律,醫生,當然還有計算機什麼的,甚至還見過幹了幾年的倉庫管理員,轉行做前端了。

真可謂是百花齊放啊!

就這樣,這個領域的教育培訓資源在互聯網的幫助下瘋狂的生長,以前我們都只能用rss訂閱一些博客來學習新知識和感受技術風向。現在環境好太多了,微博,知乎關注一些行業大牛就可以快速獲取一些技術風向和行業規則與現狀。找工作更容易,前端缺的不要不要的,一個私信就能獲得面試機會。這真是前端最美好的時光了。

在這樣的大環境下,學習和如何學習本來已經不再是什麼秘密。資料和前端技術的積累量級也上來了。所以好多人會問,先學什麼,再學什麼,怎麼樣可以更快成為大牛或者快速賺到大錢呢?

……

開個玩笑,其實這個問題我上面說了一堆,只不過是想交代一下大(裝)背(逼)景。我們進入正題,我舉個例子:

你下副本打怪,需要一身藍裝才勉強及格,手上卻只有點新手裝,你明確的知道要完成n多個新手任務才能換取藍裝材料。可是你偏偏不信新手裝不能下副本,總覺得自己和別人不一樣,我操作好,走位屌,我就要一身垃圾裝去打boss。

然後不斷的開始跑屍體…邊跑邊罵,怎麼回事啊,我看的攻略就是這麼過的啊,這破遊戲真難玩。

我還能說些什麼呢。

不會走就要跑… javascript知道學不好就一直學啊,後端不了解就做個個人博客啊,nodejs這麼火,一天看一個api,一個月也能上手了啊,css布局總有兼容性問題,總結啊,寫框架啊,js總是不知道如何入門提高,看書看規範去請教提問呀,這些就像是新手任務一樣,無聊枯燥又沒意思,直接打boss多爽啊。

所以雖然前端大量缺人,門檻低,大量無法踏實學習的人進入這個領域…

其實只要天天學上2小時,我覺得2年也差不多能是個小牛了…

可惜這麼久了,我覺得小牛也好少啊…

不過也不錯,我的盒飯又可以加肉了…

我純手機吐槽,摺疊吧…


前天在車站上寫的一些個人感想 ,有點點亂(好吧,很亂),我還是再整理一下哈哈哈。

入門
前端的入門可能會比較容易,例如一些最基本的公司可能就僅僅要求css和html就可以了,排排頁面,重構一下頁面。可能一個10來天的學習就可以很好的勝任了。
然後更加深入一些,能夠使用JavaScript對頁面的改動,運用一些能夠加快開發速度的工具,如jQuery之類的。這時候的前端我感覺就可以勝任很多工作了,例如一些基本的網站開發,和後端的協同開發(ajax)什麼什麼的。然後我個人覺得這裡就開始出現分岔了。

我個人覺得學習方向可以從廣度和深度兩個方向去看。
首先是廣度,前端能夠涉及到的方面有很多:

可能一直就是喜歡工程型的開發,想繼續尋找更多的可以讓項目開發周期更短,讓工程師開發起來是thinking of programing。而廣泛接觸不同的工具,例如grunt gulp的自動化工具,sass less,coffeescript之類的預編譯語言,或者是typeScript一類的js超集,還有一些全棧解決方案,meteor,phonegap之類的。

或者是就是想鑽研框架,就想知道jquery的選擇器實現是怎樣的,怎樣解決衝突,angularjs的框架思想和jquery怎麼不一樣……

又或對計算機網路,網站性能有興趣。可以鑽研http協議,ws協議,還有網站性能如何提升

還可以是就喜歡走前沿,html5的各種介面,svg,canvas。然後就可以順便去鑽研一下計算機圖形學。

另外ecma2015,目標是構建大型應用,隨著前端的能力越來越強大,前端要處理的問題也越來越多,因此語言特性增加了,這時候,需要深挖語言特性,需要處理數據結構
還有很多的一些,例如瀏覽器兼容的問題,兼容css3,html5的api(websocket,localstorage什麼的)~。前端的安全問題xss,csrf,界面操作劫持等。都是可以深究的課題。
實在不喜歡,我還可以跳出html5的架構,我去玩玩flex架構的東西?
廣泛去接觸是為了讓我們有更多的知識積累,去接受一些我們即將遇見的問題,去提出一些可能的解決方案。花費的時間可能不多,但是會讓你受益匪淺。甚至了解的領域可以不僅僅是前端的,後端的,操作系統,伺服器,什麼都可以去了解,說不定哪一天你就用上了呢?
而知識的廣度中,我覺得構建個人的知識結構圖是很重要的(github上有開源項目就是類似這樣的,fks,前段技能總匯)走了結構圖,你就知道自己有什麼東西是知道的,這樣你會有成就感。有了結構圖,你也可以經常性的回想一些已經了解過的知識。反正就是好處多多咯~
還有一個就是如何收集一些新的信息和知識:github開源項目,工作接觸,系統學習某一塊知識時接觸,一些論壇和團隊(阿里的d2,騰訊的alloyteam,),一些網站的問答和博客文章(csdn,cnblog,知乎)

而另一方面,學習的深度也是不可或缺的,這是為了使我們能夠把表層的,停留在認知上的知識深化。這一步通過的是實踐咯。開源項目,實習工作,學校項目,虛擬項目都是可以的。例如你想了解websocket的協議,要不就去為一個不支持websocket的瀏覽器寫一個兼容庫?這樣你就深刻了解了ws的技術實現,也感受到了瀏覽器兼容的做法,連帶著為了理解ws,http協議,socket你要不要也去了解一下?然後順便來一下計網的osi七層模型,順便買本http權威指南看一看吧……(?? . ??)
還有你對js有興趣嗎?畢竟jquery什麼的可能會過時,但是基礎的js你可是可以一直用的呢,(也不排除出來一個類似dart的,就取代js了,但是……我不信 )還有ecma2015誒,然後你對js的翻譯過程有興趣嗎,我記得有開源項目js.js,可以去了解翻譯過程。
或者angularjs,jquery的庫的源代碼也是可以讀讀。雙向綁定的實現,臟檢查,作用域……

回答的很多,我想說其實前端東西涉獵可以很多,也可以不多,因為界限很模糊。但如果自己喜歡,也有時間,其實可以把這些東西都了解一下,說不定哪一天突然心血來潮,就下定決心在某一個領域鑽研下去了呢。安全性,圖形學,數據結構,資料庫,計算機網路~框架和語言特性的深入摸索~全棧模式的探索~webapp和hybrid app的開發~html5的新介面……好多好多。

我是個學生啦 充其量是個實習了半年,好不容易拿到offer了的應屆生。自己也沒有完全確定一條自己的前端之路,因為我每走一步我都會發現好多好多。我是覺得自己並不需要這麼快就定下來,我喜歡前端,我也喜歡實現自己的想法,所以我想去了解更多可以實現我想法的工具,了解一些新的技術,鑽研一些舊的東西。
一切迷惘,我覺得都是因為了解的不夠多,時間還沒到。這時候,需要積累。我相信這樣積累下去,直到某一天,我會突然發現自己應該前進的路。


如果是學習前端的話,推薦看一篇文章《http://zhuanlan.zhihu.com/p/20391662》

細細整理了過去接觸過的那些前端技術,發現前端演進是段特別有意思的歷史。人們總是在過去就做出未來需要的框架,而現在流行的是過去的過去發明過的。如,響應式設計不得不提到的一個缺點是:他只是將原本在模板層做的事,放到了樣式(CSS)層來完成

複雜度同力一樣不會消失,也不會憑空產生,它總是從一個物體轉移到另一個物體或一種形式轉為另一種形式。

如果六、七年前的移動網路速度和今天一樣快,那麼直接上的技術就是響應式設計,APP、SPA就不會流行得這麼快。儘管我們可以預見未來這些領域會變得更好,但是更需要的是改變現狀。改變現狀的同時也需要預見未來的需求。

如果是提升自己,還是推薦另外一篇文章《http://zhuanlan.zhihu.com/p/20626395》,其實就是四個步驟,不過第四步是我特有的:

  1. 能做到你想做的: Tasking與學習能力
  2. 用更好的方法來實現功能
  3. Better Code Architecture
  4. Growth Hacking

我想大多數想走前端的路的人主要都是以下三個困惑:
1.前端好學嗎?
2.自學還是培訓?
3.前端好找工作嗎?


作為一個「過來人」,我也分享一下我的一點感受。
1.前端好入門,但是並不算好學。
最近在想為什麼知乎上的主流觀點都是提倡自學? 當我想到王健林說的小目標,忽然好像明白了。因為每個人的高度立場不同。對於王健林來說,一億確實是小目標,因為人家身家上千億啊;可是對於普通人,把一個億作為人生的大目標可能也不太現實吧? 同樣,很多知乎上點贊高的回答其實都是大公司的CEO或者各行業大牛來回答的,對於他們,學好個前端自然不是什麼難事,可是對於許多沒有基礎以及非計算機相關專業的人來說呢? 還真的就是兩碼事,這是需要極大的熱情和耐心的。所以我覺得這樣有點不負責任,當你們說容易的時候應該站在大多數人的角度考慮,我當時就是因為知乎的回答而選擇自學的,現在發現這條路真心不易。

前端主要學html,css還有js,當然這都是基礎。html和css的確容易學懂,正常人每天8小時一個月學完完全沒問題,可是學完了,到會布局做頁面處理好各種小細節需要一個較長的過渡期。 拿我來說,當時毫無基礎,辭職在家,基本每天花8小時左右吧,第一個月把head first html與css看了一遍還有w3school也認認真真過了一遍,原以為我學會了,可是真正做的時候才發現只能用html做一點極其基本的頁面,css感覺無從下手。然後買了網易的課程,又花了一個月學完html和css部分,可是課程太基礎了,根本沒有實際案例,也沒有多少老師互動,真心浪費了我大量時間還有金錢。從激情滿滿到學了兩個月還是無法臨摹出一個完整頁面,當時真是很受打擊,苦惱了半個月。
實在是不建議網易的課程,太坑了。關於網易微專業不多說,想了解的話可以看這個回答,鏈接
很多人的客觀評價。

另外js是難點,有個火星時代認識的朋友之前學了c#,c++ 還有.net,但是後來js就是學不下去,然後經常跟做前端的朋友溝通,最後還是不得不去火星培訓去了。當然我並不是建議去火星,詳情往下看。(ps:不是做廣告,不信可以往下看)。

另外其實前端不只有難度,還有廣度。
眾所周知,前端知識是更新最快的。有人說出去度個假回來感覺像是落後了一個世紀,當然有些誇張,但是也反映了如今前端知識的飛速更新吧。
而且前端的知識有難度,js就不用提了,極客學院有個老師說,他覺得css比c#要難,因為css多兩個s,當然這是開玩笑,但是css有太多技巧要學,對於初學者來說常常無所適從。 所以說前端這條路並沒有很多知乎網友口中那麼好走。說這些是真心希望想這條路的朋友做好心理準備,如果沒有耐心一直學下去,可能並不適合前端。

2.自學還是培訓。
自學上面已經說過了,就不說了,我的意見就是自學這條路不適合每個人。 但是培訓呢?我去試聽過達內,火星時代的課程。火星的口碑和環境好點,不過費用較高,達內口碑不好,一是覺得環境不好,二是交了押金試聽後我想退,但是當時不願意退給我,而且不停地電話騷擾我,後來第二次去才退給我,總的給人感覺不大好。另外兩家都吹噓老師多牛,其實感覺老師水平接近普通大學老師,而且風格也像,不像是很多實戰工作經驗的,我表示懷疑他們真的是如他們自己吹噓的年薪過百萬的前端大牛嗎?所以這裡我贊同網上的主流觀點,培訓機構沒一個靠譜的。至於選擇培訓還是自學,因人而異吧。如果自製了真的很好又有基礎,自學也是不錯的選擇。

3.前端好就業嗎?

實話說我目前還在自學中,學的第四個月,我還沒開始找工作。等我面試了一段時間有了發言權會來補充的。只知道在火星試聽的時候認識的朋友現在找到工作了,算是班裡混得可以的,在深圳工資6600,每天加班到9點,大小周。所以說培訓機構吹噓的出來就8k什麼的,千萬別信。另外他說自己是運氣好,找了半個月才找到的,而且壓力比較大,比較累。所以說,這條路並不好走,希望想走前端路的,一定要三思而後行。等我找到工作了再來更新,希望對大家有所幫助。

--------------------------------------


最近有不少人加我,加上最近找工作中有時間就來更新一下。

首先說一下我的幾點感觸:

1.前端行業越來越亂

1)從業人員參差不齊

這兩周海投,總共收到5個面試通知,其中只有一個是真實的,面試官說我過了他那關,要我三天之內等通知,然後面完之後沒迴音了。只記得當時說是現在很多人都想轉行做前端,很多基礎不好,不知道是不是擔憂這個。我帶了作品,而且也寫了一年經驗啊,居然面試都沒有!這讓我想起了火星畢業的朋友,他當時也是這樣的情況。


2) 培訓機構水平很差

另外面的4個全是培訓機構。至今為止我已經面過 「蕪湖達內」,「中軟國際」,「多迪」,「海晨科技」「中星集團」等培訓機構,還有眾多小的就不說了,其中多迪去了兩次,第一次是去年要我去實習,當然也就是變相的培訓啦。今年再去就是要我做老師,我去了筆試都沒有,就跟我談薪資,問我想不想做項目經理,我電話里說得很清楚不想做老師,更不打算實習的,結果騙我說有技術崗位,結果還是忽悠我做老師,關鍵是連筆試都沒有啊,培訓機構有多亂可見一斑。 他們全都是打著招人的幌子,要你去面試,結果就忽悠你培訓了。多迪在全國還有22家機構,不算小公司了,但是招老師這麼隨便,看來培訓機構老師水平都真的很一般了。

2.自學真不容易

最近加我的朋友中有學過半年的,也有兩個月的,還有準備開始學的。 半年的朋友投了很多,只是面過兩家培訓機構,兩個多月的說不想自學了,想去培訓機構學java。而我個人,學了大半年了。目前學完了js和jquery,一般的電商頁面差不多也都能做了。現在還沒找到工作,很發愁,真的有點懷疑人生了。這幾個月我每天學習緊張。做這個真的太耗時間。我的情況是這樣的:

每天早上8點起床,吃完早餐差不多9點學習,中午12點吃午餐,加午休差不多2:30開始學習,學到6點晚餐,晚上休息下跑步然後洗澡洗衣服等等的,差不多9點學習,學到10:30左右。就這樣每天除了學習基本啥也不幹,但是也就3+3.5+1.5總共8小時。這已經是我的極限了,相信讀過大學的人,很多人都做不到這樣了,然而這樣的情況我現在還是沒辦法找到工作,真心勸大家不要輕易自學。除非自制力真的很強,或者基礎很好,或者你時間真的很多,比如剛進大學。


ps: 之前我提到培訓機構有不少人說我寫軟文,強調一下,火星時代是搞設計培訓的,前端開發似乎不怎麼樣,我只是試聽過,只覺得費用貴,環境好點,老師水平也就那樣,起碼絕對不值1萬9的學費。然後關於我那兩個火星畢業的朋友,我也是說實際情況,僅此而已。上面碼了很多字,有點沒條理,都是我自己的真實感受,或許有點悲觀了,但是確實也都是實情,只希望評價之前先判斷清楚,不要動不動說人寫軟文那樣。 不更新了,總結這些真的很浪費時間。 希望對有疑惑的人有點幫助吧。

===============================================

最近又面了幾家培訓機構,實在是忍不了了!

1。這些培訓機構真是令人髮指,已經跑過好多家,這裡列出來,以防大家踩坑。華育國際,蕪湖達內,中軟國際,中信集團,海晨科技,多迪,等等還有眾多我都不記得了。其中不乏我去過兩次的,我反覆問確定是招技術嗎,確定不是招講師或者學員?那邊說是的,我再強調說,如果是培訓就算了,我有經驗,不打算去,那邊說放心,我們有技術崗,你過來吧。好吧,難得有面試,萬一是真的不去豈不是虧大了? 好吧,去了,半天時間跑來跑去,累死累活,結果又他媽坑爹的,拐彎抹角半天,最終還是要你培訓,去年買了個表的。大家看到幫忙頂上去吧,曝光這些缺德的,要不是這麼多培訓機構天天忽悠別人去,現在也不會這麼飽和。都是這些天殺的培訓機構害的!

================================================================


如果想學前端至少得具備以下幾個條件:

1. 羅輯思維還不錯,起碼高中數學每次都得能及格

2。自學能力好。IT行業知識技能日新月異,前端更不必說,甚至有人說放個假回來都覺得落後了一個世紀,某大牛說前端每年都要比去年難上一倍。

3。年齡是個問題.眾所周知IT行業是吃青春飯的,過了30很多人就開始擔心搞不下去了。馬化騰對騰訊的員工說,你什麼錯都沒有,就錯在太老了

現在初級前端已經飽和了,不要只看那些高票回答,要看最新的,那些人不一定能站在小白的角度思考,一天到晚叫這個那個去自學前端,哪有這麼容易?好好算一算, 光是廣州培訓機構一年出來1000+的學員,還有很多自學的,更不用說每年不計其數的計算機相關專業畢業生,能不飽和?這些高票回答都是以前的,而且多半是不負責任的回答,因為知乎的高票回答多半是大牛或者某某公司CEO,我們能跟他們比?就好比王健林說的一個億的小目標,我們普通人能算小目標?希望所謂的大牛們不要誤導小白們,現在真的初級前端很飽和了!

另外前端的行情,去智聯看看吧,我截圖在下面了,全國所有行業中前端是排名第一。

1。在智聯首頁的智聯排行榜裡面,2.有一個競爭最激烈的崗位,

不信就去看看吧。

最後想說,自學了8個多月了,現在真的很累,真的很看不慣那些所謂大牛總是在誤導人,希望大家都要冷靜,要相信,一個億的小目標不是我們目前能輕易達到的。為了讓前端能稍微正常一點,請冷靜,多轉載一下吧,還有後台很多人私信我說都找不到工作,這些人哪兒去了? 贊起來啊,不要搞得好像我們找不到工作的很少一樣,明明都找不到了好不好,還被那些大牛和培訓機構給淹沒,去他大爺的。


少年,我看你骨骼精奇,這張前端拓補圖你暫且拿去。

首先要堅定自己學習的信念,然後假以時日加強學習,多看看前端牛人博客和一些團隊博客,關注一下最新趨勢。學習的時候多想想原理,往深處去探究。

圖轉自:
【IMWeb】web前端知識拓撲圖參考


一、職業建議篇

選擇一個職業就好比一個公司選擇戰略方向至關重要,推薦閱讀下:

1、《前端大牛得到的最佳職業生涯建議》:前端大牛得到的最佳職業生涯建議-博客-雲棲社區-阿里雲;

2、 《身為前端工程師的我們到底值多少錢?》 本篇作者阮一峰2016年的文章,近期發布在雲棲社區評論很多,讀讀原文再讀讀評論相信會對自己是否應該選擇前端有一個清晰的認識;
二、避免踩坑篇:

《Web入門者必看的HTML代碼編寫的30條軍規》避免重複踩前人的坑:Web入門者必看的HTML代碼編寫的30條軍規-博客-雲棲社區-阿里雲;

三、前端知識的學習篇:

1、推薦閱讀《前端知識體系目錄》文章從HTML/HTML5、CSS、JS等相關知識學習步驟目錄,到相關書籍推薦應有盡有:前端知識體系目錄-博客-雲棲社區-阿里雲;

2、《必備神器:前端開發全面知識庫》 前端開發全面知識庫,包括HTML5,CSS3和js的基本框架知識,以及DOM和BOM操作的基礎知識和一些基本工具和IDE ;
四、進階篇:
1、這篇不是前端知識類分享,更多是講解前端程序員成長經驗分享:《一個前端的自我修養》:一個前端的自我修養-博客-雲棲社區-阿里雲;
2、《阿里9年,我總結的前端架構演進3大階段及團隊管理心法》:阿里9年,我總結的前端架構演進3大階段及團隊管理心法-博客-雲棲社區-阿里雲 ;

3、《【阿里招聘】4 年阿里前端,2 年 CTO,一個程序員六年的奮鬥史》 這篇文章吐露了作者奮鬥掙扎的經歷,從一個電氣專業的學生走上了阿里前端工程師的道路,以及再到後來離職創業成為CTO。成長的路途雖然艱辛,但是想成為山峰的人必須承受那些坑窪所不需要承受的苦難。前路雖艱難,但卻鑄就了卓越;


「一葉障目不見泰山」
前端說白了只是語法糖,一種編寫頁面的容器api和程序語言的封裝,是計算機發展的大樹長出的小枝椏。會一點視覺交互設計算錦上添花,但骨子裡還是計算機的行當,必須從計算機領域汲取更多營養,不能本末倒置。

「忘形知意,忘意見神」
根生才能葉茂,有源頭才有活水。永遠不要成為專家,執迷於此就會被束縛和限制。金庸的《倚天屠龍記》有一段就是無忌學太極劍,從不懂,全懂,然後到全忘。
忘記的是它的形,如用法,api,而去探究其意,為啥設計這些api,為啥這樣設計這樣寫背後的思想甚至歷史淵源,感興趣的話,甚至能超越代碼挖出一些人文和情懷,比如背後的人的天才堅信愛心甚至委屈無奈。

「不識廬山真面目,只緣生在此山中」
熟悉前端,然後往計算機發展和技術的主線靠攏,去領會linux,互聯網的設計思想,變得更像程序員和黑客,看看他們的思想行為,喜怒哀樂。會發現,一切逐漸趨於簡單純粹。

「曾經滄海難為水,除卻巫山不是雲」
等更深的明白了什麼是計算機,互聯網,和程序,程序員是什麼和追求什麼,為什麼追求,再從樹根回望那漂亮但一直隨風搖曳的葉子枝椏,相信能懂一些見山不是山,見山確是山的意思。但此時,是不是山已經不重要了。

——————
2016-10-26 補充一些體會
空間感 ——大牛和小白的差距
恆變——技術就像水和泥,並不是常量而是變數,怎麼學好前端並感覺沒有穩定的答案,前端也不是一個穩定的職位,僅僅是當前技術方式恰好聚合實現某種服務的一個稱謂。而技術實現和技術提供服務都在變化,不要希望在變化的環境里抓到不變的方式。感覺能把握的,就是好奇心、想像力,善意、熱愛了。多看看其他技術的使用,多看看各領域,各層的技術是如何服務的,比如可以對比前端組件管理,和伺服器集群管理,數據集群管理,都是多個實體的管理有哪些區別。感覺很多知識並不在前端領域裡,而在前端外圍的空間里。前端可能是個門,可能是個驛站,但絕對不是終點。

——————
以下推薦閱讀,網上能找到pdf下載,讀著通俗易懂也挺有趣的,可以對程序工作有更大的視野和站在更專業角度認識,也歡迎補充:

《黑客:計算機革命的英雄》,類似紀錄片一樣,從MIT的黑客天才,到硬體黑客的崛起,電腦普及,再到後來軟體第三代黑客,開始有銷售軟體,到後來,計算機公司,從僱傭黑客,轉變為僱傭專職程序員,可以看到計算機產業的發展,從把黑客當歌星那樣的藝術表演形式,到需求很大,黑客很少而且不受約束,轉變為滿足大批量生產的行業和工作規範,出現工業化分工細分職能,不需要太多創造性,只要服從和執行就滿足條件的程序員,不用具備計算機的天才和靈魂,去做那些能實現需求而不用追求完美的技術實現,形成生產線。。前端也就是這一趨勢誕生的小分支了吧,只是應需而生,僅僅前端這個點,並未有太大的發展空間和立足點,就像一個小花盆,如何長出大樹?。。也可以逐一看到各個階段計算機工作者的一些成就和方式,看似內容很多,但難得作者筆墨連貫有趣,非常值得一讀。承認,對程序提高不能立竿見影,也不能給一條完美的路。但能站在一個時間空間去找到位置,和看到黑客與程序員的區別,就容易明白前端是一個小分支,只是應需而生的職位。因此看起來,按質按量滿足職位要求完成需求,但擁有黑客充滿好奇,喜歡動手嘗試,和追求完美的藝術家的心態,才是能長久的,也更容易接地氣。也可以結合著對比自身,是否真的具備計算機的技術和心態,是否像木匠用木材,廚師用食材一樣,對發揮計算機和網路能力揮灑自如,還是僅僅勉強是背了些語法,懂了些概念的不斷條件反射,就容易不那麼迷惑。
《UNIX編程藝術》難得的橫跨多技術領域又不陷入細節。
《穿越計算機的迷霧》從原子,電路,晶體管,加法器,講到軟體,難得的融匯貫穿又兼具情感娓娓道來。


首先謝邀,我也不好說些啥,以免誤導。這篇文章講述我自己是怎麼在前端路上是的行走。前端路上的旅行
希望對你有所幫助


作為一個務實主義者,感覺高票答案說的太玄乎, 讀完貌似很有道理,然而並沒什麼卵用!

甚至個別觀點不能苟同:

永遠不要成為專家

可能部分人印象中,專家 就是出大事,官方出來用一些很高深的術語忽悠大眾,為事件找說辭的人。或 小說如金庸 《鹿鼎記》里 澄觀 這類武痴。

要知道大部分的專家都是正常人, 在領域內的作用真不是一般的大。

我們人其實都差不多,唯一的區別就是掌握的技能點不同而已。

掌握技術的深層原理, 「觀一葉而知泰山」方能稱為專家。

拋開「專家」定義的爭論不談:
高票答案的意思就是多理解技術背後的底層知識、掌握原理。這對於任何職業、甚至任何話題貌似都適用!

私以為:

人為創造價值而生! 職業發展除非走創業方向,那必定是往專家方向發展。因為, 專家能解決很多實際的大問題,為社會創造最大的價值,也為自身增添財富,這點 玄乎的禪師貌似無法做到。

回到 正題,題主主要想 「提升自己」, 那絕壁就是提高專業技能了, 實用點的建議如下:

1. 加入靠譜的技術群, 前端群 豪情哥的就比較靠譜。(對!就是知乎整天發群廣告的捏個,俺當然是群內成員!(* ̄(エ) ̄) )

2.收藏 靠譜的博客、論壇、教程網站; 前端博客: CSS大神張鑫旭的博客 以及 阮一峰老師的博客 ,他們博文的經典前端圈的人都知道。 前端教程網:w3cfuns 以及 慕課網 值得收藏;靠譜的前端論壇目前似乎沒有, v2ex 勉強算一個。

3.積累代碼、去看更大的代碼世界:創建個github賬號, 專業的程序員都該有個。(越來越多的互聯網公司將 github賬號代碼量作為考核點)

4.平時 沒事寫寫博客總結技術,博客可以在 github、也可以在其他公共博客寫(例如 博客園、簡書等)。


到目前為止總共手把手帶過不下一百個0基礎甚至背景一片空白的學生,畢業的同學全部找到自己滿意的前端相關的工作並且在工作崗位上得心應手。
這裡先顯擺顯擺一下最近兩波班級同學的畢業設計(學生很給力,做為老師控制不住要分享...)。

項目1:
飢人谷前端作品庫 ,後端涉及技術:nodejs的使用、Express MVC搭建網站的方法、常用中間件的使用、七牛圖片上傳處理、資料庫的構思與操作、MongoDB的使用。
前端涉及技術:HTML CSS規範寫法、CSS3特效、BootStrap的使用、響應式頁面、常見組件的封裝、RequireJS模塊化寫法。
項目歷時40天左右,採用標準的互聯網產品開發模式,前後端負責人、開發者均為班級同學,我作為指導老師。而這些同學初始的水平基本為0,只是經過3個多月系統的學習練習。項目介紹:飢人谷前端作品庫, 學員開發心得:飢人谷前端作品庫開發心得

項目2:
開發一個功能完整的FM音樂播放器插件。項目要求是封裝一個音樂播放器插件,使用者一行代碼即可方便調用在頁面上展示音樂播放器。
[同學的作品1](Player) [作品2](main) [作品3](music)。 項目2仍在進行中,後續會開發chrome擴展、使用nw封裝成桌面應用等。 完成該項目的同學對應到班級的等級為30-40級,進度正常的同學只需要3個月左右的時間。

顯擺不是目的,這裡想說的是如何才能在學習前端的道路上找到正確的「體位」,「穩」、「准」、「狠」,讓自己快速成長起來。就如同一個貧困落魄的流浪漢,想快速擠入上層社會。最快的方式是給他一大筆錢,更好的方式則是給他一大筆錢解近渴在送他一顆搖錢樹讓後輩子衣食無憂。「一大筆錢」就是讓自己能快速找到工作、勝任工作所需要的知識體系和技能。而「搖錢樹」則是: 愛思考、勤動手、做事踏實求精、追求美的習慣。

前端知識體系和必備技能包括哪些呢?或者我們經常聽到對前端開發者的要求是基礎紮實,那這所謂的「紮實」到底如何衡量呢?

忽略一個個跟蜘蛛網一樣的知識圖譜、一本本磚頭塊似的開發聖經、或者他人收集整理讓人眼花繚亂的網站網站鏈接吧~ 相信我,即使是你們學校里最牛x的學霸全部讀一遍估計也得個幾年,這是前端給java或者「大牛」給小白秀優越用的,這些有一部分是過時的東西、一部分是重複的東西、一部分是對你目前沒什麼用也不可能看懂的東西、甚至還有很多誤導性的東西。 最終讓你頭昏腦脹腦脹內心惶恐失去重心、讓你感覺和那些大牛愈發遙不可。

入門者的知識體系包括哪些東西呢,下面是我的個人看法,按照這個流程走不一定立刻成為大牛,至少能讓入門者抓住重點一步步走下去:

1. 基本工具使用
Git/GitHub的熟練使用,編輯器(sublime、webstrom、atom、vscode)的體驗區分與使用,chrome開發調試工具的使用,Photoshop的簡單使用,翻牆軟體、筆記工具、流程圖工具、思維導圖工具的了解使用


2. 靜態頁面功底
doctype、亂碼、meta、字體原理、字體圖標、常見標籤的用法、HTML書寫規範、CSS選擇器使用及權重、CSS常見樣式的寫法、雪碧圖、inline-block特性與使用、line-height與vertical-align用法、盒模型種類、浮動的特性與應用(兩欄三欄布局)、清除浮動clearfix、BFC、定位的特性與使用場景、z-index、浮動與負邊距的應用(聖杯布局雙飛翼布局)、常見的CSS Hack、邊框+偽元素+定位的應用(做三角、tooltip、繪製簡單的效果)、CSS編碼規範等。
掌握這些功底後力量上你可以用合理規範的方式寫出任何你看的到的靜態頁面,你有底氣把自己寫的HTML CSS代碼拿給任何一個大牛來評判,給你一個頁面你會無視效果直接審查元素指出源碼中的不足並提出改進意見。


3. JS與JQuery功底
頁面渲染基本原理、白屏與FOUC、數據類型與類型轉換、引用類型與基礎類型的區別、深淺拷貝、聲明前置、函數聲明與函數表達式、字元串的各種操作、正則的各種操作、貪婪模式與非貪婪模式、日期數學函數各種操作、作用域與作用域鏈的概念與應用、閉包的概念與應用、IIFE的封裝性、setTimeout相關概念、事件冒泡捕獲機制、綁定事件的兼容性封裝、事件代理、ajax的原理與封裝、跨域的幾種方式與實現、jsonp的封裝、原生js實現常見效果的實現(懶載入、點擊載入、回到頂部、導航條、Dialog、Tab等)、jquery的語法與使用、jquery實現各種常見效果(懶載入、點擊載入、回到頂部、導航條、Modal模態框、Tab切換、各種輪播、瀑布流布局、木桶布局、懶載入+ajax+瀑布流的使用等)

做了這些後,你會對代碼的規範性和美感有一定的認識,會以寫出精簡、好看、復用性高的代碼為目標而不是以實現效果為目標。分析、拆解未知問題的能力有所提高,習慣於使用google搜索文檔並掌握一些搜索技巧、習慣看英文文檔、熟練使用調試工具定位錯誤解決問題,嘗試總結紀錄甚至分享心得。
到這裡,你的能力甚至能力超過一些所謂的一兩年甚至兩三年工作經驗的前端開發者。在交流群里慢慢的以準確、睿智的視角幫初學者解決問題。你開始發現代碼不管怎麼優化總是沒那麼滿意,你會為別人更優雅的解決方式嘆服抱怨自己太笨,你在空餘時間默默實現你在很久以前羨慕的效果,默默的開始美化自己的博客記錄心得,你開始覺得自己玩High了。對於找工作反而不急了。

4. JS進階
OOP的概念、構造函數創建對象的方式、原型與原型鏈(會畫圖)、繼承的寫法、功能模塊化的寫法、常見的設計模式(工廠、單例、發布訂閱)、面向對象的應用(輪播組件、Tab組件、曝光組件、日曆組件、Dialog組件等)、JQurey插件的封裝、JQuery核心源碼解讀、HTTPwebserver相關知識點、CMDAMD規範、模塊化寫法 (Requirejs或者webpack使用)、npm的使用、工程化概念與應用(gulp)、HTML5新功能、純CSS做一些有意思的特效和動畫(如按鈕、漸變特效、loading、CSS3輪播、3D輪播等)、響應式的應用(寫一個bootstrap的柵格系統)、CSS預處理等

到這裡你似乎覺得前面的東西都白學了,之前引以為傲的代碼寫的一團糟。你的嘴變得越來越懶、腦子確越來越靈活,當看到新功能已經可以在腦中里去構思解決方案,當別人談論一個東西的時候你都知道別人在說什麼,甚至內心慢慢以一種俯視的態度去旁觀大家無謂的爭論,當別人在爭論less還是sass好的時候你默默的花了兩個小時看玩了所有的語法,你開始去看node教程、去看ES6語法、去嘗試用express搭建個博客、去跑跑React Angular里的Demo,在一番體驗後你清楚的知道它們的應用場景與利弊之道哪些需要深入哪些需要了解,你會把自己的東西收集整理分享給更多的人並從中得到滿足...

x年之後...

某一天突然發現自己變了,多思考、親自動手、踏實求精、追求美這些無形的東西已經影響到生活事業的方方面面, 你也早已成為別人眼中的大神了


web前端的路長著呢!

應該是問怎麼學前端吧,其實前端入門還是很容易的,只是精通難,沒人指導難上加難!

前端入門說容易也不容易,需要記的東西有很多,雖然記住常用的就行,但是那些不常用的標籤還是需要記住

學習前端一開始要學習HTML和CSS,這兩個是前端基礎中的基礎,學會後還要去練習,不斷的去實戰,直到能把一個靜態頁面寫出來,頁面布局乾淨整潔,到了這一步,前端的基礎就差不多了,不僅僅要學切圖

前端要學的東西很多很多,不過很多東西都是能找資料來學習的,特別的前端基礎中的HTML和CSS!

學完HTML和CSS接下來就是學JS了,JS學習並不難,去買一本JS指南就差不多了然後後面就是前端的核心內容框架了!

學前端,一個字練,兩個字實踐,三個字繼續練,四個字不斷實戰,七個字練到心煩練到吐!

總之實戰出真知,看了那麼多的是每什麼用的,知道不等於做到,做到才能說知道才能說會!

前端的路很長很長,現在前端也是剛剛進入爆發階段,很多技術都沒有成熟!

做前端要前景有前景,要發展也有發展,要錢途有錢途,前端畢竟是一個技術活,你的技術好不好,決定你的薪資待遇!

說了這麼多,沒水喝,你們倒也是點個贊也是好!

走過路過的大神順便說一下,前端怎麼學,HTML和CSS在哪找資料,JS應該怎麼學,說一下造福一下後面的新手,這也是一個不錯的善舉!


我生前也是做前端的,勸題主不要入坑


一是不要輕視自己,二是學無止境,最後是堅持勿急功近利。
畢業一年,學校裡面代碼寫的少,最初找工作沒自信,多虧了運氣好在第一家公司做網頁設計時公司前端缺人,我就一邊做圖一邊寫代碼。後來跳槽也是坎坷,沒有什麼作品,js學的不好(當然現在也不是很好),但就想做前端,終於面試到了另一家創業公司,主管對我的第一印象:不自信,但還是給了機會。然後是突飛猛進的一年,當然主要是基本功的提高,前端很大,我也剛入門,所以學習不要停,每天多看看多了解。我屬於懶人,平常回家很少接觸代碼,但每天早上和下班前工作不吃緊都會堅持學點東西。
現在正在離職,目的是想多學點;雖然呆了一年,因為公司沒有其他做前端的,太多東西要自己琢磨,基礎還好,深一點的自己招架不住。
希望題主堅持前端,多學多做即可。


根據自己經驗做的前端技能樹 http://learn.haoqiao.me 希望有所幫助=-=


前端需求量一直很大,並且只會增加,找工作肯定沒啥好擔心的。但絕大部分公司自己大公司的很大比例前端正在淪為勞動密集型行業,這是要注意的


我認為的:

1、從css、js基礎到各種應用層,再到瀏覽器內核——從基礎到應用到底層,把前端垂直的打通。做一個fe專家。

2、從css、js基礎到各種應用層,再到後端——從基礎到應用層再到fex,各種前後端問題都能解決。做一個full-stack,偏前端。

3、從css、js基礎到各種應用層,再去管理項目,管理人才——從基礎到應用層再到管理。做一個項目管理者。


技術和業務上能不能舉一反三,能不能快速決策


借鑒別人好的思想,運用到自己項目中

看到項目中的不足,去彌補和修正,代碼有沒有腐臭味,需不需要重構重寫


從簡單粗暴的項目到穩定迭代,比較舒服地滿足不斷增長的需求的項目,是需要經歷很多事情的,能不能把架構,文檔,測試用例,發布流程等先總結出來供自己和別人方便參考和使用


書讀百遍其義自現;代碼需求讀百遍,痛苦煩惱少千遍


個人調侃,我是個半吊子寫代碼的


推薦閱讀:

你是怎樣超過以前感覺比自己強大很多的人的?
如何增加一個人的自信?
在社會上,你最不希望成為哪種人?
一個優秀的交易員需要具備什麼樣的素質?
白手起家在我們這個年代還適用嗎?是否有人能真正做到?

TAG:前端開發 | 職業發展 | 前端工程師 |