テーマ、知りたいこと
プログラミングをする上で可読性、保守性など品質の高いコードを開発するために勉強するべきことについて意見を伺いたいです。
基本的には参考書で勉強をしたいと思っていますが、参考になった勉強法やWebサイトもご紹介いただけると嬉しいです。
背景、状況
生産工程にAIを導入するような部署に所属しており、少人数ながらチームで開発を行っています。
開発言語としてはpython,C++,C#を使っています。
一通り上記3つの言語は書けるので、いろいろな仕事を振られたり、人のコードを修正する機会が多いです。
そこでバグがあったときなどに原因がどこにあるのか特定しやすい、修正しやすいようなコードを作りたいなと最近思うようになりました。
現状の取り組みとしては、「良いコード/悪いコードで学ぶ設計入門」という本を読みました。
次に有名な「リーダブルコード」を読んでみようと思っています。
レベル的には中級者になれたかどうかくらいのレベル感だと思っていますが、コーディング上級者の方々がどのように品質の高いコードを開発しているのか教えていただけると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
#1
総合スコア647
投稿2025/03/01 14:06
中級/上級などのクオリティの判断が私の中にないので若干回答するのが恐ろしいですが、参考になれば幸いかと思い回答させていただければと思います。
基本的に可読性や品質の高いコードを書こうと思えば、MVCやMVVMのようなアーキテクチャの考えに従って関心の分離や依存性の分離を行うことが非常に簡単(細かい厳密なルールを小さい部分に適用しなくてよいという意味での簡単)で強力かと思いますが、
そもそもとしてプログラミングは構成が自由でどのようなタイミングでどのような計算をしても動きはするというわけでして、チーム開発をする上でそのような構造的な部分についてはそれなりに規模が大きく、チームメンバーに理解が得られないかもしれませんし学習コストについてその学習が無駄に感じるかもしれません。
リーダブルコードについてはよく絶賛されている印象がありますが、すべては読んでいませんが個人的な感覚でいえば内容が古く現代のプログラミングには沿ってないのかなと感じることが多くありました。
「良いコード/悪いコードで学ぶ設計入門」は目次から確認し面白そうなページの段落を拝読して、個人的にはそれなりに面白く感じました。
何が読みやすいかだとかは自分の学んだ部分にかなり左右されるので、どれがベストかというのはないと思っています。
正直、良いパターンから外れるかもしれませんが何でもかんでも共通化する考え方は特に好きになれず、一緒にチームでやっていた方がかなり愚直なタイプだったのもあるのかもしれませんが、適切に共通化されていないと逆に癌レベルでした。(その人がリリースしたソフトはsqlのテーブル構造や更新処理のアルゴリズムがずさんで本番環境のデータが消えるなどの事態に陥るレベルだったのである種例外かもしれませんけども。。。)
例えば、私は以下のようなコードを意識的に書きます。
// text1ファイルに書き込む for (i = 0; i < 10; i ++) { text1.write(i) } // text2ファイルに書き込む for (i = 0; i < 10; i ++) { text2.write(i) }
ただ、ほとんどの人は以下のようなコードにしますよね。
for (i = 0; i < 10; i ++) { text1.write(i) text2.write(i) }
まあ、業務だとこんな短くないですが、後者だと書き込む位置の指定などで、より複雑になると書き換えた部分と影響する範囲、動作がよくわからない懸念があるんですよね。
前者でも書き込む回数は20回、後者でも書き込む回数は20回、
処理回数も同じなんで、まとめる必要がそこまであるのかは若干疑問なのですよね。(まとめたいという意見があるのもわかりますけど、まとめたくないという意見はなぜか無視されがち)
(なんか、回数を変えるときに大変とか言われそうですが、別に初期値も最大値も同じ変数参照すればいい)
まあでもこんなのはほんとに些細な問題で、本来はやっぱり小さいプログラムや依存関係の少ない/テスト(置き換え)しやすいコードを書けるようなやり方が本当の意味で可読性や保守性は担保されると思います。
そうだ。これを書きたくて回答しようとしたのに、忘れて投稿するところだった。
なんかqiitaとかいうサイトで、認知学で保守性高めようぜ!的な記事が人気みたいです。
https://qiita.com/megumi_i/items/e5bad16d8f0b7bb34000
本の内容はまだ知らないのですが、確かに試みとしては正しいだろうし面白いアプローチだと思いました。
プログラミングは様々な学問の影響を受けており、簡単な例でいうと集合論やブール代数のような数学的な部分ですが、オブジェクト指向なんかはもろに言語学のディープな学問領域を参考にしているのではないかと強く感じます。
知的労働であると考えた際には人間の思考の歴史としては哲学の学問的ベースとなった部分も広く理解のツールとして役立つと感じます。
簡単にインターネットで検索できるという割に学術的な部分は全くとして記事にされない世の中なので簡単に情報を蓄えるのに不便に思いますが、プログラミング自身の勉強以外にも離れたところから得て転用できる知識もやっぱり多いですね。
以下はプログラミング言語に対するただのヘイトですが、
c++は宣言的(関数型)の構文をサポートしていなかったり、pythonも素で書くと書き方の個人差やテクニックだったり、型についての考えがダックタイピングだったりで、C#も冗長な部分が多い、正直これらの言語は読みやすさ的な部分は切り捨ててるんじゃないかと個人的には考えています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#3
総合スコア10881
投稿2025/03/02 04:48
編集2025/03/02 04:56可読性についてです。お勧めの参考書についてではないのですが、参考書を読んでいて下記の様なコードはイヤだなぁと感じます。
- 変数名が統一されていない(例:index と idx)
- コメントが少ない(関数の説明はしっかり欲しい)
- Pythonで複雑な内包表記を使っている
- 古い書き方を使っている
比較的新しい参考書においても「古い書き方」が載っていたり、新旧が混在していたりすることもあります。ですが新しい書籍のほうがやはり良いかと思います。
あとは出版社のフォローがちゃんとしている所が良いかと思います。(正誤表の対応、githubの更新対応など)誤植があまりに多いものも避けた方が良いかもしれません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#4
総合スコア5710
投稿2025/03/03 15:07
私がプロのプログラマだったことはないので体験に基づくものではないということは先にお断りしておきます。
可読性は書き手と読み手の共通認識が重要であると考えます。 最高にモダンで洗練された形にプログラムを整理したとしても読み手がそのスタイルに馴染んでいなかれば可読性は悪いと言えます。
逆に皆が一貫した思想を共有できているなら古臭い方法でも上手くいくでしょう。 ツール類のサポートが変わっていくことはあるので考え方をずっと更新しないというわけにはいきませんが。
可読性向上に取り組むなら自分が皆のために何かしようとするだけでなく、皆で取り組まないと成果に繋がらなさそうだという印象です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#5
総合スコア12136
投稿2025/03/04 02:26
必読書
という話から大きくズレた与太話ですが……
個人的に他人のコード(あるいは昔の自分のコード)を読むときに,「これって失敗したらどうなるの?」みたいなのが明言されていないことが多くて不安になります.
bool Load( FilePath ) //何かファイルから読込んでオブジェクトの中身ががらっと変わる
みたいなメソッドとか,失敗を返してきたとき,内部状態はどうなるの? とか.
bool GetXXXInfo( DstXXX ) //引数にデータが格納される
みたいなやつも失敗時には引数に渡した物の状態はどうなるの? とか.
「常識的に考えて,メソッド呼び出し前の状態を保っててくれるんだよね? きっと」とか思うけど,この「きっと」って部分が嫌.
(そこが不明瞭なのに,どうして呼び出し側がなんとなく実装できてるんだよ? っていう)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。