PTT推薦

Re: [問卦] C++可以啟發孩子的程式天份嗎?

看板Gossiping標題Re: [問卦] C++可以啟發孩子的程式天份嗎?作者
bachelorwhc
(積積陰陰德)
時間推噓13 推:14 噓:1 →:29

※ 引述《Superxixai (洪粉吱已)》之銘言:
: 小弟小時候第一個接觸的語言就是C++。
: 雖然過了很久很久,
: 但是在即將邁入2022的時刻,
: 教9年級左右的孩子,
: C++是不是依舊能夠啟發他們的程式天份?
: 有沒有相關的八卦?

那要看你怎麼定義程式天份

如果是講演算法跟資料結構 用C或Python下去操比較快

如果是講計算機結構 一樣也是用C跟OS下去操


國中時 C++是我第一門接觸的語言

那個時候要做遊戲的難度不低

C++可以說是最低門檻 自己看書學語法是沒問題

但是沒人帶很難知道要怎麼開發出軟體還有連結library的觀念

最多就是寫一些console自娛自樂


也曾經轉而寫PHP跟SQL做網站跟操作資料庫 (當然怎麼設計DB的觀念也是近乎沒有)

後來在GameMaker上用GameMaker的腳本語言寫遊戲

才漸漸真正有"寫的東西有用"的實感


新手買語言書自己K 只是習慣程式語言跟熟定義而已

很容易在"學這個到底要怎麼做出真正能用的程式"的疑問中迷茫

坊間有不少目的導向 例如以製作遊戲、網站為前提開發的書籍

是可以跳過純語言的枯燥階段 但新手的瓶頸是在於不知道為何要這樣寫

最後很多問題還是回到基本功

其中又以C++跟C為甚 很難讓你跳過基本功

C的基礎是pointer 如果要開發程式 大部分的API 甚至OS提供的library都跳不過

C++雖然用物件導向 還有換個名字的pointer: reference

但是STL給新手的陷阱更多


const char* str = obj.getName().c_str();

為什麼之後引用str會crash? 這個問題可能有些菜鳥工程師都會犯

for(auto it = v.begin(); it != v.end(); ++it) {
v.erase(it);
}

新手會問 為什麼我按照書上寫的呼叫erase 編譯也能過 為何還會crash?


語言本身也有毛

struct A {
A(int a, int b) : b_(b), a_(b_ + a + 1) {
}

int a_;
int b_;
};

為何A(3, 5).a_不是9?


所以建議

要嘛old fasion寫C

要嘛寫go或python

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.97.187 (臺灣)
PTT 網址
※ 編輯: bachelorwhc (36.231.97.187 臺灣), 12/26/2021 00:39:18

adminc 12/26 00:41組合語言入門

XDDDpupu5566 12/26 00:41print("Hello world")

cuteSquirrel 12/26 00:41js的毛也很多

js definitive guide比C++ Primer還有聖經本厚 毛是真的不少

TRFgee 12/26 00:42你讓代數都不熟的小孩摸C

TRFgee 12/26 00:43他指標就跪在那邊了

指標除了函數指標的宣告方法有點不直覺以外 其實比較聰明的小孩還是學得會

※ 編輯: bachelorwhc (36.231.97.187 臺灣), 12/26/2021 00:46:18

tanted 12/26 00:47那萬一遇到比較笨的小孩 學不會呢

笨小孩可以從腳本語言學起

freeunixer 12/26 00:48那就跳過去,過兩年再學那部分

※ 編輯: bachelorwhc (36.231.97.187 臺灣), 12/26/2021 00:49:52

DarkIllusion 12/26 00:49那就寫Python

archon 12/26 00:49比較笨的小孩,沒有程式天份可啟發

ejnfu 12/26 00:50小孩當然學python就好啦

nayeonmywife 12/26 00:54pointer記憶體位置概念有了就不錯啦

DerLuna 12/26 01:31go真的是很棒的語言

protoss 12/26 03:41你是故意亂寫再來說陷阱的吧...這不是書

protoss 12/26 03:42上都有叫你不要做了嗎...

ILike58 12/26 08:26第一個哪裡會crash?容器經過增刪,itera

講完果然馬上來一個菜鳥

https://bit.ly/32uUGyO

有人跟你講getName的string的生命週期有多長嗎?

ILike58 12/26 08:27tor會失效吧,書上會說,最後幹嘛要跟宣

ILike58 12/26 08:27告的順序不同做初始化,還故意有相依性,

ILike58 12/26 08:27這樣表達有什麼好處嗎?對調宣告的順序試

ILike58 12/26 08:27試。

業界就是這麼多雷包 我當然知道對調宣告順序結果是對的 有些人就是沒在看書的

※ 編輯: bachelorwhc (36.231.50.26 臺灣), 12/26/2021 10:44:44

ko27tye 12/26 10:42有些例子根本太硬要==

kindaichitom 12/26 12:58函數指標宣告真的不直覺,尤其是當

kindaichitom 12/26 12:58你要函數指標回傳函數指標而不使用

kindaichitom 12/26 12:59typedef的時候,會想殺人

kindaichitom 12/26 12:59不過function pointer是進階的用法

jason276 12/26 16:39c++就是corner case超多的語言啊 程式語

jason276 12/26 16:40言是解決問題的工具 結果C++的設計讓你

jason276 12/26 16:40不但要解決問題還要解決難用的工具帶來

jason276 12/26 16:40的毛

jason276 12/26 16:45對啦書上是有講那些寫法是錯的啦啦 但是

jason276 12/26 16:45C++你要背的antipattern特別多 你確定同

jason276 12/26 16:45事都記得嗎 你確定你死線靠近的時候不會

jason276 12/26 16:45不小心寫出這種寫法嗎

dzwei 12/26 17:48using pfunc_t = void (*) (int, float)

dzwei 12/26 17:48vs

dzwei 12/26 17:50typedef void (*pfunc_t)(int, float)

有using真的好很多

dzwei 12/26 17:50感恩C++11 讚嘆C++11 雖然20真的不知道在衝

dzwei 12/26 17:50三小

有concept不錯啦 不然要寫detection idiom很累XDDDD

dzwei 12/26 17:55while(( fd++ = open(..., i++) ))

※ 編輯: bachelorwhc (36.231.50.26 臺灣), 12/26/2021 18:05:57

dzwei 12/26 18:38上面那個是邪教寫法

你那個是fold expression? 不過我沒看程式碼上下文有點難懂 有參考資料嗎XD

dzwei 12/26 18:39SINFA本來是拿來debug的 現在放在正規code

dzwei 12/26 18:39真的會讓新手很痛苦...

新手要懂SFINAE確實需要一些紮實的template觀念

haw561676 12/26 19:14還有啊在台灣問問題,結果要嘛很兇要嘛

haw561676 12/26 19:14叫你自己看所以不建議小孩學

※ 編輯: bachelorwhc (36.231.50.26 臺灣), 12/26/2021 19:31:36

shomingchang 12/26 20:32連代數都不會不可能會程式的別鬧了