プログラマーは、コードの表現力を高めるためにレッスンを書くべきですか?


15

プログラマーは作者であり、抽象的な思考や概念を表現するためのコードを書いているので、他のプログラマーは問題や誤解なく良いコードを読む必要があるので、プログラマーはより良いコードを書くためにレッスンを書くべきですか?

概念と現実世界の問題/エンティティを抽象化することは、優れたコードを書く上で重要な部分です。また、コーディングに使用される言語の優れた習熟により、プログラマーは自分の考えをより簡単に、またはより良い方法で表現できるはずです。また、コードを改善するためにコードを記述または書き換えようとすると、関数、変数、またはデータ構造の名前を決定するのに多くの時間を費やすことができます。

これは、異なるプログラマー間の誤解の原因となることが多い、複数の意味を持つコードの記述を避けるのにも役立つと思います。コードは常にその機能を明確に表現する必要があります。



2
18歳以上になった後、特に外国語を使用している場合(ITの場合など)に、人々が明確に書くことを学ぶことができればいいと思います。問題は、比較的短い時間で良い結果を達成できる教育方法があるかどうかです。私が大学に初めて入学したとき、私は科学英語のコースを与えられたことを覚えています。
-NoChance

1
「コード表現力」とは何ですか?私は以外のそれの何かそれを取る、プログラミング言語の表現をレッスンを書くのない量がそれを変更するつもりはありませんので、...
アンドレスF.

1
blog.codinghorror.com/recommended-reading-for-developers- > Code Complete 2を参照してください。これまで読んだ中で最高の「コードを適切に書く方法」の本。
マチャド

1
@JoseFaetiそれから、あなたは本の良い味を持っています、先生。:-)「if」ステートメントを正しく記述する方法を議論するエンドレスページ?私を数えてください。:
マチャド

回答:


25

1.レッスンを書く?あんまり。

ソースコードを書くことは、本を書くこととは十分に異なります。

両方とも同じ目標を追求していますが、できるだけ明確で理解しやすいということですが、彼らは非常に異なる方法でそれを行っています。

例1:音声の数字

スピーチの数字は、小説や詩などを書くときに価値があります。文章の表現力を高めるからです。

ソースコードで矛盾表現やリトートを最後に見たのはいつですか?それらを持っているのは助けになるでしょうか、それとも後でそのようなソースコードを維持する必要がある開発者にとって非常に有害でしょうか?

例2:語彙

豊富な語彙は文学で高く評価されています。たとえば、ウィリアムシェークスピアの語彙は2万から2万5千語です。豊富な語彙は、小説や詩を読むことをより興味深いものにします。

ソースコードを書くとき、英語を上手に話せない人に読まれることを期待します。英語があなたのコードにとって非常に有害であることをどれだけ知っているかを示すこと。あなたが必要なものを正確に意味する派手な単語を知っているが、多くの人がこの単語の意味を知らないことを知っているなら、むしろ表現力の低い同義語または意味を説明する単語のセットを見つけるべきです。数千語の語彙は、多くの場合、特定のプロジェクトに十分です。

重要な側面に注意してください。Google翻訳は、非ネイティブスピーカーにとって大きな助けになる可能性がありますが、翻訳者には2つの問題があります。

  • 一対の言語は、必ずしも単語間で1対1で一致するとは限りません。一部の単語は、他の言語でまったく翻訳されていないか、複数の単語が外国語で単一の単語に翻訳される可能性があります。たとえば、ロシア語では、雪と寒さの特定の状態を対象とする膨大な量の単語があり、フランス語またはスペイン語でそれらを翻訳することは、通常、その特異性を失うことなく不可能です。

  • 単語には複数の意味がある場合があり、その意味は文脈から推測されます。Google翻訳は、その高品質にもかかわらず、通常、最も基本的な状況以外の意味を示すことができません。

例3:式

表現も散文を豊かにします。著者は、読者に一定の一般的な文化があることを期待し、この機会を利用してテキストをより表現力豊かにします。

前の例と同様に、このような表現は、ネイティブスピーカーではない人が読む場合、非常に問題になる可能性があります。しかし、一般的な語彙を通常翻訳できる場合、表現ははるかに問題があります。

たとえば、英語は私の第一言語ではなく、日常的には、ここでStackExchangeを含む、私が知らない表現に遭遇します。私はそれらの意味を推測しようとします、そして時々私は正しいです。しかし、時々私は間違っており、それらの表現をググリングしても助けにはなりません。

彼女/彼のコメントのユーザーは、私がプログラミングを始めたばかりのときに私が長い間苦しめた例、PHPのニードルヘイスタックを思い出させました。私は対応するスピーチの数字を知らなかったので、ドキュメントを読むたびに、これが一体何なのか疑問に思っていました。言うまでもなく、C#sequence.Contains(element)または優れたPythonの方element in sequenceがはるかに優れた選択肢です。少なくとも、ヘブライ語を知らない開発者もPHPに苦しむ必要がありましたが、これは別の話です。

例4:文化的な参照

文化的な参照。文学では、特定の文化の要素を取り入れることが魅力的であり、これもまた本をより豊かにし、時にはより読みやすくします。

ただし、コードは世界中の開発者向けです。したがって、イタリアの開発者にとって明らかな参照は、ロシアの開発者にとってはそれほど明白ではないかもしれません。また、すべてのインドの少年や少女が知っていることは、必ずしもアメリカのプログラマーによって知られているとは限りません。

針と干し草の山について話したのと同じユーザーは、そのような文化的参照の優れた例を示しました:聖杯。聖杯が何であるかを知らないのは誰ですか?まあ、つまり、フランス語の「Graal」、スペイン語の「Grial」、トルコ語の「KutsalKâse」ですが、それでもです。しかし、アメリカやヨーロッパの開発者は中国やインドの中世の歴史をどれだけ知っていますか?中国人とインド人のプログラマー全員が聖杯の参考文献を知らなければならないと思うのはなぜですか?

2.表現力豊かなソースコードを書くための教訓?承知しました。

  • 開発者は、表現力豊かなソースコードの記述方法を学ぶ必要があります。

  • 開発者はコメントの理由を説明する必要があります。

    int j = i + 1; // Creating i and adding 1 to it.
    

    それは完全に間違っているという事実は別としても悪いことです。

  • 開発者は誰でも、基本的なリファクタリングと、それがソースコードをより表現力豊かにするのにどのように役立つかを理解できるはずです。

  • 開発者は、20%の時間がコードの開発に費やされ、80%がコードの保守に費やされることを覚えておく必要があります。一部のプロジェクトでは、5%-95%のようです。


本質的に、プログラミングは技術文書に近いものです。ボルトの仕様書を作成する人は、レッスンを書く必要がありますか?あんまり。開発者にも同じことが当てはまります。誰もがすべての単語のつづりを間違えずに書くべきであり、誰もが彼女の考えを十分に明確に伝えることができるはずです。それとは別に、授業を書くことがコンピューターサイエンスやITセキュリティなどのコースよりもどのように役立つかはわかりません。

ソースコードの表現力は、他の方法で学習できます。superM はその答えの 1つに言及しました。良いコードを読むことです。他にもいくつか言及できます。

  • Beautiful CodeやCode Completeなどの本を読んで、

  • より経験豊富な開発者にコードのレビューを依頼して、

  • パターンとその使用方法とタイミングを理解する。


+1良い答え。表現力豊かかつ簡潔であること非常に重要ですが、レッスンを書くことはトレーニング時間を最大限に活用できない場合があります。自明な自己記述型のコードを意識して書くことは誰もがすべきことであり、残りは実際のレッスンを必要とせずに適切に配置されると思います。
ダニエルB

文書、電子メール、そしてコードがあります-あなたの同僚、上司、ユーザー、将来の自己などとのコミュニケーションの書かれた部分。しかし、詩はありません。
Steve314

わかりました。実際、ドメイン固有の言語の使用についてもっと考えていました。汎用プログラミング言語の基本構文を使用するよりも、ドメイン固有の言語でプログラミングする方が快適に感じるようになりました。これにより、プログラマーでなくても、コードがより簡単にわかりやすくなります。これは私の英語の悪い語彙によるものなのかと思っていたので、レッスンを書くことについて考えました。
ホセファエティ

一般的に良い答えですが、コード内のスピーチの数字を見てきました。たとえば、PHPの数少ない優れた機能の1つは、すべての検索/検索機能が干し草の山で針を探すことです。
user949300

@ user949300:そして、これが私がPHPを嫌っていた理由の1つです。英語を母国語としない人として、私はそれに対応する表現を知りませんでした。私にとっては、これらの用語はほとんど役に立ちました。それをC#sequence.Contains(element)や優れたPythonと比較してくださいelement in sequence。だから、スピーチの数字はAPIに場所を持ちません。
Arseni Mourzenko

11

プログラマーはより良いコードを書くためにレッスンを書くべきですか?

いいえ。プログラマは、より良い文章を書くことを学ぶためにレッスンを書く必要があります。プログラマーは、より良いコードを書くことを学ぶためにプログラミングのレッスンを受ける必要があります。いくつかの類似点にもかかわらず、散文の記述とコードの記述はまったく異なります。

プログラマがクラスを書くべきではないということではありません。彼らはすべき!いくつかの理由:

  • ライティングは、教育を受けた人にとって不可欠なスキルです。うまく書くことができれば、あなたは賢く見えるでしょう。

  • 最善の努力にもかかわらず、プログラマーはしばしば書かれた言葉を使って他の人間とコミュニケーションをとる必要があります。

  • ライティングクラスで書く以上のスキルを習得し、それらは多くの場合プログラマに役立ちます。たとえば、他人の気持ちを傷つけることなく他の人の仕事について話し合うことを学び、他人の批判を個人的に受け入れることなく受け入れることを学びます。


それがポイントです。あなたのコードが必ずしも良くなるとは限らないが、あなたは、特に他のプログラマーや同僚とのコミュニケーションにおいて、より良い人間になるでしょう。私の質問は別の方法で定式化されるべきだったと思います:)
ホセファエティ

2
非常にこれ。散文を上手に書くことができることは、どの専門家にとっても重要なスキルです
Zachary K

6

私のコードは、ビジネスチームと技術チームの間で共有語彙を作成することにますます依存しています。ライティングスキルを向上させることで、これらの取り組みの曖昧さや誤解を減らすことができますが、コードの表現力を高めることはできないと思います。

表現力の文学的な概念は、表現力のプログラミングの概念と同じではありません。多くの場合、言語のあいまいさは、ノンフィクションであっても、表現力を高める形式で文学的なデバイスとして使用できます。これは、読者の意図したものと意図しないものの両方で、さまざまな文化的、言語的、象徴的な関連付けをトリガーするためです。この種の表現力は、プログラミングでは望ましくありません。抽象化はあいまいさよりも価値があります。プログラミングでは、抽象化により柔軟性が向上し、おそらく認知負荷のいくらかのコストがかかります。文学形式での抽象化は、プログラミングでの効果とは逆になります。文章を抽象化すればするほど、読者はあなたが何も言っていないという認識を持つようになります。具体的なスピーチに起因するすべての記号と関連付けには価値があり、

ただし、プログラマはマシンではありません。人間は、知的で感情的な成長からしばしば予期せぬ方法で恩恵を受けます。文章を改善すると、コミュニケーションの課題に取り組むことを余儀なくされるため、顧客の共感が高まる可能性があります。たぶん、あなたは彼らが望むものを言うその顧客のために感じるでしょう、そしてあなたはそれを届けます、そして、彼らはそれが彼らが必要なものではないことを理解します。おそらく、何も言われていないことに集中することを学ぶでしょう。

陶器のホイールに粘土を投げることを学ぶことは、職人技とソフトウェア開発の類似点を理解するのに役立つかもしれません。建築家のコミュニケーション方法を研究することで、プログラミングのデザインパターンの語彙を構築することをより深く理解できるようになります。生物学を研究することで、アリとミツバチが食物源を見つけて通信する方法、およびそれらの単純なメカニズムを経路探索アルゴリズムに変換する方法についての興味深い洞察につながるかもしれません。

好奇心の強い人はそうでない人よりも優れた開発者になるので、コアドメインの外で学習することは価値があります。

それが価値のあることは、私はほぼ文学専攻でした。私は東アジア研究に切り替えることになりました。なぜなら、私はその学部で取っている授業にもっと興味を持っていたからです。東アジア研究を勉強していなかったら、この業界にいない可能性があります。日本語を勉強することの副作用により、ソフトウェア会社が言語スキルのために私を雇ったとき、私はより貴重になりました。技術的なスキルのより深いポートフォリオを構築する必要がありましたが、何かを学ぶことの意図しない副作用により、より適切で関連性の高いソフトウェアプロフェッショナルになる可能性があります。


+1:「私のコードは、ビジネスチームと技術チームの間で共有語彙を作成することにますます依存しています。」:非常に重要なポイントです!多くのバグは、アナリストと開発者が2つの異なる用語に特定の用語を使用しているため、誤解から生じています。
ジョルジオ

4

プログラミングプロジェクトが失敗する場合、通常は通信の失敗が原因で、通常は要件が中心です。実際にコードを書くには英語を少しでも理解できれば十分かもしれませんが、適切なコードを書くには、優れたコミュニケーターであることが不可欠です。この遠隔作業、テキストベースのコミュニケーションの時代では、英語のライティングは非常に重要なコミュニケーションスキルです。

そうは言っても、あなたの質問は非常に明快で簡潔な方法で書かれています-私が働いたほとんどのプログラマーよりも良いです。あなたのコードを見なかったので、あなたが選んだコーディング言語で自分自身を表現することに集中することをお勧めします。Javaについては、Joshua Blochの本「Effective Java」をお勧めします。


ありがとう、がんばります!実際、私は、汎用プログラミング言語の構文ではコーディング時に自分を表現するのに十分ではないというポイントに達しました。私は現在、言語構文を強化するためにプリプロセッサツールをプログラミングしており、同じ問題に対してドメイン固有の言語を実装しています。これは、おそらく汎用プログラミング言語で表現力を強制するよりも優れています。
ホセファエティ

3

作家のように世界の古典を読むことで教えられるので、プログラマーは良いコードを読むことで教育を受けます。しかし、1つの小さな問題があります。文献には巨人が認められていますが、プログラミングには巨人がほとんどいません。そして、もしあれば、彼らは異なる言語を「話す」かもしれません。(私はTanenbaumがMinixのソースコードを読むことを勧めるのが合理的かどうかさえわかりません)

コメントを書く、意味のある名前を付けるなど、コードを読みやすくする(=>保守しやすい)多くの一般的な方法があります。さらに、多くの企業がコードの記述規則を確立し、すべてをはるかに簡単にします。

とにかく、多くの優秀な作家のように、プログラマーは自分のコードに満足することはありません。そのため、いつ停止するかを知ることは、品質の高いコードを書くことと同じくらい重要です。


2

私はいつも、あなたが書いたコードの各ビットの後で単純に停止し、あなたがそれを見たことがないことを想像して、これで長い道のりを得ることができます。

さらに良いのは、プログラミングに精通している友人に、コードが何をするのかを言わずにコードを読むように頼むことです。


0

私はそれが助けになるとは思わない。創造的な執筆は、プロットとキャラクター開発と対話に関するものであり、技術的な概念を明確に表現することではありません。テクニカルライティングは役立つかもしれませんが、私はそれを疑います-それらはまったく異なる種類のライティングです!

「読み取り可能な」コードは主観的なものであり、主に構文スタイルと一般的なイディオム(言語やチーム間でも異なる)の問題であることに注意してください

ただし、変数、クラス、およびメソッドに適切な名前を選択することは重要です。すべての開発者は、ある程度、開発中のドメインの特定の側面の主題専門家になるため、ドメイン用語の正しい使用が重要です。

ピアレビューは、語彙と自信を構築するのに役立ちます


0

確かに、コードを書くことと散文を書くことの間には大きな違いがあります。

散文では、文は時間によって結び付けられ(または分離され)(終わりまたは意味に達するために互いに続く方法)、(効率的な)コードでは、繰り返し可能なテーブルから「ストーリー」の一部を(再)ロードできますアクション/応答。そのため、読者(散文)またはユーザー(コード)との相互作用はまったく異なります。

別の意味で、「素敵な」文章を書くことと「素敵な」コードを書くことは似ています:書くこと(コードまたは文章)を学ぶことは、それを得るために多くの間違いを犯す(または改善について考え/テストする、または再定式化する)プロセスですエレガント'。

元素の化学周期系はエレガントで、私たちが使用する基本的な材料の基本的な特性を記述する非常にコンパクトな方法のため、効率的なコードに少し似ていますが、確かに散文ではありません。ジョークには散文的な性質がたくさんあります(特定の気分になって、その気分を維持し、予期しないときに変更する)が、それはひどいコーディングの習慣です。

しかし、どちらのタイプの文章も職人技を求めています。


-1

私の観点からすれば、プログラマーにとって基本的な英語と文法で十分です。しかし、その後、単調なプログラミングルーチンを壊すことは常に若返ります。そのため、プログラマにとってライティングレッスンはリラックスできます。


4
単調なプログラミングルーチンは、おそらくレッスンを書くよりもキャリアを修正する方が適切です。
エリオットボール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.