剛進入程式設計行業的小白對待技術應該是深度優先還是廣度優先?程墨Morgan2019-04-07 17:00:27

謝邀。

人類的語言都是容易產生誤解的,我用例項來說一下我對“深度優先”和“廣度優先”的理解吧。

假設,讓你開發一個網頁應用,你選擇用React,你開頭寫了一個顯示Hello World的效果,正要繼續實現超牛的網頁應用的時候,突然對React的工作原理產生了興趣,於是去讀React原始碼,讀了原始碼之後,感覺還不過癮,要自己實現一個XReact,實現完之後,感覺還不夠,對React原始碼中的語言特性又有興趣,進一步深挖這些技術特點……這是深度優先。

讓你開發一個網頁應用,你選擇用React,你開頭寫了一個顯示Hello World的效果,你感覺還行,但是你覺得其他庫或者框架可能更好,於是你又用Vue來寫了一個Hello World,你覺得更簡單,可是還不過癮,於是你又用Angular寫了一個hello world,你感覺爽多了,可是,你又搜尋到一個號稱超牛逼的框架叫做XReact,於是你繼續嘗試一下……這是廣度優先。

你覺得哪個更好?

反正我覺得兩個都走錯了路。

讓你開發一個網頁應用,你選擇用React,你感覺還行,但是你覺得其他庫或者框架可能更好,於是你又用Vue來寫了一個Hello World,你覺也更簡單,然後你抬頭看了一眼牆上的時鐘,已經過去幾個小時了,你今天必須要有一些進展,所以,你沒有再糾結,快速上網問了一下Reac和Vue的優缺點,然後覺得你的專案更適合用React(或者Vue),於是你就開足火力用這種庫去實現了,做著做著,你對React(或者Vue)怎麼實現這些功能很好奇,你忍不住要想要去看原始碼,但是你沒時間了,而且你知道看原始碼並不能提高你的效率,所以,你繼續工作,在下班之前,你終於做出了一個可以展示的原型。

我覺得,這才是正確的方法。

剛進入程式設計行業的小白對待技術應該是深度優先還是廣度優先?馬遙2019-04-08 16:49:10

題主已經進入了程式設計行業,就是同行啦。以同行的角度來說,有一些實際的建議。

1、熱心投身工作,不斷最佳化工作質量

學習新知識、掌握新技能對於程式設計師來說很重要,甚至很多人都是靠自學入行的,所以會特別看重“自己的技術高不高”這一點。

這個看法本身絕對沒錯,IT行業就是要不斷學習。但是另一方面,要以實際的工作為中心,正確面對學習和工作的關係。

許多人因為對技術抱有狂熱或者說迷信,沒有花足夠的精力在“更好的完成工作,提高工作質量”這一面,最後反而會影響發展,進而影響個人的職業生涯。

人的時間和精力總是有限的,最好的學習方式,應該是以現實的工作內容為中心,盡全力提高工作成果的質量。而且如果處理得當,把工作做好和個人成長是一致的。

把工作做好是公司每個人的大目標,把自己的工作做得出色,自然會贏得別人的好感和尊重。

大型專案參與者眾多,所以非常講究溝通協作。如果能以大局為重,而不單純執著於技術,可以更好的和別人協作,為發展鋪平道路。

工作中經常會有各種挑戰,特別是對新人來說“圓滿完成工作任務”已經相當有挑戰了。如果你覺得天縱英才,可以嘗試挑戰“超標準完成工作”:)。

隨著個人在工作中的成長,你逐漸會被委以更重要、更困難的工作,那時繼續進步的道路就更顯而易見了。

2、怎麼理解深度和廣度?

實際上,如果與學術研究(數學、物理學等等)相比的話,其實所有我們看到的實用軟體技術,都不是特別深。特別深奧的知識體系會導致很高的知識壁壘,比如數學家會花畢生精力鑽研一兩個問題,換一個研究方向可能要花費幾年時間。

而軟體開發技術雖然也分方向、分領域,但還遠遠沒到那種程度。對一個優秀的程式設計師來說,熟悉和掌握3~5門語言,並用它們來做不同領域的開發,並不是多麼困難。就算有點難度,也比同時學習英語和日語要簡單的多。

在我看來,至少在今天,對優秀程式設計師的要求還是要“一專多能”。比如一個高階的遊戲客戶端開發者,對伺服器也要相當瞭解;一個資深遊戲伺服器開發者,開發Web伺服器也沒什麼問題;專門做AI的開發者,也會精通Python程式設計。

所以現代大部分軟體開發者僅掌握一種技術幾乎是不可能的,“廣度”是一種客觀要求。

而且,“廣度”本身也是一種“深度”。這一點我個人體會很深。簡單來說,在你苦學C++多年的時候,用一用Python、Java可能會讓你茅塞頓開;反過來,只會寫Python的人也應該在遇到瓶頸的時候學一學C/C++,會讓你醍醐灌頂。

3、只要保持進步,自然能走上更高的平臺,看到更多東西

綜上所述,其實無論你一開始是以“深度”還是“廣度”為出發點,只要你每天保持進步,花費一定的時間在自我提高上,自然就能很快進步。

所以完全可以根據工作需要選擇、根據個人興趣選擇學習的方向,不用考慮太多“深度”還是“廣度”的問題。

最後,還是想強調,做好本職工作、提高工作質量還是最重要的,也是一條成長的捷徑。 :)

剛進入程式設計行業的小白對待技術應該是深度優先還是廣度優先?李東bbsky2019-04-09 04:35:29

以深度來帶動廣度,和以廣度帶動深度,是兩個截然不同的方式,推薦前者以深度優先。

作為初學者,你首先就要確定一個職業方向,比如前端、後端Java、PHP還是C等等,然後圍繞可以做出具體專案來拓寬廣度,比如你會為了部署專案接觸伺服器,最佳化網站去接觸效能,資料庫、框架、工作流等也是專案的必要組成部分,一切的學習都圍繞具體的專案而來,根據不同的專案需求來拓寬技術選型必備的知識。

而如果你是以廣度優先,又是學演算法,又是去接觸安全知識,又是學C,又是學Java,又是感興趣學Python,甚至玩起圖形影象,折騰起網路開發,這些不是不重要,而是學技術唯一的目的就是做出專案。

專案是程式設計唯一的核心、宗旨。深度優先最符合這個宗旨,最緊扣這個核心。而廣度優先很容易讓自己淪為技術學習愛好者,遲遲出不了完整專案。

剛進入程式設計行業的小白對待技術應該是深度優先還是廣度優先?知乎使用者2019-04-09 10:21:02

還記得我剛入行時,我的前端leader告訴我,一個程式設計師健康的發展路線是一精多專,有一個自己深入研究的方向,確保自己有飯吃,有公司要,在這個方向上有絕對的競爭力,這是立身之本。

其次,才應該是向廣度擴散,擴大知識面,上探自己在職場的更多可能性。

這個路線就像,你是一棵樹,首先要向下紮根,根鬚扎的泥土越深,汲取的養料越充分,你就越牢固,即使有狂風暴雨,也不足以摧毀你。然後,靜等春風吹拂,你就可以開枝散葉,去觸探更廣闊的天空。

廣度優先的後果是,雖然你懂得多,但是哪個方向你都不能獨當一面,時間一久,容易站不住腳。

所以,優先順序,應該先深度挖掘,再向廣度擴散。

我是碼農土哥,祝你好運。如果想了解更多碼農新人入行建議,歡迎關注我的公眾號:閏土大叔。

剛進入程式設計行業的小白對待技術應該是深度優先還是廣度優先?力扣(LeetCode)2019-05-15 12:19:33

先說說在力扣君的心裡,廣度優先搜尋和深度優先搜尋在程式裡對應的不同情況。

廣度優先搜尋

例如,寫一個專案需要懂得 ABC 幾點,那我們可以先把 ABC 都瞭解一點,然後再把 ABC 都往下推進一點,慢慢推進到 ABC 的盡頭(吃透)。這種做法的好處是,可以在接觸每一個知識點的同時知道專案的可行性,你在學習每一個部分的第一輪,就知道這個技術你能否掌握、這個技術你能否應用在這個對應的場景。就比如你寫一個學校作業,舉個例子,bookstore,要求寫個賣書網站。你可以把整個框架搭起來,這裡是首頁、這是服務端,先讓程式有個基礎的框架,能執行起來,然後再一步步細化完善各方面。

深度優先搜尋

1、語言的學習

如果我們討論的是以語言作為單元的學習的話我認為毫無疑問應該是按照深度優先搜尋來的,即學會一門語言到能應用的地步再去學習下一門語言。首先,無論是在學會一門語言之前去學習另一門語言,還是同時入門多個語言都會出現各種各樣的問題,小到語法混淆,大到特性記差。這種做法往往會導致沒有一門語言能完成應用級的書寫。而如果學好一門語言,吃透了再去學下一門語言,就會理解不同的語言的區別,學得更加快速。

2、專案的開發

如果是一個多人合作開發的專案,往往會每個人負責一個模組,比如寫一個遊戲,有人寫UI,有人寫服務端,諸如此類。

如果你是這個專案中的一員,那大體就是按模組寫,把這個模組從上到下,寫完了吃透了,再開始寫下個模組,也有好處,思路不容易混亂是其一,另外還可以在完成一個模組後迅速對另一個模組開始測試也是一個優點,這樣更適合更多的合作開發場景。

結論大概是,如果是學習語言,毫無疑問是深度優先,吃透一門再學一門。

如果是選擇一個對應的專案,獨立開發學習為主的,可能廣度更好;多人合作快速迭代的,可能深度更好。