計算機專業的學生怎樣練習編程才能把編程學精通啊?
1,先學C,
2,然後學基本的數據結構與演算法,鏈表、二叉樹、排序、Hash、紅黑樹,3,然後學彙編,基本能看懂gcc -S出來的彙編文件,4,然後學Linux環境下的C編程,參考書「Unix環境高階編程」、「Unix網路編程」,涉及進程管理、內存管理、文件系統、網路編程、Epoll非同步事件機制等,C語言、數據結構和演算法、OS,這三項的基礎知識學習就到此為止了,
5,學C++,不需要精通,也精通不了,會C With Class式的C++就行,了解OOP的思想,會用STL里的常用容器,
6,資料庫,會寫簡單的SQL語句,會簡單的安裝使用Mysql,
到這裡,整個編程的基礎知識就學完了,下面可以選方向了:
1,web前端,去學JS,HTML等,我不大了解前端,不多說,
2,Web後台,技術棧較多,C++、Java、Node JS、Go、Python,不同企業用的不一樣,看你自己愛好選一種語言,
但要懂OS和資料庫,資料庫一般要會Mysql和Redis,會一種該語言下的Web框架,
3,Android App,必須學Java,學Android開發的基礎知識,學JNI機制,找一本Android編程的書去學就好,
4,IOS,學OC、Swift等,我不大了解,不多說,
5,嵌入式,必須學習Linux內核,參考書「深入Linux內核架構」、「Linux設備驅動程序」,
最好對數字電路有一定了解,會用示波器,有利於和硬體工程師溝通,
6,流媒體音視頻,FFMPEG基本包含了所需的幾乎全部知識,要了解HTTP、HLS、RTMP、FLV、TS,H264、AAC,FFMPEG里都有,
最好會OpenGL,會NEON,
7,CV,會用OpenCV,了解CNN,會用Tensorflow,會Python,
參考書霍恩的「機器視覺」,Tensorflow的官方文檔,「神經網路原理」等,
最好懂NEON、CUDA,做性能優化時可能用到,
8,NLP,不大了解,但也要會用Tensorflow,參考書「離散時間語音信號處理」,
9,大數據,Hadoop、Scala等,不大了解,
10,遊戲編程,C++、OpenGL、U3D,cocos2D,
11,在一些大公司里,C++伺服器編程(視頻雲、CDN),或者本身就是搞通訊設備的(華為、中興),需要了解Linux內核的網路協議棧,了解Netfilter機制,小公司一般不搞這個,看到這個問題,我突然想起來,我還沒有給我行科班小萌新們認真寫過些東西。
事實上,我相信很多人對課程內容和實際應用和工作之間的鴻溝有疑惑。
你先記住一點。
如果所有專業課,你都是靠自己的能力,考及格的。那麼不需要擔心,基礎已經存在。
如果專業課,能考到較高的分數,那麼,將來成就較高的基礎,也已經打下了,這種情況下,你需要糾結的是「技術」,也即「實際編程能力」
肯定有些人在你身邊,課不上,一門心思「編程」,滿口「專業術語」的「大神」。
你不需要去跟這種類型。這是浪費時間。很簡單,在求學階段,你能理解的大神,都不是什麼大神。這就跟你在小學的時候,無法理解微積分一樣。
你需要掌握一門技術,之所以說是技術,並不說是語言,這是因為現代語言,並不是單單的一種黑框框編程而已。切記,ACM除非你拿他當做一個和入黨類似的求職砝碼,所謂演算法之類的自嗨,在我的角度看來,和玩幾盤海戰世界獲得的快感沒什麼區別。你是一個普通的計算機專業學生,你需要學的是實際的實用技術。
你可能會需要從如下的幾個方面中選擇一個:
B/S結構
桌面程序
嵌入式編程
當然,這其中,考慮到入門難度,技術獲取的難度和將來求職的B/S結構比較容易學通。
在學生的程度,所謂「把編程學精通」包含了兩層:
1,個人能夠將一個項目做成功
2,能夠解決其他人在類似的項目上遇到的問題
這其中,事實上item2更為鍛煉人。一般來說,你必須比對方強上一個等級,才能debug對方無法解決的問題。
那麼,為了達成1.你需要做的事情:
確定一個項目。一般來說,會確定學生最為了解的圖書管理,學籍管理。不過考慮到你出去求職的時候,區別於其他學生,我會建議你選擇更抓取面試官的項目,你要記住,作為學生,你的面試官基本上也只有1到3年技術,這個年紀的技術人員比較技術崇拜,所以你應該針對他們的胃口,選擇實現類似於博客系統,目前流行的AI系統,人機交互,圖形化數據展示這一類目前的流行。你不用怕,這和圖書管理系統沒什麼本質上的區別。B/S系統,就是數據提交,數據處理,數據存儲,數據展示而已。抓住核心,幾乎都是一樣的,只是具體處理有所不同。
okie,項目確定以後,你要做技術選型,目前來說,你其實是做不到的。無論如何都做不到,因為這幾乎需要5年工作經驗以上才能做完。這時候,你需要走捷徑,比如在知乎上提個問題,即使拋個錯誤的想法出來,也會在碰撞中得到更多信息。又或者去請教老師/學長。如果你有心,去英文論壇能獲得更多情報,你要了解,這個過程當中,過程更鍛煉你,結果事實上是次要的。
當你的技術選型確定了以後,你就知道,你要用什麼語言,什麼框架,分什麼層次,這之後就是編碼了。
編碼的時候,你需要記住,你的編碼過程會反覆很久,來回很多次,所以你要準備好集成開發環境,文件版本控制,比如自建一個SVN或者使用github,使用一個虛擬機或者docker進行部署。
這個過程不詳述了,完成了以後,基本上,你就是實際上同學之中的「大神」了。
之後,你已經有些底氣了,希望你開始幫助其他後進進行類似的處理,這個時間是你提高的良好機會,在解決幾個相關的項目以後,你應該已經真正準備好了。其實,到這個程度,一個班最多一兩個人,這時候你應該在大三下左右,其實應該是能夠在社會上尋找到一定量的實習了,是不會擔心offer的。
來給我做項目
編程學精通是很簡單的。
C語言的東西學完之後,換到所有語言。都是一樣的。。。變數定義與調用,賦值一走。順序結構,分支結構一走。自定義用戶類型一走。
編程你還要學什麼?精通啦。。。但是你學到頭了嗎?沒有,編程是編程,演算法是演算法,API是API。
三者有聯繫,又某種程度上是獨立的。最簡單的比喻,編程是腳,演算法是頭,API是智慧,腳的話會跑會跳會半蹲那就OK了,但是頭腦與智慧是可以不停的演化。按照我的理解,編程就是這麼個東西。如果題主覺得你問的和我答得有出入,也許你沒有表露清楚你追求的是什麼,如果你覺得我說的有點道理,那麼這個回答會對你產生一定的影響。我已經對這類問題麻木了,因為其實沒什麼捷徑,只要你動手了,用心思考了。總有一天你會明白,知乎上大部分人說的原來是這麼回事,總有一天你會明白,很多事情說出來是很難讓人明白,但是真正做到了,其實就是大家說的那樣。
這個回答我不想從正面回答你,反倒是希望賣個雞湯。說得多不如做得多。
另外:
高票答主已經回答的很不錯了,你需要怎麼樣的編程素養、需要怎麼樣的知識功底,我也不做補充了,這個回答裡面我只維護一個觀點:要學會鍛煉自己的思維!當然上面的回答可能不能直接看出我的論點,沒辦法,思維就是這樣的。它決定你如何思考問題,如何選擇解決問題的方案、價值觀如何。。。最終就會淪為哲學問題。。。。。當然最重要的是培養自己的興趣,腳踏實地,同時要學會批判,不要做一個只懂得接受知識的瓜皮,要知道世界上沒有絕對正確的東西。不要盲目相信什麼權威,大V也會出錯,一定要建立自己的認知。當然批判不是硬剛,記住謙遜。。。謝邀。我不敢說自己多精通編程,我認識很多牛人,他們編程真的厲害,我在他們身上學到了很多,也讓我認識到自己的很多不足。但是,開始我也很怵編程,後來才漸漸地找到學習方法的,我想把自己遇到的坑告訴一些新手,算是一些經驗吧。
首先,明確一下,編程語言就是一工具,語言是語言,演算法是演算法,同一種數據結構和演算法,基本任何語言都可以實現。語言是用來幹什麼的?就是用來和計算機打交道的,就像你跟美國人說話用英語,跟日本人說話用日語一樣,跟計算機說話需要用一種他能聽懂的語言。其實計算機只明白0-1位元組碼,也就是機器語言,但是這玩意太難了吧,人類哪記得住?於是就有了彙編語言,經過編譯可以變成機器語言,但是學過彙編的都知道,一條一條的指令,實在麻煩。所以才誕生的很多高級語言。高級語言非常接近我們的自然語言,所以我們可以很容易地使用它。就像我們平時接觸的VB,C/C++,Java,Python,C#,Scala,Pascal,Lisp,JavaScript,Swift……不勝枚舉,不同語言干不同的活,可以說各司其職,就像R用來數據分析,JavaScript用來寫前端,C用來寫嵌入式,Swift開發IOS,當然有的可以干好多事,像C#,C++,Python,Java這種,我們首先應該選擇一個方向,比如我們對哪一塊感興趣,然後再去進行語言的選擇。當然,入門無所謂,學C就可以,語言都是相通的,主要理解思想。
其次,一旦選擇好一個方向,比如Java,就要了解整個脈絡,了解這個體系。我覺得學什麼東西都應該有章法可循,成體系,知前後,懂因果,由淺入深,循序漸進。無體系地學習,就像沒有圖紙建房,東拼西湊,毫無章法可尋,只知皮毛,而首尾不能相接。我們應該知道整個前進的方向,亦或整個知識的體系架構,讓自己有章可循,不至於彷彿跌入茫茫大漠,無可辨向。比如第一步,我要學習基礎語法,什麼是變數,判斷,循環,常用數據結構。然後就是API了,我要學習怎麼和硬碟交互,文件IO,怎麼和網路交互,socket通信,怎麼用多線程多進程,怎麼用資料庫,怎麼用xml,怎麼發送http等等。接下來你要考慮我是走web這條路,還是去學Android,還是學大數據?比方確定web,你要學前端,html,css,js,學一些常用框架,jquery,bootstrap,Ajax交互。接下來學servlet,jsp,這是java自帶的伺服器編程組件,學完就能做網站了。但是企業還會用框架,所以學學spring boot,spring mvc,spring框架,mybatis,struts2什麼的,總之很多,像mvc學一兩種即可,orm也是,重在了解思想,這樣就大概了解了脈絡。
最後,一定要練習練習練習。學基礎的時候多敲代碼,做一些小例子,不要怕麻煩,常用API用熟練。以後多做項目,在做項目的過程中會學習很多。可以去github上面下載自己感興趣的代碼,看看別人怎麼寫的,照貓畫虎。還可以自己做一些小東西。做的多了,就要看源碼,多買一些比較深的書,像spring原理,Java並發編程,effective c++,設計模式,jvm虛擬機這樣的書去啃。
作為一個剛經歷過這麼多招聘的,拿過騰訊、阿里、華為offer的本科生,個人覺得每個人的學習之路是不同的,看到別人的回復,什麼C、彙編說實話我也沒學過,網路編程更沒有學過了…我不否認你說的這些適合你,適合一些大牛,但不一定每個人都要去搞linux內核,一個學生會用用linux就不錯了我覺得。
然後開始作為一個過來人回答一下你的問題:
1、先指出你的一個錯誤,你不可能精通編程,而且精通編程也沒啥用啊,精通編程只是編碼的一部分,但實際上工作還有很多編碼之外的事情,設計架構、解耦、框架的使用,這都是工作中的很常見的問題,編程只是你完成工作的一小部分,拿到需求直接做的那是傻…
2、計算機專業從就業來說,最關鍵的是基礎和技術深度,應屆生你能寫多少代碼量…你可能3年寫的沒有工作了一年寫得多,代碼量這個東西也沒有什麼意義,多學多練也只是對於初學者來說,最關鍵的是把自己的計算機基礎搞好,數據結構、計網、操作系統這些基礎課,是你需要好好學的,不要想著做項目,學生做的項目能有多大規模。
3、學習基礎的前提下,在一個方向有深入的學習和鑽研,比如你感興趣安卓(舉個例子),你說一本安卓書就夠了?遠遠不夠,框架的源碼、系統的一些機制、JVM等,需要了解的東西太多了,千萬不要覺得自己足夠了解,任何一個領域你研究個半年就會發現不會的實在是太多了,所以自己在這個方向有一定的深入理解是非常重要的,這是你技術深度的體現。
4、說到項目,就是結合3,做一些你足夠理解的東西,可能不大,但你一定要保證自己能夠吃透這個東西,自己做的東西了解的足夠深入即可。
我並不覺得你需要定下「精通編程」這樣的目標,不現實,在一個領域有一定的深度,鍛煉自己的快速學習能力和交流能力,搞好基礎,足夠應付目前的工作了。
最後歡迎關注公眾號「IT大學生」,itcollegestudent,來自BAT一線的應屆生們給你解答任何學習、招聘、面試的問題,還有獨家內推渠道~有任何學習上的問題快來問吧,師兄們很願意幫助大家!
所有硬技能都不是關鍵,而且無論怎樣你都會學的,精通編程的關鍵是你的思維模式。兩個建議可以參考:
- 不斷嘗試編程解決自己日常工作生活中的問題,不管問題大小,能解決多少算多少,關鍵是不要停止思考和實踐。
- 嘗試過程中不斷聯繫這樣的思考:這個問題很複雜,能分解成幾個較為簡單的問題嗎?這個解決辦法能抽象/泛化,以用來解決更一般性的問題嗎?
基礎課程里,最重要的是計算機系統和編程原理,前者推薦 CMU 的 CSAPP,後者推薦 MIT 的 SICP 或類似衍生課程。演算法和數據結構當然重要,但孤立地學沒意義,SICP 這樣的課程更系統和完整。
編程語言方面,第一點陣圖靈獎得主、ACM 主席 Alan Perlis 說過:」一門編程語言如果不能影響你的編程思維模式,就不值得去學。」 所以你需要深入學習一到三門主流通用語言,來確保自己理解面向對象、描述式、函數式等核心編程范型(paradigm),另外最好學會 JavaScript,不要笑,這能給你省大量麻煩。
其他的,在前面說的不斷嘗試中活用互聯網邊學邊用就好了。
有個好師傅會省很多事,但可遇不可求。
寫代碼就行了 我個人有個習慣,偶爾翻一下以前寫的代碼,然後心想:這都是啥玩意!重構..過段時間看代碼心想:這都是啥玩意?重構..
BS後端。Java。大三。二本院校。
1、先練習表達能力。能吧你遇到了但是解決不了的bug向別人以清晰的口吻表達清楚。特別特別重要。因為你無法想像別人聽到你描述一大堆的時候已經不想聽。只想看你代碼。因為他覺得你說半天不如吧代碼給他看。
2、先學會走。再學會跑。然後再跳。先熟悉語法。然後多寫案例分析。再寫項目練習業務邏輯。最後再談優化的東西。切莫張嘴閉嘴就是優化。我們學生能優化個啥?不要動不動我開多少線程。我怎麼怎麼的。其實自己連池這個概念都還不懂。路一步一步走。飯一口一口吃。
3。精通不可能。甚至熟悉語法大部分同學都沒有做到。能做的就是重複重複再重複。模仿別人代碼先看懂。然後敲。然後忘記了說明掌握不牢。那就繼續重複。不要懶。多想多敲多驗證。最重要的是多思考。因為計算機是人發明的。內部好多思想演算法和生活特別貼切。平時要多思考多留意。如果你發現你的老師有一天講的演算法或者思想你自己曾經一個人思考過。天。那種感覺真的特別特別棒。
4。學會用搜索工具。其實像我們初學者遇到的大部分問題幾乎中文環境的百度就可以搞定。或者知乎博客之類的。沒必要出了語法錯誤還去看官方文檔。如果搞不定再去谷歌。或者看官方文檔。
5。忍受視力的下降速度。學會調整狀態。還有不要焦急。認清自己的路踏踏實實一步一步走。不要焦慮。
6。用功讀書。要敢於質疑老師。但是還要尊敬老師。
其他的看樓上@蘿魏紫前輩的回答。前輩好不容易認真回答一次。特別貼切。多動手,多實踐,少打遊戲,多看教程
我聽過牛逼的巨佬(同學)每天最起碼都是拿出2~3個小時出來寫一些代碼,如今開始寫論文了
不是說寫代碼有多麼重要,而是說代碼作為一方面,提供了了解一些知識的路徑,比如通過代碼其實可以了解硬體方面的問題……尤其是 彙編語言的基礎理論
為什麼說,少打遊戲呢……計科系的人人帶電腦,就比較容易形成一種氛圍,比較容易墮落1. 選一門語言進行簡單的了解和學習,掌握計算機的基本知識。
2. 對操作系統的精確理解。3. 彙編語言的掌握。4. 全面的數據結構與演算法學習。以上是計算機的基本素養。要達到編程精通,光看是絕對不行的,必須通過各種作業或項目等等進行不斷的練習。編程又有多種多樣的任務,比如說,想對前端精通,那最好的方法就是自己寫一些網站,期間隨查隨學。活了這麼些年,我連漢語都不敢說精通,像java,c#,c,c++這種的,敢說精通的就先刷掉九成,其中不能做到說精通而不被噴的就又刷掉九成。現在居然有人問怎麼能精通編程。不是所有目標都有辦法實現的。
不是大神的玩法就是什麼可以做成一個項目就學什麼
個人覺得前置點得好是好,但學習能力要足夠。也就是,大三前隨便點,大4無論什麼也要上項目。轉專業的話,不要做核心代碼。什麼快上手上什麼,有錢賺再去學。這些都不重要,關鍵是多溝通,多寫開發文檔,多去學習新知識我要新人只看前二點,第三點不學大不了人工少點。高答那個級別例外。我覺得很多人沒有意識到編程語言也是一種語言,約定俗稱的規矩而已......
要精通,就得多看,多練。
許多事情都需要時間的歷練。
別瞎jb搞那麼複雜的,哪裡需要你寫代碼你就往死里寫,多寫多踩坑才是王道
當然,一般來說沒個幾十年是精通不了的。怎麼練習?多練習。。。
不都建議面試時不能說精通某種語言么……
熟能生巧,精通這事,你知道的越多越會覺得不可能精通。
先找個精通的人,別信這些高票,知乎氛圍並不好
推薦閱讀:
※為什麼ip地址會不夠用?
※計算機有哪些聯網方式?且其ip獲取方式是怎樣的?
※家裡親戚老人的銀行卡被用快捷支付盜刷三萬多,現在懷疑到我身上,該怎麼辦?
※區域網中ARP廣播,為什麼只有在ping通之後才能看到另外一台主機?
※求大神,網路出問題了,很詭異的問題?