因為我知道我只是學了語法,想進一步擴展自己的技術,我應該怎麼辦?


多做些練習就好了。或者開發者常見的簡單功能的微型小型程序。


正常的話,都會推薦你學《數據結構》和《演算法》。

按照個人實踐和師兄弟的一些反饋,數據結構中圖的應用相對較少,鏈表、隊列、二叉樹的應用非常多,比如一個遊戲有包裹,包裹要用到鏈表,許多非同步處理機制需要用到隊列,二叉樹的應用在資料庫、索引、壓縮等廣泛。演算法的應用就更不用說了,不過一般業務邏輯需要用到的演算法就很少。

對於《C指針與陷阱》和《C專家編程》,我有這兩本書,但沒翻過,該踩的坑都踩過了。

搞明白了數據結構,一般都會去寫個小遊戲或者管理系統什麼的,不過我不是科班出來的,像貪吃蛇、五子棋之類的小遊戲,圖書管理系統或者學生管理系統,都沒搞過。

更高級一些的就是去折騰開源項目,不過一般的開源項目,沒有很深的積累,折騰起來要死要活的,因為前置知識太多,比如http伺服器,它的前置是socket編程+tcp/ip協議,主要是tcp和http,還有一些坑,比如同步和非同步,啥叫阻塞,初學了C就直接去折騰這些肯定被實力勸退,但要真折騰下來了,收穫肯定是比折騰小遊戲或者管理系統來得多,需要花的精力和時間也更多。

這一步是必須的,課程下來的,只會讓你學會如何使用水泥、磚頭、鋼筋,但這些不足以讓你學會建房子,搞個小遊戲或者折騰開源項目,就是讓你把這些技能和知識統籌起來。為以後的編程建立一個模板,這個模板對後續的編程影響挺大的,編程風格、注釋風格、變數命名習慣等等,所以盡量選擇一個標準的項目來折騰。

這一步還有另一個意義,就是錨定你在計算機領域的一個點,比如http伺服器,你搞通了這個,就等於你具備了socket編程、http協議,無論以後你往伺服器編程,還是去搞前端,都很有優勢,就好比你從機關單位出來去創業,跟政府打交道的活,你就倍輕鬆,因為你對於機關內部的運作很熟悉。

錨的點越多,比如你伺服器這塊會搞,彙編你會搞,硬體會搞,電路你也會,這時在計算機領域中出來一個新技術,比如python、比如機器學習,搞起來就很快上手了,一般大佬學個python語言、java什麼的,都是花個三五分鐘看下資料就入門,花個三五天看看常式就上手了。

其實,按照譚C出身的話,我比較建議先去浙大翁愷老師那過一遍,畢竟對於頭文件怎麼編寫,預處理怎麼寫,如何拆分多個C文件,或者學學如何建立工程,像我這種懶得建工程的,都是用include把多個C文件包含進來的野路子,在生產環境會被打死的。很多剛學會c的,往main函數里寫個幾百上千行代碼,這種在生產環境也是會被打死的。

看自己折騰的第一個項目,都積累了哪些知識,然後再往其他的點上搞一下:

1.文件操作,這個毫無疑問是必備的,寫log或者讀參數、回寫等等,像遊戲的存檔就需要文件操作,一般搞管理系統起步的同學就具備了這個技能。

2.socket編程,除非以後只搞前端或者不聯網的程序,不然都會接觸到socket編程,在windows下用的是winsocket,通信流程跟linux下是一樣的,但是初始的代碼和庫的位置不一樣,並且linux下的select,winsocket好像不支持。

3.圖形界面編程,要跳出黑框控制台,肯定要搞圖形界面,這個又分好幾種方向,看個人喜好了。

之後就是考慮自己要往哪個方向上走了,往圖形,比如遊戲之類的,可能就要轉C++、JAVA,國內主流,幾乎沒有說用C來寫PC遊戲的廠,如果用遊戲引擎,就要用C#之類的了。

如果往嵌入式上走,就要搞操作系統原理和數電模電、彙編,這些技能就不是必備前置了,嵌入式必備的前置是C,現在用彙編搞嵌入式的,都是比較低端的處理器


學完了繼續深造的話,可以參考下面這個路線圖!

https://www.zhihu.com/question/303496613/answer/1645756681


以下可選,僅供參考

  1. 數值計算。CBLAS庫及其實現、數值分析、並行原理、統計或數據分析。
  2. 偏文本操作。數據結構及演算法、編譯原理。
  3. 網路。計算機網路基礎。
  4. GUI。計算機圖形學。
  5. 操作系統相關。linux c或者windows c。


推薦一本書:

計科的話其實我感覺跟著課程走就行,平時多寫點代碼。


學基礎吧,只學了C還有很多需要學習,沒目標就去學硬體,微機原理


去leetcode刷題學演算法,

繼續去學c++/java/c#等高級語言;

學設計模式,學ide的應用

找些練手的小項目。

以上,在B站等都能夠找到很多視頻教程。

一句話概括,為手熟爾。


你好,作為編碼10餘年老司機,我想談下自己的看法,希望對你有幫助。

第一:是否經常上機寫代碼了,如果沒有,儘快上機寫代碼,寫什麼代碼?初步可以將教材上的例子實現,例如:遞歸函數調用,鏈表增刪改、循環的使用、指針的使用等等。

第二:可以閱讀一些開源C代碼,例如:

  • CJson:輕量級json解析庫。
  • Sqlite:一個自包含,無伺服器,零配置,支持事務的 SQL 資料庫引擎,包括 C 介面。公開領域。
  • tinyhttpd: 一個不到 500 行的超輕量型 Http Server,用來學習非常不錯,可以幫助我們真正理解伺服器程序的本質。
  • libcurl: 一個客戶端的 URL 轉換庫,支持多種格式。
  • ffmpeg: 一個完整,跨平台的錄音,轉換和流化視頻以及音頻的解決方案等。

第三:可以去慕課網、B站看看視頻,找一些適合自己的視頻,也可以去力扣網刷刷題。

更多關於c/c++等語言學習方面的可以參考我的其他文章

零基礎學編程,VB / Java / C / C# / C++ 等哪個更容易上手??

www.zhihu.com圖標大學C語言好難啊!希望各位能給我一些學習的方法,感謝!??

www.zhihu.com圖標

總之:提升C語言最重要的途徑之一就是多上機寫代碼。


我記得有一本書寫的是用c實現在linux下開發組件的書,那本書你可以想想能用到嗎,既可以寫實例也可以學習linux內核邏輯的實現


推薦閱讀:
相关文章