[討論] 該學習C++嗎? - 看板C_and_CPP - 批踢踢實業坊
文章推薦指數: 80 %
推MartinJ40: 愛惜生命遠離java/c++ 要也是python rust這些新興語言 07/09 10: ... flarehunter: pattern matching和if else在程式架構上有什麼差異?
批踢踢實業坊
›
看板C_and_CPP
關於我們
聯絡資訊
返回看板
作者Matz(イラマチオ研究員)看板C_and_CPP標題[討論]該學習C++嗎?時間WedJul819:13:212020
本魯一個弱弱的資工本科生。
在學校學過C、Java、javascript。
但後面兩個課上完後就沒碰過了(幾乎忘光)。
平常都是寫C(一些小遊戲、刷題)
專題也是用C語言。
想問如果單純專攻C語言,對未來就業好嗎?
還是需要搭配別的語言會比較好?
--
※發信站:批踢踢實業坊(ptt.cc),來自:1.171.72.222(臺灣)
※文章網址:https://www.ptt.cc/bbs/C_and_CPP/M.1594206803.A.5F9.html
→james732:把你學過的這三個摸到精熟的話就非常厲害了07/0819:44
→Schottky:光靠精通C語言就能賺飽飽了07/0819:56
→Schottky:要不要學其他的語言看你自己高興,並不是必要的07/0819:59
推Killercat:C要精通很難要靠這精通賺飽更難可以看看硬體廠薪資07/0822:32
→Killercat:C++機會還大一點憑良心說XD07/0822:33
推Clangpp:c++才比較難學吧...07/0901:02
推Schottky:如果你看到可以拿C刷題的人說自己弱,千萬別相信他。
07/0902:08
推expiate:刷題用c那幾乎資料結構都是手刻的阿!神!07/0906:12
→Feis:用C寫LeetCode的話,如果不要求一次過的話,個人經驗是07/0907:37
→Feis:不會特別難。
只是看目的07/0907:37
→Feis:比較麻煩的主要是I/O處理07/0907:38
→Feis:但剛好LeetCode比較少這問題07/0907:39
→Killercat:不過以就業來講台灣C除非頂尖不然就是吃不飽餓不死07/0909:32
→Killercat:為了就業而想多學的語言來講我個人比較推java跟go可07/0909:46
→Killercat:以試試看這兩個07/0909:46
推lc85301:不用,學rust(欸07/0910:25
推MartinJ40:愛惜生命遠離java/c++要也是pythonrust這些新興語言07/0910:38
→MartinJ40:想走前後端js07/0910:39
→MartinJ40:C++擁有所有paradigm怎麼可能比C簡單07/0910:41
→MartinJ40:光template就是一個語言的難度07/0910:42
→Killercat:er..我說的C++機會大一點是說「賺飽的機會」不是說好07/0911:22
→Killercat:學。
java是滿藍海的說真的,但是position目前來看還是07/0911:23
→Killercat:很多,go的話是真的不錯,rust也讚但是目前機會較少07/0911:23
→cphe:用C刷光是刻資料結構就飽了,刻完才是真正開始解題07/0912:42
感謝各位大大的建議了。
※編輯:Matz(122.116.159.149臺灣),07/09/202016:35:04
推aecho:啊嗚…就業的話…資料結構與演算法要學好呀-.-07/0916:54
→aecho:如果有教資料庫的話,那個ACID也要好好搞懂呀Orz07/0916:56
→aecho:進職後被丟去學MFC,C#,Obj-C都是一堆學校沒教過的07/0916:57
推Schottky:平常好像不會聽到有人勸開戰鬥機的去開計程車就好07/0919:01
推CoNsTaR:系統語言rust最讚沒有之一07/1000:44
推KanzakiHAria:不會有人想特地學戰鬥機目的是找工作啊07/1008:42
→KanzakiHAria:想就業最多也是民航飛機怎麼樣都不會是戰鬥機07/1008:42
推Schottky:如果還沒學,我同意。
但人家已經開著戰鬥機飛來飛去了07/1011:13
→Schottky:然後你跟他說計程車的職缺比較多去學開計程車07/1011:13
→Killercat:C...戰鬥機喔...好吧,只能說我尊重你的看法XD07/1014:55
→Killercat:人家就是問就業問題當然就以市場來回答啊...07/1014:55
→Killercat:C在就業市場的確「相對沒那麼強勢」也是事實吧07/1014:57
→petercoin:台灣高薪的軟體相關職缺還是IC廠韌體居多吧?07/1100:08
推Dracarys:S大描述的真傳神XD07/1100:08
推loveme00835:人活得好好地為什麼要學希佳佳呢Q_Q07/1101:53
→alex70266:看就業的方向是哪種吧,往韌體/嵌入式走的話07/1116:09
→alex70266:不太會C還是很痛苦的07/1116:10
→alex70266:不過去摸點C++不是什麼壞事啦07/1116:14
推flarehunter:我覺得不用執著語言,學點不同思考的方法,像是FP,07/1121:36
→flarehunter:OOP,設計模式,軟體工程,推薦看cleancode系列書07/1121:36
推flarehunter:反正出社會工作八成是沒學過的事,練基礎功總是有用07/1121:40
推flarehunter:M大說C++有所有範式,所以用C++學這些範式也不錯07/1121:48
推ddavid:就算C真的是戰鬥機好了,你也要真的開得好才會賺得來,只07/1123:36
→ddavid:是會開的話,升空也就是被打下來的分07/1123:37
推bben900911:看起來對C頗有心得。
去IC廠當韌體寫C,薪水不錯吧?07/1200:09
推CoNsTaR:C++有所有範式反對一票,光是fp就沒有了07/1307:06
推flarehunter:有c++11開始有lambda也可以傳來傳去可以算有fp吧?07/1308:45
推CoNsTaR:這和fp說他們有firstclassmodule(或record)存co07/1308:59
→CoNsTaR:ntext,可以算OOP有什麼不同XD07/1308:59
推ray2501:不就有lambdacalculus,然後可以函式輸出和輸入,就算07/1310:23
→ray2501:有初步支援了嗎?從定義上來看,C++是有支援啊07/1310:23
推flarehunter:如果可以支援多型來達到依賴反轉,我就覺得算是OOP吧07/1310:52
→loveme00835:用OOP/SOLID來考慮學C++是否搞錯什麼xDC++的07/1310:59
→loveme00835:特色又不是OO07/1310:59
推flarehunter:我也是覺得語言不重要重要的是那些概念07/1311:03
→Killercat:事實上C++的OO還滿薄弱的不過因為有template,所以07/1311:04
→Killercat:metaprogramming下的彈性簡直是作弊07/1311:04
→Killercat:沒interface沒object說真的要當真正的OO還有段路XD07/1311:04
→Killercat:拿來學一些當infrastructurelibrary的東西倒是讚07/1311:05
→Killercat:看看那個Loki::SingletonHolder寫得多彈性XD07/1311:06
→Killercat:重點是還真的易用超易用07/1311:06
→Killercat:目前還沒看過哪種別的語言(可能除了C的macro外)可以把07/1311:07
→Killercat:infrastructurelibrary做得那麼有彈性且好用的07/1311:07
推CoNsTaR:@ray2501有lambdacalculus是個什麼說法orz07/1311:07
→CoNsTaR:可以函數輸入輸出又是什麼說法orz07/1311:07
→CoNsTaR:你的定義怎麼好像跟別人都不太一樣XD07/1311:08
推CoNsTaR:@KillercatAgda呢?連reflection都是用自己寫的07/1311:13
→Killercat:好吧那應該是我看過的語言不夠多:P07/1311:16
→Killercat:不過我想主流語言裡面應該C++這點是近乎無敵了07/1311:16
推flarehunter:@CoNsTaR你認為的FP應該有哪些概念啊?07/1311:20
推CoNsTaR:如果要“成為”一個FP語言,最重要的前提是必須是decl07/1311:36
→CoNsTaR:arative吧,或至少在某些範圍內是declarative,或者就07/1311:36
→CoNsTaR:算做不到也要有一些compromise的產物,例如rust的mu07/1311:36
→CoNsTaR:table之類的07/1311:36
→CoNsTaR:如果只是想要“支援FP”最重要的就是要有GADT去配合某07/1311:36
→CoNsTaR:種exhaustivecheck(例如patternmatchingintermso07/1311:37
→CoNsTaR:fpatterncalculus,或是Scott、Churchencodinginte07/1311:37
→CoNsTaR:rmsoflambdacalculus),和firstclassfunction07/1311:37
推CoNsTaR:*某種類似GADT去配合某種exhaustivecheck07/1311:39
推ray2501:第一步是First-classandhigher-orderfunctions,可以07/1311:53
→ray2501:接受函式當作輸入輸出,這c++早就有了,你的定義才奇怪07/1311:54
推CoNsTaR:我不是故意要在c/cpp版討論fp(你可以去PLT版開一篇07/1312:04
→CoNsTaR:,我或其他大大可以在那裡回你),只是如果真的是first07/1312:04
→CoNsTaR:class,有可能會不是higherorder嗎?為什麼要分成兩07/1312:04
→CoNsTaR:個條件?07/1312:04
→CoNsTaR:然後既然是firstclass,為什麼c++不能有flip和par07/1312:04
→CoNsTaR:tialapplication?(我知道有bind)07/1312:04
推CoNsTaR:解釋一下,我說的「類似GADT去配合某種exhaustiveche07/1312:15
→CoNsTaR:ck」是打造firstclass函數的其中一種方法,只有用這07/1312:15
→CoNsTaR:種方法產生函數的語言才能算是某種FP07/1312:15
推flarehunter:我理解的範式是指如何思考程式架構的方法,像是結構化07/1312:36
→flarehunter:能夠divideandconquer,OOP可以用多型控制依賴方向07/1312:38
推flarehunter:FP我就不熟,只有理解到可以用小函式組合出大函式和07/1312:42
→flarehunter:分離有sideeffect的部份讓平行化順利一點07/1312:43
→flarehunter:感覺你提的都有點像是語言特性,不是FP範式必要功能?07/1312:44
→flarehunter:patternmatching和ifelse在程式架構上有什麼差異?07/1312:47
推CoNsTaR:我也是啊(程式架構的方法),所以我開頭就說了必須是de07/1312:51
→CoNsTaR:clarative07/1312:51
→CoNsTaR:後來提的GADT,patternmatching,和firstclassfunct07/1312:51
→CoNsTaR:ion都是讓你能夠用「fp的方法」建構程式的要素,缺一07/1312:51
→CoNsTaR:個就無法獨立運作07/1312:51
→CoNsTaR:所以我才會說c++不支援fp(不能用fp的方法建構程式07/1312:51
→CoNsTaR:),因為三個裡面根本沒有一個支援,最接近fp的也只有07/1312:52
→CoNsTaR:higherorderfunction而已07/1312:52
推CoNsTaR:ifelse是對boolean做induction(elimination),pat07/1312:57
→CoNsTaR:ternmatching是對任何type的induction,意思是只要07/1312:57
→CoNsTaR:是type,就能夠被使用07/1312:57
推CoNsTaR:因為c++的bool來歷不明(你找不到bool這個type07/1313:12
→CoNsTaR:的definition),ifelse也來歷不明,你找不到ifels07/1313:12
→CoNsTaR:e的definition(形式化ifelse的方法),但在fp,這07/1313:12
→CoNsTaR:些都是可以用程式寫出來的(不是說寫一個編譯器,而是你07/1313:12
→CoNsTaR:要用bool你可以自己寫一個bool,你要patternmatchin07/1313:12
→CoNsTaR:g,你可以自己用Scottencoding),這個算是ifelse和07/1313:12
→CoNsTaR:patternmatching最大的差別07/1313:12
推CoNsTaR:*應該要說「寫出來的bool直接可以patternmatching」07/1313:32
→CoNsTaR:(不需要編譯器,你在紙筆上也可以做),這樣講比較好傳07/1313:32
→CoNsTaR:達GADT和patternmatching之間的關係07/1313:32
推MartinJ40:https://www.stroustrup.com/OpenPatternMatching.pdf07/1315:13
→MartinJ40:functionalprogramming跟CFG是等價07/1315:13
→MartinJ40:C++template跟turning是等價07/1315:14
→MartinJ40:怎麼可能Type-3做不出來Type-2文法.....07/1315:16
推CoNsTaR:......我不知道要講什麼了orz07/1316:35
→CoNsTaR:你真的知道你講的那些名詞是什麼意思嗎?07/1316:35
→CoNsTaR:關於那個library,等到它不用macro的時候再來嘴吧07/1316:35
推MartinJ40:我的意思是你提的那些特性是能先用template刻出來07/1317:01
→MartinJ40:只基於這些刻出來的物件去寫程式的話不就相當於07/1317:01
→MartinJ40:FP07/1317:01
→MartinJ40:用刻出來的這些元件再去作BOOLIFELSE07/1317:02
→MartinJ40:而非使用原本c++的關鍵字07/1317:02
推CoNsTaR:問題是TMP做不到這樣啊,TMP自己都做不到FP很多事07/1317:12
→CoNsTaR:情了,你怎麼會期待用它寫出來的元件可以magically把你07/1317:12
→CoNsTaR:的程式“變成”FP07/1317:12
推flarehunter:雖然已經偏離原來問題很遠了,不過難得在C++版有FP07/1317:55
→flarehunter:討論串XD我想繼續問以FP的角度會怎麼架構一個系統?07/1317:55
→flarehunter:GADT和patternmatching為什麼會是必要功能?Lisp07/1317:55
→flarehunter:是不是沒有這些功能啊?07/1317:55
→loveme00835:以為走錯板,原來是在討論AncientC++07/1318:37
推CoNsTaR:如果能接受英文的話可以看這個07/1318:39
→CoNsTaR:https://youtu.be/PLFl95c-IiU07/1318:39
→CoNsTaR:它標題雖然寫DDD可是其實是在講FP07/1318:39
→CoNsTaR:lisp我不會,但不一定非得GADT,GADT和patternmatch07/1318:39
→CoNsTaR:ing也都只是語法糖而已,別的類似的東西也可以07/1318:39
→CoNsTaR:如果你接受untyped的程式,你也可以完全不要任何類似G07/1318:39
→CoNsTaR:ADT或patternmatching的東西,就完全的function也07/1318:39
→CoNsTaR:是可以,但我認為大部分人說的FP不是那樣的東西07/1318:39
推CoNsTaR:那要請教一下L大HowmodernC++lookslike07/1318:48
→loveme00835:要嘴@MartinJ40的連結跟macro也先看一下[P1371]07/1319:05
→loveme00835:跟[P1221]的狀態,C++也是communitydrivenlang07/1319:07
→loveme00835:還要經過ISOcommiteereview,除了相容性要顧最重07/1319:09
→loveme00835:要的是"標準化"這件事.你喜歡其他語言是你的自由,07/1319:10
→loveme00835:但是在說"某語言都沒有什麼特性"前先搞清楚自己是07/1319:11
→loveme00835:不是真的熟悉它,然後如果覺得什麼特性很缺,你可以07/1319:12
→loveme00835:發提案,這就是howmodernC++lookslike07/1319:12
→loveme00835:看討論還以為是考古學有什麼重要發現07/1319:13
→loveme00835:簡單的說,不需要標準化的語言你想要什麼特性都很容07/1319:15
→loveme00835:易07/1319:15
推CoNsTaR:整理了一下:07/1319:42
→CoNsTaR:1.C++是地表最強語言,因為不論什麼功能沒有都只是目前07/1319:42
→CoNsTaR:沒有,什麼功能不好都只是目前不好,以後還是都會有,都07/1319:42
→CoNsTaR:會變好的07/1319:42
→CoNsTaR:2.要是真的不能有,也是因為相容性和標準化,才不是因07/1319:42
→CoNsTaR:為C++不支援07/1319:42
→CoNsTaR:我是不知道把語言的“狀況”寫在紙上叫它“標準”有什麼07/1319:42
→CoNsTaR:神奇的效果,但就我所知,所有的社群語言誰不是經過很多07/1319:42
→CoNsTaR:年的討論才會讓實作成為語言的一部分,語言的發展哪個沒07/1319:43
→CoNsTaR:有目標和提案,哪個不會考慮相容性07/1319:43
→CoNsTaR:如果有一個人跑來跟你說Haskell有dependenttypes,沒07/1319:43
→CoNsTaR:有dependenttypes的都是ancientHaskell你覺得如何07/1319:43
→CoNsTaR:?07/1319:43
推flarehunter:影片講得滿簡單清楚,有稍微理解FP的實際用處,謝謝07/1319:54
→flarehunter:影片裡的例子用C++的struct+enum也可以兜出來吧07/1319:55
推CoNsTaR:enum的確在有些狀況下可以做sumtype07/1320:01
→CoNsTaR:可以用struct(producttype,and)和inheritance(sum07/1320:01
→CoNsTaR:type,or)兜出來07/1320:01
→CoNsTaR:雖然這兩個東西本意應該也不是給你這樣用的就是了XD07/1320:01
推CoNsTaR:然後那個影片只是在講用FP做typing的方法,還是有很07/1320:04
→CoNsTaR:多其他東西是沒有講到的,所以真的用FPL寫程式的時候可07/1320:04
→CoNsTaR:能還是會有點陌生07/1320:04
→loveme00835:你已經幫我回答大部分的問題了.語言標準化尤其是IS07/1320:06
→loveme00835:O標準,最終都是為了服務業界.所以有關functional07/1320:06
→loveme00835:language的提案被reject是常有的事情,能用舊特07/1320:06
→loveme00835:性達成的功能,除非新特性可以做得更好更有"效率",07/1320:07
→loveme00835:否則它不會變成語言的一部分.標準化圍繞在軟體開發07/1320:07
→loveme00835:議題上;而不是發掘語言的可能性.所以前面才會說道07/1320:07
→loveme00835:先熟悉這個語言再來評論比較好07/1320:07
→loveme00835:這就好像討論為什麼魚沒有腳,所以和雞比牠絕對跑不07/1320:09
→loveme00835:快一樣.07/1320:09
→loveme00835:你來魚板不去了解為什麼魚不長腳,然後推廣雞有腳多07/1320:11
→loveme00835:棒不是很奇怪嗎?而且我從來沒有說過魚是最棒的生物,07/1320:11
→loveme00835:你的自然語言可能也有待加強.07/1320:11
推CoNsTaR:我會在這邊回是因為有人宣揚c++支援FP,你可能漏看前07/1320:14
→CoNsTaR:因後果了07/1320:14
→CoNsTaR:我不會沒事跑去跟不認識的人說某個語言沒有某個特性/功07/1320:14
→CoNsTaR:能,目前沒那麼無聊,謝謝07/1320:14
推CoNsTaR:而且fyi,就算你講的那兩個提案都通過了,c++仍然離支07/1320:16
→CoNsTaR:援FP非常遙遠07/1320:16
→CoNsTaR:至少我想不出有什麼提案的組合能夠讓c++支援FP又向07/1320:19
→CoNsTaR:後相容啦,可能我廢07/1320:19
推yoco:不該08/1523:38
延伸文章資訊
- 1[問題] C++與JAVA差異- c_and_cpp - PTT數位生活
以前在校時只學過JAVA 而現在在自學C/C++ C++ PRIMEER 4/E 中文版看的霧煞煞C++ How to program 中文版勉強看的懂不過有些東西沒講清楚Thinking in...
- 2[問卦] 現代年輕人連C++都覺得難?
23F→wahaha99: 更高階去用python、java、.net 更低階用純C 07/30 09:45 ... 59F推zxcasdjason1: 現在語言多還有功能差異,不見得容易。 0...
- 3[心得] C++ 與C 的特性及區別- 精華區C_and_CPP
其他主流語言與C/C++ 的差異在討論C++ 和C 的區別之前,或許先 ... 實際上,C/C++ 與Java, C# 等最大的分別,並不是體現在虛擬機器的觀念或作法上,而 ...
- 4Re: [問卦] 會寫C++的人一定會寫C語言嗎? - 批踢踢實業坊
發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.71.231 ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1477056363.A.534...
- 5[問卦] 自學C跟C++推薦哪個教材- Gossiping板- Disp BBS
安安本肥想要自學C/C++ 短期目標是因為我要去上一堂用C實作資料結構跟演算法的課至少 ... 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1630402337.