質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

意見交換

5回答

818閲覧

可読性、保守性の高いコードを作るために読むべき必読書

kkjiji

総合スコア42

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

3クリップ

投稿2025/03/01 12:22

テーマ、知りたいこと

プログラミングをする上で可読性、保守性など品質の高いコードを開発するために勉強するべきことについて意見を伺いたいです。
基本的には参考書で勉強をしたいと思っていますが、参考になった勉強法やWebサイトもご紹介いただけると嬉しいです。

背景、状況

生産工程にAIを導入するような部署に所属しており、少人数ながらチームで開発を行っています。
開発言語としてはpython,C++,C#を使っています。
一通り上記3つの言語は書けるので、いろいろな仕事を振られたり、人のコードを修正する機会が多いです。

そこでバグがあったときなどに原因がどこにあるのか特定しやすい、修正しやすいようなコードを作りたいなと最近思うようになりました。

現状の取り組みとしては、「良いコード/悪いコードで学ぶ設計入門」という本を読みました。
次に有名な「リーダブルコード」を読んでみようと思っています。

レベル的には中級者になれたかどうかくらいのレベル感だと思っていますが、コーディング上級者の方々がどのように品質の高いコードを開発しているのか教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答5

#1

utm.

総合スコア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#も冗長な部分が多い、正直これらの言語は読みやすさ的な部分は切り捨ててるんじゃないかと個人的には考えています。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

kkjiji

総合スコア42

投稿2025/03/02 03:06

#1
ご回答いただきありがとうございます。

リーダブルコードに関しては口コミを見ていると同じような意見が散見されました。
日々変化しており、少し情報としては古いのかもしれないですね。。

やはり可読性やバグの修正のしやすさを考えるとそれぞれの依存性関係が小さいほうがいいというのは私もとても感じます。
他の方のコードを修正する機会が今は多いので特に気になりますね。

また、提示いただいたサイト拝見させてもらいます。
プログラミング以外の分野を勉強する機会がなかなかないですが、こういった視点も持つべきだなと思いました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

meg_

総合スコア10881

投稿2025/03/02 04:48

編集2025/03/02 04:56

可読性についてです。お勧めの参考書についてではないのですが、参考書を読んでいて下記の様なコードはイヤだなぁと感じます。

  • 変数名が統一されていない(例:index と idx)
  • コメントが少ない(関数の説明はしっかり欲しい)
  • Pythonで複雑な内包表記を使っている
  • 古い書き方を使っている

比較的新しい参考書においても「古い書き方」が載っていたり、新旧が混在していたりすることもあります。ですが新しい書籍のほうがやはり良いかと思います。
あとは出版社のフォローがちゃんとしている所が良いかと思います。(正誤表の対応、githubの更新対応など)誤植があまりに多いものも避けた方が良いかもしれません。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

SaitoAtsushi

総合スコア5710

投稿2025/03/03 15:07

私がプロのプログラマだったことはないので体験に基づくものではないということは先にお断りしておきます。

可読性は書き手と読み手の共通認識が重要であると考えます。 最高にモダンで洗練された形にプログラムを整理したとしても読み手がそのスタイルに馴染んでいなかれば可読性は悪いと言えます。

逆に皆が一貫した思想を共有できているなら古臭い方法でも上手くいくでしょう。 ツール類のサポートが変わっていくことはあるので考え方をずっと更新しないというわけにはいきませんが。

可読性向上に取り組むなら自分が皆のために何かしようとするだけでなく、皆で取り組まないと成果に繋がらなさそうだという印象です。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

fana

総合スコア12136

投稿2025/03/04 02:26

必読書

という話から大きくズレた与太話ですが……

個人的に他人のコード(あるいは昔の自分のコード)を読むときに,「これって失敗したらどうなるの?」みたいなのが明言されていないことが多くて不安になります.

bool Load( FilePath ) //何かファイルから読込んでオブジェクトの中身ががらっと変わる みたいなメソッドとか,失敗を返してきたとき,内部状態はどうなるの? とか.
bool GetXXXInfo( DstXXX ) //引数にデータが格納される みたいなやつも失敗時には引数に渡した物の状態はどうなるの? とか.

「常識的に考えて,メソッド呼び出し前の状態を保っててくれるんだよね? きっと」とか思うけど,この「きっと」って部分が嫌.
(そこが不明瞭なのに,どうして呼び出し側がなんとなく実装できてるんだよ? っていう)

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問