JavaScript勉強会

JavaScriptの学習日記

コンピューターサイエンスの学習は簡単なチートではない

プログラミングの上達方法について、はてなブックマークで話題になっていました。

 

b.hatena.ne.jp

 

 

またこいつか!

記事の執筆者は炎上商法の方でした。

(以前ブコメで絡まれたことがあるので覚えていましたw)

 

↓↓↓

 

オブジェクト指向って便利なの? - JavaScript勉強会

うへええええ継承による差分プログラミングとか現代に言わないでくれよ。しかも「JSはプロトタイプベースのOOP」を初めとして間違いが多いぞ

2017/03/27 09:42

b.hatena.ne.jp

 

逆にブコメの間違いを指摘したら、ブコメを非公開にして逃げられました。

 

jsstudy.hatenablog.com

 

jsstudy.hatenablog.com

 

半端な態度=プログラミングをなめてますね?

 

今回もアクセス稼ぎでタイトルに誤解を招く煽りを入れているので、良識あるプログラマーなら注記/訂正を入れておくべきなのでしょう。

 

プログラミングスクール通うくらいならチートスキル身につけたほうが百億倍楽やぞ|erukiti|note

こういうタイトルって新書とかでよくある煽り文句で惹きつけておいて読んでみるとちっともチートじゃなくてけっきょくちゃんとやるのがいちばん早いって話になるやつだよね。

2020/07/16 12:56

b.hatena.ne.jp

 

今回も逃げ口上を予め用意してある記事でした。 

※ここでいうチートスキルは本来の意味のチートではないのでご注意ください。そっちのスキル身につけるのは楽しいかもしれませんが、本筋ではありません。

つまり、本人もタイトルは煽りだと分かっているわけですね?

こいつは今や「毛の壁2号」ともいうべき胡散臭いポジションになってしまいました。

(たまにはまともなことも言ってるので残念…。)

 

tk-rabbit-house.booth.pm

 

 

note.com

 

この人の論法は、一言で言えば「虎の威を借る狐」なんですね。

正しい一般論の中に少しだけ間違った独自の意見を混ぜると、素人には見抜けなくて、全体として何だか正しい話のように思えてしまうという錯覚。

例えば、白い玉が100個ある箱の中に、1個か2個だけ灰色の玉を混ぜておくと、目の悪い人は混入に気付かないのと似ています。それを意図的にやる人は厄介なのです。

 

コンピューターサイエンス(CS)とは?

文字通りには「計算機科学」のことです。

 

ja.wikipedia.org

 

計算機科学(けいさんきかがく、英: computer science、コンピュータ科学)とは、情報と計算の理論的基礎、及びそのコンピュータ上への実装と応用に関する研究分野である。コンピュータ科学には様々な分野がある。

コンピュータグラフィックスのように応用に力点がある領域もあれば、理論計算機科学と呼ばれる分野のように数学的な性格が強い分野もある。

 

CSの独学方法

煽り記事の問題点が指摘されていました。

コンピューターサイエンスを学んだ方が良いと言いながら、具体的な教材が示されていないので、役に立ちません。

 

プログラミングスクール通うくらいならチートスキル身につけたほうが百億倍楽やぞ|erukiti|note

これは今まで見たプログラムを学ぶ方法の中で最低に近い記事。初心者は参考にしない方がいい。実際のサイト等を紹介するわけでもないから具体性に欠けるし。

2020/07/16 10:54

b.hatena.ne.jp

 

なぜ具体的にコンピューターサイエンスの学習方法を書けないか?というと、理由は本人が理解していないからです。

自分が理解していないことを他人に説明するのは無理だからです。

(例えば、フランス語を知らない人が他人にフランス語を教えるのは無理なのと同じですね。)

 

プログラミングスクール通うくらいならチートスキル身につけたほうが百億倍楽やぞ|erukiti|note

あなたは「基礎」という言葉の意味を理解していない。初級魔法で喩えている時点でそれは明白です。/そして、あなた自身はおそらく計算機科学をそれほど学んでいませんね。あれはそういう文脈で出てくる学問ではない

2020/07/16 07:40

b.hatena.ne.jp

 

今の時代、コンピューターサイエンスの教材は豊富なので独学も可能です。

以前、具体的な教材を紹介したので、興味がある方はご参照ください。

 

jsstudy.hatenablog.com

 

https://www.jmooc.jp/

www.jmooc.jp

 

https://www.edx.org/

www.edx.org

 

https://www.coursera.org/

www.coursera.org

 

定番のタネンバウム本

今となっては古い本ですが、CSの基本が詳細に解説されています。

 

 

オペレーティングシステム 第3版

オペレーティングシステム 第3版

  • 作者:Andrew S. Tanenbaum
  • 発売日: 2007/12/20
  • メディア: 単行本(ソフトカバー)
 

 

 

ja.wikipedia.org

 

アンドリュー・S・タネンバウム(英: Dr. Andrew Stuart "Andy" Tanenbaum, 1944年 - )は、オランダのアムステルダム自由大学 (Vrije Universiteit Amsterdam) のコンピュータ科学の教授である。

コンピュータ科学のいくつかの教科書の著者として、広く知られている。

タネンバウムは、MINIXという学習目的のUnixオペレーティングシステム (OS) の開発者の一人である。

タネンバウムは、自分の一番重要な仕事はコンピュータ科学を修めた優秀な学生を多く育てることだと考えている。

 

リーナス・トーバルズ (Linus Torvalds) は、先述のOSの教科書の一つOperating Systems: Design and ImplementationとMINIXに強く刺激を受け、これをきっかけとしてLinuxカーネルを開発した。

リーナスは、自叙伝 "Just For Fun" (風見潤訳 『それがぼくには楽しかったから』) で、その教科書について「ぼくを新たな高みへと引き上げてくれた本」と、述べている。

 

CSの必要性

プログラミングスクール通うくらいならチートスキル身につけたほうが百億倍楽やぞ|erukiti|note

実践的なものにいこう

チートスキルは残念ながら物語とは違って、たいてい単体では金になりません。

そこで実践的なスキルが必要です。勿論チートスキルを極めたあなたなら、実践のためのコストも低減されまくってるはずです。

なにか一つアプリ・サービスなどを作り上げましょう。

アプリを作れば作るだけパワーアップです。

今の時代、金になる技術かつ手っ取り早いのはウェブプログラミングでしょう。Hasura と TypeScript と React / Next.js でもやれば、バックエンドのサーバ&フロントエンド込み最速で、アプリやサービスを作れるはずです。

 

ぶっちゃけ、Webアプリを作る程度なら、コンピューターサイエンスの知識がなくても作れます。

Webアプリのような単なるデータのCRUD処理ではなく、高度なアルゴリズムが必要になってくる暗号やAIなどの分野だと、コンピューターサイエンスの知識が役に立ちます。

TPOに応じて、自分の知識をアップデートすれば良いのです。 

 

初心者に役立つプログラミング学習方法

プログラミング学習について、増田に参考となる記事がありました。

 

anond.hatelabo.jp

 

anond.hatelabo.jp

 

まず、プログラミングとは以下の2つの要素から成り立っていることが理解されていない。

 

数学的要素

いわずもがな代数や論理演算の数学的な要素

ただ、これは勉強すれば得られる。得られないなら諦めるしか無い。

そして最悪得られなくてもプログラミングはできる。

 

整理学的要素

プログラミングの大半はこっちだということが理解されていない。

数学的要素が生かされるのはプログラムの1割程度だが、残り9割は整理学的要素だ。

 

例えば本棚に本をしまうときに

  • 後から探しやすいように格納する
  • 本棚にちゃんと収まるように格納する

みたいなことをしっかり考えて実行できるかどうかという能力が求められる。

加えて

  • 自分の持っている本を分類するとどうなるか
  • それらの本を使う場面はどのように分類されるか
  • その分類をさらに分類するとどうなるか

というようなことまで考えが及ぶかどうか、といったことが最終的にはプログラミングで求められる

 

プログラミングの文法やfor文、if文なんて教えてもしょうがない。

物事の繰り返し構造や条件分岐のタイミングを教えなければツールはあっても使うことはできない。

プログラミングスクールで教えることはものづくりの楽しさだったりするのだが

そういったモノは動機や動機付けにはなっても実際の能力を向上させることはない。

動機・動機付けが必要なだけなら射幸心を煽ったり金銭的インセンティブを与えても同じ。

 

結局の所、プログラミング能力を磨くには

  • プログラムを書く
  • 普段から物事を整理して考える

の2つが大事なだけで、これにスクールは必要ない。

 

この意見の「数学的要素」がコンピューターサイエンスに相当するとして、「整理学的要素」は設計の話に相当するでしょう。

 

プログラミングスクール通うくらいならチートスキル身につけたほうが百億倍楽やぞ|erukiti|note

チートスキルは身につけるものではなく与えられるものであって、これだと鉄板ビルドだし。これ身につけるとプロ野球で活躍できるよ、これやるといいよ。と言われてお前はプロ野球選手になれるんだな? とも思う。

2020/07/16 13:16

b.hatena.ne.jp

 

設計の定番

基本的なコンピューターサイエンスを学んでも、設計に関する知識は別途習得する必要があります。

DDDやクリーンアーキテクチャーなどの話ですね。

 

www.google.com

 

ja.wikipedia.org

 

ドメイン駆動設計(英: Domain-driven design, DDD)とはソフトウェアの設計手法であり、「複雑なドメインの設計は、モデルベースで行うべき」であり、また「大半のソフトウェアプロジェクトでは、システムを実装するための特定の技術ではなく、ドメインそのものとドメインのロジックに焦点を置くべき」であるとする。

 

ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本

ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本

  • 作者:成瀬 允宣
  • 発売日: 2020/02/13
  • メディア: 単行本(ソフトカバー)
 

 

DDDを実践する場合、命令型だけではなく宣言型でやってみることも役立ちます。

 

 

(話が長くなるので、宣言型で書くことのメリットについては、またの機会に譲ります。)

 

まとめ

  • コンピューターサイエンス(計算機科学、CS)の習得は、プログラミングに役立つが容易ではない。=CSを「チート」と表現するのは不適切であり、単なる煽りでしかない。
  • 今は教材が豊富なので、CSは独学も可能。
  • Webアプリを作る程度なら、CSの知識は不要。
  • 初心者がスキルアップを図るなら、CSの学習よりも先に設計手法(DDDなど)の学習をやった方が良い場合もある。
  • 煽り記事でアクセスを稼ぐ炎上商法はやめようw(役立たず)

 

煽りタイトルの記事ではなくて、普通の記事を書けばいいのにね…?