干了 40 年プログラマー、それはどんな経験ですか?
1984 年からプログラマーとして活動しているベテランの方が「現実を語る」と出てきました。
彼は自身の 40 年間の経験をまとめ、13 のアドバイスにまとめました。これらのアドバイスが長期的にプログラマーを目指す初心者に役立つことを願っています。
記事が公開されると、reddit や Twitter で議論を引き起こし、多くのプログラマーが同意のコメントを寄せました。ユーザーからは「もっと同意できません!」という声もありました。
さあ、彼がどのような情報を共有しているのか、早速見てみましょう。
40 年の開発者の経験からの共有
このベテランの方は Noah Gibbs といいます。彼は NVIDIA、AppFolio Inc、DAQRI などの企業で勤務し、現在は Shopify で働いています。
彼は経験豊富なソフトウェア開発者として、常に開発の第一線で活躍してきました。
しかし、想像とは異なり、彼は今回、学ぶべき言語やフレームワークではなく、技術よりも重要だと考えるいくつかのポイントを指摘しています。
(以下は著者 Noah Gibbs の言葉で語られています)
- 年齢は関係ありません
約 1 年前、つまり 45 歳の時に私はピアノの練習を始めました。この 1 年間で自分の成長を感じていますし、60 歳になる頃には素晴らしいピアニストになる自信があります。
プログラミングも同じです。他の分野のバックグラウンドがある場合、プログラミングの学習は非常に速くなります。
信じてください、50 歳からプログラマーになり始めても、10 年後、つまり 60 歳の時には、私の 18 歳の頃よりもずっと優れたレベルになっているでしょう。
私は 20 歳、30 歳、40 歳でプログラマーになった優れた人々に出会ったことがありますので、50 歳や 60 歳から始めることに何か問題があるとは思いません。この仕事には時間と努力が必要ですが、若くある必要はありません。
- 異なるタイプのプログラミングを試してみる
初めてプログラミングを始めたばかりで、長期的にプログラミング業界で働きたい場合、私のアドバイスは、さまざまなソフトウェアを書いてみることです。どんなソフトウェアでも構いません。
私の 40 年間のプログラミング経験では、さまざまなトレンドがやってきました。自分自身を柔軟にするために、さまざまなタイプのプログラミングを試すことは非常に重要です。
これにより、考え方が固定化されず、ほとんどのルールが何かを教えてくれることがわかります。
ある特定のタスクに固執しすぎると、失敗する可能性が非常に高くなります。
- 成果が遅くても心配しないでください
学んでいることが無駄だと感じないでください。無駄とは相対的なものですから。
私はかつて、DGD という古い MUD プログラミング言語に数年間の余暇時間を費やしました。これは実用的な価値を持つものではなく、ほとんどの情報が奇妙で非標準的であり、実際に応用できるものはほとんどありませんでした。
しかし、それは私に多くのことを教えてくれました。それは私に後に Ruby on Rails で応用することを教えてくれましたし、データベースプログラミングの方法を教えてくれました。また、後に学んだ 5、6 つの言語で使えるいくつかのことも教えてくれました。
興味深いことに、数年後に私は DGD のコンサルティングの仕事を見つけました。世の中にはまだ DGD の仕事があまりありませんが、私は 1 つ持っています!これは私が学んだ多くの「実用的な」言語よりも実用的です。
私は自分自身によく言うことです。「まだ早いです。」あなたは興味深いまたは有用なことを学ぶことができます。それが 10 年、20 年、30 年後に報われるかもしれません。
将来何が起こるかは予測できませんので、必ずしも 18 か月後に向上するものを選ぶ必要はありません。
- 自分にとって魅力的な仕事を見つける
コーディングを始めた理由は、何かしらの魅力があったからです。それが何であるかを見つけることが重要です。
この答えは人それぞれ異なります。私の場合、コードを書くことによって得られる達成感と知的な満足感が好きです。
長期的に続けるためには、自分にとって十分に魅力的な要素を仕事に見つける必要があります。
何の魅力も感じられない場合は、休暇を取るか、自分の好きなことを再び見つける必要があるかもしれません。なぜなら、そのような仕事はあなたを疲れさせるだけです。
- これは短距離走やマラソンではなく、日記を書くことです
初心者の場合、決意した後に「私はプログラマーになる」という詳細な計画を立てることがあります。その計画には 8 つの大きな項目や 56 の小さな項目などが含まれるかもしれません。
私はあなたにそれを真剣に受け取らないように言いたいのではありませんが、その計画をあまり重視しないでください。なぜなら、すべてのことを計算や計画で完了することはできないからです。
ある時点では、「設定したタスクから離れている」だけで、「自分の人生を生きている」だけです。これは失敗ではなく、諦めではありません。
価値のあるものを予測することはできませんので、すべてのことを学ぶべきです。私の経験から言えるのは、長く生きるほど、仕事がうまくいくほど、すべてのこと(すべての人)があなたに役立つことに気づくということです。
あなたは短距離走やマラソンをしているわけではありません。それどころか、これは日記を書くようなものです。
10 年後、あなたはこの日記を見返し、「わあ、私はすごいことをした」とか「うーん、私はとても興味深い人だった」と言うでしょうが、おそらく日記に「私は Java が得意です」とは書かないと思います。
- 仕事と職業を混同しないでください
仕事と職業を混同しないでください。それらは同じものではありません。
私にとって、ソフトウェアの開発は非常に素晴らしい仕事ですが、それだけでなく、まあまあの職業です。
他の人のアドバイスを受ける際にも、そのアドバイスが仕事に関するものなのか、職業に関するものなのかに注意してください。両方を混同すると、そのアドバイスはあまり意味を持たなくなります。
- 学習の順序は重要ではありません
初心者の時には、最初にどの言語や技術を学ぶべきかについてさまざまなアドバイスを受けることがありますが、それは実際には重要ではありません。
古いやり方に従わず、自分自身の道を切り開いた場合でも、それは基礎的な作業を怠っているわけではなく、悪いことではありません。
なぜなら、本当に重要なことは、いつかは気付くことであり、それを学び直すことができるからです。
- 優れたほど他とは異なる
初期のプログラマーの職業訓練(ブログ記事、大学の授業、書籍など)は、あらゆる側面で基本的な能力を育成しようとする工場のようなものです。
また、初心者はしばしば、主任エンジニアには多くのスキルが必要で、各スキルのレベルも高くなければならないと誤解していますが、実際にはそうではありません。
あなたは非常にシンプルなコードを書き、それを詳細に説明することで、Patrick McKenzie が「Bingo Card Creator」で行ったように、尊敬を得ることもできます。
基本的な能力以外に、これらの道筋にはほとんど共通点はありません。
これがなぜ、あなたが就職活動中に「私は 15 年の経験を持つソフトウェアエンジニアですが、通常の給与はいくらですか?」という質問をするのは愚かなことなのかという理由です。
15 年というのは非常に長い期間ですので、あなたは他の人とは異なる優位性を持っているはずです。本を書いたことはありますか?収益を上げる大規模なプロジェクトに携わったことはありますか?興味深いオープンソースプロジェクトを統合したことはありますか?この 15 年間、あなたは何をしてきたのですか?
もちろん、これは給与の問題だけではありません。あなたは「私は 15 年の経験を持つソフトウェアエンジニアです、つまり私はこのプロジェクトをリードする能力がありますか?」と尋ねることもできます。答えはもちろん「可能性があります」です。次の質問は「15 年間で何をしましたか?」です。
- 実践から学ぶ
私は人々にソフトウェア設計の深層原理を学ぶことを最初に勧めることはありません。なぜなら、それらを純粋な理論として学ぼうとすると、ほとんど間違いを com するからです。
初心者の場合、まず実際の言語を使って実用的なソフトウェアを構築する方法を学ぶ必要があります。どの言語であっても、本当のエラーを犯して問題を解決することで、問題を解決することができます。
そして、次のように循環させることができます:実践、エラー、理論の学習、エラーの修正。
もちろん、これはあなたが最初に理論を学んだ場合、永遠に悪くなるという意味ではありません。ただし、学んだ知識を正しく使うには時間がかかる場合があります。
- どの技術を使うかは重要です
プログラマーとして数十年間活動したいのであれば、さまざまな技術だけでなく、さまざまな非技術的なスキルも学ぶ必要があります。
例えば、「少なくとも 1 つの関数型プログラミング言語を学ぶ」というのは、ピアニストが「モーツァルトのピアノ曲を演奏することを学ぶ」のと同じくらい重要ですが、同時に、プログラミングに関連するいくつかの周辺技術を学ぶことで、追加の洞察力を身につけることができます。
- 他の分野から学ぶ
私たちの業界がまだ若いということは何を意味するでしょうか?それは、私たちが基本原理を研究しているということです。
他の分野から多くのことを学ぶことができます。私は「How to Steal Like an Artist」(アーティストの練習方法を盗む方法)という本を書いたことがありますが、それは芸術と音楽が古くからの学問であり、コンピューターの発展よりも何千年も先んじているためです。
ですから、問題に直面した場合、他の分野の人々がどのように問題を解決するかを考えてみることができます。
たとえば、アトゥル・ガワンデ(Atul Gawande)の「チェックリスト・マニフェスト(Checklist Manifesto)」では、パイロット、ビルビルダー、医師が問題に取り組む異なる方法について語られており、これらは非常に有用な方法です。
- 車輪の再発明をしないでください
よく知られているように、芸術家が静物を何度も描いたり、音楽家が同じ曲を何度も練習したりすると、彼らはますます熟練していきますが、プログラマーは違います。
プログラマーには「車輪の再発明をしないでください」という言葉があります。私たちの仕事は、コンピューターに繰り返し作業をさせることで、新しい仕事に取り組むことができるようにすることです。
あなたは車輪を再発明することを試みたり、「悪い」方法で意図的にコードを書いたりすることができます。要するに、あなたは本当に異なることに長けている必要があります。
- ただやってみてください
私は技術的な領域ではなく、技術オタクたちで溢れたフォーラムではなく、プログラマーになったばかりの人々の偏執的な情熱が溢れるような場所ではなく、非技術的なアドバイスを皆さんにお勧めしています。
あなたがコードを書いているなら、あなたはプログラマーです。またはソフトウェアエンジニア、または何とでも呼んでください。
書き続ける限り、あなたはずっとプログラマーでいることができます。何年経っても、どんなに長く続けても、あなたが続ける限り、あなたは資格を持っています。それが最も重要なことです。
さて、読み終わった後、プログラマーの業界に対する新たな認識はありましたか?