こんにちは。PyQ開発チームの清原 id:hirokiky です。 プログラムを書く中でこんな悩みはありませんか?
- 「書いてみたけどキレイにまとめられないな。。」
- 「この処理ちょっとネストが深すぎるかな。。」
- 「この関数、再利用性があまりよくないかもな。。」
これはプログラミングしている常についてくる悩みだと思います。 自分のプログラムを見直したときや、レビューを依頼する・される場合にも常に悩ましいことだと思います。
とくに仕事で複数人と協力してプログラミングする場合や、中長期的にプログラムを改良していく場合に必要なスキルです。
それが 「設計」 です。
ですが設計のノウハウや勘所を学ぶには、それなりな時間や経験が必要だと思います。 人に教えるのも難しい点だと思います。
それを学べる学習コンテンツを追加しました。 以下のリンクから学習いただけます。
PyQで学べる「設計」とは
今回はPyQに「設計」を学べる学習コンテンツを追加しました。
- Pythonのプログラムをキレイに書き直す方法
- 関数に分離するポイントと設計の勘所
- Pythonファイルの分割する基準
- クラスの使いどころと利点
- コマンドとして使いやすく設計するポイント
Pythonプログラムの過剰なネストをやめる書き方や、関数への分離する際の基準、Pythonファイルを分割する際の基準などについて学べます。 ただし大規模なシステムの設計やテーブル設計については学べません。 あくまでもプログラムの書き方を通してPythonプログラムの 設計の基本 を学んでもらうコンテンツになります。
- Pythonを学ぶ人へ: 関数やPythonファイルをどうまとめれば良いのか分からないので知りたい、という人へオススメします
- Pythonを教えたい人へ: OJTやレビューで伝える前に設計の基本について知っていておいて欲しい、という人へオススメします
「設計」をなぜ伝えたいのか
設計というのは何よりも学ぶ・教えるのが難しい内容なので、PyQで学習できるようにしたいという思いがありました。 「設計」について詳しく書かれた本は抽象的であったり、実務やコーディングを通しながら 設計を会得できる 教材は無いように思います。
「設計」や良いプログラムの書き方を教えるよくある方法は、職場でのOJTやソースコードレビューを通して伝えていくことだと思います。 個人の学び方としては、他の人のプログラムを読んで勘所を徐々に学んでいく方法があります。
ですが2点問題があります
- 学ぶのに時間がかかる
- 良いプログラムや師に巡り会えないと学べない
- 人の「好み」が強く意見の対立が発生しやすい
という点です。
こういった問題を解決するため、長年のノウハウを簡単に学べて、かつ「共通認識」を作れるコンテンツとしてPythonの「設計」を作りました。
共通認識・常識としての教材の大切さ
例えば「リーダブルコード」という本があります。この本はプログラミングにおいて一般的な「良い書き方」を教えてくれる本です。 この本を読めば簡潔なプログラムの書き方を学べますし、「リーダブルコードに書いてたでしょ」という共通認識を作ることもできます。
これは非常に重要なことです。プログラミングスキルが今後より一般的になる中で「底上げ」になる学習教材はすごく大事ですし、共通認識・常識として広まれば業界全体のコミュニケーションコストも下がります (他にも「現場で役立つシステム設計の原則」や「SQLアンチパターン」、も同じ意味でも良い本です)。
PyQの「設計」で実現したいこと
Pythonにおいても関数の分離やファイルの分離、クラスの使い所や定数の置き方などのノウハウがたくさんあります。 ですがそれらが「形」として世に出ていないのは残念です。 そのためにPyQでPythonでの「設計」が学べるコンテンツを作りました。
- 長い時間が必要と言われていた 勘所までPyQですぐに学習 できた
- 「PyQの『設計』に書いてたでしょ」とレビューで言える ようになった
そういった使われ方をされると嬉しいなと思っています。
もちろん、より深い設計のノウハウやシステムレベルの設計は今のPyQでは学習できません。 簡単に伝えられる知見だけでもありませんので難しい面もあると思います。 まだまだ私自身や弊社のノウハウを、学習コンテンツとして書き出しきれていない部分も多分にあります。
ですがその1歩目として「設計」を学習できるように作りました。今後も拡充していきたいと思っております。
「長年の勘所」にすら「知の高速道路」を
プログラミングの技量には、単に文法を知っているかや、プログラムを単純に書けるか以上のものがあります。 そういった長年の努力が必要だった「ノウハウ」や「勘所」も含めて学べる「知の高速道路」を、PyQを通して提供できればと思っています。