BPStudy-181
タイトル:
コンピューターサイエンスを学ぼう
概要
コンピューターサイエンスを学ぶ、って何だか難しそうですよね。私は高校生くらいからゲームを作りたくてプログラミングを始めましたが、コンピューターサイエンスを学ばなくてもプログラムは作れていました。でもなんだか思い通りに動かなかったり、キャラクターの動作が遅かったりと、満足のいくレベルにはなかなか届きませんでした。振り返ってみると、そこに足りなかったのはアルゴリズムの知識、それを支えるデータ構造の知識でした。「アルゴリズムとデータ構造」はまさにコンピューターサイエンスの基礎で、独学でプログラミングを学んだ私にはその知識が足りていなかったのですが、必須の知識だと気付くまで数年かかってしまいました。
今回のBPStudyでは、「アルゴリズムとデータ構造」がどんなシーンで必要になるのか、またそこで使えるアルゴリズムとデータ構造について例をいくつか紹介します。また、「今が学ぶべき時だ!」と気付くためには、おおまかにでも全体像を知っておくと良いでしょう。そのための地図として使える書籍をいくつか紹介したいと思います。
対象の方
アルゴリズムとデータ構造を学ぼうとしたけど難しいと感じている方
作ったプログラムがなんだか遅かったりと、満足のいくレベルに届かないと感じている方
ソートアルゴリズムを学んで何になるの?と思う方
コンピューターサイエンスの知識が無くても自分は困ってないよ、と思う方
自己紹介
株式会社ビープラウド所属。一般社団法人PyCon JP Association会計理事。2003年からPythonを使い始め、その頃からオープンソースに関わりコミュニティー活動を始めた。カンファレンスや書籍、OSS開発を通じてPython技術情報を発信している。
著書/訳書:『独学コンピューターサイエンティスト(2022年 日経BP社)』『Sphinxをはじめよう第3版(2022 オライリー・ジャパン)』『エキスパートPythonプログラミング 改訂3版(2021 アスキードワンゴ)』『自走プログラマー(2020年 技術評論社)』『独学プログラマー(2018 日経BP社)』。
https://scrapbox.io/files/60a42c788cf8e9001d08c435.jpg
タグ
関連リンク
さて、コンピュータサイエンス(以下「CS」)は知らないけど日々プログラミングしている、というプログラマの方はたくさんいらっしゃるかと思います。
そんな方でも、ふとCSを知ってる方がいいのかなとか、CSも知らないとまずいのかな……などと思い、改めて勉強してみたいけどとっつきが悪いとか、うっかり手にとったCSの教科書が何を言ってるかさっぱりで10秒で閉じた、という方もいらっしゃるかと思います。
それでもCSが気になるので、「本腰を入れて勉強をする前に、どういうことをやってるのか眺めてみたい」くらいの温度感の方向けに、CSに隣接するジャンルで、職業プログラマや趣味プログラマの人なら読めそうな書籍のリストを作ってみました。どれも2020年1月現在は新刊で入手できる本のつもりです。個人的な好みも反映されているため、万人におすすめというわけではありませんが、気になったものがあれば読んでみていただけるといいんではないかと思います。
ハーバード大学の CS50x は、コンピュータサイエンスとプログラミング技術を紹介するコースで、プログラミングの経験の有無にかかわらず、経験者と未経験者の両方を対象としています。David J. Malan が担当するエントリーレベルのコースである CS50x では、アルゴリズム的に考え、問題を効率的に解決する方法を学びます。テーマは、抽象化、アルゴリズム、データ構造、カプセル化、リソース管理、セキュリティ、ソフトウェアエンジニアリング、ウェブ開発など。言語は C、Python、SQL、JavaScript に加え、CSS と HTML を使用します。問題集は、生物学、暗号、金融、科学捜査、ゲームなどの実世界の領域からヒントを得ています。CS50x の学内版である CS50 は、ハーバード大学で最大のコースです。
ボツ文
コンピューターサイエンスの基礎、なかでも「アルゴリズムとデータ構造」はあらゆるプログラミングに必要な知識ですが、学ぶのは決して簡単ではありません。私も大学で初めて学んだときは、難しくてつまらないと感じました。しかし、作りたいプログラムを思い通りに、期待する速度で動かすには、アルゴリズムとデータ構造の知識が必要になります。
今回のBPStudyでは、書籍『独学コンピューターサイエンティスト』の内容にからめて、私が学んできた経験を元にアルゴリズムとデータ構造を学ぶ際のノウハウを紹介します。
「アルゴリズムとデータ構造」の知識が必要になったときに気付くための方法
「アルゴリズムとデータ構造」を逆算で学ぶ方法を、私が学んできた経験を元に紹介します。