私がより良い開発者になることができた方法
React Confで出会った人が私にもっと良い開発者になるにはどうすればよいか尋ねたことがあります。おそらく私はかなり高いレベルのプログラマーだと思っていたようです。だから私はこの機会に何年もの間私がどのようにプログラミングに近づいてきたのか、「メンタルモデル」を書いてみる時間を持っています。
私についての情報をいくつかお話ししたら、私は32歳で、10年以上のキャリアを持っています。最近初めて私がやっていることに自信を持っていました。しかし、私はまだ弟子を常に疑っています。おそらくこのような感じは永遠に消えないでしょう。皆さんはこの気持ちを無視し、一生懸命開発し、経験を積んでください。
今回私が言ったことは、プログラミング技術を向上させるためのヒントです。
投稿を読んで、私にとって最も適切な方法が何であるかを見つけてください。私が言うヒントはただ私に役立つものです。
あなたにインスピレーションを与える人を探すが、盲目的に信じないでください。

何年もの間、新しい技術と情報を習得するために多くの人々の資料を見つけました。私は彼らの言葉が正しいと信じ、彼らが働いたことを勉強し、多くのことを学びました。彼らはとても生産的でスマートで、私や他の人にインスピレーションを与えました。皆さんもそのような人々を探してインスピレーションを得て学びましょう。
しかし、彼らの言葉が盲目的にすべて正しいとは思わないことを願っています。ツイッターで見たとき、すごくすごいように見えるものも、実際の仕組みを見るとあまり大きく変わることはありません。すべての手段と方法を選ばず、動作するコードを書こうとするだけです。もしその人の意見に同意しない場合が生じたら、彼らに意見を提示し、その過程を学んでください。私にとって最も生産的な会話のいくつかは、このようなプロセスを通して出てきました。
私のEmacs設定はめちゃくちゃです。私のOCamlのオートコンプリートは1ヶ月が経ちましたが、それでもなぜできないのかわかりません。私はジョブを自動化しないので、必要なシェルコマンドを実行するときには、シェル履歴を遅らせることもあります。私は最初はひどく汚れたコードを書いています。そして私がやっている作業が明確になるまで、グローバルオブジェクトに何かを付けます。経験豊富な開発者は常にさまざまな方法を使用しています。重要なことは、あなたが何かをしているということです。
あなたの仕事を自分で低く評価しないでください
初心者の開発者は、彼らが初心者のために作った作品がそれほど価値がないと感じる傾向があります。経験豊富な開発者にも慣れていない開発をするとき、初心者の開発者と同じ考えをしています。私が考えるのに最適なアイデアのいくつかは、フレームワークの意見を持つ人ではなく、新しい開発者から来ています。
あなたがすることは何でも価値があります。もしあなたのアイデアがうまくいかなかったとしても、その方法がなぜならないのかを学びます。(注:上記のことを実践して新しいユーザーにぴったりです)
いつも何かをしなければならないという圧迫感は感じないでください。

毎日新しい技術が登場しながら、休むと一日でも遅れるような気がする時があります。しかし、決してそうではありません。あなたが仕事をしていない時間がむしろより良い結果を生み出すことができます。むしろ新鮮な視点を持つのを助け、また新しいアイデアを思い浮かべるのに役立ちます。
毎日登場するほとんどの内容は、以前にあったアイデアを再煮したものです。真に革命的なことは数年に一度だけ現れます。
関連講演: Hammock Driven Development
細かいもの(Fluff)は無視してください
より早く目標のために走る方法は、「細かいもの」を無視することです。言い換えれば、「時間を効率的に使う」という言葉のようなものです。1日に与えられた時間の中で重要な内容に多くの時間を費やすならば、おそらく時間が経つにつれて大きな違いを見るでしょう。
それでは、細かいもの(Fluff)とは何ですか?それはあなたが考えているものに依存しますが、いくつかの例として、言語の文法、ライブラリのAPI、ビルドツールの設定方法などがあります。ES7以降のJavaScript文法などを身につけるとしても、コンパイラの動作原理を身につけるほど良い開発者にするわけではありません。
既存のアイデアを新しいAPIを使用するライブラリを採用して書くことはあまり興味深いものではありません。もちろん、上記のことがすべて重要ですが、より深い内容に時間を費やすことをお勧めします。
皆さんに質問をさせていただきます。コードを「クールに」見せるために多くの時間を費やしていますか?もしそうなら、そうしないことをお勧めします。時間が経つと、コードは大幅に変更されます。解決する問題と抽象化層にさらに時間を費やすことをお勧めします。すべての作業を終えたら、残りの時間にコードをトリミングしてください。(これはDRY原則にも当てはまります。あまり心配しないで、自由に重複コードを書いてみてください。)
過去に研究したことを掘り下げてください。
あるアイデアが思い浮かぶと、すぐに席に座って作業したい時があります。しかし、既存の人々が問題をどのように解決してきたのか、簡単に見てみる前にはそうしないでください。トピックを調査するのに数日間を費やしている場合は、私がいつもやってきた解決策が完全に変わることがあります。
学術論文を読む方法も良いです。私は数学的意味論/操作的意味論のような用語を知らず、論文を読むことができなかったことがたくさんあります。しかし、数学の代わりにコードを使って読むことはそれほど難しくありません。過去30年間の論文には非常に多くの情報が含まれています。論文からこれらの情報をよく抽出したら、あなたはすぐに知識をリードする人(thougjt- leader)になります。
Prettierはこれの完璧な例です。私は何をしたいのか分かりましたが、どのように実装するのかわかりませんでした。しかし、調査をしてみるとこの論文が見つかり、数日後に私が何をすべきかを正確に知ることができました。そうすれば基本的な作業を一週間で終わらせることができました。事前に調査をしていない場合は、はるかに長い時間がかかりました。
関連論文: Paper We Love
大きなプロジェクトを担当し、なじみのない仕事をしてみてください

体験するのが最善です。誰もが挑戦することはできませんが、機会があれば、大きなプロジェクトに挑戦してください。あえて最後まで終える必要もありません。コンパイラを書くだけで、たくさんのことを学ぶことができます。
複雑な問題をどのように解決するのか分からないとき、気分は正直なところ悪いです。慣れていないので、解決策を見つけるためにもっと勉強と研究が必要です。しかし、このプロセスを経ているなら、はるかに良い開発者になるでしょう。
新しい言語を学ぶことから始めましょう。既存の習慣から抜け出して、新しい視点で物事を見るのを助ける効果的な方法です。私が初心者の開発者だった時、最もよくやったことは、Schemeを学んだことです。この言語は非常にシンプルで、すべてのコードを関数型で書くように強制します。私がShemeを学んだ時間は今でもまだ助けています。いったんコードの見方が根本的に変わりました。

最後に、いくつかの方法をお勧めします。すべて私が開発者として活動しながら大きな助けを与えたものです。
ほとんどの人が今でも作業に役立っており、新しい視点を持つのに役立ちます。あえてこれらをすべてする必要はありません。私がより良い開発者になるのを手伝ってくれた方法なので、あなたは参考にしてください。
・C学習
まだやったことがない場合は、基礎だけを学んでください。なぜ人々がCを持って文句を言うのか、理解することも重要です。
・コンパイラの作成
おそらく慣れていないことをしながら学習する方法の最良の方法です。Super Tiny Compilerをチェックしてください。
・マクロを学ぶ
Scheme、Lisp、Clojure(Script)を参照してください。マクロはコードの表示方法を大きく変えます。
・Sicp
Sicpは非常に古い本ですが、今でもまだ役に立つ情報がたくさんあります(一部の人はそうは思いませんが)。プログラミングの知識がほとんどない人のために、 メタサーキュラー評価者とコンパイラを実装する方法が詳しく含まれています 。
· Continuation を理解する
Continuationは低レベルの制御フロー原理です。Schemeはこれを唯一実装した言語です。実務には絶対に使用しませんが、制御フローの考え方を変えます。
・新しいプログラミング言語を学ぶ
Clojure、Rust、Elm、OCaml / Reason、Go、またはSchemeのいずれかをお勧めします。これらの言語はすべて独自の機能を持ち、新しい考え方を持つのに役立ちます。
本文内容は https://archive.jlongster.com/How-I-Became-Better-Programmer を脚色した資料です。

댓글
댓글 쓰기