1.エゴをドアに残します
開発者はエゴを肥大化させました。事実です。しかし、なぜ?自分の職業に真剣に取り組んでいる人は誰でも、自分は芸術家のようなものだと思っていると思います。はい、私たちは何百万人もの人々の前で歌ったり、「モナリサ」を描いたりしませんが、複雑な問題を効率的かつエレガントに解決するコードを書くこともあります。開発者は、問題へのアプローチによって、数学者と同じくらい芸術家だと思います。そのため、母親が子孫の周りにいるように、コードを這う傾向があります。私たちはそれを書き、それを愛し、周りの人々がコードがどれほど間違っているかについて議論するときにそれを嫌います。
一方で、それはまだ誰にも役立っていません。私たちは自分の仕事が大好きですが、問題を解決していることを理解する必要があります。私たちのアイデアや解決策について他の人と話し合うことで、より良い代替案が生まれるかもしれません。何も悪いことはありません。実際、コラボレーションはより良いソリューションを生み出す傾向があります。私はあらゆる種類のエゴを見てきましたが、エゴが開発者のために働くという状況を見たことがありません。
どんなアドバイスができますか?開発者として働き始めた瞬間から、エゴをドアに置いておきます。それを飲み込んで、他の人があなたの仕事について言わなければならないことを聞いてください。最高のアイデアが頭の中にないかもしれないこと、そしてそれらがあなたのプロ意識を高めることができることを受け入れてください。フィードバックを聞いた場合にのみ勝ちます。
2.言語はツールです。ハンマーしか知らないの?その後、すべての問題は釘のようなものです
自分をJava開発者またはJavaScript開発者と呼ぶのはやめましょう。はい、その構文や機能のためにあなたが好きな言語があります。これは完全に正常です。ただし、何か他のことを勉強することに時間を費やすと、勝ちます。新しい言語を学ぶことは、特にそれらが通常のパラダイムとは異なるパラダイムに従っている場合、問題解決への異なるアプローチに心を開くのに役立ちます。
これがどれほど重要かさえわかりません。新しい言語を学び、それらを適用することはあなたのスキルに役立ちます。数年前の7週間で「SevenLanguages」という本を読み ましたが、他の言語で利用できる問題解決方法を示しているという理由だけで、多くの選択肢が開かれました。
私たちは開発者です。コードの問題を解決する方法を知っています。自分を制限しないでください。限界を超えて見て、枠の外で考え、他のオプション、言語、解決策を学びましょう。長くやらなくても、新鮮なアイデアと幅広い考え方でおなじみのツールに戻ります。
3.それはアルゴリズムを記憶することではなく、それらを見つけることです
一部の初心者開発者は、アルゴリズムを心から知る必要があると考えているため、forループの記述方法を忘れ始めたことに気付いた瞬間に気分が悪くなります。これは正常なだけではありません。役に立つと思います。覚えておくことが多すぎます。しかし、これも不要です。インターネットは、答えを見つけるためのIDEとして必要な、単なる別のツールであるという事実を受け入れる必要があります。
私たちは皆これをします。そして、気分が悪くなった場合は、この気持ちに時間を無駄にしないでください。Googleで答えを検索して、問題を理解してください。これについて考える。各言語には、オブザーバーパターンを実装するための類似した方法がありますが、わずかに異なります。より便利なものは何ですか?パターンが何に適しているか、どのような問題を解決するかを理解しますか、それとも、使用する各言語でパターンを実装する方法を覚えていますか?
パターンが問題を解決することがわかっている場合は、すでに問題を解決しています。それ以外はすべて、それを実装するための最良の方法をGoogleで検索するだけです。この検索は、あなた、あなたの仕事、またはあなたの経験に対する敬意を奪うものではありません。同じことが他の検索にも当てはまります。重要なことに焦点を当て、問題を解決し、Googleにあなたの記憶を押し付けさせましょう。それが存在する理由です。
4.
むしろ、あなたはあなたのキャリア全体のために勉強しなければなりませ ん。業界の最新の動向に従うかどうかの決定はあなた次第です。ただし、一致させたい場合はこれを行うのが最善です。
言語とテクノロジーは進化していますが、それは完全に正常なことです。もちろん、一部のエコシステムは他のエコシステムよりも速く変化し、それに追いつくのは大変な作業のように思えるかもしれませんが、重要なことに焦点を当ててください。あなたは人間であり、すべてを知ることはできないことを忘れないでください。したがって、1つのことを学ぶ必要がある場合は、学ぶことを学ぶことをお勧めします。
これはばかげているように聞こえるかもしれませんが、おそらく開発者はこのスキルナンバーワンを持っています。私たちは新しいスキルを素早く学ぶことを学ばなければなりません。そうしないと、「古い」ラベルを取得するリスクがあります。
ここで、この記事の他のレッスンのいくつかが役立ちます。変化、変化、新たな挑戦、自我の欠如-これらはすべて、スキルの範囲を学び、拡大するのに役立ちます。練習すればするほど良いです。最終的に、すべての言語が類似していることがわかります。あなたは彼らの共通のルーツを見始め、それらのどれでも働くことができるようになります。あなたがしなければならないのは、いくつかの重要なことを読むことです。あなたのキャリアを通して、あなたは勉強します:
- 新しい言語。
- 新しい(および古い)プログラミングパラダイム。
- 仕事への新しいアプローチ。
- 問題を解決する新しい方法。
- チームメイトと対話するための新しい方法。
- コードを確認およびテストするための新しいアプローチ。
あなたが永遠の学生になる準備ができていない場合は、そのようなキャリアがあなたのためであるかどうかを検討してください。「すぐに出発する」とは言わなかったことに注意してください。ただし、継続的な学習に心を開く準備ができているかどうかを検討してください。
5.理想よりもうまく機能する
マネージャーとして、私はこれを何度も聞いたことがあります。しかし、開発者として、リリース前にコードは完璧でなければならないと考える傾向があります。そして、これは真実ではないだけでなく、潜在的に問題です。最適化を必要としない可能性のあるものに多くの時間と労力を費やすことになるため、早期の最適化は問題です。また、状況によっては、この最適化を行うときに、機能を損なうような仮定をします。
したがって、実行する作業と解決しようとしている問題に焦点を合わせます。問題を解決した後、それをテストし、結果を繰り返して、問題を改善する方法がすでにわかっている場合でも、チームがソリューションについてどう考えているかを確認します。コードを完璧にするためだけにあと2日を費やすつもりであるが、今すぐ本番環境に入る可能性がある場合は、今すぐ本番環境に入る可能性があります。
結局、あなたは問題を解決します。問題を早く修正すればするほど、ユーザーにとっては良いことです。
6.コードを機能させてから、最適化します
前のポイントのいくつかによると、初期の最適化のブラックホールに陥らないでください。リリースされるとすぐにコードが完成すると思っていても(リリースされたとしても)、時間拡張効果が現実のものであることがわかります。
新しい機能を作成したりバグを修正したりするソフトウェア開発者としての最優先事項は、コードがどれほど醜く見えても、ソリューションがどれほど非効率的であっても、それを機能させることです。コードが機能する場合は、コードを記述できることを証明しただけです。これは戦いの半分です。
2番目のステップは最適化です。このステップはオプションです。一部の人々が忘れがちな詳細。コードを最適化するために自由に使える時間は、制御できないことがある多くの変数によって異なります。したがって、コードを機能させることに集中してから、実際にコードを最適化する時間があるかどうかを判断してください。
早期に最適化するということは、コードを書くときにコードを最適化することを意味します。これは危険な方法です。最適化するときに、ランタイム、データ要件、メモリ要件、およびまだ実際には見られていないその他の要因について想定しているためです。そのような仮定は間違っている可能性があり、最終的にはロジックにエラーが発生します。
TDDワークフローについて考えてみましょう。
- 関数に対して実行する必要があるすべてを理解するためのテストを作成します(テストは失敗します)。
- テストに合格するようにコードを記述します。
- 次に、コードの最適化について心配します。
2番目のステップが必要です。まず、テストを処理する必要があります。これは、関数が機能していることを意味します。テストでは、アルゴリズムで3つのネストされたifステートメントを使用してもかまいません。これは、おそらくコードレビューの段階で重要になります。
7.プロジェクトの最後の10%は90%の時間かかります
これは、一人で作業する場合に特に重要ですが、チームはこの小さな数学的な詳細を正しく理解できないという問題も抱えています。プロジェクトを完了した人は誰でも同じことを言うでしょう(そして率直に言って、これは私たちの業界だけの場合ではありません)。まず、後で考えるために多くの詳細を急いで調べます。
そして、これは完全に正常です。私たちは主に大きな機能に焦点を当てる傾向があり、小さな詳細や既知のバグさえも最後まで残します。しかし、それにもかかわらず、あなたはそれらと戦う必要があります-そしてここに追加の90%が現れます。テスト、コードの修正、再テスト、ソリューションの処理方法のユーザーへの指導、ソリューションの最終バージョンの提出などを行う必要があります。もちろん、それはすべてコンテキスト、クライアントが誰であるか、および他の多くの要因に依存しますが、常に何かがあります。したがって、コードがほぼ完成したと思ったら、おそらく何かを忘れていることを忘れないでください。
8.チームに所属している場合は、抽象化が必要です。
コーディングとは、抽象化の動作に関するものです。一般的なロジックを抽象化することで、他の場所で再利用できますが、最初は抽象化の重要性を忘れています。これが私の個人的なルールです。コードが2つの場所で繰り返されると、関数(メソッド、モジュール)に送信されます。あなたはアイデアを得る。 2回の繰り返しが目には小さな数のように見える場合は、抽象化したばかりのコードを適用する場所が将来他にある可能性があることに注意してください。また、コードをすぐに抽象化することで、すぐにアクセスできるようになります。
抽象化はスケーリングです。抽象化されたロジックの一部は、最小限の労力で何度も使用できますが、コピー&ペースト(実行は簡単ですが)-使用すればするほど、より多くの労力がかかります。バグが原因で、5回繰り返されるロジックの一部を変更する必要がある場合はどうなるかを考えてください。バグを修正するには、コードの同じ部分を文字通り5回変更します。
同じ論理が日常のタスクにも当てはまります。何かを複数回行う場合は、おそらく何らかの方法で自動化できます。これが効率の鍵なので、コードだけでなくアクションでも繰り返しを探してください。1日10分かかるタスクを自動化すると、1か月で5時間を節約できます。
9.サイドプロジェクトはオプションですが、役立つ場合があります
開発者として成功したいのなら、サイドプロジェクトが必要だという人もいます。これは本当ではないと思います。私は個人的に、「9から17まで」仕事でコードを書くだけの多くの素晴らしい開発者を知っています。正直、尊敬しています。彼らは彼らの技術の達人であり、彼らの自由な時間に、何か他のことをして、彼らは人生を楽しんでいます。それは絶対に悪いことではありません。ただし、場合によっては追加の練習が必要になります。同僚に遅れを取っているように感じることがあります。ここでサイドプロジェクトを支援します。
私は業界の革命について話しているのではありません-何百万ものユーザーとのフレームワークを開発しています。あなたが望むならそれを書いてください、しかし私は彼らから学ぶために誰か他の人のプロジェクトをコピーすることについて話している。また、他の人のプロジェクトへの貢献、バグの修正、機能の追加についても話します。
サイドプロジェクトを作成して、通常は触れない開発の他の側面を体験できます。ユニットテストを1日8時間作成する場合は、最初から何かを作成するか、いくつかの機能を開発することを検討してください。一人で作業することにうんざりしている場合は、他の人の既存のプロジェクトに貢献し、他の人と作業を調整することの意味を体験してください。弱点に対処することでスキルレベルを向上させるサイドプロジェクトを作成できます。しかし、繰り返しになりますが、真面目な開発者と見なされるために、緑色のGithubアクティビティバーを使用して作業する必要があるとは思わないでください。これはばかげています。
結論
これが過去18年間の開発者としての私の9つの難しいレッスンです。うまくいけば、私の経験を共有することによって、私はあなたの将来または現在のキャリアにいくつかの光を当てました。共有したいことを他に学びましたか?コメントであなたから聞いてみたいです、私はあなたから何かを学びたいです。