400万人が利用する会社訪問アプリ

  • エンジニアリング
  • 2エントリー
エンジニアリング

on 2018/12/26

974 views

2人がエントリー中

コンピュータプログラミングの概念・技法・モデル を読む会 #1

Meetup

2019.01.08
TUE
19:00 ~
at 東京都港区白金台5-12-7
at 東京都港区白金台5-12-7
東京

なぜ開催するのか

実用的なプログラミングの学び方はいろいろありますが、プログラミングというもの自体について徹底的に扱った書籍を利用するというのはその一つです。 有名な古典として "Structure and Interpretation of Computer Programs"(邦題:計算機プログラムの構造と解釈, 1985年) がありますが、ここでは比較的新しい "Concepts, Techniques, and Models of Computer Programming"(邦題:コンピュータプログラミングの概念・技法・モデル, 2004年) を読みます。この本を選んだ理由として、並行・分散プログラミングのような現在では実務的にも重要になっている領域のモデル・技法も逐次的なプログラミングと同等程度に重視して取り扱っていること、サービスのアーキテクチャのような大規模なソフトウェアの設計をする際に通用するような方法でプログラミングの概念と技法を教えていることがあります。 これを読むことでプログラミングについて深く理解し、小手先仕事ではなく、確たる判断軸を持って適切にプログラミングをできるようになることがこの会の目的です。 なので、例えばプログラミングを始めて、ひとまず動くものは作れるようになったけど、任意の言語で様々な領域のものをどう書くか、なぜそのように設計するのか、といったことについてはまだ一貫して説明できないと感じているような人や、経験は積んだけどあまり体系的に学んでこなかったというような人の方が得るものが多いと思います。 以下、本書まえがきより一部を抜粋したので、興味のある人は読んでみてください。 --- 【この本の目的】 - プログラミングを教えること - この本の主目的は、プログラミングが統合的な学問である、ということを教えることである。プロのプログラマに役立つ科学的な基盤を伴う統合的な学問である、ということを。 - プログラミングとは何か - 本書ではプログラミングを一般的な人間の行為、すなわち、システムの機能を拡張あるいは変更する行為、と定義する。プログラミングは広範囲にわたる行為で、非専門家(例えば、目覚まし時計や携帯電話の設定を変更する消費者)および専門家(コンピュータプログラマ、すなわち、本書の読者)によって行われる。本書はソフトウェアシステムの構築にピントを合わせている。システム構築の場において、プログラミングはシステム仕様と、それを実装するプログラムとの間のステップである。このステップは、そのプログラムのアーキテクチャと抽象化を設計することと、それらをプログラミング言語によってコーディングすることとでできている。これは広い見方であり、おそらく普通、「プログラミング」という言葉に付与される意味合いより広いであろう。これはプログラミングを「狭い意味」にも「広い意味」にも捉えている。つまり、(言語に関係しない)アーキテクチャの問題も、(言語に関係する)コーディングの問題も含んでいる。ある特定のプログラミング言語よりはさまざまな概念とそれらの使い方を基礎にしている。こういう広い見方が、プログラミングを教えるのに自然であると思う。ある特定の言語や設計法の限界に足を引っ張られない。特定の状況下では使用するツールの機能と限界を考慮して、この一般的な見方を調整する。 - 科学であり技術である - 科学であり技術であるこのように定義したプログラミングには、2つの重要な面がある。技術とその科学的基盤とである。技術とは、プログラムの実行を可能にするツール、実用的技法、および規格である。科学とは、それによってプログラミングの理解を可能にする予言能力を持つ広く深い理論である。理想としては、科学は技術をできるだけ直接かつ有効に説明すべきである。どちらか一方が欠けてもプログラミングはできなくなる。技術が欠けると純粋数学と変わらない。科学が欠けると小手先仕事になる。すなわち、深い理解に欠ける。よって、プログラミングを正しく教えるとは、技術(現在のツール)と科学(基礎的概念)とを共に教えることである。学生がツールを知ることは現在に対する備えである。学生が概念を知ることは将来の発展に対する備えである。

こんなことやります

隔週で一章ずつ進めていきます。事前に GitHub (https://github.com/wantedly/ctmcp-reading) で輪講形式で内容をまとめておいたり、課題を解いておき、集まった場で発表や疑問点・課題などを議論したりできれば良いかなと考えています。 主催者は過去に一通り読んだことがあるので、量感を考えながら進めます。以下が目次ですが、「第I部 一般的計算モデル」まではすべて読み、「第II部 特殊化された計算モデル」は「第11章 分散プログラミング」のみを採り上げる予定です。よって、全10回となります。 【目次】 * 導入  * 第1章 プログラミング概念入門 * 第I部 一般的計算モデル  * 第2章 宣言的計算モデル  * 第3章 宣言的プログラミング技法  * 第4章 宣言的並行性  * 第5章 メッセージ伝達並行性  * 第6章 明示的状態  * 第7章 オブジェクト指向プログラミング  * 第8章 状態共有並行性  * 第9章 関係プログラミング * 第II部 特殊化された計算モデル  * 第10章 グラフィカルユーザインタフェースプログラミング  * 第11章 分散プログラミング  * 第12章 制約プログラミング * 第III部 意味  * 第13章 言語意味 第一回である今回は「はじめに」と「第1章 プログラミング概念入門」を扱います。初回なので読んでくることだけで大丈夫です(Wantedly 社内からも数人が参加予定です)。 なお、この本を持っていないという方は Amazon で中古で買うか、英語でも構わないという方はオンラインの PDF を利用するのがおすすめです。その他、大学図書館を利用するというのも手かもしれません。

なぜ開催するのか

実用的なプログラミングの学び方はいろいろありますが、プログラミングというもの自体について徹底的に扱った書籍を利用するというのはその一つです。 有名な古典として "Structure and Interpretation of Computer Programs"(邦題:計算機プログラムの構造と解釈, 1985年) がありますが、ここでは比較的新しい "Concepts, Techniques, and Models of Computer Programming"(邦題:コンピュータプログラミングの概念・技法・モデル, 2004年) を読みます。この本を選んだ理由として、並行・分散プログラミングのような現在では実務的にも重要になっている領域のモデル・技法も逐次的なプログラミングと同等程度に重視して取り扱っていること、サービスのアーキテクチャのような大規模なソフトウェアの設計をする際に通用するような方法でプログラミングの概念と技法を教えていることがあります。 これを読むことでプログラミングについて深く理解し、小手先仕事ではなく、確たる判断軸を持って適切にプログラミングをできるようになることがこの会の目的です。 なので、例えばプログラミングを始めて、ひとまず動くものは作れるようになったけど、任意の言語で様々な領域のものをどう書くか、なぜそのように設計するのか、といったことについてはまだ一貫して説明できないと感じているような人や、経験は積んだけどあまり体系的に学んでこなかったというような人の方が得るものが多いと思います。 以下、本書まえがきより一部を抜粋したので、興味のある人は読んでみてください。 --- 【この本の目的】 - プログラミングを教えること - この本の主目的は、プログラミングが統合的な学問である、ということを教えることである。プロのプログラマに役立つ科学的な基盤を伴う統合的な学問である、ということを。 - プログラミングとは何か - 本書ではプログラミングを一般的な人間の行為、すなわち、システムの機能を拡張あるいは変更する行為、と定義する。プログラミングは広範囲にわたる行為で、非専門家(例えば、目覚まし時計や携帯電話の設定を変更する消費者)および専門家(コンピュータプログラマ、すなわち、本書の読者)によって行われる。本書はソフトウェアシステムの構築にピントを合わせている。システム構築の場において、プログラミングはシステム仕様と、それを実装するプログラムとの間のステップである。このステップは、そのプログラムのアーキテクチャと抽象化を設計することと、それらをプログラミング言語によってコーディングすることとでできている。これは広い見方であり、おそらく普通、「プログラミング」という言葉に付与される意味合いより広いであろう。これはプログラミングを「狭い意味」にも「広い意味」にも捉えている。つまり、(言語に関係しない)アーキテクチャの問題も、(言語に関係する)コーディングの問題も含んでいる。ある特定のプログラミング言語よりはさまざまな概念とそれらの使い方を基礎にしている。こういう広い見方が、プログラミングを教えるのに自然であると思う。ある特定の言語や設計法の限界に足を引っ張られない。特定の状況下では使用するツールの機能と限界を考慮して、この一般的な見方を調整する。 - 科学であり技術である - 科学であり技術であるこのように定義したプログラミングには、2つの重要な面がある。技術とその科学的基盤とである。技術とは、プログラムの実行を可能にするツール、実用的技法、および規格である。科学とは、それによってプログラミングの理解を可能にする予言能力を持つ広く深い理論である。理想としては、科学は技術をできるだけ直接かつ有効に説明すべきである。どちらか一方が欠けてもプログラミングはできなくなる。技術が欠けると純粋数学と変わらない。科学が欠けると小手先仕事になる。すなわち、深い理解に欠ける。よって、プログラミングを正しく教えるとは、技術(現在のツール)と科学(基礎的概念)とを共に教えることである。学生がツールを知ることは現在に対する備えである。学生が概念を知ることは将来の発展に対する備えである。

こんなことやります

隔週で一章ずつ進めていきます。事前に GitHub (https://github.com/wantedly/ctmcp-reading) で輪講形式で内容をまとめておいたり、課題を解いておき、集まった場で発表や疑問点・課題などを議論したりできれば良いかなと考えています。 主催者は過去に一通り読んだことがあるので、量感を考えながら進めます。以下が目次ですが、「第I部 一般的計算モデル」まではすべて読み、「第II部 特殊化された計算モデル」は「第11章 分散プログラミング」のみを採り上げる予定です。よって、全10回となります。 【目次】 * 導入  * 第1章 プログラミング概念入門 * 第I部 一般的計算モデル  * 第2章 宣言的計算モデル  * 第3章 宣言的プログラミング技法  * 第4章 宣言的並行性  * 第5章 メッセージ伝達並行性  * 第6章 明示的状態  * 第7章 オブジェクト指向プログラミング  * 第8章 状態共有並行性  * 第9章 関係プログラミング * 第II部 特殊化された計算モデル  * 第10章 グラフィカルユーザインタフェースプログラミング  * 第11章 分散プログラミング  * 第12章 制約プログラミング * 第III部 意味  * 第13章 言語意味 第一回である今回は「はじめに」と「第1章 プログラミング概念入門」を扱います。初回なので読んでくることだけで大丈夫です(Wantedly 社内からも数人が参加予定です)。 なお、この本を持っていないという方は Amazon で中古で買うか、英語でも構わないという方はオンラインの PDF を利用するのがおすすめです。その他、大学図書館を利用するというのも手かもしれません。

6人がこの募集を応援しています

会社情報

2010/09に設立

120人のメンバー

  • 海外進出している/
  • 社長がプログラミングできる/
  • 1億円以上の資金を調達済み/

東京都港区白金台5-12-7   MG白金台ビル4階

会場案内

東京都港区白金台5-12-7 MG白金台ビル4階

2/3人がエントリー

応募締め切り 2019/01/07 23:59

会場案内

東京都港区白金台5-12-7 MG白金台ビル4階

会社情報

2010/09に設立

120人のメンバー

  • 海外進出している/
  • 社長がプログラミングできる/
  • 1億円以上の資金を調達済み/

東京都港区白金台5-12-7   MG白金台ビル4階