Re: [請益] 如何學習C/C++並能使之成為應職技能?

看板Soft_Job作者 (中午外出)時間9年前 (2015/02/11 14:27), 編輯推噓1(1071)
留言72則, 7人參與, 最新討論串7/18 (看更多)
※ 引述《leolarrel (真.粽子無雙)》之銘言: : 身為一個很多語言我都有在用的人,想反駁一下 這話很引戰。其實我剛好也是很多語言都在用的人耶 只是結果是我比較愛用 C++。我想表達的是我的想法,我完全尊重其他人的選擇 你看完我的文章覺得我有講錯了,那你可以指正。不過我看起來你不是在指正我的內容 而是在質疑我的選擇 : 想到精確的控制資源取得與釋放,C做得到,而且做的比C++更加的透明,不黑箱,如果使用 : C++依樣要"嚴格的紀律",那我為何不選擇黑箱作業比較小的C? : 另外,如果在意gc,那麼c/c++ 直接被推到推薦名單的最後面去,因為他們還要掛lib才做 : 得到,應該首選現在較為先進的語言 C 的紀律是什麼?是 goto?是 macro?什麼樣的方法可以讓你再離開 scope 的時候記得釋放資源?複製貼上? 這只是增加錯誤率而已,讓編譯器幫你做吧 你可以獲得幾乎一樣的效能,同時降低錯誤率 : C/java一樣做得很好,C++在這部分不算特別突出,所以這理由很弱. 在我看來很突出啊,如果你是跟 c 比。c 很常把 ptr cast 成不同的東西 當然,你要是明白這個 ptr 的 layout 是不會有事,對吧?如果弄錯了怎麼辦呢? compiler 會不讓你編?不會喔。會 crash?運氣好的話會。那不然呢?我不知道啊 要 match 型別呢?可以啊,就在函數後面加幾個字讓不同的型別有不同的叫法 增加 overhead?不會,因為 c++ 在編譯完後也是一樣 只是一句老話,讓編譯器幫你做的事情,你幹嘛自己做? : : 用 template 基本上就是用空間換速度,當然空間大到一定的程度也會影響到速度, : : 所以用的時候必須有點 sense 到底這樣下去會發生什麼事情。亂用 object code 就會 : : 變大。compile time 可以幫你做好 template 計算,你可以準備特化樣板讓 compiler : : 去用,只要設定得當你可以透過一個很 general 的樣板生出針對不同型別具有特殊 : : 意義的 code。 : 用泛型跟樣版就像你說的,要"有點sense",不能亂用.現代的直譯式語言方便多了,沒必要 : 為了泛型跟樣版而選擇C++ Java 的 generic 我真的不懂,如果這篇文章能夠釣出高手來解釋也算是很好了 方便是什麼?方便是用效率換的嗎?如果要換的話你可以決定怎麼換嗎? C++ 可以讓你做這個決定。 : 簡而言之,"某某功能很好懂,前提是你要qqqqqq然後注意ooooo,什麼時候可以aaaaaa, : 讓pppp怎麼樣可以llllll",恩,真的很好理解 @@ : 那我用C的 function pointer 不就好了,更透明,更不黑箱,也不用管compiler為了搞 : 繼承跟虛擬會怎麼樣去"建構"vtable 我覺得 c++ 不黑箱啊。對呀,你用 c 的 func ptr 很好,只要你喜歡用一個放滿 func ptr 的 struct,你也可以有 vtable。如此一來,你不只要懂,還要自己寫 真的有比較好嗎?我是比較懶啦。compiler 幫你做的事情為什麼你要自己做? : C做的更好,因為C compiler 根本不太會幫你做啥事,另說到compile time 做完很多 : 的事情,他的執行速度快的事情,現在直譯式語言都可以build成machine code,C++ : 在這個方面在現在動輒1.6G起跳的CPU 根本沒啥優勢,唯一能說嘴的只有編譯時期檢 : 查型別錯誤 Compiler 做的事情太少就是我對 c 最不習慣的地方。還有速度不是你說沒關就沒關的 很多時候速度是有差的。case-by-case,你的桌面系統要是用直譯器跑你會吐血。 我不只是說 wm,整個桌面系統喔! 即使 Java 可以 AOT,他依然沒有辦法像 C++ 的方式控制 compiler,他本來就是設計 給 vm 跑得。我不想對於 java 的速度做爭吵,hotspot 在某些狀況的確可以打敗 c++,這是動態編譯的好處,壞處是如何編譯你沒有辦法再寫程式當下就知道。如果你 喜歡,你可以用。 : : 所以我會說 c++ 是個很難的語言,因為你要很清楚你的每一步踩在什麼上面,但是他就 : : 像寶庫一樣你可以一直挖。而且我相信用到極端的狀況 py 和 java 不會簡單到哪去, : : 只是學習曲線和信仰問題。 : 你要用C++繼續開發你的程式我是沒有什麼意見,不過你自己也說C++是一個這麼難的語言 : 那麼學習一個那麼難的工具,結果這個工具的效用跟其他工具比起來差不了多少.... : 那為何要去學習難的那一個??有被虐狂嗎?? 我希望我講的東西貼近我認知的事實,天下沒有白吃的午餐。 在我看來 c++ 就是一個好寫的 c。儘管我覺得他對於編譯器的控制強過於 c。 只要你寫的好,你可以用類似更高階的語言的方式,寫出跟 c 有得拼的速度。 這整個的 tradeoff 在我看來很好。但我必須說,隱藏在 stl 或編譯器後面的 東西不是你沒看到就可以不管的。 但我也完全尊重你喜歡其他語言,或是你不管什麼原因就是不喜歡 C++ 那是你的選擇,如果大家選擇都一樣那現在就沒有這麼多趣味了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.8.129.147 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1423636047.A.519.html

02/11 14:30, , 1F
我的確是在質疑你的選擇,你沒看錯.因為你提出的理由都
02/11 14:30, 1F

02/11 14:31, , 2F
很主觀,而很多理由實際上其他更高階直譯器都做的更好
02/11 14:31, 2F

02/11 14:32, , 3F
還好我的選擇不需要對你負責 就算我們的背景一模一樣
02/11 14:32, 3F

02/11 14:32, , 4F
選擇也有不同
02/11 14:32, 4F

02/11 14:34, , 5F
所以上篇文尾有說你要用什麼語言繼續寫程式我沒有意見
02/11 14:34, 5F

02/11 14:36, , 6F
C 模擬繼承只能像 GTK 那樣弄出個超複雜的東東
02/11 14:36, 6F

02/11 14:36, , 7F
然後也沒比較簡單 也沒比較快啊
02/11 14:36, 7F

02/11 14:39, , 8F
如果不是寫embedded,就別用C了吧,一推直譯語言的OO都
02/11 14:39, 8F

02/11 14:39, , 9F
比C++簡單多了
02/11 14:39, 9F

02/11 14:39, , 10F
GTK is a freaking mess...
02/11 14:39, 10F

02/11 14:40, , 11F
另我認為gtk是個不好用的東西
02/11 14:40, 11F

02/11 14:42, , 12F
jvm也在進化中...也許有一天CPU內建jvm micro code也不意外
02/11 14:42, 12F

02/11 14:42, , 13F
C++被顯得落後的原因是JAVA進步太快了
02/11 14:42, 13F

02/11 14:43, , 14F
zb26,曾經有公司有做這樣的計畫
02/11 14:43, 14F

02/11 14:43, , 15F
c++曾經吸引一堆菁英高手使用它改進它,但今日同樣的動能在
02/11 14:43, 15F

02/11 14:44, , 16F
Java
02/11 14:44, 16F

02/11 14:44, , 17F
我的專長剛好包含java/c,跟一點硬體(會寫點rtl但很弱)
02/11 14:44, 17F

02/11 14:44, , 18F
java的潛力很大,如果有商業化CPU支援jvm...會逆天
02/11 14:44, 18F

02/11 14:45, , 19F
leolarrel>我只知道有但不知道失敗原因,因為sun不玩了?
02/11 14:45, 19F

02/11 14:46, , 20F
C++就是卡在中間,要低階沒C低階,要高階沒有p*語言高階
02/11 14:46, 20F

02/11 14:48, , 21F
好像要你命3千,是沒錯拉,什麼都有拉
02/11 14:48, 21F

02/11 14:52, , 22F

02/11 14:52, , 23F
十五年前就該逆天了?
02/11 14:52, 23F

02/11 14:55, , 24F
年輕時也覺得C++超威,瘋狂研究,老了發現用python幾行
02/11 14:55, 24F

02/11 14:55, , 25F
就搞定的事情
02/11 14:55, 25F

02/11 14:59, , 26F
java processor在SUN歸天之後就沒戲了,現在觀察重點在看
02/11 14:59, 26F

02/11 14:59, , 27F
arm/x86陣營何時來個jvm micro-code
02/11 14:59, 27F

02/11 15:00, , 28F
然後一堆高手也在想法突破jvm的瓶頸,尤其gc這塊
02/11 15:00, 28F

02/11 15:00, , 29F
實務上,大家用jni直接調用逆天的c就搞定了
02/11 15:00, 29F

02/11 15:10, , 30F
jni直接調用逆天的c ->聽起來像步槍搭配刺刀
02/11 15:10, 30F

02/11 15:19, , 31F
結果下面推文討論的都是意識形態,不如開另一個標題
02/11 15:19, 31F

02/11 15:19, , 32F
戰語言?
02/11 15:19, 32F

02/11 15:20, , 33F
戰語言我就不參加了 我只是想表達我覺得得好而已
02/11 15:20, 33F

02/11 15:52, , 34F
你一開始是要"幫C++說說話",現在是"只是想表達我覺得好
02/11 15:52, 34F

02/11 15:53, , 35F
wiki中不是也有ARM 版本的嗎? SUN 被吃也是近幾年的事
02/11 15:53, 35F

02/11 15:54, , 36F
".其實不要怕戰語言,捍衛自己認為對的事情是很正當的
02/11 15:54, 36F

02/11 15:57, , 37F
推推 我也認為C++要學比較久,但是用起來比C好用多了
02/11 15:57, 37F

02/11 15:57, , 38F
寫純C code有夠痛苦
02/11 15:57, 38F

02/11 16:02, , 39F
我不怕啊 只是覺得戰意識形態浪費時間 事實上你的回應讓
02/11 16:02, 39F

02/11 16:02, , 40F
我有點心灰 就這樣吧
02/11 16:02, 40F

02/11 16:43, , 41F
如果你已經是C++高手,轉用java或其他OO一點問題沒有
02/11 16:43, 41F

02/11 16:43, , 42F
所以不用心灰
02/11 16:43, 42F

02/11 16:44, , 43F
只是你可以多關注一下java vs c++的發展,在我看c++是越來越
02/11 16:44, 43F

02/11 16:44, , 44F
被限縮應用領域...如果你有看到c++很蓬勃的領域也歡迎分享
02/11 16:44, 44F

02/11 16:58, , 45F
自己更新一下,能夠支援java byte code的技術:Jazelle
02/11 16:58, 45F

02/11 17:05, , 46F
我是對於這樣的討論很心灰。c++ 發展的領域喔?java runt
02/11 17:05, 46F

02/11 17:05, , 47F
ime 算嗎?
02/11 17:05, 47F

02/11 17:07, , 48F
zb26 也分享一下你為什麼喜歡 java 吧?
02/11 17:07, 48F

02/11 17:08, , 49F
其實我只喜歡C XD Java是已經看到太多big date類的專案
02/11 17:08, 49F

02/11 17:08, , 50F
開頭就用java (而不是c++或其他)
02/11 17:08, 50F

02/11 17:09, , 51F
big data 手殘
02/11 17:09, 51F

02/11 17:10, , 52F
java用OS模擬器等級來處理語言問題,try-catch/exception
02/11 17:10, 52F

02/11 17:10, , 53F
實在太好用..GC太好用(也被罵很慘)
02/11 17:10, 53F

02/11 17:12, , 54F
還有JAVA的lib多品質又好。很容易快速組出一個系統程式來
02/11 17:12, 54F

02/11 17:12, , 55F
我會認為JAVA的LIB品質好是因為這個語言能被誤用的特性少
02/11 17:12, 55F

02/11 17:12, , 56F
但是講到語言特性很多高手就會反駁說他用就不用XD這就不說了
02/11 17:12, 56F

02/11 17:13, , 57F
不會
02/11 17:13, 57F

02/11 17:47, , 58F
我本來也寫 C,直到我覺得明明編譯器可以做的事情我卻一
02/11 17:47, 58F

02/11 17:47, , 59F
直重做,很崩潰。還有一些明明 RAII 可以處理掉的事
02/11 17:47, 59F

02/11 17:48, , 60F
或是 macro 用一堆 只為了一點點小不同
02/11 17:48, 60F

02/11 17:49, , 61F
py 要寫的精練很難,但是很漂亮 只是我目前沒打算用
02/11 17:49, 61F

02/11 17:50, , 62F
java 大概會是我的下一步 因為我也很愛 jvm 其實
02/11 17:50, 62F

02/11 17:51, , 63F
沒有特別的目的要學語言不容易 但我覺得 java 應該會很
02/11 17:51, 63F

02/11 17:52, , 64F
有的玩
02/11 17:52, 64F

02/11 17:53, , 65F
以前一度和 java 很熟,後來就不熟了
02/11 17:53, 65F

02/11 17:55, , 66F
以前不喜歡還有個原因,就是沒有純 open 的 implementati
02/11 17:55, 66F

02/11 17:56, , 67F
java 早期是 apache 的主場,所以 lib 都不錯,像你說的
02/11 17:56, 67F

02/11 17:59, , 68F
C++ 是 11 出了以後重新愛上 黑暗年代真的讓人不想摸
02/11 17:59, 68F

02/11 18:22, , 69F
如果你是用強形態語言工作的,又是OO類不是底層語言類
02/11 18:22, 69F

02/11 18:22, , 70F
早或晚你都會遇到java的。JAVA捐出來公領域之後變得很活躍
02/11 18:22, 70F

02/11 18:26, , 71F
我可以這麼定義,雲等級的系統程式語言:java
02/11 18:26, 71F

02/11 18:26, , 72F
單機等級的系統程式語言:C
02/11 18:26, 72F
文章代碼(AID): #1KslPFKP (Soft_Job)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 18 篇):
文章代碼(AID): #1KslPFKP (Soft_Job)