棒棒團第六期分享 編程經驗,建議,思維分享
來自專欄前端組隊小夥伴
本次分享人Joe,剛剛群內分享完,大概兩個小時,很辛苦,謝謝兄弟。關於編程的經驗,以及建議,還有很多思想分享的陽叔本身就很受益,有一種豁然開朗的感覺,希望你讀了之後也有所收穫。
當然,如果想加入棒棒團歡迎加陽叔WX:erdaori
如果你希望以後能通過編程來養活自己和家人,你需要知道哪些東西?
以我自己當年的自學經歷來看,在剛開始的階段,一般來說所有的注意力都會放在「怎麼寫代碼」這件事情上。對未來的工作考慮的也比較少,也不知道以後我工作的時候會是一種怎樣的狀態,那我覺得我自己當時有一個比較好的習慣大家可以參考一下
我一般隔三差五會去一些招聘網站上看看,看那些我比較想去的公司的一些招聘要求,有哪些我能達到的,有哪些我達不到的。
那看多了以後其實會發現,一般這些招聘,對於職位的描述基本上都是xxx工程師,很少會寫xxx程序員的
為啥大多數都寫要xxx工程師,不是寫xxx程序員?
一開始我也這麼認為,我覺得工程師就是程序員一種比較裝逼的叫法
但其實在國外,軟體工程師,和一些機械工程師、建築師等等相關職業,定義是很類似的
工程師,是利用工程方法,解決實際問題的人
而xxx程序員,舉例來說,java程序員,是指會使用java進行編程的人
舉個例子來說,我現在開了一家公司,我招聘你進來對於我來說,我希望你為我做什麼事情?
,就是幫我來解決問題,理所當然的,他希望找那些能按著他想法,立馬幫他把他要的這個平台弄出來的人
以阿里巴巴早期為例,馬雲他是老闆,他有個想法,他想要做個電商平台
他去調研,分析了市場是如何如何,行業如何如何,好了,他現在很確定干這個很有前途,這時候他開始找人了,你猜他希望找到哪樣的人?
理所當然的,他希望找那些能按著他想法,立馬幫他把他要的這個平台弄出來的人
這個時候,比如像linus這種大牛(搞出Linux操作系統的人),牛逼不牛逼?但是一定不是馬雲需要的
現在阿里巴巴作為最大的電商平台,他所面對的是繼續領跑,並且也有資本有實力做一些前沿工作,這時候問題變了,要的人也變成了越牛逼越好了
初創的小公司很少會招一些拿著巨額工資做一些虛無縹緲研究的人,就是這個道理,不是那些人不牛逼,只是這個階段不需要
我繼續:推論 老闆要人幫他解決問題,工程師能夠幫他解決問題,所以他要工程師
你會發現,在小公司很多時候你什麼活都要干,不要以為你入職的時候寫了個前端工程師你就只是做做前端就OK了,你做的事情只和公司所面臨的問題有關,就是那麼簡單。
比如阿里,阿里希望自己能在技術上有影響力,希望定義行業的標準,那如果這時候你是很多開源框架的核心代碼貢獻者,在社區有很大的影響力,技術研究得很深,那你就是他真正想要的人(至少對於這個部門)
你得到的收入,一般和你的價值有關
所謂價值,我有個很簡單的公式 價值 = 單位價值 * 影響面積
單位價值可以從很多方面來分析,但其中一條就是,你解決的問題,距離金主(給你發錢的人)的根本問題越近,那價值就越高
根本問題可以一層一層分解,你所解決的問題離這個根本問題越近,你越有價值。極端一點,你如果能直接給老闆賺個一億兩億給他,你在他心裡就是爺了
那下面的時間是我大概總結的一些關於怎樣成為工程師的小建議
建議1「少提問題多搜索」
特指是你寫代碼的時候遇到你無法解決的具體問題時,最好能嘗試自己通過手段解決
你需要掌握的,更重要的是遇到問題的解法
建議2:學會提問
我在知乎經常收到各種私信提問,有些問題問得非常好,有些問題就顯得很無聊
首先對於回答問題的人來說,回答那種百度一搜就有結果的問題很浪費時間,也提不起興趣。
然後,問題層次反映了你在這個問題上的思考過程和思考結論
我以剛才群里的一些問題為例
「寫代碼的時候遇到一些問題自己要很多代碼,然而看到網上大神寫的特別簡潔,該如何提升 ?」 這個問題可以算是一個好問題
你把你的問題直接寫下來搜索,一般搜不到答案的,除非你的問題過於簡單
你需要做的一件事就是分解問題,把一個大問題分解成一個個相對簡單的小問題
拿小問題去搜索,如果還是搜不到,對於小問題繼續分解,直到你自己能解,或者你能直接搜索答案
給大家推薦的一種提高自己最快速的方法:系統分析
首先,這種方式是適用於那些合格的自學者,如果你無法堅持看書或者寫代碼或者做相關的事情,那可能你不適合干這行,世界上也不只有寫代碼會有前途
系統分析說起來簡單的,就是找一個你覺得很牛逼的代碼、項目,看他的代碼
但是看代碼,不是瞎看,我希望你每看一個系統之前,能先回答這幾個問題(我再知乎上其他答案里有說)
1. 你在看的系統是什麼系統
2. 這個系統解決了哪些問題
3. 別人為什麼要用這個系統
4. 它有哪些組成部分
5. 不同組成部分之間的關係是怎樣的
你們現在可以腦海里找一個自己覺得很牛逼的系統(最好開源),試圖回答一下上面這5個問題
如果你回答不了這5個問題,你可以:
1. 找一些書來看,例如java里的spring框架,講解spring的書要多少有多少,你先搞來看看再說,不過最好還是直接看官方文檔,書籍都有滯後性
2. 把那個框架或者系統實際用一用,深度地去用
如果對於一個系統你已經能輕鬆回答上面5個問題了,我建議你可以開始閱讀源碼了
閱讀源碼,要達到一個狀態就是:
當別人隨便拿出一塊代碼問你的時候,你能夠回答下面的問題
1. 這塊代碼是用來幹嘛的,對應了哪個功能
2. 為了實現這個功能,有更好的方法嗎?
3. 這塊代碼為什麼會出現再這個部分,合理嗎?
前面5個問題+後面這3個問題,我稱為是對系統的一輪深度分析,伴隨著你的職業生涯,你不斷重複這個過程,不斷積累,是你成長最為快速的一種方法
寫代碼的提高過程:
寫代碼的是分階段,最初的階段是學基礎,要懂某個編程語言的語法,基本的代碼結構,給你你要能看得懂
然後是學代碼設計,比如著名的設計模式、函數式編程思想等等
再往上是系統設計,就是需要積累相關經驗和閱歷,具體方式就是我剛剛說的系統分析
工具介紹:
我這裡給大家介紹一種工具,就是畫圖
畫圖要帶著目的性去畫,才能幫到你,否則就是裝飾品
首先,各位可以去了解一下思維導圖,這個對於做問題分解非常有幫助,無論是生活問題還是工作問題,我家裡裝修也用這個來理思路
第二個,是流程圖,這個大家應該很熟悉了。通過思維導圖把大問題分為小問題後,對於一個問題的具體解決方法,你可以畫個流程圖來對應上。一般來說流程圖你能畫得出來,那代碼你也能寫得出來了
第三個是系統架構圖,系統架構圖有各種類型,有興趣的可以去了解一下,最重要的目的是為了像別人介紹你的設計,你的產品
最後,我列一下我認為自學可能會有的幾個誤區
1. 對於書的態度。書是你學習的方式和工具,但不是學習本身。不要認為看書就是在學習了。看書的過程中總結出自己的理解,記下來,這才是學。看完後做習題或者進行實際操作,這個叫練
加在一起叫學習,缺一不可
2. 自我感動。自我感動最危險,舉例來說自己原來一天玩12個鐘頭遊戲,今天只玩8個鐘頭,4個鐘頭用來看書了,那覺得自己好棒棒,簡直辛苦得一筆,把自己想像成一個為了夢想不斷奮鬥的好青年
請清醒一點啊各位,努力的過程沒有意義啊,拿到結果才有意義啊,在拿到結果之前,你為了這件事所付出的所有東西沒有任何價值啊,拿到結果是對你努力的證明,不拿到結果就沒有證明,沒有感動的理由
3. 光看不練,這個我不多說了
4. 格局太小。我看到過有人照著博客做了個東西,然後不可一世,覺得自己很牛逼……學東西做東西,不是跟誰比,更重要的是讓自己有更多的收益,過自己想要的生活,抬頭做人,低頭做事,做好,做大,做到領域前列,這是真正應該追求的
5. 做作品而不是產品。希望各位能嚴格對待自己寫的每一行代碼吧
好了,我今天分享的內容就到這裡了,時間超了20分鐘,不好意思
推薦閱讀:
※Daguo的每周清單:第一期
※HTML5學習線路
※HTML5入門教程之HTML5新特性
※JSONP跨域
※js 圖片輪播