1. 程式人生 > 實用技巧 >計算機學院的學生該怎樣提高自己的程式設計能力?

計算機學院的學生該怎樣提高自己的程式設計能力?

連結:https://www.zhihu.com/question/423764018

編輯:深度學習與計算機視覺

宣告:僅做學術分享,侵刪

感覺國內的大學計算機專業本科教授的都是基礎概念類的知識,實踐課反而沒幾個學時,那麼該如何提高自己的程式設計能力呢?有什麼專業書籍或者網課培訓可以推薦嗎?

你有這方面的疑惑麼?

作者:沈世鈞
https://www.zhihu.com/question/423764018/answer/1514275200

要想坦誠的回答這個問題,首先我們必須面對以下事實:

1. 絕大多數計算機專業學生不會成為科研者,而是普通開發人員,就是所謂的“碼農”。

2. 絕大數企業,沒有耐心,也沒有財力去從頭培養一個“眼高手低”的畢業生。從一開始,他們需要的就是一個“開箱即用”的求職者。

3. 計算機畢業生,直接能進入大廠的是少數,絕大多數人都得從中小廠家幹起。

所以,對絕大多數計算機畢業生來說,如果想逃離“畢業即失業”的命運,在大學的時候就一定要千方百計的提高自己的動手(程式設計)能力,眼高手低是個致命的缺陷。

同時,還要清醒的認識一個現實,我們現在很多大學的計算機課程設計就是偏理論、偏基礎。在學校,按部就班的學習,無論你的紙面成績如何,都不能直接證明你的動手能力。

大學的老師,因為職業定位的不同,科研能力可能很出色,但軟體工程能力就不一定了。

因此,學生想要提高自己的程式設計能力,自學是最主要的途徑。

程式設計本身並不難,難在內容太龐雜,無論是市面的課程,還是圖書,其中都混雜了太多“無用”的東西。因此,自學程式設計的成敗就在於在有限的時間裡,學到真正有用的東西。而關於什麼是有用的東西,長期沉浸在一線的開發人員是最有發言權的。

所以,對計算機專業的學生來說,在自學程式設計技巧之前,首先要有獲得一個明確的學習綱要,從而把有限的時間用在最關鍵的事情上。

如果是學習Java,可以參考我的一些回答:

沈世鈞:Java學習路線圖https://zhuanlan.zhihu.com/p/84032726

如何快速打好Java基礎?https://www.zhihu.com/question/50904128/answer/521519858

目前 Java 後端有哪些不是很有必要去學的?https://www.zhihu.com/question/305924723/answer/557800752

學習 Java ,知識點太多記不住怎麼辦?https://www.zhihu.com/question/270722275/answer/1488832343

如果是其他領域(例如前端),請努力去認識一個一線的開發人員,從而獲得一個目標明確的學習綱要。

在縮小了學習範圍之後,就涉及到如何學習的問題,下面是能想到的關鍵點:

1.基礎知識學習

在學習基礎語法的過程中,一開始有不明白、記不住的內容不要緊,這是必然的。要想真正理解一門語言,只能在實踐中才可能,這個實踐就包括框架的學習。

所以,對基礎知識的學習,不要糾結,不要戀戰,快速的過一遍,大概理解即可,然後快速的進入實際框架的學習中。只有在這個階段,通過兩者的磋磨,相互啟發,從而才能真正掌握一門語言。

2.學習筆記 & Demo

在自學程式設計的過程中,一定要記學習筆記,一定要收集Demo。

這是因為自學是孤獨的,沒有實際工程的相伴,遺忘如影相隨。學習筆記和Demo不僅是和遺忘作鬥爭的利器,同時也是一種自我對話,自我激勵。

同時,程式設計師的工作,在很大程度上就是“複製貼上”的過程,而一個整理有序的學習筆記和demo,就是一個“複製貼上”的寶庫。

最後,等你學成畢業要去面試的時候,學習筆記也是你的面試複習考庫,而且還是量身定製的寶庫。

3.實踐

程式設計是一門實踐的學科,參與一個完整的專案是必不可少的,但因為學生的原因,接觸一個真正的專案機會極少。但是,沒有關係,自己設定一個“虛擬”的專案,把產品經理、架構師、程式設計師集於一身,是一個非常“刺激”,也極具價值的體驗。

“虛擬”專案有兩種,一種是自己想出來的,例如“學生管理系統”、“圖書管理系統”等各種管理系統。這種專案的特點是規整全面,範圍可控,缺點是需求和設計都是自己想出來的,不那麼實際。

另一種是參照市面上已有的應用,“照葫蘆畫瓢”模仿一個。這種專案的優點是非常接地氣,缺點是一個真正的商業專案,往往非常複雜,因此非常考研學生的時間和心性。

但無論如何,以我的經驗,上面的做法確實可以解決程式設計實踐的問題。

其實,上面的三點,不僅是對一個學生有用,作為一名職業程式設計師,一個需要終身學習的職業,上面的三點一直陪伴我從學生時代直到今天。

最後,我想說的是,程式設計並不難,也存在明確的學習路徑,堅持一定能成功,真所謂:心有所執,必有所成

作者:IT人劉俊明
https://www.zhihu.com/question/423764018/answer/1518288891

作為一名計算機專業的科研教育工作者,我來回答一下這個問題。

首先,計算機相關專業的本科教育確實比較重視基礎課程和理論知識,一方面本科教育要為行業領域培養應用型人才,另一方面還需要為培養高階人才(研究生)奠定基礎,而基礎課程和理論學習還是比較重要的,所以不少大學,尤其是重點大學在本科階段都更重視理論基礎。

當前隨著產業領域對於應用型人才的要求,越來越重視動手實踐能力,所以大量普通本科高校正在不斷提升實踐課程的授課比例,這也是一個大的發展趨勢,所以未來普通大學的本科生會有更多的實踐課程,計算機相關專業的同學,也會有更多的機會來提升程式設計能力。

對於計算機專業的本科生來說,如果想提升自己的程式設計能力,可以重點考慮以下幾種方式:

第一:積極參加專業比賽。以賽促學是比較好的學習方式,計算機專業的本科生可以重點關注一些程式設計類比賽,包括其他需要程式設計的專業類比賽,包括大資料比賽、機器人比賽等等,通過參加這些比賽都會促進自身程式設計能力的提升。

第二:參加老師的課題組。參加老師的課題組也是一個提升程式設計能力的好方式,而且在課題組當中還有更多機會與研究生學長交流學習,從而提升自身的程式設計實踐能力。當前不少大學的計算機專業都會設立很多專業的實驗室,這些實驗室往往也有很多大型網際網路(科技)公司的支援,參加這些實驗室也是不錯的選擇。

第三:制定自主學習計劃。提升程式設計能力除了可以參加專業比賽和課題組之外,還可以通過自主學習來提升,比如可以藉助於網際網路參與到一些科研實踐活動中,或者是參與到一些開源專案中。

作者:劉一非
https://www.zhihu.com/question/423764018/answer/1518198537

多年的技術管理工作,使我明白一個真理。

能反映計算機學生的,是你的價格,即單位給你的工資。

而給你的工資高低,取決於稀缺程度,即這個崗位是否能招到足夠的人,以及公司對其的需求程度。

這兩年什麼最熱,毫不猶豫地說就是人工智慧,前一段時間基於人工智慧的智慧客戶推送技術,已經上了國家進出口限制目錄。

那你有什麼理由不選擇,不學習這個領域呢。

那好,我建議你從人工智慧領域突破,你還可以選擇三個熱門方向:

1)基於影象識別的人工智慧演算法。

2)基於語音的人工智慧演算法。

3)基於智慧推送的人工智慧演算法。

相對來說,前面兩項較為難學,但是競爭對手少,基於智慧推送的人工智慧演算法目前是大熱門,很多公司用得上,但也意味著它們會很快飽和。

所以我還是建議你學習基於影象的深度學習。

本著這樣一個目標,你的首選語言應該是phython,然後首選的模型應該是TensorFlow或其它。

如果你還找不到方向,建議你去阿里,或者全球最大的人工智慧競賽網站找幾個課題,蒐集一些樣本。

然後你就可以開車了!

恭喜你,你正走在一個優秀的調包調參工程師的路上。

作者:資料控
https://www.zhihu.com/question/423764018/answer/1516636587

想要提高程式設計能力,最重要的當然是:敲程式碼!敲程式碼!!敲程式碼!!!重要的話說三遍!!!

“程式設計是門手藝活”。什麼意思?得練。程式碼的世界很純粹:你行就行,不行就不行。不像其他一些職業,說你行你就行不行也行,說不行就不行行也不行。要想爬的高,整日裡就得琢磨怎麼“混”,是沒有什麼效果的。這一行,就不怎麼需要看簡歷,“行家一出手,就知有沒有”,三言兩語,就把你底子給摸清楚了。

開始學程式設計,選一個能夠迅速給予你“正反饋”的語言,先把環境搭起來,“Hello World”打出來,這就是第一步。這極其簡單的第一步,對於很多同學可能都覺得非常難,但是沒有辦法,你只有一步一個腳印地做出一個小網頁小遊戲,哪怕你還看不懂程式碼,都是一個字一個字照著書上敲的都可以,這樣才能使實際操作中不知不覺地掌握程式設計能力。也許你還會在某一天突然發現自己的程式設計能力原來有了這麼大的提升。


作者:青雲若水
https://www.zhihu.com/question/423764018/answer/1509150977

你的這個程式設計能力其實應該理解為產品能力或者工程能力,嚴格來說你的專業叫電腦科學,培養目的是為了培養出電腦科學家,而不是培養出軟體工程師或者說碼農。

當然,電腦科學家只是千里挑一,老老實實當碼農賺錢才是我們大部分人的目標。所很多時候怎麼學習怎麼提升還是看你自己怎麼想的,如果是想做出東西的話,一開始的話我建議你多動腦,嘗試下能不能對現實世界建個模,比如看到查字典的時候自然就會想到二分搜尋,看到紅綠燈就想到執行緒鎖啊等等。

接下來讀一些產品方面的書,要學會換位思考,尤其要能通過問題想清目標使用者,能夠把技術和商業結合。接下來就是研究一下現實世界裡面哪裡有缺陷,就可以自己做一個產品出來了,也許機會合適就可以走上人生巔峰。

不過這條路和去大廠當螺絲釘是有區別的,如果目標是去bat拿高薪的話最好還是做一個典型的學生,就是刷爆acm和演算法,然後網上用spring抄一個電商app,不需要idea只需要實現即可。

作者:貓吃葡萄
https://www.zhihu.com/question/423764018/answer/1509410433

如果學校同時開設了電腦科學和軟體工程兩種專業,那一般前者側重的會是計算機系統、作業系統這樣的“枯燥”概念知識,後者更側重實戰開發。

想提升實戰程式設計能力,如果你自學能力較強,可以找自己喜歡或與將來就業方向相關的主題,設計一個應用,然後不遺餘力實現它;如果自學能力一般,可以找本書,書名例如《xxx軟體實戰》、《30天實現xxx》,基本上相當於跟著教程走,開發一個完整軟體,也會有很大幫助。

建議專業課還是好好學,有些知識現在覺得沒實戰有趣,將來反而會在找工作時助力,比如演算法資料結構,大公司筆試基本都要過這一關。

逢人便推《深入理解計算機系統》,名字有些誤導,其實並不“深入”的難哈哈,英文是“Computer Systems: A Programmer's Perspective”,至今覺得它是我碼農路上最珍視的書。

作者:不覺
https://www.zhihu.com/question/423764018/answer/1519048689

其實大多數寫的還不錯的,我是被一個直接拉框架的回答引進來的,恕我直言,這就是培訓班學法,弟弟學法。

你首先要清楚一點,你提高水平為了什麼?考研然後做科研?還是找工作?

我直接說找工作的吧,那你就需要知道,一個公司的hr為啥選你簡歷,你以後的小組長為什麼選你。不是因為你會調個框架API,是個培訓班三個月出來的都會,你大學四年,比其他人強在哪兒,強多少才是關鍵。

現在卷那麼嚴重,說真的,框架api就是弟弟。

簡單說,你學你要有一個方向,去做web,就js,node之類的,安卓就java,IOS就oc.swift,遊戲就搞ue4,弄c++。

定好方向,先學好語法,其實這些東西,花一兩個月,看視訊或者看書,學學調api培養一下興趣可以的。

之後呢?這個語言的語法,資料結構,編譯過程,看下去,然後相應語言的彙編,去學,x86的,還是AT&T的,深下去,弄懂這個語言,這個編譯器,這塊記憶體,其實弄到這裡計算機組成,作業系統,還有編譯原理,你就可以融匯了。

再去刷演算法,不管什麼面向物件,面相協議,還是函式式,去用你學會的語言做好,知道套路,學會那些啥動態規劃,啥二分法。

然後補上計網,一樣,深下去,弄清楚他的過程和原理。

然後去錘面試官。

教科書只是計算機教育的入門,況且學校那48,68學時的課也只是帶你入門。

選好方向,自己深下去,底層打好了,才有所謂的上層建築,無論什麼,都是如此。

作者:seeing seeing
https://www.zhihu.com/question/423764018/answer/1514371340

多動手。

1.基礎概念還是要掌握的,該記的還得記,不然別人說出一個專業名詞出來你一臉懵,別人會質疑你的專業性。

2.看基礎教程的時候一般都會有示例程式碼,不能只限於看,看完後你把書合上,自己在ide裡面看看能不能把它敲出來並且執行通過,平常多和人交流溝通。剛開始的時候可能會花一點時間,但時間久了你的程式設計熟練度會提升許多,再往後你可能就只敲核心的示例程式碼而不是全部程式碼了。

3.敲程式碼過程中難免會涉及到部分經典演算法,這時候就要細品了,許多演算法都是對經典演算法的改造和完善。

4.待完成基礎學習後,可以看看網上的開原始碼,要看完整的工程程式碼,學習他們程式碼中的設計技巧等並且檢測一下自己還有哪些方面有所欠缺。

5.自己動手做一個小專案,從0開始最能鍛鍊人,也很考驗人。

現在網上資料有很多,爬坑的經驗總結也不少,要在不斷的動手實踐中形成適用於自己的一套方法。

作者:老紀聊數碼
https://www.zhihu.com/question/423764018/answer/1513235121

實際工作更像是近身戰,建議輕理論、重實操。放下書本,多去上機。實操範圍要廣,切勿侷限於所學科目(你跟甲方說,非常抱歉,這個專案涉及的技術不在我大學課程範圍裡?)。

你可以按照“支乎”的選單和功能,自己做個網頁版、app版。

要求考慮頁面互動體驗設計、資料庫、併發、快取、佇列、叢集與負載均衡、彈性伸縮、微服務、容錯等問題,多給自己安排一些難題。遇到某個問題時,去圖書館查書或上網自行解決。

研究並解決問題”是自學程式設計的捷徑。實際工作中,客戶負責提出模糊的需求、緊張的工期,剩下都要你的team按時、保質保量的解決問題、完成專案。

此外,華為開發者聯盟、阿里雲等網站,有很多課程,都挺實用的。

☆ END ☆

如果看到這裡,說明你喜歡這篇文章,請轉發、點贊。微信搜尋「uncle_pn」,歡迎新增小編微信「 mthler」,每日朋友圈更新一篇高質量博文。

掃描二維碼新增小編↓