C#轉C++開發,該歷經怎樣的學習路線?
目前已經算是編程入門了(自我感覺良好)
C#可以獨立完成小的項目、比較熟練的使用http://asp.net mvc、對面向對象有一定的理解。但是C#入門容易精通難,感覺C#就像是黑魔法或者是黑箱子,只懂得輸出輸入,不懂得內在的更深層次的原理,於是想轉行學C++,兩者雖然沒啥太大的關係,但是個人感覺CPP要比C#更底層一些,這樣可以更好的理解C#龐大豐富內置庫和各種語法糖的實現原理。於是乎買了本cpp primer 尼瑪這也太厚了,請問各位大牛們 對於有一定的編程經驗的Csharper 轉行C++理論上需要經過哪些坎?或者說需要經過那些學習路線?比如指針什麼的//2016/8/6更新
題主以http://asp.net web開發入職某企業,然後因為平時要裝逼學習的一些技能竟然起到了很大的作用(比如爬蟲,powershell甚至折騰linux學會的shell)至今工作三月有餘 這個月已轉正,多謝大家的回答,C++仍然在啃。。。PS:C#也不能丟,工作至今三月 領導說我代碼寫的挺規範,但是邏輯思維有待提高,考慮的不夠周全,基礎不牢,需要多加練習,另外我的附加技能加分很多,因為目前公司的主力程序員都是只會寫程序,其他的一概不管。。,然後我就轉正了。。。。
C++東西就多,C++ Primer厚也是正常的。不過C#也沒比C++容易多少,估計題主根本就沒懂多少C#的東西吧。不管你用什麼語言,要麼語言複雜,要麼庫複雜,兩者都簡單的都是玩具。題主不要浮躁,好好學習。
黑箱不黑箱跟啥語言無關。c++照樣可以用智能指針什麼的弄成黑箱。初學者一般直接用RAII包裝器來託管東西,進階者則有興趣拆開這些包裝器進去看一看。黑箱是工程上提高產能去風險化的有力工具,也是學習某種編程語言的一個階段。
c#的一些語法糖,編譯期就被處理掉了。只不過x86比msil低級一些,所以c#能讓虛擬機處理的就多一些。你如果拿reflector看編譯後的代碼,仍然能看出什麼被編譯為什麼。但是這個編譯過程對你來說仍舊是黑盒。你只是知道規則,但不知道具體的步驟。你不去學編譯,而是光靠編程語言想弄清楚編譯器的原理,是不可能的。
c#的語法和標準庫都比c++要多。覺得c++ primer厚,那你肯定沒看完《c#入門經典》和《c#高級編程》。(廢話,誰看得完那個。)
我不知道你c#怎麼學的,但是如果避免以後啥都不會幹只能拿編程語言來撕逼,我勸你了解常用的語法和標準庫之後,趕緊找三方庫拿來寫項目。你是開發者,不是編程語言學家,除非你以後專職研究plt。安安靜靜老老實實把c++ primer看完,收貨大大的有,其實我也在說我自己。。。
路線不好說,但c++ primer最好要讀完。
另外,千萬要轉變思維的一點:指針!c#程序員常見的一個錯誤就是把棧上結構體地址傳出去了。這種問題很弱,但很難查到這個問題你不能這麼問,這麼問肯定會被群嘲的。
知乎是一個裝B的地方,而踩別人是最簡單方便的辦法,你只要敢說什麼不行就有定有人站出來打你的臉,這些人不一定C井有多厲害,但talk is cheap。而且你找個測試來,照樣能把測試說的各種深奧,然而有人願意去做測試嗎?
當然,先聲明,C井是門好語言,特別是同行Java一襯托,簡直是藝術品。缺點也明顯,放今天來說就是移動端疲軟。這類語言就是快速開發產品的,然而移動端它並不是主力。做遊戲還好。
我可以理解樓主的想法,大多數學計算機的都有一個共同的階段,就是最底層是真牛逼,什麼都真明白原理,而不是盲目用別人寫好的工具。屬於開發Photoshop和會用photoshop的區別。
我至今也和你同樣的想法。而且每年畢業季,進大公司的new grads在培訓後有多少想往Infra走,有多少願意做full stack去做產品,又有幾個願意去internal tools的組,以及平時公司內調動,Infra也是進多出少,也說明了這個問題。
所以我覺得題主的想法很對,也不對。很對在於底層確實能學到更多通用的,原理上的東西。不對在於你關注點錯了。
做產品的太容易被取代了,大公司都有非常完善的工具,存儲,運算,傳輸,或者 code框架 gen。而且這些東西一個公司一個樣,你學會了,去別的地方,等於什麼都沒會。當然,這些東西在開源領域也都有對應。但從頭下來,你除了練出了一套自己開發的習慣以及快速讀懂各種系統使用方法外,並沒有學到更多東西。一言以蔽之,不通用。
而樓主的關注點錯了,做底層牛逼併不是語言,而是你對傳統計算機科學的了解。你第一個要懂得就是計算機架構,instruction set,memory結構,cpu cache,single instrction並行,mult instruction並行,以及CPU運行時的instruction flow和data flow,instruction pipeline,這些是你最底層開發的常識,是你做任何正確選擇的理性基礎。Computer Architecture是我至今依然認為學到的對自身提高最有用的一門課沒有之一。我推薦Computer Architecture a quantitative approach這本書。而我更推薦你去好好上這門課。
其次重要的是操作系統,因為這是你做底層開發的一切的模板。操作系統在理論上來講就是兩條,怎麼運行,怎麼存儲。大多數學校開課也會集中在process management和file system上。而如果你學習分散式,肯定會讀到兩篇論文,Mapreduce和Google File System。你會發現還是,怎麼運行,怎麼存儲。同時對於進程的了解更有助你理解並行,並發,以及Asyn Response,這些都是你謀生必備的基礎概念,而很多畢業生都完全沒經驗。
想乾死一個來面試的新畢業生最簡單的辦法就是考多線程的題目,寫callback,來十個跪九個。
還想說computer networks,但先寫這麼多吧,技術是技術,語言是語言。搞底層的資本不是C++。
你若真想搞底層,操作系統,編譯器,圖形學至少要選一個。
最後,C++在中國可能不太好想好找工作。JS,Swift是謀生好手段。年年都有不少人說自己已經精通啥啥啥的,結果一問起來就啥都不懂(說其他人,不是說題主
過慣了好日子,然後想過苦日子。想起好夢一日遊了
看完c++ primer,連學會都談不上。做好心理準備。
Essential C++,和C++ Primer是同一人所著,侯捷老師譯,給有其他語言經驗的人看的(最好熟悉C)缺點是沒有包含C++11新特性,解決方法是,可以借本C++Primer,單獨看下裡面講C++11的內容(有一個單獨的目錄列出所有C++11新特性,很好找的)
我從畢業起就從事C#開發,至今剛好4年。現在自學C++,主要是研究opencv處理圖像這一塊。
C++跟C#的最大區別莫過於內存操作了,其它在我看來差得並不多。C++內容是很多,但C#底子好,還是一樣拿起C++就能開操了
c++ primer算厚?你確定你看完了c#高級編程?
做實際項目開發,通過實際開發來理解語言的特性。
這兩種語言都用過,建議採用項目驅動的方式,這樣可以把用到的知識點限制在【語言子集】的範圍內。
另,似乎最近七八年,工程圈裡對C++各種特性做了很多限制,以class為例,比較穩妥的辦法是用來做抽象數據類型【ADT】,原來需要用到繼承的場景,盡量改用boost::bind來搞定。原來寫過一個Php自動轉換到c++的小工具(轉換公司內部App後端代碼,規模較小),轉換過程中更多的是考慮如何轉換依賴的框架:先找C++有哪些第三方的庫能對應到php的Web Server框架,資料庫封裝框架,寫工具的時候,在Php側識別出這些框架代碼,在生成的C++代碼中,把對應的C++庫放到相應的位置。語言本身沒覺得是難點。通常而言,通過正常的路徑學習編程的用什麼語言都沒有黑箱的感覺。跟用不用c艹無關(逃
c++ primer(其實一點也不厚,看完意猶未盡),C++標準庫,侯捷系列,編譯環境,解決實際問題,用別人的庫,吸收他們的思想,最重要的是要關注@vczh ;我就是從C#轉過來的。
我覺得吧,那些鼓吹c#簡單的都是大 壞 蛋,我biu一下啊看了兩三本,沒一本老實看完的,然後,開艹,簡直啥都2不會,只好回頭學c艹,只為學會絕世秘技,好好地艹c#。。。
我之前c++做cocos,現在用c#做unity了,我的感覺就是c++好難啊,c#雖然東西也多,但是平時寫起來挺方便的…可能是我比較菜吧…
利益相關:初級 C#,以前自學過一點 C++。大兄弟,你要真想學 C++,就把你的良好自我感覺忘了吧。順便說一句,你那點 C# 對你學習 C++ 真的沒有啥特別大的幫助。
只聽說過c++轉c#的,反過來還真少見。不過語言就是工具而已,如果不是研究者,作為開發者而言主要還是看需求場景,需要哪個用哪個。看樣子還是學生吧,工作了就沒這麼糾結了:)
asp轉java會不會好些
推薦閱讀:
※如何評價Qt Lite Project?
※什麼時候用異常,什麼時候用斷言?
※以後想做大型遊戲(至少是端游,不是手游),不知道是不是一定需要精通C++或者熟練?
※為什麼老師不推薦用《C++ Primer》作為教材?
※C++ 在哪些設計原則的指導下,變得越來越複雜?