見出し画像

「Laravelでテスト駆動開発を学ぼう!」を書いたのでついでにプログラミング学習および教育に対して考えていることを書く

この記事について

本日(2020年6月25日)、Techpit にて私の書いた「Laravelでテスト駆動開発を学ぼう!」というタイトルの教材をリリースしてもらいました。
経緯とか込めた思いとかをまとめました。

Techpit とは

テックピット社が運営する「サービスを作りながらプログラミングが学べるプログラミング学習教材のマーケットプレイス」で、オンラインでプログラミング関連の教材を販売しているサービスです。教材の制作はテックピット社がするのではなく、外部の希望者がするという、いわゆる C2C なのが特徴です。

きっかけ

Twitter で Techpit に言及したら、お誘いがきました。

執筆理由

運営の方たちとディスカッションして、どんなテーマがいいかを絞っていく過程で、プログラミング初学者の方がチュートリアルを終えたあと、実務で役に立つようなものがいいですね、ってことになって、いくつか候補を出した中で、「テスト」に決まりました。

ソフトウェアエンジニアのやるべきことの中で、「世の中にソフトウェアを提供して価値を生み出すこと」が第一ではあると思っているんですが、「継続して価値を生み続けること」「顧客の要望の変化に追従してサービスも進化できること」みたいな、中長期的な視点で考えたときに求められる事柄は、自動テストがある、日常的にリファクタリングがされている、変更に強い設計になっている、といったような、ソフトウェア(プロダクト)そのものの価値に加えて、ソフトウェアの価値を保つためのプロセスや考え方の価値というのもあると感じていて、そういったプロセスの導入や考え方を持った人材の育成というものももう少し必要なんではないか、と思ったのがこのテーマを選んだ理由です。

Techpit では質問を受け付けてそれにたいしてこちらからリアクションが取れるようになっているのもいいなと思いました。もともと、教材みたいな一方向のコミュニケーションの形態はあまり好きじゃなくて、ワークショップとか双方向でやれるような形態のほうが好きなので、たくさん質問が来るといいなぁと思っております。

教材のおすすめポイントについて

自分で書くのもアレですが、どうテストを書くか、っていうのがわかりやすく書けたんじゃないかと思います。本家の「テスト駆動開発」(Kent Beck 著)は好きな書籍なんですが、ちょっと長いし細かいなとも感じていて、もちろん、思考に沿ってステップ・バイ・ステップで流れを説明するとああいう感じになるかもしれないですけど、人間の思考はもうちょっと飛躍的な部分もあるので、もうちょっとシュッとしたい、という気持ちでした。

Laravel はテストを書きやすくするために PHPUnit を拡張していて、至れり尽くせりなフルスタックフレームワークらしく、テストの敷居を低くしてくれていると思います。文化的な問題や技術的な問題から、これまで自動テストを導入していないチームもいくつかありましたが、近年は増えてきていると思います。それでもやはり、Laravel 以外のフレームワークでは相対的にコストが高いと感じています。それでも、せっかく Laravel を使っているのにテスト書いてない or テスト書くコストが高くなってしまっている、みたいな状況に出くわすこともあり、あーもっと簡単に書けるのにーという歯がゆさもありました。

Laravel + テスト駆動開発は、DX(開発体験)もプロダクト品質も高める最高の組み合わせだと思うので、Laravel 使ってるけどテスト書いてない、というチームでぜひ参考にしてほしいと思います。

プログラミング学習と教育をどうやって実務で通用するレベルに引き上げるために適用するか

私自身は独学でプログラミングを学んだので、当たり前にやるべきこと・やってはいけないこと、みたいなものを身につけるのに随分と時間がかかりました。

私が駆け出しだった時代(20年前)は、いまのようにインターネット上で良質なコンテンツが手に入るような時代ではなかったので、書籍もたくさん買いましたが、本はマスに向けて書かれるものである以上、やはり、実務との乖離は至るところにあります。

同じものがひとつとしてない、というのがソフトウェアの特徴でもありますし、個々の事例が持つ背景やしがらみなどが問題を複雑にしたりして、本で身につけた知識が活かせない(そのまま適用できない)局面は多々あるので、どうやってそういう「応用問題」を解けるようになるか、というのがカギになる気がします。

また、どんなものでも学習とは反復が伴ってはじめて効果が高まるものなので、ひとつのテキストが学習にもたらす効果は大きくないと思いますし、あくまでもきっかけやヒントにしかなりえないと思います。教材やプログラミングスクールがそうした反復を支援していくことが課題なひとつと感じています。

プログラミングを本で学ぶことはあくまで基礎であって、そこから先の、プロとしてなにができないといけないか、なにをしてはいけないか、というのは実務で学んでいかなくてはいけないと思いますが、それでも、本や講義を通じて基本となるような考え方や姿勢を伝えることはできると思います。

正解のない領域もたくさんあるソフトウェア開発なので、いろんな考え方や問題に対するアプローチのしかたがありますし、これまでも多様なチームや個人と接してきて、世の中には本当にいろんなひとがいるなぁと思ったことが何度もあります。自分が「善」と思っている価値観や行動が、他のだれかにとっては「善」とならないこともある、というのはどの仕事やコミュニティでもそうだと思いますが、自分自身の軸というのは必要だと思います。プログラミング学習や教育には、そうした価値観とか軸となる考え方も教える(というか提示する)機会を増やしてほしいと思います。個人的には「達人プログラマー」とか「プログラマが知るべき97のこと」といった本からそういうことを学びましたが、職場の先輩からの教えも大きかったです。技術力は反復によってあるていど向上するものですが、考え方や哲学は、きっかけがなければなかなか変わらないものだと感じます。

おわりに

「テスト駆動開発」は「正しく動き続けるソフトウェアを構築する」ための方法論でもあると同時に、開発者に「安心」を提供するための仕組みでもあります。私の中で「テスト駆動開発」は、数ある「プロとして身につけておきたいこと」の中でかなり上位に位置していて、全力でおすすめしたいので、日々の学習にも取り入れていってもらいたいと思います。

「Laravelでテスト駆動開発を学ぼう!」はこちらで購入できますので、これを読んで興味が出てきた、という方はぜひ読んでみてください。

https://www.techpit.jp/p/laravel-tdd




この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
9
a lazy freelance programmer

こちらでもピックアップされています

怠惰なフリーランスソフトウェアエンジニアの考えごと
怠惰なフリーランスソフトウェアエンジニアの考えごと
  • 5本

主にウェブアプリケーション開発に関連した諸々について、考えていること、やったこと、やってみたいこと、などを書いています。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。