本「愚か者なしのプログラミング」

画像 あなたのコードにある問題をよく知っているかもしれません。 おそらく、優れたプログラマーになるために必要なこと、または将来行う必要のないことについて既にアイデアをお持ちかもしれません。 「貧しいプログラマーまたは平均的なプログラマーであることは何も悪いことではありません」と、Steve McConnellがCode Completeで書いています。 「問題は、プログラマーがどれだけ長く悪いか平均的であり、何がより良くできるかを理解することができないことです。」 問題を特定し、それらを解決する方法を見つける段階に進むことが、なぜそれほど困難なのですか?



問題を解決する間違った方法を見つける主な理由は、人間の資質の面にあります。 この場合、そもそも保守主義です。 最初はすべてを以前と同じようにしたいという強い欲求に抵抗するのはそれほど簡単ではありません。 脳はそのリソースを経済的に割り当てなければならず、したがって、あいまいな代替案が地平線上にあるとき、問題に対する許容可能な解決策を拒否しないように機能しなければなりません。 そして、新しい技術、言語、方法、フレームワークのすべての現在の傾向の研究は、時間がかかりすぎて楽しい人生を忘れさせてしまうイベントです。



子どもや青年はほとんどの場合新しいことを学びますが、大人は長期にわたって知識を向上させないことがよくあります。 「ええ、はい、それはいつもそうです」世界をより良い場所にする方法を想像したくない貧しいプログラマーは言いました。 「」の上を指します。 彼は、問題に対する実証済みのソリューションを使用したいという理由だけでなく、理解できる理由のために、問題についてできるだけ時間をかけずに済むことも望んでいます。 考えずに何かをする場合、目に見える結果は各ステップで達成されますが、かなり長い間目標に行かなければなりません。 最初に問題について考えれば、最終的に問題を非常に迅速に解決できますが、最初の数時間、数日、数週間を振り返ってみても、目に見える結果は期待できません。 自己教育に自分のリソースを投資するそのような不本意は永久になりますが、同時に、結果は逆説的にハードワークの結果であることが判明します。 同時に、長い間問題について考えているプログラマーは、バルコニーに座って、雲をじっと見つめたり、一日中Webページをじっと見つめている人に似ています。



第19章自分でやらない



経験の浅いプログラマーは、使用する言語またはその標準ライブラリーで既に使用可能な関数の再発明に多くの時間を費やしています。 もちろん、最初は特定のプログラミング言語のすべての機能を理解することは不可能でした。 すべてのコマンドをアルファベット順に記憶することで言語を学習し始める人はいません1。 それにもかかわらず、どのようにタスクに目を通し、自分でプログラムするのが賢明で、どこで車輪を再発明するのが簡単なのかを簡単に判断できますか?



ここに、私が無意識のうちに書いたPHPコマンドの不完全なリストを示します。



array_rand, disk_free_space, file_get_contents, file_put_contents, filter_var, htmlspecialchars, import_request_variables, localeconv, number_format, parse_ url, strip_tags, wordwrap
      
      





キャサリン



しかし、経験の浅いプログラマーは、経験不足または無知のためだけでなく、利用可能なソリューションを使用しません。 タスクセットがプログラマーに、誰かが以前に遭遇して解決策を見つけたかもしれないというti病な疑念を引き起こしたとしても、次の論理的なステップは必ずしもとられません:この解決策を見つけます。 多くの人は、プログラミングを興味深く刺激的な活動だと考えているため、すでに書かれたコードを探すよりも、コードを書くことを望んでいます。 さらに、人々は自分の能力を過大評価する傾向があるだけでなく、直面するタスクの複雑さを過小評価する傾向があります。 非常に予見可能なタスクだけが問題になりますが、経験の浅いプログラマーはタスクに精通しているため、解決策ではないにしても、そのパスを見つけたとすぐに信じています。



注意深い読者は、これらの問題で、Larry Wallsがリストした重要なプログラマーの美徳の裏側(第2章で説明しました)を認識します。怠laz、焦り、そして自分の強さの再評価です。 プログラマーのこれらの資質は、スペシャリストがそれらを場違いで使用し始めたときにのみ美徳に変わります。 予備研究に専念することなく、自分ですべてのツールを書く人は誰でも、まだ有用ではない、本当に有用なものを作成するのに費やすことができる時間を逃します。 結局、独自の日付計算機能の最初の作業バージョン、ブログのエンジン、または勤務時間を記録するためのツールは驚くほど迅速に書かれていますが、使用を開始するとすぐに、いくつかの特別なケース、バグ、拡張機能が驚くほど迅速にポップアップします...他の人が働き始めると、彼のサポートはあなたからあなたの人生の大きな部分を奪います。 よく知られた経験則によると、経験豊富なプログラマーは熟考、テスト、デバッグ、最適化、およびドキュメントを考慮して、1日あたり約10行の研ぎ澄まされたコードを書きます(ちなみに、ライターも同様の状況にあります)。 おそらく、経験の浅い開発者はもう間に合わないでしょう。



絶えず繰り返される問題を解決するために、多くの世代のプログラマーによって完璧にされた標準的なソリューションがあります。 たとえば、ソートアルゴリズムなど。 以前は存在しなかった特別な並べ替えの原則を必要とするタスクで作業する必要性自体は、平均的なプログラマーには考えられません。 フレームワークで提案されている標準ソリューションが特定の状況に理想的に適合していない場合、これはあなた自身のソリューションを開発する理由ではありません。この場合、時間を無駄にするだけでなく、間違いを犯し、フレームワークに反して動作する可能性があるためです 言い換えれば、結果として、あなたはあなた自身のために素晴らしいソートアルゴリズムを実装しますが、コードとフレームワークの間の矛盾はどこか別の場所に現れます。



また、既製のソリューションを使用することをお勧めします。これは、自家製のツールでは、コードを操作し、将来それを読む必要のある人を満足させることができないためです。 おそらくこれらの専門家は、アプリケーションのパフォーマンスを向上させるか、エラーを見つけたいと思うでしょう。 テスト済みの標準関数を呼び出す代わりに、独自のソリューションがポップアップ表示された場合、不慣れなコードが公正な不信を引き起こします。 コードリーダーは、奇妙な並べ替え関数の詳細を独自に処理して、エラーが含まれておらず、実際に問題を効果的に解決していることを確認する必要があります。 逆に、標準関数がコードで使用された場合、経験のある読者はこれをすべて行うことはできません。標準関数の実装は何度もテストされているため、エラーがなく効率的に機能することが確認できるためです。



どうする



比較的単純なタスクを解決するために何度も何度も似たようなコードを書いていることに気付いた場合、そのようなケースでは、ほとんどの場合、既製のコンパクトなソリューションが既にあります。 このような解決策を見つける可能性は数多くあります。



-このサブジェクト領域で使用されている言語のドキュメントを読みます。 目的のソリューションへの相互参照を見つけることができる場合があります。



-すべての機能または特定のサブジェクト領域の機能のリストを見て、目的の機能に名前が付けられることを望みます。 したがって、前の例のarray_rand関数は、php.net Webサイトの「Array Functions」セクションにあるPHP言語のドキュメントで簡単に見つかります。



-標準ソリューションをリストした本を確認してください。 このためには、O'Reilly出版社のレシピ集が適しています(元の書籍ではクックブックと呼ばれています)。 彼らはプログラミング中に生じる典型的な質問を定式化し、その答えはレシピの形で与えられます。



-検索エンジンに問題を打ち込みstackoverflow.comなどのサービスで解決策を探します。多くのユーザーが他よりもエレガントな解決策をすぐに提供します。 たとえば、クエリ「how to」「ランダム要素」配列phpに問い合わせてarray_rand関数に遭遇しました。



-サイトgithub.comまたはsourceforge.netにアクセスし、目的の言語で書かれた無料プロジェクトの説明を確認します。 問題がすでに解決されている可能性が非常に高いです。 次に、プロジェクトの作成者がタスクにどのように対処したかを確認します。



-ある程度の経験を積むと、比較的新しい言語でどの機能が利用できるか想像できます。 その名前と技術的な詳細を明確にすることは残っています。 検索エンジンで、「方法」「ランダム要素」配列phpなどの重いリクエストを作成する必要はありません。 代わりに、Pythonのarray_randに尋ねて、すでにおなじみのPHPコマンドに相当するPythonを見つけてください。



最後に、使用できる既成のコードがどこにもないことを確認するだけで、自分でプログラミングを開始する価値があります。 同時に、別の言語で記述されたソースコードは非常に便利です。その助けを借りれば、少なくともタスクの実際の規模を評価することができます。



»本の詳細については、出版社のウェブサイトをご覧ください

» コンテンツ

» 抜粋



ホーカーのクーポンが25%オフ-Comp



All Articles