より良いプログラマーになる:成長するための7つの習慣
次のレベルに進みたい初心者プログラマーですか?ここでは、私が採用したいくつかの優れた習慣と、それらが私をより良いプログラマーだけでなく、より良いプロフェッショナルにした方法を紹介します。
7. 強固な基盤から始める
プログラミングを始めたばかりの頃、基本を急いで飛ばし、フレームワークや高度なツールのような魅力的なものにすぐに飛びつく罠にはまりました。すぐにクールなアプリや光るウェブサイトを作りたかったので、できるだけ退屈なことを飛ばそうとしました。
しかし、ある時点で、私は何かに気づきました。コードをコピー&ペーストして動かすことはできました。しかし、それはすべてスパゲッティコードで、混ざり合っていて、最適化もされていない状態でかろうじて動いていました。私は自分自身で問題を解決することができませんでした。結局、私は基本に何度も立ち返らざるを得ませんでした。
この基盤を築く一つの方法は、大きなプロジェクトに取り組む前に、簡単な問題に挑戦することです。HackerRankやCSESのようなプラットフォームはこれに最適です。基盤を築くためのもう一つの重要な部分は、一つのプログラミング言語を深く学んでから他の言語に広げることです。
6. コードを書くよりも多く考えること
何かを作りたいときは、たぶんコードエディタを開いてコードを書き始めるでしょう。私たちは、迅速に具体的な結果を確認できるようにこれを行います。しかし、私の経験では、これがしばしば混乱したり、不完全だったり、時には全く間違った解決策につながることがあると見てきました。
私がよく直面した問題は、途中で、解決策をコーディングする際にあるケースを考慮に入れていなかったことに気づいたときでした。やり直さなければなりませんでした。もしコードを書く前に全体的な高レベルの解決策があったなら、こんなことは起こらなかったでしょう。
プログラミングは単にコードを書くことではありません。問題に対する解決策を作り出すこと、しばしばいくつかの制約の下で行われます。どんな複雑な問題でも、最良の解決策は明確で意図的な思考から生まれます。これは私のお気に入りの本の一つ、『プラグマティック・プログラマー』からの引用です。
プラグマティックプログラマーになるために、あなたが何をしているのかを考えながら行動することに挑戦しています... 自動操縦で行動しないでください。常に考え、リアルタイムで自分の仕事を批評してください。
私がより良い問題解決者になった要因の一つは、実際のコードを書く前に擬似コードを書くことです。例えば、複雑なアルゴリズムを設計する際には、平易な英語で大まかな論理計画を描きます。
5. 公式ドキュメントから学ぶ
プログラミングを始めたばかりの頃、私は公式ドキュメントを避けていました。それは圧倒的で、専門用語が満載で、正直言って少し退屈に見えました。私はチュートリアルやYouTubeの動画に頼る方が好きでした。しかし、実際のプロジェクトに取り組むようになると、チュートリアルは表面的な部分しかカバーしていないことに気づきました。言語、フレームワーク、またはツールを完全に理解したいのであれば、公式ドキュメントが最良のリソースでした。
公式ドキュメントは、あなたが学んでいる言語やツールを作成した人々によって書かれたユーザーマニュアルです。チュートリアルは特定の使用例に焦点を当てる傾向がありますが、ドキュメントは技術の完全な機能を示し、あなたが知らなかったかもしれない機能も含まれています。
例えば、私が最初にPythonを学んだとき、基本を理解するためにチュートリアルに大いに頼りました。しかし、pandasのようなライブラリを使い始めると、単なる例以上のものが必要だと感じました。pandasのドキュメントは私の命綱となりました。
4. クリーンコードを書く
プログラミングコミュニティには、あるジョークがあります。プログラムが動いているなら、触らない方がいい。とはいえ、ただのジョークです。
プログラミングを始めた頃、私は競技プログラミングに挑戦しました。楽しんでいたものの、多くの悪習慣を身につけてしまいました。ほとんどの場合、プログラムが動作することだけが重要でした。コードがエラーなしで動けば、それが成功だと考え、たとえそれが変数やマジックナンバーの絡まった混乱であっても構いませんでした。しかし、より実際のプロジェクトに取り組むようになると、クリーンコードの重要性に気づきました。
クリーンコードは、プログラムを読みやすく、デバッグしやすく、保守しやすくします。これには多くのベストプラクティス、原則、慣習が含まれます。例えば、変数や関数の説明的な名前、良好なドキュメント、一貫したコーディングスタイルなどです。では、醜いコードの例を見てみましょう。
def pro(s, x):
i = 0
for k in range(len(s)):
i += s[k] * x[k]
return i
それは機能します。しかし、それから何かを作ることができますか?おそらく無理でしょう。では、クリーンなバージョンを見てみましょう:
def calculate_dot_product(vector_a, vector_b):
dot_product = 0
for index in range(len(vector_a)):
dot_product += vector_a[index] * vector_b[index]
return dot_product
このバージョンははるかに意味があります。クリーンなコードを書くことで、プロジェクトを完全に変革できるのです。
3. 強力なデバッグスキルを身につける
プログラマーとしてどれだけの経験を積んでも、デバッグはプロセスの避けられない部分です。私は、目の前に隠れているように見える厄介なバグを追跡するのに無数の時間を費やしました。最初はデバッグが苛立たしいと感じましたが、時間が経つにつれて戦略的に取り組むことを学びました。
デバッグの最初のステップは、スローダウンして観察することです。私は以前、コードに急いで飛び込み、盲目的に行を変更し、何かがうまくいくことを期待していました。しかし、それはめったにうまくいきませんでした。代わりに、質問をすることから始めましょう。プログラムは何をするべきですか?実際に何をしていますか?どこで動作が逸脱していますか?
デバッグを少しでも楽にするためのいくつかのツールやテクニックがあります。print()
ステートメントはしばしば最初の防御線です。もう一つの有用なテクニックは、ラバーダックデバッグで、無生物や人に自分のコードを一歩ずつ説明します。しばしば、問題を声に出して説明するだけで解決策が明らかになります。自分自身に説明することでバグを解決したこともあります。
2. 他のプログラマーとネットワークを築く
プログラミングを始めたばかりの頃、私はそれを孤独な旅だと思っていました。プログラミングはしばしば孤独な集中を伴いますが、私が最も成長した瞬間は他のプログラマーとつながることから生まれました。
私は多くのプログラミングに関するFacebookグループ、Discordサーバー、サブレディット(r/learnprogrammingをチェックしてください)に参加しています。問題に直面したとき、私は助けを求めることができます。自由な時間には、初心者が私が以前受けたように助けを得られるように、コミュニティに貢献しようとしています。
私はかつてネットワーキングを通じてプログラミングの仕事を得たことがあります。それは私が関わった中で最も大きなプロジェクトの一つであり、その過程で多くのことを学びました。また、ハッカソンに参加することで素晴らしいプログラマーに出会い、彼らから新しいことや戦略を学びました。
1. 実生活の問題を解決する何かを作る
プログラミングの最もやりがいのある側面の一つは、アイデアを生活を便利にするツールに変える能力です。チュートリアルを見たり、本を読んだりすることは無限にできますが、実際の問題に取り組むことで得られる学びには敵いません。その時、理論、構文、アルゴリズムが本当に生き生きとしてきます。
実生活のプロジェクトは多くの方法で見つけることができます。あなたはどんな問題に直面していますか?アプリを作ることでそれらを解決できますか?友人や親戚に彼らの問題について尋ねてみてください。また、GitHubに行ってオープンソースプロジェクトを見つけることもできます。
Spring Bootを使ってJavaバックエンドの学習を始めたとき、私は多くの作業を自動化する農業システムを作ることに決めました。チュートリアルからは学べなかった多くのことを学びました。
プログラミングに不慣れなときは、罠に陥ったり間違いを犯したりするのは簡単です。良い習慣を身につけ、経験から学ぶことで、先手を打つことができます。それがあなたをより良いプログラマーにします。