原文: https://kb.cnblogs.com/page/578689/前端
---------------------------------------------------------------------------------------------------------------webpack
做爲一個從業快10年的程序員,我想給新入行的程序員們一些建議。這些建議是我但願本身能夠在畢業時就讀到的,也但願它們能夠幫助你成爲一個更好的程序員。程序員
簡單概括一下,總共有7條:web
下面我來詳細說說每一點。面試
三寸氣在千般用,一旦無常萬事休。數據庫
——《》npm
首先要說的固然是健康,脫離了這個本錢,一切都無從談起。編程
久坐、不運動、睡眠不足、不注意及時補充水分、長期的伏案工做等都會對健康形成很大的影響,而不幸的是,程序員這幾樣全都佔了。不少程序員每每年紀輕輕就已經有了各類各樣的疾病:頸椎病、腰椎間盤突出、高血脂/高血壓、膽結石、腱鞘炎等等,關於程序員過勞死的新聞更是隔一段時間就來刺激一下咱們的神經。gulp
研究代表,長期保持同一姿式(不論坐着仍是站着)對身體都有不一樣程度的害處,並且這種害處是沒法過後彌補的。也就是說,若是白天上班坐8個小時,那麼就算你下班後去健身房練一個小時也於事無補。這幾年很流行的「站立式辦公」也是同樣,若是你白天站立時間太久,會對膝關節形成較大的壓力,一樣會損害健康。比較推薦的方式是,寫30-40分鐘代碼就起來走一走,喝杯水,遠眺一會,跟同事聊聊天。
我知道,做爲程序員我也常遇到那種寫代碼寫High了連廁所也不想去的時候。不過爲了長遠的健康,仍是要養成良好的習慣。
除了長時間保持同一姿式以外,許多程序員還有各類不良習慣。好比:
這些習慣通常都會被美其名曰提神,你們都知道,程序員加班在業界算是比較常見的,精神萎頓是常態。然而這些號稱提神的方法,其實沒有一個是真正管用的。這些不良習慣說到底都是一種「毒癮」,跟吸食大麻在本質上並沒有二致。不過好消息是你徹底能夠戒除這些不良習慣,只須要堅持一段時間,讓「毒癮」過去就行了(和真正的毒癮同樣,它們更多的是精神依賴,一旦你打敗了本身對它的精神依賴,就能夠得到自由)。
我在大學和剛開始工做的前幾年,也有煙癮。寫代碼寫累了就會去辦公室外邊冒一根,那種一氧化碳中毒帶來的短暫微醺感確實使人有放鬆的錯覺,可是抽完煙回來寫代碼會感受更累。並且口中老感受有異味,咽喉不適,最主要的是精神萎靡,終於有一天我受不了了,決定戒菸(事實上和不少人同樣,以前也有過無數次的戒菸)。當煙癮發做的時候,我就去喝杯水,晚上則站站樁(站完以後口齒生津,神清氣爽)。剛開始的3天是最難的,一週以後我基本能夠控制住去抽菸的慾望,而後就愈來愈輕鬆,徹底感受不到煙癮對個人影響了。
碳酸飲料、高糖飲料也是同樣。在飲食原本就不充裕的天然界,咱們的祖先遇到了富含能夠爲身體提供能量的糖(好比蜂蜜),天然會大量攝入。這種嗜糖的基因在今天還在不斷的產生做用,可是不一樣的是,咱們如今能夠很輕鬆的在食物、飲料中攝入比身體所需多得多的糖。這些糖會給健康帶來不少問題,好比肥胖,高血糖,冠心病等等。
更多時候,咱們想要喝飲料更多的是精神上的依賴,也就是上面說到的「毒癮」。戒除對糖的依賴比煙和酒要困難一些,由於生活中有不少陷阱,好比酸奶、麪包、餅乾、水果等等。
如今香菸的包裝上印有焦油含量,有10mg的、有15mg的。焦油含量是影響一支菸口感的重要因素,一般說的「綿」實際上是說焦油含量較低,這會讓你感受比較健康。然而陷阱是,一支菸抽完以爲不過癮,神經感覺到的刺激不夠強烈,這會驅動你抽第二支,結果吸入的焦油反而更多。原本15mg焦油的一支菸就可讓你過癮,如今兩支10mg的才能達到一樣的效果,至關於攝入了20mg。
零度可樂也是同樣,那種無糖的有着甜味的添加劑會刺激你對糖的渴求,你須要攝入更多的糖來抵消這種虛幻的渴求,而後變得更不健康。
有人可能會說,沒有這些嗜好,那活着有什麼意思呢?相信我,當你戒除了這些「毒癮」,有了一個健康的體魄,才真正能體會到活着的樂趣。當你爲這些嗜好所控制,產生的那種病態的溫馨感實際上是虛無縹緲的。
有規律的作一些運動能夠緩解頸椎、腰椎的不適,能夠加快新陳代謝的速度,消耗多餘的、會沉積下來的能量。好比比較容易接觸到、也容易上手的運動:
選擇一個適合本身的運動方式,而後將其培養成一個習慣(好比堅持每週兩次瑜伽,或者天天中午打30分鐘的乒乓球)。若是這些和工做有衝突的話,好比公司要求長期晚上加班,那你能夠考慮換一家公司。
若是讓不一樣的人對程序員打標籤並排序,宅必定會排在前三。在任何的聚會上,程序員老是很容易被識別出來的:聰明、戴眼鏡、話很少、略顯悶騷、聊天容易冷場等等。也難怪,長期鑽研技術,沉浸在非黑即白的二進制世界,愛刨根問底,這樣很容易把天聊死。
我建議新手程序員能夠找一個編程以外的愛好,一來能夠拓展本身的社交圈,週末能夠有個不同的過法(而不是宅在家裏寫代碼);二來能夠幫助你成爲更好的程序員。
你確定有過這樣的經歷:一個編程問題一直困擾着你,試了好久都找不到解決方法,結果出去散了會兒步,或者和別人嘮家常,忽然腦海裏靈光一閃,想到了問題的答案。事實上,咱們大腦的工做方式就是如此奇妙,換一個徹底不一樣的上下文就可讓大腦獲得很好的休息,並且每每能夠產生1+1>2
的效果。寫代碼寫累了去聽聽音樂,或者打一會乒乓球就能夠很好的緩解疲勞,甚至能夠打開思路,產生新的靈感。
學習一項與編程無關的技能,好比:
這些看似絕不相干的愛好能夠幫助大腦休息。另外須要注意的是,你無需真正成爲某一項愛好的專家,不要有額外的壓力:擔憂演奏很差、沒有繪畫天賦等等。不要緊,它只是一個愛好而已。
軟件開發是一個須要終身學習的行業(其實若是你不想作那種混吃等死的人的話,基本上每一個行業都是這樣)。我畢業的時候,SSH
(Spring Struts Hibernate)是Web開發的主流,jQuery
則是前端的新銳。有一些企業開始嘗試Adobe
的ActionScript
,不過這個語言很快就消逝在了人們的視野中。基於jQUery
,可是融入了MVC
理念的Backbone.js
提供更高級的抽象能力,成爲了開發「大型」前端應用的首選;緊隨其後的,大而全的Angular.js
則經過內置的雙向綁定、依賴注入、完善的測試支持等讓前端開發變得和後端開發同樣健全;再後來虛擬DOM
,Reactive範式
的React
棧則又一次顛覆了前端的開發方式。雖然如今還不知道下一次的顛覆會在哪裏發生,可是能夠確定的是它必定會發生。
除了基礎框架以外,各類構建工具也是層出不窮,從最先和後端放在一塊兒的maven
,rake
,到基於NodeJS
的grunt
,再到gulp
,到webpack
,最後又迴歸到npm script
。
程序員被裹挾在技術演進的洪流中,不能自已。做爲程序員,你不但要很是紮實的掌握基礎知識(操做系統原理,計算機網絡,數據結構,算法等),還須要有很是強的快速學習能力,以及願意不斷去學習的態度,然後者可能更重要。
建議新手天天抽出一個小時來讀書,週末能夠多讀一些。ThoughtWorks有個讀書雷達,是一個很不錯的書單,包括了不少的經典書籍。讀書以外,還能夠在線學習一些教程,好比Tutorialplus和Egghead等,都很是值得常常去看看,若是有比較新鮮有趣的技術,不妨本身親自動手試一試。
絕不誇張的說,英文能力是優秀程序員和普通程序員的華麗分割線。有了好的英文能力,可供你學習的資料庫會馬上擴大數百甚至數千倍:海量的優質免費教程,視頻,和優秀的中文教程同樣,它們都深刻淺出,通俗易懂,風趣幽默,只不過中文的會比較少,並且通常老是會滯後於英文版本而已。
英文能力不但能夠幫你熟悉各類前端庫、CSS框架等的介紹。還可讓你學習世界各國程序員對各類庫的測評、框架的使用心得、踩過的坑等等。
我在2012年加入ThoughtWorks的時候,面試時磕磕絆絆的說不出話來。等到6個月試用期結束的時候,已經能夠出差去澳洲和客戶的OPs談笑風生了。2013年的8月,在印度普內,我已經能夠用英文給來自世界各國的學生講課。
除了更順暢的和不一樣文化的人交流、討論問題以外,能夠明顯感受到學習的速度變得更快,更有效率。
我本身實踐過的一個比較有效的方法。我天天會花兩個小時(遲早各一個小時)看澳洲之音上的視頻,我會聽寫出視頻中的每一句話,若是聽不清就重複,有的句子可能會重複十遍。聽到最後,視頻中的每句話我都能聽懂,並且能一邊聽一邊寫出來。這樣堅持了差很少3個月,我基本上就能夠聽懂客戶的需求澄清,開會的時候也能夠比較完整的聽明白每一個人討論的點。
其實訣竅就是堅持,這3個月中,天天兩個小時,我沒有一天間斷。過了這一關以後,就很容易了,儘可能多聽多說就好。
另外一個提升的方法是翻譯書,我更建議你跟另一個有經驗的同事一塊兒翻譯,你們互相監督,也有個照應,比較不容易半途而廢。
斯坦福大學的Carol Dweck教授經過一些實驗和後續的研究提出了頗有名的心智模型(Mindset)理論,簡而言之,她發現不一樣的人們對待失敗這件事有着徹底不一樣的態度:有一類人懼怕失敗,失敗後會變得不能接受,並且容易否認自身並影響進一步的嘗試,Dweck教授稱這類人爲固定型思惟模式(Fixed Mindset);而另外一類人則「喜歡」失敗,視失敗/犯錯爲學習的一種方式,他們更關注過程而不是結果,Dweck教授稱其爲成長型思惟模式(Growth Mindset)。
Dweck在演講中提到,經過向成長型思惟模式的轉變,關注從失敗/犯錯中學習,人們的潛力能夠獲得很好的發揮,也更容易得到理想的結果。
不少新人不敢嘗試,又不肯意讓同事知道本身的不足,這樣的態度會致使他更傾向於選擇更容易的工做,這樣就能夠避免暴露本身的不足,長此以往就會造成惡性循環。其實企業對於新人的指望通常都不會很高,對於新人犯錯也是有容忍度的,新人要敢於認可本身的不足,敢於嘗試新的事物,敢於犯錯並從中學習。
認可本身的不足在剛開始是一件很困難的事情,不過在嘗試過幾回以後,你就會發現其實也沒有那麼恐怖。你慢慢會喜歡那種不帶任何包袱的、全身心聚焦在學習自己上的快樂。
都梁在《血色浪漫》裏有段描述陝北農民的文字:
鍾躍民驚訝地發現,在如此貧困惡劣的生存狀態下,村民們卻不多愁眉苦臉, 他們始終很樂觀,他們最喜歡談論的話題是飲食男女。在飲食方面,因爲他們沒見過更好的食品,因此堅持認爲酸湯餃子和油潑辣子是天下最美味的食品,若是有人提出世上還有不少更好吃的東西,那你們會一致認爲此人太沒見過世面,這八成是沒吃過酸湯餃子,纔在這兒胡咧咧.
就像酸湯餃子並不是天下最美味的食品同樣,開發也不是世界上最牛逼的工做。任何一個良好的,健康的產品、項目都須要不一樣的角色共同配合,共同努力。若是僅僅將本身侷限在程序員這一角色,時間久了未免會有坐井觀天的狹隘。
做爲程序員,既能夠往上游去探索需求的梳理,用戶痛點的分析,業務價值的挖掘,又能夠向下遊如測試的編寫,產品的發佈,運維監控。視野開拓了,纔有可能對產品有總體的瞭解,也更容易在程序員這個角色上作的更好。
做爲新人,能在本身擅長的方面發揮長處固然很好,可是若是僅僅侷限在本身擅長的方面則未免太過單薄。若是你在前端很是有經驗,那麼除了將這些經驗和知識分享給別人以外,你還能夠向別的角色學習他們擅長的技能,好比向測試學習自動化、SBE等;向後端學習高性能,高可用服務器的技術、數據庫設計及優化、API設計等;向DevOps學習運維技能,自動化provision
技能等等。
這些不一樣的技術不但可讓你的視野更加開闊,也能夠爲本身之後嘗試不一樣的角色和機會打好基礎。以我本身爲例,我剛工做的時候是一個Java開發,後來開始作產品的前端開發。換了工做後又跑到Linux下用C寫服務。再後來加入ThoughtWorks後,正經職位是開發,不過在項目上還兼職過一段時間QA,在有些項目上,當UX不在場的時候還能夠作些簡單的設計,在技術社區當講師,還在一些客戶現場作過諮詢顧問。我本身以爲在不一樣的角色上切換很是有意思,我本身也很享受整個過程。
將一個創意、複雜概念或者想法簡潔而準確的描述出來是一個很是重要的能力。我見過太多的程序員都是沉默寡言,講東西聲音又小,又緊張,即便有很好的想法也難以完整的表述出來。
不過這個能力是能夠鍛鍊的,只須要藉助原型的製做就能夠了:
俗話說,一圖勝千言。你只須要學習一些簡單的繪畫技巧就能夠大大提升本身的表述能力。
經過用靜態頁面(HTML/CSS/JS),mock數據等方式,快速的將創意表達出來是程序員的一個優點,你能夠用靜態數據、數據文件等方式,經過一些簡單的代碼快速的做出能夠作交互的原型,而後經過和用戶不斷確認的方式來漸進加強,這種作法能夠避免太大的浪費,儘早的將客戶價值交付。
原型並不侷限在草圖,能夠工做的靜態頁面,還能夠是一個清晰簡潔的演講。基於PPT的原型還能夠用來分析目前產品痛點、對比方案的優劣、展現本身的見解等等。
紙上原型是另外一種低成本,可供快速交流溝通的原型方式:
關於程序員是否要求很快的手速是一個頗具爭議的話題。支持者認爲這屬於基本功,每一個程序員都應該打字都很快;反對者則認爲程序員的價值在於思考並解決問題,追求速度快,那還不如招個打字員。我我的的觀點是,好的程序員應該有很快的手速(包括打字的速度,但不侷限於此)。
我在ThoughtWorks西安辦公室組織過不少次提高手速的工做坊,好比三週三頁面,閃電計劃等。基本原則就是對一個具體的「做業」,不斷的重複練習。
最近帶兩個新人,我給他們佈置了一個簡單的做業:
圖片來源:dirbbble.com
基本要求是以最快的速度實現這個頁面,並有一點微小的交互(好比選擇聯繫人以後的checkbox會顯示選中狀態,剩餘invites的數量減小等)。第一次作他們用了5個多小時(連同搭建環境,安裝Node.js,npm包等),第二次用時2個半小時,第三次用時1個半小時,第四次用時50分鐘。
對同一個頁面的不斷練習聽起來是在作重複工做,其實能夠聯繫到不少的內容:
當你真的能夠熟極而流的時候,你纔有時間來考慮如何優化,好比如何抽取模板工程(這樣下次作一樣的事情就會快不少),如何精簡DOM結構,如何用命令行工具來幫助本身提速等。手速是大前提,沒有速度,一切優化都是腦海中的意淫,沒法真實落地。
要成爲一個厲害的程序員,首先固然是要有一個好的身體。此外須要培養一個編程以外的愛好,這樣可讓你活的像一個正常人(而不是傳統的工科書呆子)。程序員是一個須要不斷學習,不斷充實的職業,在學習的過程當中,英文能力能夠幫助你學的更快,更有效,另外正確的應對學習過程當中必然會犯的錯誤,並將每次錯誤都當成學習的機會。
開發只是軟件開發流程中的一環,程序員須要拓展本身的視野,和其餘角色一塊兒配合才能保證產品的交付。在平常的開發中,程序員還須要快速、準確的將本身的想法和創意表達出來。最後,更快速的完成手頭的工做可讓你有更多的時間來思考,來改進那些低效的工做方式。