本記事をご覧くださりありがとうございます。
管理人のコンです。
本ブログでは、私の体験談を交えながら様々な技術の紹介させていただいております。
そんな私ですが、最近はコードが綺麗に書けるようになった自信が出来ました。(あくまで個人の感想)
コードの読みやすさだったり、テキストファイルごとに役割を渡すことができたり。
去年よりも管理しやすいコードになったと考えてます。
そんな私の「これ勉強したらコード綺麗になった!!」という話を読んでいただければ幸いです。
ただし職種によっては、この記事で紹介するコード品質レベルの話じゃ全然足りないと感じる内容かもしれませんが、その点はご容赦ください。
必要な勉強
コード品質を上げるというのは抽象的な話で、人によって考える内容が異なりますよね。
例えば、ある人は機能に不具合がないコードを目指し、、別の人は意味がわかりやすい変数名を重視したり、適切なクラス設計を思い浮かべる人もいたり。。。
つまりコード品質を向上させるにはいくつかステージが存在して、求められるレベルもステージ事に違います。
このステージを1つずつ駆け上がるには、勉強もそのステージをレベルごとに分けたステップを踏むように進めていくのが良いと考えております。
以下に私が感じているPythonのコード品質を向上させるためのステップです。
抽象的かつ簡潔に書いてしまうと
Step1:テキストファイル単体の話
Step2:複数のテキストファイルにまたがった話
のステップで勉強することが大切かなと思っています。
さらに勉強していくと恐らくデザインパターンやOOUIだったりがあるとは思うのですが、まだ実感が伴っていないので今回は割愛しますが、とりあえずこの2つ(1.5があるけど)について話をしています。
Step1
まずは、以下のことをしっかりと実践しましょう。
- 文法とライブラリを学ぶ
- 基本的な書き方を学ぶ
をしっかり実践していきましょう。
プログラミングができるように感じるためには
まずは作りたいもの作りたいものを作るれるようにすることが重要です。
この段階でも難しい事は承知なのですが、コード品質向上という観点ではStep1です。
私が文法とライブラリを学ぶ際にいつも私がお勧めしているのは、Udemy講座の「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」です。
まずこの講座の1番の特徴は、圧倒的な情報量でPythonの基礎から応用まで幅広く学べます。
さらにPythonの言語だけじゃなくて、
データベース・webアプリ・フォルダ構成まで学べて、プログラマーじゃなくてソフトウェアエンジニアを育てるんだ!!という気持ちをすごく感じる講座でとても良いと考えております。
セールの時は1500円~2000円くらいで買えるので、セールの時を狙いましょう!!
さらにコードを綺麗に書くためには、変数の付け方やネストが深いコードにならないような注意が必要です。
ここで役立つ本が、皆様ご存知の「リーダブルコード」です。
色々な言語で書かれているので少し読むのが大変だと感じるリーダブルコード。
逆に言えば言語に依存せず大切なことを教えてくれるリーダブルコード。
良いコードを書くための実践的なテクニックが詰まっています。
Step1.5
「え?Pythonの話じゃなかったの?」と思われるかもしれませんが、ここで一旦
- ●C#の勉強
を挟みます。
この勉強で達成するべき事は何かを作れるようになることではなく、
クラスの書き方であったり、分岐の書き方などC#のコードをストレス少なめに読めるよう事です。
このステップ自体が直接的にPythonのコードを綺麗にするわけではありませんが、Step2の準備をすることが目的です。
Step2
Pythonである程度読みやすいコードを書けるようになったら
今度はソフトウェア設計・開発におけるアプローチや思想について学ぶと、複雑なロジックのコードの書き方が読みやすく書けるようになってきます。
特に以下の2点が重要だと考えています。
- ドメイン駆動開発を学ぶ
- テスト駆動開発を学ぶ
ドメイン駆動開発
ドメイン駆動開発とはドメイン(対象となるビジネス領域の知識等)を把握した上で、その知識を基にドメインモデル(データとロジックがひとまとめになったもの)を構成してソフトウェアに落とし込む開発手法です。
少し難しく書いてしまいましたが、この思想を学ぶことで、
●どのファイルにどのコードを書くべきか
●ドメインの知識がコード化・ドキュメント化される
ようになって、コード品質が劇的に向上すると思います。
ただドメイン駆動の手法や考え方についてはC#で書かれた書籍が多く、Pythonプログラマーにとっては少し残念かもしれません。
例えば私は「ドメイン駆動開発設計入門」という本で最初勉強を始めました。
この本もC#で書かれた本なので、Pythonプログラマーにとっては少しストレスを感じるかもしれません。
ただ内容は非常に分かりやすく、ドメインオブジェクトを表現するValueObjectやEntityなどの考え方や知識の凝集などが学べて非常にためになる内容です。
個人的にはドメイン駆動開発を学ぶことで、クラスとメソッドを読みやすく書けるようになったかと思います。
テスト駆動開発
ドメイン駆動開発を学ぶと、テスト駆動開発もより効率的に進められるようになります。
テスト駆動開発とは
- 失敗するテストを書く
- テストを実行して失敗を確認
- テストを成功させる最低限の実装したい関数を書く
- テストを実行し成功を確認する
- さらに別のテストを実行し失敗し、また成功させるように関数を書き直す
このように、失敗するテストとそれを修正するコードの書き直しを繰り返しながら、コードを少しずつ洗練させていくのがTDDです。
テストを書くことには、以下のようなメリットがあります。
コードの機能がドキュメント化される
テストコード自体が、実装した機能の説明書としての役割を果たすため、後から見直したときにもコードの意図が理解しやすくなります。
機能不具合の発生を防止
テストを通じて、コードが意図した通りに動作することを確認できるため、不具合の発生を防げます。
この時ドメイン駆動開発とテスト駆動開発が組み合わさることで、コードがドメインごとに整理されることで、テストコードの管理もより容易になります。
おわりに
ここまで読んでいただき、誠にありがとうございます。
Pythonを始めて10年になろうとしているのですが、最近思うことは
C#の勉強をもっとすれば良かった~
TypeScript勉強し始めていて良かった~
など、ようやく複数言語に触れることがすごい大切なんだなってことが実感として湧いてきました。
Python:ディープラーニング・機械学習や統計処理とか作図なりバックエンド処理なりなんでもできる。
C#:アプリケーション作成、オブジェクト指向などソフトウェア設計の考え方の本が非常に多い
TypeScript :フロントエンド作れるようになる
など、言語ごとに特徴や学べる点が沢山りました。
最後は私のつぶやきみたいな書き方になってしまいましたが
本記事が皆様の参考になれば嬉しいです。