葉勁峰老師最近發表的從零開始的Json庫教程適合什麼水平的編程學習者?
最近在知乎上看到葉勁峰老師發表的從零開始的Json庫教程,首先看了簡介,第一段是這樣的:
也許有很多同學上過 C/C++ 的課後,可以完成一些簡單的編程練習,又能在一些網站刷題,但對於如何開發有實際用途的程序可能感到束手無策。本教程希望能以一個簡單的項目開發形式,讓同學能逐步理解如何從無到有去開發軟體。作為一名c語言初學者,在經歷了一段時間像無頭蒼蠅一樣的學習後,看到這樣一篇文章後頓時看到了希望,但是在第一章啟程出來後,就懵逼了。感覺他其中提到的許多術語都不懂,也不明白Json庫究竟是做什麼的。想問一下,此教程真的適合初學者嗎?專欄地址傳送:https://zhuanlan.zhihu.com/json-tutorial
挺好的,檢驗一門語言是否掌握的標準,是用它實現一個json解析器,
我們之前培訓時,對實習生/應屆生自學完 python以後的第一個作業就是 5天時間實現一個 json解析器,大部分學生基本能在規定時間內完成,少數速度快的應屆生能在 3天內完成。
你學完一門語言的語法,不去動手做點啥的話,你自己心都是虛的,而實現一款 json解析器將會涉及到:該語言的常用數據結構,各種流程式控制制,遞歸,字元串,各種json的邊界情況處理。。。。基本上一個語言常用的知識都能覆蓋一下。
關鍵不要求性能的話,代碼量不算大,整體比較小巧。等你實現完了,你自己心裡也有底了,實習生/應屆生如果培訓期間超過一周還實現不了,那可能以後寫代碼真的會比較困難吧。
當時我們實習生/應屆生的培訓基礎課程列表(每門課程一周):
Python入門課程 - 作業:實現 json解析器(不能import py自帶任何基礎庫,通過所有用例)
客戶端入門課程 - 作業:Qt 實現音樂播放器(調用開源解碼庫,可以看歌詞,有播放列表)服務端入門課程 - 作業:Python 只用socket模塊實現個簡單 telnet key/value 非同步非阻塞伺服器音視頻入門課程 - 作業:C++ 實現簡單幀間預測,簡單編解碼PS:這是基礎課程,培訓尾聲的大作業是兩個學生合作用之前學到的客戶端和服務端相關知識開發一個最簡單的IM(無分散式),包括好友增減,雙人聊天,語音錄音上傳+下載播放,群。
如此,可以比較綜合的檢驗一個學生的工程能力,抗壓能力(每門課程的作業成績有末位淘汰),也能讓他們通過培訓使自己的基礎變得更紮實些,不管將來做服務端還是客戶端還是其他,能有個入門概念。
供參考-寫的挺好的,不管什麼水平都可以看啊。感覺就是兼容C89,不用#pragma once之類的小問題不太好。因為這個是不用考慮實際使用的,完全可以指定編譯器,不考慮兼容性的。
當然了,我更希望看到,比如7天自製ASN.1編譯器(含ECN)。因為現在業界流行的都是protobuf, thrift之類的毒瘤,需要一篇面向初學者的教程告訴大家ASN.1才是最好的。正在學習中,不管是課程內容本身,還是課程組織形式,葉老師展現出的深厚功底,都讓我等小輩望塵莫及……
學習一個新的領域的時候,有相關知識不了解太正常了,遇到什麼就學就對啦,當年我為了學習怎麼寫解釋器,可是學了 Haskell 呢。
Write Yourself a Scheme in 48 Hours
比起來還是葉老師的教程比較平滑,對吧 ( ′ ▽ ` )?。
針對C語言初學者,可以學習到編程思路。針對已經有一定基礎但是沒有多少實際項目經驗的同學,可以學習到CMakeList,測試驅動開發等一系列項目經驗,同時還能熟悉JSON且接觸到簡單的手寫parser。
我覺得很適合大三的學生來學習造輪子,就是已經學了兩三門語言,寫了一些程序,計算機的一些基礎課程學過,即將開始接觸大的項目,又沒有什麼特別的項目經驗的人,可以跟著Milo前輩學習。也適合體系雜而不精用C/C++不多的人,比如像我這種,來重新開始學習C++。當然JSON庫可以用任何語言來寫,思路都是不變的。
這是面向json的初學者的,不是面向編程的初學者的。
「Json庫」從零開始,這樣比較準確一些。而且我強烈建議學習大神的經驗前,自己要對課題有所預習,最好自己按照自己的想法做一遍,然後再去查看大神教程,即使自己失敗了,沒能實現,也同樣能在教程里找到對應的答案。
只看不寫,等於沒看。
預習,學習,複習時最好的節奏。作為一個剛在公司工作6個月的初級程序員,感覺老師講的內容,倍感親切。老師課程提到的所有工具及rapidjson自己的公司都在用。就像老師說的,公司的代碼與我們實際學校學的,自學的,差別非常大。最後,教程真的是適合初學者。非常贊!!!
首先,可以肯定的是,葉老師的這個系列教程就是針對題主這樣「剛學會 C 語言的同學」。同時,答主認為了解編譯原理不是必須的,而且葉老師應該也預設參與學習的同學不了解編譯原理。
接下來,我們可以一起討論下題主碰到的問題 「許多術語都不懂」,以及怎樣應對。
葉老師的這系列教程是「圍繞 JSON 作為例子」,介紹一系列在實際工程中的工具和實踐。圍繞一門語言,通常會有一系列的工具構成一整套的生態 -- 怎樣編譯打包、怎樣測試、出了問題怎麼調測、怎樣發布項目文檔等等,而這些工具在我們寫小型程序時未必都會用得到。這個教程讓你在鞏固 C 語言的同時,也了解 C 語言的生態,了解在實際工程中怎樣藉助這一系列的工具完成一個項目。所以,在這方面,這個教程對像答主這樣了解一點 C 語言、不了解 C 語言生態的人來說,也是一份非常難得的教程。
對於作為 JSON 的例子,題主可以認為這是有特定格式的文件。我們在日常的開發中,常會有讀取配置文件中的數據的場景,最簡單的例子是每行都是 「name = 張三」 這樣的 key = value 形式的文件,像 JSON 這樣的格式表達力更強,也更複雜。從 JSON 文件裡面解析信息需要相當的技巧,但這個不是這個教程的重點,一下子理解不了也沒關係。
程序框架已經搭起來了,教程對程序做了詳細的說明,準備了「總結與練習」環節,而且相當貼心地準備了解答。這裡推薦在讀完程序、了解數據結構定義後,從 test.c 的 test_parse() 函數入手,看裡面每一個測試的用例是在做什麼;如果還沒有頭緒,可以用題主熟悉的 IDE 工具,對 test_parse() 的用例做單步調測。
另外,在這個教程里,不可能對涉及的工具做非常詳細的說明,題主還是要自己再通過搜索引擎來找適合自己的教程。其實答主上面提到的絕大部分內容,葉老師的教程裡面都涉及到了。也許教程中的陌生的計算機專業相關名詞影響了題主的理解,碰到這種情況建議題主多讀幾遍,同時,多動手把玩程序以幫助理解,也可以在留言裡面留下具體的問題,相信會有熱心同學解答。
最後,答主想說,面對這樣一份高水準、誠意滿滿的教程,及時反饋的學習環境,題主可不要錯過了。個人意見:有大學基礎C語言課程的同學都很適合。
上班坐車的一個小時內看完的三篇,感覺就是通俗易懂,酣暢淋漓。
文章裡面提到的很多專業術語在文中就有解釋,包括JSON是什麼,如果題主還不太了解JSON的話,可以看一下標準,找一些庫,包括但不限於rapidjson用一下(比如python原生的json庫,而且python和json基本一一對應的數據結構,比較方便理解),看看自己要做的大概是個什麼東西。
還有很多細節,例如宏的寫法,assert的語意與用法,頭文件、源文件與庫的關係,等等,這些在大部分學校的基礎課程中的介紹也是甚少。所以這個系列很適合剛開始接觸c語言的同學提高自身的姿勢水平呢。
期待後續文章的發布!作為一個過來人,很理解題主的心情。不知道你學習C語言編程有多久了,如果你現在寫程序只懂得在IDE裡面建一個項目然後一鍵編譯鏈接(很多學校的課程都是這樣的。。。完全讓學生忽視編譯的步驟),那麼你是不能理CMake是幹什麼用的。要理解json是幹什麼的,你需要懂得計算機之間通信是需要遵循一定的標準的,就好像兩個人要能夠相互溝通的前提是他們會說同一門語言。JSON就是其中一種計算機間相互溝通的「」語言「」。如果你了解了計算機網路相關的知識就會知道,和TCP、IP一樣,JSON也算是一種通信協議,只不過它和TCP、IP不工作在同一層次。希望對你有所幫助。
語言的話,最好看過《C和指針》這本書,了解數據結構(樹),還要會調試,一些工具之類的會用就好,不需要手寫makefile,用CMake生成vs的解決方案寫就好了,再用vs的github擴展同步就行了。
正在學習,從設計,到編碼實現,再到測試,配合作業曲線平滑,對弱雞友好--
作為一個用C也就刷刷題的新人,看葉老師的代碼,經常反應如下
握草這都行
666666
還有這種操作?(碰到感覺像在耍雜技的代碼)
然後發現工程里真正實用和提升效率的往往是那些書上一筆帶過的東西。各種define玩到飛起,確實長見識。
這一套教程當軟體工程入門不錯,放到網易雲課堂上可以單獨開門課了。比他們計算機課程體系裡面那個軟工課實用性強。
我看了這個教程。絕對不適合 C 初學。雖然第一篇提到什麼防止頭文件重複包含之類的,看起來貌似面向新手。但實際上,學習個教程的人至少應該是認真學完 KR 並能完成大部分練習題,而且能自己寫不小(七八百行)程序的人。不然,即使照著寫出了解析器,還是根本不能理解其中很多東西。但是!!只要照著做完,一定會有相當大的能力提升,葉老師的工程經驗的確很強,可以掌握很多刷題難以掌握的技巧!!總結,有難度,完全學懂,需要相當 C 基礎的 。但是可以不求完全懂,而儘可能吸收其中的實戰經驗~~
如果你能在他的文章下面具體的提出你的問題,既能能解決你的問題,也能讓他的文章更加普及
去年這時寫過一個很爛的,現在大三打算跟著重寫。
我想主要是為了確立代碼規範而不是實現功能吧,只為了功能瞎搞就行,不過代碼會非常難看。
關注了專欄,打算養肥再看。
匿了昨天剛看完第一篇 淺顯易懂 而且附加的知識也很有用 比如宏的寫法 TDD header guard 對寫過一點c程序的人應該是收穫最大的(已經有一定基礎,這個作者前文也已經寫清楚了)
同樣作為一名初學者,我在這個教程的第一節里學到了很多。其實我覺得一個剛學會C語言的同學有一定的抽象能力就能跟下去,比如我雖然還沒學習編譯原理,但是這個示例里我對parser也有了自己的認識。雖然沒開發過什麼項目,但我學到了這種測試驅動的方法。還有很多……
首先你要知道JSON是做什麼的: JSON 教程然後你發現:
- 作為一種數據的標記,我拿到了,還是得解析一下,才能變成更容易在程序里操縱的格式
- 我想把一些數據用JSON給其他程序,每次自己重寫怎麼變過去,太麻煩了,有個庫就好了。
- 編譯原理(這裡需要:學會LL(1)文法,與遞歸下降)
- 數據結構(多少算是程序員的常識了)
當然,如果你上過軟體工程這門課,這個可以當做一個軟體工程的小型實戰了。
總體來講,適合初學者,但不是只會一門編程語言的初學者。來些數據結構與編譯原理的基礎,這樣這個教程更適合你,看起來會更輕鬆一些。葉勁峰先生是大牛。
自然的即使簡單的教程里也會流露出多年積累下來的思想。有時候就是會產生初學者覺得複雜,但是本人覺得簡單現象。現在網路發達。不懂就Google,以教程為線,穿起來一大片知識,自然能受益良多。推薦閱讀:
※理科生,211畢業,最近時間空餘,想學習編程,無it基礎,有過人推薦下怎麼自學比較好?
※有誰是單純地喜歡編程嗎?
※自學編程的人,都是怎麼找到第一份軟體開發工作的?
※有什麼好的學編程的網站或者是軟體?『編程入門』?
※使用 Codecademy 這類編程學習網站能夠有效提高編程水平嗎?