超神経質で
スティーブ・ジョブズの有名な言葉「我が国の誰もがプログラミングできるべきだ。プログラミングは考え方を教えてくれる。」
これは、すべての人にプログラマーとして働くように求めるものではなく、プログラマーのように考えて問題を解決することを意味します。アメリカやイタリアなどの西側諸国では、小学校や中学校、さらには幼稚園でもプログラミングがカリキュラムの一部となっています。 2014年、オバマ大統領は自ら戦場に赴き、人々にプログラミングを学び、プログラミング的思考を養うことを奨励するコードを書きました。
若いプログラマーも含め、多くの人が複雑な問題に直面しています。私は歴史的な経験から始めて、さまざまな解決策をランダムに試すことに慣れています。成功するか失敗するかは、経験が十分であるかどうかによって決まります。彼らはフレームワーク思考から始めて問題の解決策を探すことはほとんどありません。
これにより、問題解決プロセスに時間と労力がかかり、最終的な結果が良くない可能性があります。
HackerRank は、2018 年の開発者スキル レポートの中で、テクノロジーの重要性は強調しませんが、プログラミング言語に習熟していることよりも、考え方を組み立てたり、大規模で複雑な問題を分解したりする能力の方が重要であると述べています。
経験豊富で問題解決が得意な多くのプログラマーの利点は、この種のフレームワーク思考にあります。これは、プログラマー思考またはプログラミング思考としても理解できます。この種の思考は、プログラミングに適用できるだけでなく、誰でも問題を解決するのに役立ちます。問題。
プログラマーは何を考えているのでしょうか?
ティム・フェリスの著書『The 4-Hour Chef』(訳:毎週キッチンで4時間)からインスピレーションを受けるかもしれませんが、この本はまだ中国語訳がないようです。著者は効率性の専門家として有名で、TEDで非常に古典的なスピーチをしており、人々が効率的な生活を送るための「週4時間のフィットネス」や「週4時間の労働」も書いています。
また、V. アントン・シュプラウル著『Think Like a Programmer』(英題:Think Like a Programmer)が中国語に翻訳され、読みやすくなりました。
以下の観点から理解できるプログラミング的思考について解説していきます。
1. 問題を理解する
問題が難しいのは、その問題について十分な知識がないからです。有名な物理学者リチャード・ファインマンはかつてこう言いました。「何かを簡単な言葉で説明できない場合、それは理解されていないということです。」
したがって、問題を解決するときは、まず、簡単な言語で説明できるまで問題を理解する必要があります。
多くのプログラマーは、他の人に問題を説明する過程で、これまで気づかなかった論理的な抜け穴を常に発見することがあり、これらの発見が問題解決の鍵となる可能性があります。
2. 計画を立てる
つまり、問題を解決するための手順を検討せずに、やみくもに実行しないでください。
プログラマーにとって、これは、プログラミングするときに、コードを直接書き始めるのではなく、まずアイデアを明確にし、問題を分析し、情報を処理し、X の入力と Y の出力に必要な手順を定式化することを意味します。
3. 問題を細分化する
すぐに解決できない問題、または比較的複雑な問題に直面した場合、最善の方法は、それをいくつかのサブ問題に分解し、最も単純な問題から解決し始めることです。これらのサブ問題を解決したら、これらのサブ問題を接続するだけで、大きな問題はスムーズに解決されます。
たとえば、若手プログラマーは、10 個の数値の中から 3 番目に大きい数値を見つける必要があるプログラムを作成する必要があります。このプログラムにはいくつかの基本的なプログラミング言語の知識のみが必要ですが、プログラミングの初心者にとっては依然として難しい場合があります。
この時点で、3 番目に大きい数値を探すのではなく、問題を細分化してみることができます。
たとえば、最初に 10 個の数値の中で最大のものを決定し、次に 3 つの数値の中で最大のものを見つけるか、2 つの数値の中で最大のものを見つけます。次に、これらのグループ内の最大の数値が並べ替えられ、3 番目に大きい数値が決定されるまで結合されます。
大きな問題を、直接答えを得ることができる最小単位に分解し、これらのサブ問題を接続し、少し拡張して最終的な答えを導き出します。
4. 困難に立ち向かう
大きな問題をいくつかの下位問題に分解した後、その下位問題さえ解決できない場合はどうすればよいでしょうか?このとき、困難を恐れて尻込みせず、問題の解決策を探し続けてください。
デバッグ: ソリューションのすべてのステップを再チェックして、ソリューションにバグがあるかどうかを確認し、バグがある場合はそれを見つけて解決します。このプロセスはプログラマーの言葉で「デバッグ」と呼ばれます。
再評価: バグが見つからない場合は、問題を別の角度から再検討し、より一般的な解決方法があるかどうかを確認します。ここでの再評価とは、新しい視点から解決策を特定することを意味することに注意してください。
コーディングチャレンジ Web サイト Coderbyte で長年トップ 3 にランクされている C. ジョーダン ボール氏は、「時々、私たちは問題の詳細に迷い、問題を解決する一般的な方法を無視してしまうことがあります。たとえば、 1+2+3+... ...+n を計算する場合、式 n(n+1)/2 を使用すると、長くて間違いが発生しやすい追加を避けて、すぐに答えを得ることができます。」
歴史的な事例を研究する: 実際、多くの問題については、先人たちがすでに答えと解決策を示しています。これは、研究の過程で多くの類似した問題や新しい問題を解決するのにも役立ちます。他の問題を解決するのに非常に有益です。
プログラマーの思考を養うにはどうすればよいでしょうか?
優れた問題解決者になりたい場合、最善の方法は、日常生活の中で自分自身の問題解決の考え方と能力を開発することです。多くのことは似ており、問題 A を解決する能力は問題 B にも使用できます。
言い換えれば、ゲームやその他の興味のあることなど、あまりお金をかけずにさまざまなアクティビティで問題解決能力を鍛え、問題解決的思考を養うことができます。
PayPal の創設者ピーター ティールはチェスのプレイを通じてこの種の思考を養うことが多く、イーロン マスクはビデオ ゲームを利用しています。さらに、Linkedin 共同創設者のリード・ギャレット・ホフマンや Facebook 創設者マーク・ザッカーバーグなどの著名な起業家も、ビデオゲームをプレイする過程で実際的な問題の解決策を見つけたと述べています。
これらの例は、ゲームをすれば成功できるという意味ではありませんが、問題解決の思考を養うのは難しいことではなく、人生の小さな問題を通じてそれができるということだけを皆さんに伝えたいのです。
さらに、プログラマーまたはプログラミングに興味がある場合は、Coderbyte でプログラミングに挑戦することができます。これは、プログラミング的思考を向上させるのに非常に役立ちます。
問題と向き合い、問題を分析し、一つ一つ解決していく、つまり「プログラミング的思考」。
すべてのプログラマーがこのように問題を考えるとはあえて言いませんが、この方法は確かに非常に効果的です。そして、より多くの問題を経験すればするほど、問題解決能力は強化されます。
この観点から見ると、シニアプログラマーの給与がジュニアプログラマーよりも高いのは、プログラミングスキルやツールによるものではなく、採用の際に職歴を重視する企業が多く、それも要因である可能性があります。部分的に責任がある。