初夢は、C++富士山論\(^O^)/ なぜ、C++には、5合目から始める入門書がないのか。 ― 2020年01月02日 23時29分45秒
ASAHIネット(http://asahi-net.jp )のブログサービス、アサブロ(https://asahi-net.jp/asablo/ )を使っています。
---
みなさま。
あけまして、おめでとう。
閉めまして、さよ、おなら。\(^O^)/
今年も始まりましたね。
昨日、テレ朝、羽鳥慎一モーニングショーで、ダブルダイヤモンド富士というのをやっていた。
そこで、
http://iiyu.asablo.jp/blog/2019/12/04/9184938
日経SYSTEMなどのアンケート。CとC++を一緒にしちゃ、だめだってば。「独習C++ 新版」のことも少し。ネットの筋の悪いSTL解説に引っかかっちゃだめ。
で、
--- ここから ---
俺様の、「C++富士山論」を富士山大噴火させんといけんかのぉ。
はよ、書けや!
すみません。
--- ここまで ---
と書いた。
ということで、C++富士山論をやる。
C++富士山論は、C++を富士山に見立てた理論(笑)。
5合目から上は、抽象度の高い世界。C++11以降のC++、いわゆるModern C++は、C++14, C++17と抽象度が高くなり、関数型プログラミング(FP)を強く指向している。
何度も書いているが、C++20になると、Ranges(レンジ、範囲)が入って、ほとんど関数型言語の代表格であるHaskellみたいに、あるいは、Unixのシェルのように、パイプで関数を連結して書けるようになる。しかも、Rangesは、ビューになっていて遅延評価だから、効率もとてもいい。
8合目から上は、古いC++から入っているが、プログラミングが難しくなる世界。ジェネリクス、テンプレートプログラミングの世界。さらに頂上付近は、テンプレートメタプログラミング(TMP)の世界。
5合目より下は、Cの世界や、C++11以前の古いC++の世界のうち、抽象度が低い世界。
Cから受け継いだ世界は、麓から2合目くらいかな。抽象度が低く、ハードウェアに近い世界で、さながら富士の樹海。
3合目から5合目の間は、古いC++の世界で、一応、Cにオブジェクト指向プログラミング(OOP)を入れた世界ではあっても、抽象度の低い世界。
いまどき、富士山に、麓から登る奴は少数派。ほとんどは、5合目までバスや車で行って、そこから登る。
ところが、Modern C++になってほぼ10年も経つのに、いまだに、C++の入門書は、生ポインタや配列を教え、
for (int i = 0; i < 10; i++)
{
a[i] = i;
}
のように、for文でループの制御変数(これはイテレータ)を制御して、自分でループを回すといったことをやっている。
外部イテレータなんて教えるな。内部イテレータでやるMap/Reduceを教えろ。
せっかく抽象度の高い、プログラミングが楽な世界がすでにあるのに、なぜ、5合目からやらないのか。
答は、本を書いてる奴がバカだから。\(^O^)/ 編集者もバカだから。\(^O^)/
Modern C++には、スマートポインタが入ってるんだから、生ポインタなんて、教えるな。生ポインタは、古いCやC++のコードとつなぐときだけ、使えばいい。
配列なんて原始的なコンテナを教えるな。vector, unordered_map, list, dequeといった標準コンテナと、sortやtransformなどの標準アルゴリズムを教えろ。
Modern C++の標準コンテナや標準アルゴリズムを使えば、自分でループを回すといったアホなことをやる必要はまずない。
お手軽入門書レベルなら、スマートポインタすら不要。関数に渡すのは、値渡しか参照渡しで十分だし、動的メモリ管理は、vectorに任せるだけでも十分。vectorでは、erase-removeイディオムを教えるのを忘れないでね。
ってなことを、本を書いてる連中が知らない。
いま、プログラミング言語としてはPythonが人気で、入門書もたくさん出ている。
「はじめてのPython」「やさしいPython」「すぐわかるPython」みたいなタイトルの、Pythonとプログラミングをさらっと流したお手軽入門書。
あのレベルなら、C++の5合目から8合目(ジェネリクス、テンプレートプログラミングの入り口)を使えば、十分。C++でも、Pythonみたいに、さらさらっと書ける。
しかもC++はネイティブコンパイラだから、Ptyhonの何10倍も実行スピードが速い。
http://iiyu.asablo.jp/blog/2019/12/04/9184938
日経SYSTEMなどのアンケート。CとC++を一緒にしちゃ、だめだってば。「独習C++ 新版」のことも少し。ネットの筋の悪いSTL解説に引っかかっちゃだめ。
で、書いたが、
--- ここから ---
ネットでは、STLが提供するコンテナに対して、自分でループを回し、さらには自分でイテレータを操作するような、こいつら、全然、理解してないなあと思うような記述があるんだよね。
頭が、Cや古いC++から抜けてない。
Modern C++は、関数型プログラミング(Functional Programming, FP)やテンプレートメタプログラミング(Template Meta Programming, TMP)がやりやすい方向にも大進化している。
Modern C++では、標準コンテナを処理するループは自分で書くな。標準アルゴリズムとラムダ式を使えって。最悪でも、範囲forを使えって。
自分でループを回すような人は、大昔のLispのころからある、Map関数の処理。もっというと、Map/Reduceの処理だとわかってないんだよね。
もっともっというと、SQLの関係演算的な、集合演算だとわかってないんだよね。
Map/Reduceは、それこそ、Googleの検索エンジンにも使われているパターンの一つ。
STL関係だけを取り上げた本は、海外ではいくつも出ているが、日本ではほぼ出てなくて、ネットにあるのは、筋の悪い、なんだ、これみたいな解説があって、それをまたありがたがっている人たちがいて、C++は難しいなんていってるんだから、まあ、先は長いね。
--- ここまで ---
同じことがC++の入門書を書いている連中や担当編集者にも言える。
頭が古すぎる。
Lispは今からざっと50年前に、Map/Reduceの処理をやっていたから、単に古いアイデアが悪いわけではなく、古くて筋の悪いものから頭がアップデートされてないのが悪い。
つくづく、40年前の20歳前後に、Lispに出会っていた自分は幸運だと思うね。
ということで、C++富士山の初夢、観てね\(^O^)/
https://cpprefjp.github.io
cpprefjp - C++日本語リファレンス
https://ja.cppreference.com/w/
C++リファレンス
は、ほんとに労作で、維持、管理している人たちには、感謝しかない。
関連:
http://iiyu.asablo.jp/blog/2019/12/04/9184938
日経SYSTEMなどのアンケート。CとC++を一緒にしちゃ、だめだってば。「独習C++ 新版」のことも少し。ネットの筋の悪いSTL解説に引っかかっちゃだめ。
http://iiyu.asablo.jp/blog/2019/03/10/9045812
C++は、C++20で、また劇的に変わりそうなのね。ますます関数型、ますますコンパイル時計算島倉千代子\(^O^)/
http://iiyu.asablo.jp/blog/2019/02/27/9041626
C++17まで対応の「C++ポケットリファレンス」の改訂第3版が出ていたことに、やっと気づいた\(^O^)/
http://iiyu.asablo.jp/blog/2018/10/16/8975329
C++テンプレートプログラミングの定番本の第2版、C++ Templates The Complete Guide Second Edition
http://iiyu.asablo.jp/blog/2018/08/15/8942252
モダンC++(Modern C++):江添亮の詳説C++17
http://iiyu.asablo.jp/blog/2018/08/14/8941408
C++の劇的な進化に圧倒されるModern C++
http://iiyu.asablo.jp/blog/2018/06/05/8875815
Exceptional C++―47のクイズ形式によるプログラム問題と解法。この本は古いので、C++11以降のモダンなC++の本をあれこれ。
http://iiyu.asablo.jp/blog/2017/06/20/8600969
C++の実装状況、言語機能、リファレンス。Effective Modern C++――C++11/14プログラムを進化させる42項目
http://iiyu.asablo.jp/blog/2017/06/03/8584002
基礎からしっかり学ぶC++の教科書 C++14対応、Optimized C++、C++ ポケットリファレンス、改訂新版 C++ポケットリファレンス
http://iiyu.asablo.jp/blog/2017/05/23/8572667
型推論。C++の型推論なら「Effective Modern C++ ―C++11/14プログラムを進化させる42項目」が必読。オライリー・ジャパンで買った、この本の電子書籍のことも
http://iiyu.asablo.jp/blog/2016/04/08/8067423
C++の解説本、STL, Effectvieシリーズ、ゲームプログラマのためのコーディング技術、リーダブルコード、Code Complete, コーディングを支える技術
http://iiyu.asablo.jp/blog/2015/09/25/7812131
マーティン・レディ著「C++のためのAPIデザイン」
http://iiyu.asablo.jp/blog/2015/09/25/7812140
Effective Modern C++ ―C++11/14プログラムを進化させる42項目、C++11/14コア言語
http://iiyu.asablo.jp/blog/2014/09/26/7443432
Effective Modern C++, C++11, C++14。C++ Multithreading Cookbook。ICT業界の技術者が、若いときにやっておくべきこと。
ネタ:
http://iiyu.asablo.jp/blog/2017/02/14/8360963
C++ std::stringが、こうやったら、最強やのぉ。
---
みなさま。
あけまして、おめでとう。
閉めまして、さよ、おなら。\(^O^)/
今年も始まりましたね。
昨日、テレ朝、羽鳥慎一モーニングショーで、ダブルダイヤモンド富士というのをやっていた。
そこで、
http://iiyu.asablo.jp/blog/2019/12/04/9184938
日経SYSTEMなどのアンケート。CとC++を一緒にしちゃ、だめだってば。「独習C++ 新版」のことも少し。ネットの筋の悪いSTL解説に引っかかっちゃだめ。
で、
--- ここから ---
俺様の、「C++富士山論」を富士山大噴火させんといけんかのぉ。
はよ、書けや!
すみません。
--- ここまで ---
と書いた。
ということで、C++富士山論をやる。
C++富士山論は、C++を富士山に見立てた理論(笑)。
5合目から上は、抽象度の高い世界。C++11以降のC++、いわゆるModern C++は、C++14, C++17と抽象度が高くなり、関数型プログラミング(FP)を強く指向している。
何度も書いているが、C++20になると、Ranges(レンジ、範囲)が入って、ほとんど関数型言語の代表格であるHaskellみたいに、あるいは、Unixのシェルのように、パイプで関数を連結して書けるようになる。しかも、Rangesは、ビューになっていて遅延評価だから、効率もとてもいい。
8合目から上は、古いC++から入っているが、プログラミングが難しくなる世界。ジェネリクス、テンプレートプログラミングの世界。さらに頂上付近は、テンプレートメタプログラミング(TMP)の世界。
5合目より下は、Cの世界や、C++11以前の古いC++の世界のうち、抽象度が低い世界。
Cから受け継いだ世界は、麓から2合目くらいかな。抽象度が低く、ハードウェアに近い世界で、さながら富士の樹海。
3合目から5合目の間は、古いC++の世界で、一応、Cにオブジェクト指向プログラミング(OOP)を入れた世界ではあっても、抽象度の低い世界。
いまどき、富士山に、麓から登る奴は少数派。ほとんどは、5合目までバスや車で行って、そこから登る。
ところが、Modern C++になってほぼ10年も経つのに、いまだに、C++の入門書は、生ポインタや配列を教え、
for (int i = 0; i < 10; i++)
{
a[i] = i;
}
のように、for文でループの制御変数(これはイテレータ)を制御して、自分でループを回すといったことをやっている。
外部イテレータなんて教えるな。内部イテレータでやるMap/Reduceを教えろ。
せっかく抽象度の高い、プログラミングが楽な世界がすでにあるのに、なぜ、5合目からやらないのか。
答は、本を書いてる奴がバカだから。\(^O^)/ 編集者もバカだから。\(^O^)/
Modern C++には、スマートポインタが入ってるんだから、生ポインタなんて、教えるな。生ポインタは、古いCやC++のコードとつなぐときだけ、使えばいい。
配列なんて原始的なコンテナを教えるな。vector, unordered_map, list, dequeといった標準コンテナと、sortやtransformなどの標準アルゴリズムを教えろ。
Modern C++の標準コンテナや標準アルゴリズムを使えば、自分でループを回すといったアホなことをやる必要はまずない。
お手軽入門書レベルなら、スマートポインタすら不要。関数に渡すのは、値渡しか参照渡しで十分だし、動的メモリ管理は、vectorに任せるだけでも十分。vectorでは、erase-removeイディオムを教えるのを忘れないでね。
ってなことを、本を書いてる連中が知らない。
いま、プログラミング言語としてはPythonが人気で、入門書もたくさん出ている。
「はじめてのPython」「やさしいPython」「すぐわかるPython」みたいなタイトルの、Pythonとプログラミングをさらっと流したお手軽入門書。
あのレベルなら、C++の5合目から8合目(ジェネリクス、テンプレートプログラミングの入り口)を使えば、十分。C++でも、Pythonみたいに、さらさらっと書ける。
しかもC++はネイティブコンパイラだから、Ptyhonの何10倍も実行スピードが速い。
http://iiyu.asablo.jp/blog/2019/12/04/9184938
日経SYSTEMなどのアンケート。CとC++を一緒にしちゃ、だめだってば。「独習C++ 新版」のことも少し。ネットの筋の悪いSTL解説に引っかかっちゃだめ。
で、書いたが、
--- ここから ---
ネットでは、STLが提供するコンテナに対して、自分でループを回し、さらには自分でイテレータを操作するような、こいつら、全然、理解してないなあと思うような記述があるんだよね。
頭が、Cや古いC++から抜けてない。
Modern C++は、関数型プログラミング(Functional Programming, FP)やテンプレートメタプログラミング(Template Meta Programming, TMP)がやりやすい方向にも大進化している。
Modern C++では、標準コンテナを処理するループは自分で書くな。標準アルゴリズムとラムダ式を使えって。最悪でも、範囲forを使えって。
自分でループを回すような人は、大昔のLispのころからある、Map関数の処理。もっというと、Map/Reduceの処理だとわかってないんだよね。
もっともっというと、SQLの関係演算的な、集合演算だとわかってないんだよね。
Map/Reduceは、それこそ、Googleの検索エンジンにも使われているパターンの一つ。
STL関係だけを取り上げた本は、海外ではいくつも出ているが、日本ではほぼ出てなくて、ネットにあるのは、筋の悪い、なんだ、これみたいな解説があって、それをまたありがたがっている人たちがいて、C++は難しいなんていってるんだから、まあ、先は長いね。
--- ここまで ---
同じことがC++の入門書を書いている連中や担当編集者にも言える。
頭が古すぎる。
Lispは今からざっと50年前に、Map/Reduceの処理をやっていたから、単に古いアイデアが悪いわけではなく、古くて筋の悪いものから頭がアップデートされてないのが悪い。
つくづく、40年前の20歳前後に、Lispに出会っていた自分は幸運だと思うね。
ということで、C++富士山の初夢、観てね\(^O^)/
https://cpprefjp.github.io
cpprefjp - C++日本語リファレンス
https://ja.cppreference.com/w/
C++リファレンス
は、ほんとに労作で、維持、管理している人たちには、感謝しかない。
関連:
http://iiyu.asablo.jp/blog/2019/12/04/9184938
日経SYSTEMなどのアンケート。CとC++を一緒にしちゃ、だめだってば。「独習C++ 新版」のことも少し。ネットの筋の悪いSTL解説に引っかかっちゃだめ。
http://iiyu.asablo.jp/blog/2019/03/10/9045812
C++は、C++20で、また劇的に変わりそうなのね。ますます関数型、ますますコンパイル時計算島倉千代子\(^O^)/
http://iiyu.asablo.jp/blog/2019/02/27/9041626
C++17まで対応の「C++ポケットリファレンス」の改訂第3版が出ていたことに、やっと気づいた\(^O^)/
http://iiyu.asablo.jp/blog/2018/10/16/8975329
C++テンプレートプログラミングの定番本の第2版、C++ Templates The Complete Guide Second Edition
http://iiyu.asablo.jp/blog/2018/08/15/8942252
モダンC++(Modern C++):江添亮の詳説C++17
http://iiyu.asablo.jp/blog/2018/08/14/8941408
C++の劇的な進化に圧倒されるModern C++
http://iiyu.asablo.jp/blog/2018/06/05/8875815
Exceptional C++―47のクイズ形式によるプログラム問題と解法。この本は古いので、C++11以降のモダンなC++の本をあれこれ。
http://iiyu.asablo.jp/blog/2017/06/20/8600969
C++の実装状況、言語機能、リファレンス。Effective Modern C++――C++11/14プログラムを進化させる42項目
http://iiyu.asablo.jp/blog/2017/06/03/8584002
基礎からしっかり学ぶC++の教科書 C++14対応、Optimized C++、C++ ポケットリファレンス、改訂新版 C++ポケットリファレンス
http://iiyu.asablo.jp/blog/2017/05/23/8572667
型推論。C++の型推論なら「Effective Modern C++ ―C++11/14プログラムを進化させる42項目」が必読。オライリー・ジャパンで買った、この本の電子書籍のことも
http://iiyu.asablo.jp/blog/2016/04/08/8067423
C++の解説本、STL, Effectvieシリーズ、ゲームプログラマのためのコーディング技術、リーダブルコード、Code Complete, コーディングを支える技術
http://iiyu.asablo.jp/blog/2015/09/25/7812131
マーティン・レディ著「C++のためのAPIデザイン」
http://iiyu.asablo.jp/blog/2015/09/25/7812140
Effective Modern C++ ―C++11/14プログラムを進化させる42項目、C++11/14コア言語
http://iiyu.asablo.jp/blog/2014/09/26/7443432
Effective Modern C++, C++11, C++14。C++ Multithreading Cookbook。ICT業界の技術者が、若いときにやっておくべきこと。
ネタ:
http://iiyu.asablo.jp/blog/2017/02/14/8360963
C++ std::stringが、こうやったら、最強やのぉ。
最近のコメント