ビープラウド社長のブログ

株式会社ビープラウドの社長が、日々の思いなどを綴っていきます。

BPStudy通算200回を開催しました

BPStudy(株式会社ビープラウドが主催するIT勉強会)が、2024年4月26日(金)に開催され、200回目を迎えました。

ここまで続けてこれたのも、登壇していただいた方々、参加していただいた方々、開催を手伝ってくださった方々のおかげです。感謝いたします。

記念すべき200回目は、私が登壇させていただきました。

資料は以下です。

speakerdeck.com

2011年11月には、ITmediaエンタープライズで取材していただきました(当時50回を超えた頃)。

www.itmedia.co.jp

コミュニティー運営の要諦 技術と人、人と人がつながる場所を作りたい

いろいろな人の考えを聞いたり話し合ったりすることで、会社以外の世界の考え方を知るきっかけになるとうれしい。その出会いが、こんな人になりたい、自分もこういうことをやってみたいというモチベーションにつながり、技術者が未来について考えるようになるといい

記事の中にこのように私のコメントが書かれていますが、これがBPStudyの理念であり、connpassの理念にもつながっています(上記のITmediaエンタープライズの記事が掲載された同じ月にconnpassもリリースされました)。

connpass.com

さまざまなコミュニティが積極的に活動し、横のつながりが強いというのはIT業界の文化であり、大きな特徴です。

今後、会社としても個人としてもIT業界のコミュニティに貢献できるよう、さらに活動していきたいと思います。

「Pythonプロフェッショナルプログラミング 第4版」は、エンジニアたちの実践知の結晶

「Pythonプロフェッショナルプログラミング第4版」を2024年2月16日に上梓しました。

書籍の構成

書籍の構成を下図に示します。

書籍の構成

本書は、第2章の「読みログ(読書ログを管理するWebアプリケーション)」というシンプルなアプリケーションを中心に展開しています(図中の赤い四角で示されています)。コードを書いて機能を実現する章は第2章のみであり、他の章はより品質が高く、効果的なシステム開発を目指すための内容になっています。

プロフェッショナルの開発現場のミッションと、活動から生まれる実践知

この構成をとった理由は、書籍のタイトルに掲げている「プロフェッショナル*1」な開発現場でのシステム開発が、単にコードを書くこと以上の意味を持つからです*2

プロフェッショナルな開発現場では、動作するアプリケーションを作ることだけが目的ではありません。限られた時間、人材、スケジュールの制約の中で、長期にわたり発展し、価値を創り出すシステムを構築することがミッションとなります。

ITが現代社会の基盤として不可欠な存在になっている今、その役割の重要性はさらに高まっています。

このミッションを果たすため、エンジニアは日々、時間を節約し生産性を高める方法、安定した開発や運用を支えるための知識や技術、効率的な仕事の進め方を学び、模索し、実践しています。

さらに、チーム内での相乗効果を最大化するためのコミュニケーション手法や情報共有の技術、効果的な作業進行方法も、日々改善しています。

また、技術やライブラリ、ツールは日々更新され、新しいものが次々と登場します。これらが実際に役立つかどうかを評価するためには、ドキュメントを読むだけではなく、実際に試用し運用してみることで、その利点や欠点を理解できます。このような活動を通じて経験を積み、感覚を磨いていきます。

これらの取り組みは、エンジニアとしての価値創造の土台であり、醍醐味の一つです。

本書は、これら日々の活動と努力の成果を集約したものであり、弊社エンジニアの実践知の結晶です。

おわりに

「Pythonプロフェッショナルプログラミング」初版の企画時に、私たちはこの書籍を「ビープラウドに新たに加わったメンバーが、ビープラウドの開発プロジェクトに円滑に参加するためのガイド」として位置づけました。この目的は現在も変わりません。

しかし、弊社が長年にわたり試行錯誤を重ねてきた実践知を集約した本書は、Pythonを用いた開発が活発な現代において、広く社会にとって価値ある一冊であると確信しています。

Pythonを用いた開発に携わる方々に、本書を手元に置いていただき、実践の際の参考として活用していただければ幸いです。

イベント開催のお知らせ(BPStudy)

「Pythonプロフェッショナルプログラミング 第4版」の共著者2名による勉強会(オンライン)を開催いたします。興味のある方は、ぜひご参加ください。 bpstudy.connpass.com

Pythonプロフェッショナルプログラミング 第4版

*1:ここでは職業として、報酬を得て行う仕事として定義

*2:プログラミングがシステム開発のコアな活動であることは認識しており、その価値を否定する意図はありません。

なぜ学ぶのか〜学びで生まれる価値

年末年始休暇に入り、通常より学びの時間を確保することができそうです。そこで、この機会に「人はそもそもなぜ学ぶのか」というテーマについて考えてみることにしました。

学びを通じて成長し、自分を創ることは人の根源的な欲求

私が子供の頃、文字を読めるようになったり計算ができるようになったりといった一つ一つの成長に喜びを感じたことを今でも鮮明に覚えています。学びを通じて成長することは、自分自身を創ることであり、創造の喜びをもたらします。この経験から、私は「学びを通じた成長、自己創造」は、人間の本質的で根源的な欲求だと感じています。

学びへの抵抗感と忌避

しかし、やがて「テストのため」「進級・進学のため」といった外的な圧力により勉強するようになると、徐々に学びに対する抵抗感や義務感が生まれます。特に、自分の好きなこと(スポーツや趣味、遊びなど)を犠牲にするフラストレーションは大きいものです。確かにテストで良い成績を取ったときの達成感はありますが、私自身は勉強への抵抗感、義務感が勝っていました。この段階で「学ぶこと」が苦痛だと感じると、その後の人生で無意識レベルで学習を避ける傾向に陥る人も少なくないでしょう。

なりたい自分になるための学びにシフトする

学びへの抵抗感や忌避が生まれたとしても、多くの人は「進学や就職のために必要だ」という理由で勉強という形の学びを続けます。就職を控えた学生や社会人は仕事で必要とされる技術や知識を、緊急感を持って学びます。

一方で「なりたい自分になるために学ぶ」という動機は「生きるために学ぶ」とは異なります。外発的動機に基づく「生きるための学び」と対照的に、内発的な動機に根ざしています。生きるための焦燥感に駆られて学ぶ時期も、自分の生きる力をつけるのに役立ちます。しかし、あるタイミングで「なりたい自分になるために学ぶ」にシフトしていくことが、自分の人生を主体的に生きるために必要ではないでしょうか。

自らを社会に活かすために学ぶ

安岡正篤*1氏は「人は何のために学ぶのか」ということについて以下のようなことを述べています。

人は自分を創るために学ぶのだ。そして、人生のあらゆる艱難辛苦にあっても動じないように、自分をおさめていく。自分を創るのは利己のためではない。世のため人のために自分を役立てるためである。自分を役立てるには、自己の徳を大成し、自己の才能・能力を練磨、向上させていかねばならない。それが学の本質である。成徳達材*2することによって、よりよき運命を創っていくのだ*3

私は2017年に流山高校で生徒たちに講演する機会をいただきました。

shacho.beproud.jp

その中で「なぜ勉強するのか?」という問いに対する答えとして「自分の強みをみつけるため」と話ました。自分の得意なことであれば、価値を生み出しやすく、それが社会のためになると考えたからです。

私は本を読んだり、何かを学ぶとき、「自分が学び進歩することで、社会も進歩する(学ばなければ、社会の進歩が遅れる)」とあえて大きく考えるようにしています。この考え方は、自分のモチベーション(使命感)を高めるのを実感しています。

学びは、人生を充実させ幸福感につながる

学生時代に勉強への抵抗感を感じたことが原因で、社会人になった後に学びをやめてしまう人もいます。確かに、プライベートな時間を楽しく過ごしたいという願望は理解できます。しかし自分の人生を充実させるために、それだけで十分でしょうか。冒頭で述べたように「学びを通じて成長し、自分自身を創ること」は、人間の本質的かつ根源的な欲求と言えます。

この根源的な欲求を満たすためにも、学び続けることは自分を幸せにする道です。

加えて、その学びが仕事や社会に役立つと、それによって得られる喜びも大きいものです。

学びの他の効果としては、自分に興味のあるジャンルであれば自己目的的に学ぶこと自体が楽しい、学ぶことで知識欲が満たされる、知識が増えることで世の中の事象が解像度高く見えて生活や仕事に役立つ、などが挙げられます。

このように「学び」には、人生を充実させ、幸福感をもたらす力があります。

自分の人生を充実させるためにも、学び続けることを心掛けたいと思います。

*1:日本の易学者、哲学者、思想家。金鶏学院の開学、国維会、師友会の創立など、日本主義の立場から保守派の長老として戦前戦後に亘って活躍した。 (Wikipedia)

*2:成徳は徳を高め、大成させること。達材は能力を練磨し、上達させること。江戸時代の長州藩の藩校「明倫館」の学風とされる

*3:「人生の法則(致知出版)」P.199

「実践Django」は筋肉質かつ骨太で、技術書のお手本のような書籍

学生時代にビープラウドで仕事をされていた@c-bataさん執筆の実践Django Pythonによる本格Webアプリケーション開発を拝読しました。

読み終わり感じたことは「筋肉質で骨太な書籍である」ということです。

筋肉質である

なぜ「筋肉質」かというと、それは書籍の構成にあります。

構成は、1章のチュートリアルを一通り学べば、Djangoの主要機能を広く学ぶことができ、さらに知識を深めたい場合は、2章以降を必要に応じて読めば良い構成になっています。

また各章は、必要最低限の要素が学べる洗練されたサンプルコードをもとに説明されています。

これは現場でDjangoを使った開発に取り組む必要があり、短時間で学ばなければならないエンジニアにとってとてもありがたいことです。

骨太である

「骨太」という点においては、各章の説明が充実していることです。

実運用するWebアプリでは、機能を動かすだけではなく、保守性を高めるための設計、性能やセキュリティなどの非機能要件も当たり前に求められます。

本書は、機能を作るための説明だけではなく、性能問題(N+1問題)、セキュリティ(SQLインジェクション、XSS、CSRF)、再利用性を高めるための設計などについて説明されています。そのあたりが書籍のサブタイトルにもある「本格Webアプリケーション開発」に該当すると思います。

必要かつ十分に説明されていますので、開発現場の時間に余裕の無い中で確認する時にとても役立つでしょう。

業界で活躍している方たちがレビュワーとして参加している

謝辞に書かれていますが、PythonやDjangoでの開発に長年携わり、Python関連の書籍を執筆したりカンファレンスで登壇するなどの実績のある方々がレビュワーとして参加されています。

筋肉質で骨太な内容は、このレビュワーの方々とのコミュニケーションの中で生まれていったのかも知れません。

そのように技術書籍としての品質が高められているという点でも、この書籍をおすすめしたいと思います。

最後に

本書は、Djangoを速習することもでき、深く学ぶこともできる技術書のお手本のような書籍と感じました。

すべてを読み終わり知識が身につけば、Djangoについて中級以上の知識が身についているといえるでしょう。

Djangoの書籍を探している方に「実践Django」を是非おすすめしたいと思います。

価値創造に必要な「価値」を明確化するスキル

本記事は、匠塾 Advent Calendar 2021の12/23の記事です。

プロジェクト(仕事)の目的は、価値を届けること

2021年8月にPMBOK(Project Management Body of Knowledge)の第7版がリリースされました。第6版までは「成果物を届けること」が主目的であったのに対し、第7版は「価値を届けること」が主目的になりました。

この変更は、予測型(PMBOKでは第6版まで)から適応型(同第7版)への変化とも言われています。

「予測型」は、「あらかじめ決められたとおり(予測したとおり)に仕事をしていれば価値が生まれる」という前提に立っています。予測型の開発では、その前提のもとに「決められたことを、しっかりやり遂げること=成果物を届けること」にフォーカスします。

「適応型」は、「あらかじめ決められたとおり(予測したとおり)に仕事をしても価値が生まれない」という前提に立っています。適応型の開発では、その前提のもとに「状況に適応して行動し、価値を生み出すこと」にフォーカスします。

ソフトウェアエンジニアの仕事で言えば「ソフトウェアを作ることが仕事」から「価値を創ることが仕事」になったといえるでしょう。

PMBOKの第7版の変更点については、以下の記事が参考になります。

note.com

「価値」を明確化する匠Method

「価値を届けること」を目指して皆で仕事をするときに、目指す対象が曖昧であれば、開発プロジェクトは迷走してしまいます。目指す対象とは価値のことです。

一方で価値を明確にしておけば、その実現のために各自で考え動き出すことができます。

価値を表現し明確化する方法として有効なのが、匠Methodです。*1

匠Methodでは、価値を表層的価値深層的価値という2つの価値で表現します。

表層的価値とは、製品やサービスを使うことによって得られる機能性やデザイン性などの価値です。価値といわれて思い浮かべるのは、この価値でしょう。

深層的価値とは、自分たちの内面にもつ価値です。一般的にストーリーとして表現され、ビジョン、意志、価値観などで表されます。

匠Methodでは、表層的価値を価値分析モデル、深層的価値を価値デザインモデルという図で表現することで、価値をカタチにします。

※各モデルについては以下のスライドを参照してください。(価値分析モデルは、P36、価値デザインモデルはP39)

speakerdeck.com

匠Methodの価値のモデル(価値分析モデル、価値デザインモデル)を、開発のスタート時点でつくることで、目指すべきものが明確化されます。

もちろん、プロジェクトのスタート時点でつくった価値のモデルも仮説でしかありません。

ソフトウェアをリリースし、使用されることで新たな価値が見えてきます。

ソフトウェアを使用した学びの中から、価値のモデルを洗練させていくことが必要です。

ビジネスでの開発に求められる仮説検証サイクル

ビジネスでの開発では、仮説検証のサイクルが求められます。*2

開発のスタート地点で、このようなものをつくればうまくいくという仮説をカタチにして人に見せる必要があります。

なぜなら、仮説も無しに企業が人員をアサインすることはほぼ無いからです。「未知のジャンルなので、とにかくやってみよう」という場面でも、最低限の仮説は求められるでしょう。

仮説を立てるときの注意点としては、頭でっかちにならないことです。

頭でっかちにならないためには、仮説をスピーディーにつくることです。

匠Methodの価値のモデルはシンプルなので、慣れれば数時間で価値の仮説を作成できます。

価値のモデルがうまくつくれないのであれば、そのアイデアで進めても、価値は生まれないかもしれません。

まとめ

「価値を届けること」を目指して皆で仕事をするときに、匠Methodで「価値」を明確化することが有効です。

また、ビジネスでの開発では仮説検証のサイクルが求められるので、匠Methodで価値の仮説をつくってみるとよいでしょう。

匠Methodについて知りたい方は、以下の書籍を読んでみてください。

匠Method: 〜新たな価値観でプロジェクトをデザインするために〜

*1:ビープラウドでは、自社サービスの開発、受託開発、自社の方針決めなどで匠Methodを活用しています

*2:仮説検証のサイクル=まず仮説を立てて行動によって仮説を検証していくこと。それを繰り返すこと

『PythonユーザのためのJupyter[実践]入門』は、Pythonでデータ分析を始める人に最初におすすめの書籍

PythonユーザのためのJupyter[実践]入門を拝読しました。3人の方々はビープラウドのひとたちとも親しくして頂いてる、池内 孝啓さん, 片柳 薫子さん, @drillerさんの執筆です。

本書の構成

本書の構成を下図にまとめてみました。

f:id:haru860:20210321124747p:plain

図に書いたとおり、本書は大きく3つのパートに分かれています。

1つ目はデータ分析ツールについての章です。1章と2章は本書のメインツールであるJupyterLabの環境構築方法と使い方の基本を紹介しています。最終章の8章は環境構築の必要がないクラウドツールのColaboratoryの紹介です。

2つ目はPythonでのデータ分析で最も使われるpandasでのデータ処理の基本を説明しています(第3章)

3つ目は、データの可視化です。標準的ツールであるmatplotlib、matplotlibをラップして使いやすさを向上したseaboanについて説明しています。matplotlib、seaboanともにまずグラフの描画方法を説明し、そのあとにさらに使いこなす方法を説明しています。本書のコアはこの3つ目のパートであるといえるでしょう(4〜7章:合計230ページ)

Pythonでデータ分析を始めたい人が、足回りの知識を揃えるのにおすすめ

本書の読み進め方は、以下のようになると思います。

  1. データ分析ツール(JupyterLab)の環境を構築し、基本的な動かし方を学ぶ(1,2章)
  2. Pandasのデータ処理の基本を学ぶ(3章)
  3. グラフの可視化の基本を学ぶ(4章、6章)
  4. 可視化のための細かい指定方法、設定方法を学ぶ(5章、7章)
  5. クラウドデータ分析環境のColaboratoryについて知る

本書の特徴となる章は、5章、7章です。Excelでもそうですが、データを可視化する時に細かい指定方法や設定方法を調べていると、意外に時間が過ぎてしまうものです。そうなるとデータを分析する本質的な作業に使える時間が少なくなっていきます。 本書の5章、7章(matplotlibを使う場合は5章、seabornを使う場合は7章)をひととおり学んでおけば、データ分析の作業に使う時間を増やせるでしょう。

また本書はPythonのデータ分析の基本についてひととおりまとまっていますので、実務のときも本書をリファレンスとして手元においておけば重宝しそうです。

「PythonユーザのためのJupyter「実践」入門」は、Pythonでデータ分析を始めてみようという方におすすめの書籍です。

改訂版 Pythonユーザのための Jupyter[実践]入門

独習Pythonは、入門書の次のスモールステップとしてオススメ

山田祥寛さんが執筆した独習Pythonを拝読しました。

独習Python

独習Python

著者の山田祥寛さんは、WingsProjectという執筆者コミュニティ(会社でもある)を運営されていて、200冊近くのプログラミング、技術書籍の執筆、監修の実績があります。(その他、雑誌記事やWeb記事など多数)

私も2005年から2010年の期間、雑誌記事(JavaPress、DB Magazine、ムック本)やWeb記事(CodeZine、@IT)をWingsProjectの1メンバーとして執筆させていただき、山田さん(ご夫妻)に監修いただきました。Codezineに掲載したDjangoチュートリアルGoogleAppEngineの記事ははてなブックマークでホットエントリー入りもしました*1

前置きはこのあたりにして、独習Pythonの特徴を紹介します。

対象者

  • 入門書でPythonを動かしてみたが、知識が頭の中でまとまっていない人
  • 他言語を知っていて新たにPythonを学ぶ人
  • Pythonについて体系的な知識を学びたい人

Pythonの対応バージョン

3.8(この記事を書いた2020年8月時点で最新)

Pythonの文法を基本から応用までひととおり学ぶのに最適

Pythonプログラミングの入門書(たとえば、いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで 「いちばんやさしい教本」シリーズ)を読んで、なんとなくプログラムを動かせるようになった次のステップは何をすればよいでしょうか。

それは、Pythonの文法や書き方をひととおり憶えることです。

入門書の次のステップとして自分のつくりたいプログラムをつくりながら都度文法を調べるという方法もあります。

しかし、その方法だとなんとなく動いてしまったために適切な書き方を知らないままになってしまい、悪い癖がつくなどの弊害が生まれます。

そのようなことにならないためには、入門書の次のステップとしてはPythonの文法を網羅的に学ぶのが良いでしょう。

独習PythonはPythonの基本からひとつひとつ丁寧に説明が始まり、応用レベルの文法まで解説されています。

応用的な内容として、特にオブジェクト指向構文については110ページを割いて丁寧に説明されています(10章、11章)。

オブジェクト指向はプログラミングのレベルを上げるための必須スキルなので、じっくり読んで理解できるまで取り組んでみるとよいでしょう。

学ぶペースとしては基本的な内容である1〜8章を1日1章ペースでさくっと進め、9章〜11章は1節ずつ自分のペースで読み進めていくのがよいでしょう。

ひととおり学んだ後もプログラミングのリファレンスとして活用できる

山田さんの書籍の特徴は、書籍が網羅的でかつシンプルにまとまっていることです。独習Pythonもその例外ではありません。

網羅的でかつシンプルな構成なので、ひととおり学んだ後もプログラミング時のリファレンスとして活用できます。

プログラミングのときに手元に置いておくと役に立つでしょう。

私もプログラミングが主な仕事のときは山田さんの書籍で学び、知識を身につけていました。特に新しい言語を学ぶ時は手元に書籍を置き、ことあるごとに読み返していました。

プログラミングで大事なことが随所に書かれている

プログラミングには「書くことはできるが書かないほうが良い書き方」があります。

コードは他の人が最短時間で理解できるように書かなければならない」とはリーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)に書かれている「読みやすさの基本定理」です。

「書くことはできるが書かないほうが良い書き方」をしてしまうと、他の人(将来の自分も含む)がプログラムコードを理解するスピードが落ちてしまいます。

文法を学んだだけではこれに気づくことができず、実践の場でレビューされて初めて気づく(もしくは気づかないままプロダクトコードに埋め込まれてしまう)などといったことになりがちです。

独習Pythonでは文法を説明するだけでなく、どのように書いたら良いかという点についても折りに触れて説明されています。

この説明を理解することにより、学んだ文法を適切に使うことができるでしょう。

まとめ

Pythonプログラミングの入門書を読んだ次の書籍として独習Pythonで文法をひととおり学ぶことで、中級プログラマーへの土台をつくることができるでしょう。

網羅的かつ簡潔にまとまっていますので、他言語を知っている人がPythonを学ぶ際にも役立つ書籍です。

Pythonの本もいろいろ出ていますが、これからPythonをじっくり学びたい人には独習Pythonをおすすめしたいと思います。

WebでPythonを学びたい人は、オンラインPython学習サービスのPyQもありますので、よろしくお願いします。

独習Python

*1:httpからhttpsへのURL変更でブックマーク数がリセットされてしまったのが残念です。