如何在編程路上走的更快,更有效率?
大一計算機專業一枚,進大學才接觸到編程,之前完全沒有基礎,現在大一快結束了,學了C語言和c++快完,在平時和網友討論時候就覺得跟別人差距很大,好多都是初中或者高中就接觸了的,有的大一或者中學就開始做項目,看他們討論一些自己聽不懂的話題就有點自卑了,感覺自己在這方面還比較有天賦吧,平時老師的加分題自己都可以做出來但是感覺這樣太慢了,快一年了到現在除了控制台程序就在沒碰過其他的,平時有接觸很多論壇,有問題也會積極問人或者百度,但是感覺自己沒有一個系統,有效率的學習計劃,自己好勝心又強,覺得自己能學好,希望過來人給點經驗
看見剛大一的小學弟這麼好學,我很樂意跟你分享下我的看法,希望能幫助理清關於編程的主幹和枝葉。
主幹:當然是指重要的,無論花多少時間都必須撐握,熟練的。枝葉:指一個細分領域,一些細節,有時間撐握最好,沒有也無防。在這之前,先說下基礎知識:現代操作系統(要熟悉linux),演算法與數據結構,ip網路通信原理,面向對象編程(熟練一門語言),資料庫原理和SQL,編譯器原理。這些是基礎,無論你以後從事哪個方向的開發,都必須要撐握的。而且每個都有非常優秀的教材,書單請自己搜索。學習方法比較自由,不用按順序一本接一本學習,可以交叉著學習。時間控制在1~1.5年內完成(即你大二結束)。=======編程不是一顆樹,它是一個樹林=======
主幹:基礎撐握之後,有很多領域都可以做為主幹來學習。簡單說幾個我知道的:cc++遊戲領域:包括window和android或者ios環境,還有linux遊戲服務端及引擎 。
Web領域:java的,php的,python的等等。web前端或者移動終端領域:基於瀏覽器的,android的或者ios的。
主幹就必須只選擇一個方向深入了,不能什麼都學。 每個領域都有大量的優秀項目和實踐。主幹學習主要以實踐為主,理論知識可以邊學邊用,一直到你畢業。
枝葉:每個主幹上都有很多細枝末節,不是完全沒用,但都可以在工作中,邊用邊學。說白了是拓展知識面。至於網上論壇上的一些討論,其中大部份是「裝逼」的,不用理會。想加入的話,你得先知道「術語」歸類到哪個主幹下才行。至於你說的命令行程序,或者UI界面,這些都是枝葉。=================題外話==================你現在才大一,學好基礎非常非常重要,沒事別去網上論壇上看「裝逼」。像我這個年紀,沒事裝下逼有時候還能了解點新鮮玩意,對你來說毫無用處。宏觀來說,系統的學習,有目的的學習比「亂」學效率要高很多。這是Web服務端(java)要了解或者撐握的一些基礎知識和領域知識,可以參考下。
收集一份程序員面試內容等上面這些都撐握了,你就知道怎麼裝逼了。題主你好,我也是計算機系大三的一名渣渣,有一點小心得,作為前車之鑒吧,說說給你聽。
1.差距很正常,你聽說過十倍效率程序員嘛,好的程序員要比一般的程序員效率高很多,這是因為他們從小就接受這種思維訓練,而且計算機是一門經驗科學,積累時間越長就越有效率。但是題主不要著急去趕超別人,一定要靜下心來慢慢起步。畢竟人家10幾年的先天經驗不是白搭的。不過我們慢慢來,也是可以成為一個很好的程序員的。2.一定要多自己編程。或許調bug的過程和程序思維的過程很痛苦,但是你每編好一個程序就會自己覺得進步了很多,而且有一定的積累效應。舉個例子,比如一個程序要求你讀取文件,進行一定的演算法再輸出。一個經常編程的人對於輸入輸出文件很熟悉,就會把精力投入到演算法上,而一個不經常寫程序的人還要好好查一下怎麼讀取文件,效率自然就低了。
3.學好一門語言。編程的過程中,學習的更多的是用嚴密簡單的邏輯規律觀察問題的方法,因此聲稱自己會很多種語言米有意義。一旦你精通一門語言,要學會另一門,也就是1.2天的事情。而且工作往往只需要你精通一門語言。
3.編好命令行,不要急著圖形界面編程。你或許覺得命令行離圖形界麵灰常遙遠,但是實際上,圖形界面啊,網路編程啊,都是有一些簡單的介面(就是人家已經著好的函數),你只要明白這些函數要實現的邏輯,簡單地調用一下就可以了,所以真正難的還是命令行的演算法編程。有了這個基礎,一切都好做。
4.要有耐心,善於管理程序。在後來的工程編程中,你常常需要和別人合作編寫一個大工程,這個時候工程管理就顯得很重要,而不是像以前一個程序,錯了就不停的瞎改,改忘了就推倒重來。一個龐大的工程一定要整潔乾淨,有清晰的備份機制。
5.認真學習面相對象編程。實際上是面相介面編程,面相需求編程。你先確定要實現什麼功能,有哪些函數,每一個函數要實現什麼,再仔細的想怎麼實現每一個函數。這種宏觀的思維灰常重要,而不是一個一個函數的實現,到最後不知道自己的程序要幹什麼~一點自己的心得,不當之處,萬望海涵,歡迎補充。
今天參觀京東看到的。。。其實有個英文原版的。。。
贊同 @nothing YX的答案。學習需要耐心,還有實踐與理論結合。理論是內功,練好了搞什麼都快。但是不能光磨刀不砍柴。學習理論是一項很枯燥而且見效慢的事情,需要長時間的積累。一味的鑽研理論很容易消磨人的耐心,容易引發挫折感。適當的找一些項目練手有助於消化學習的理論知識,同時給自己成就感,支持後續漫漫長路的學習之旅。
在項目選擇方面,不宜一開始選擇太難事情,把握不好會陷入學習的恐慌區,適得其反。最好是把難度控制在感覺有點難,又覺得可以做出來的程度。
學linux吧。你會發現在控制台(終端)里操作,其實逼格更高。
別信那些說要有耐心的 懶惰的裝飾不知道別人在說什麼 那就去弄懂 感興趣 那自己也搗鼓搗鼓折騰多了你就對整個技術領域有了更多了解 水平也視野也會提升〔只做過控制台那你不會自己主動的去學怎麼做UI么〕另外用谷歌是非常必要的 自學就得找得到資料
學習的效率跟學習方法,學習態度,還有跟智商有關!!高效率的學習可遇不可求。。
我也跟題主遇到過一樣的問題,我高中時小夥伴都開始寫遊戲了,用ui了。。。當時覺得好羨慕他們,現在看來其實沒什麼,一些表面東西而已(當然,需要的時候可以去學學,其實不難)。。。
後來,隨著我對cs了解的越來越多,知識面越來越廣,發現其實真正難學的是演算法和編程的基本功,所以,題主,別急!
你想學什麼就去學就是了,但是不要今天學這,明天學那。。那樣太坑了,我曾經有段時間經常這樣,結果那段時間基本沒什麼進步!
觸類旁通的學習,其實很多東西是相通的,也許當時不能理解的東西在你學會了別的東西之後你會發現你可以理解了,所以遇到不懂的東西,別急,記個小本本。以後你總會學會的。
不要去羨慕別人,你覺得很好的東西你直接去學就是了,沒什麼好羨慕的,他也是那樣學過來的!
學會高效率的尋找學習資源,說到這裡不得不順便多說兩句,學好英語真特么重要,還有學習的時候打死別用百度,找學習資料一定上google。。百度害人不淺。。真不是黑它,這是事實!!!
找一些牛人的博客,看看他們的境界和態度,從他們身上學習你認為值得學習的東西。。
還有,可以寫寫學習筆記什麼的,這樣可以讓自己的提高顯得有跡可尋,能給自己的學習添加一些動力。。
最後就是拓寬自己的知識面,我覺得只要與計算機相關的東西都應該去了解
總而言之,就是一句話:別急別急!慢慢來!願我們一起提高~!~由於是手機碼的,就不給鏈接引用什麼的了。思路很亂,感謝閱讀。
手機碼字好蛋疼,(逃、念你心誠,老朽特來指點一二:
別TMD用百度!永遠把英文搜索引擎、論壇、站點放在第一位。(請使用http://google.com搜索你要的技術資料,事半功倍說不上,至少不會耽誤你的青春,消磨你的鬥志。 百度以一己之力降低上網體驗,尤其是學習期的同學)
象看1024一樣看英文開源站點,一天看N次,全站翻個遍。
(如果你對開源站點全站都翻遍了,你就會知道這裡有什麼東西,你要的東西是哪個,你以後要用的東西是哪個。還有幾個你要當做高清經典,逐幀慢放,回放,直到在你腦子裡清晰完整。
http://github.com http://sf.net )
等你理解這兩句話的時候,捐款給我。不要因為怕走彎路而遲遲不出發,每次出發與彎路都是成長。但努力不走重樣的彎路。Learn programming the hard way.編程是一個低成本的活,多挖坑,但是一定要填。做什麼,都要知其然知其所以然。寫寫博客挺好的,文字與表達也是組織與抽象能力的鍛煉。
我的親身經歷告訴你,秘訣只有三個字………做兼職
多動腦子!多想!多思考! 多寫! 開發半年多,和我一同入職的其中一同事前段時間剛走,另一個同事因不滿意工資,同經理講不加工資閃人!但還是加的幅度不大,也還是辭了,有技術有能力就是資本啊!!所以還是好好學習技術把!! 審視自己,自知學的不好,還不夠格跳槽,所以目標爭取明年二三月份再跳,接下來的時間,用心補基礎,爭取多學點。=^_^=
本科不用太急。我覺得樓主能做到下面的幾點就很足夠了:
(1)保證四年本科期間所有的課程設計的代碼全部獨立完成,全部原創;
千萬別小看第(1)條,以後你會發現很多基礎都是在這些課程設計里夯實的,況且我敢說大學能做到這一點的不到5%。如果有餘力就自己把數據結構書上介紹的所有演算法和數據結構實現一遍。(2)如果有機會並且有平台,去有項目的老師那裡親身參與一個項目全部流程,如果能從課題中總結凝練出一篇paper更好。(3)去mooc、網易雲等網站可以看一些coding和實戰開發的課程,看看自己對前端、後端、移動開發等等哪個領域更感興趣,可以抱著玩玩的態度開發個app,搭建個小網站。(4)等演算法和數據結構學好了可以去刷刷ACM或者leetcode之類的。ps:對於大一的小孩兒,不要講那麼多專業的東西,奔著玩玩的目的玩玩就好。一旦有了專業的興趣和探索的渴望,就不需要在知乎上問這些問題了,說的太專業容易把小孩嚇到,對專業產生畏懼心理。小伙志,不要相信那些吹得天花亂墜的學習方法論,編程進階是沒有絲毫捷徑的,Learn xxx the hard way 勤動手、多思考,就是最好的方法!
好方法沒有 笨辦法有一個 那就是 寫寫寫~!
推薦閱讀:
※Ruby類型、內存調用的若干問題?
※這段c++代碼是移動操作嗎?
※私自將書中函數代碼編寫出來放到網上分享侵權嗎?
※如何評價《自由軟體世界裡的「版權勒索」》?