「ジュニアプログラマ」であるとはどういう意味ですか



金曜日の夜、大学を卒業したばかりの友人(ロチェスター工科大学)から、C ++システムのプログラミングと人工知能の教育を専門とする有望な新興企業で働いている友人からメールを受け取りました。 以下は彼の手紙の小さな断片です。



おい、仕事で1つのことは私を悩ませます-私の同僚はほとんどいい人ですが、私の仕事はまったく評価されていないように感じます。 私は6人のエンジニアと協力しています(一緒に7人のエンジニアのチームを構成しています)。 6人のうち、1人はプラットフォームアーキテクト、2人はシニアアプリケーションエンジニア、1人はソフトウェアアーキテクト、他の2人は品質保証を担当しています。 正直に言うと、これを慢に聞こえたくありませんが、1人の上級応用エンジニアを除いて、私はこれらすべての「年上の」人よりも多くのことを知っていることに気付きました。 誤解しないでください...彼らは長年にわたってこれを行っており、重要なシステムなどに取り組んでいますが、私は彼らよりも教育を受けています。 私はジュニアシステムエンジニアであるという事実のために、多くの場合、私のアイデアは単に却下され、私のハードワークはまったく評価されません...率直に言って、それは私をひどく激怒させます。 フリーランスに戻ることを考えることもあります(特に、すでに大学を卒業していることを考慮して)



そのメールを読んだ後、この投稿を書くべきだと80%確信していました。 15%がこれこれこれの読み物をくれました。 これを読んだ後に受け取った最後の5%。



私はジュニア開発者です。 私の現在の地位は単に「ソフトウェア開発者」と呼ばれることもありますが、私は18歳(8月に19歳になります)であり、このためソフトウェア業界の若手開発者です。 それで、それは本当に何ですか? さまざまな人々によると、「ジュニア」開発者になるには、それがどのように感じられるかについての説明が多すぎます。 また、ジュニア開発者(過去のある時点で私を含む)の間で、この用語はある種の恥に関連していることに気付きました。 過去数ヶ月にわたって、私はクールで便利な製品を作成する優秀なエンジニアのチームで働く機会がありました。 ソフトウェアを作成する実際のチームで働いてから約6か月しか経っていないという事実にもかかわらず、私は思うに、ジュニア開発者に適した定義を与えることができると確信しています。



正式な定義を与える代わりに、この意味の意味を抽出できるいくつかの例を紹介します。 まあ...運転しました。



私の相棒に対する免責事項 :相変わらずあなたを愛しています。 [:)]。



すべてを知っている



私たちの後輩開発者の98%がとにかくこの段階を通過するに違いないと思います。 これをよりよく説明するために、架空のキャラクターであるジャックを使用します。



若く、熱狂的で情熱的な開発者として、ジャックは彼の職業で最高になるよう努めています。 彼はすべてに興味があるので、新しいプログラミング言語、パラダイム、デザインパターン、テクノロジーなど、常に新しいことを学んでいます。 現時点では、彼は7つのプログラミング言語を知っています。 彼は、命令型、機能的、イベント駆動型、オブジェクト指向プログラムの作成方法を知っています。 ジャックは、驚くべきファクトリーメソッド、セクシーなシングルトーン、きれいなデコレータ、そして驚くべきプロトタイプの書き方を知っているだけでなく、それらを正しく使用する方法を知っています(少なくともそう考えています)。



ああ、ところで、ジャックはNode.js、Java、Haxe、ooc、そして昨夜プライベートGitHubリポジトリに追加したものなど、さまざまなプラットフォームに関するすべてのことも知っています。 私を信じて、彼はこれをすべて知っています。 OMG! どうすれば忘れられますか? また、ジャックはアセンブリ言語でプログラムします。



そして、このすべての知識のおかげで、ジャックは、私が呼んでいるように、無謀な優越感を感じ始めます。 今では彼は普通のジョーの何百倍も知っているので、このジョーのポジションにより適しています。 そして、ジャックを「ジュニア」開発者と呼ぶことは絶対にしないでください。さらに悪いことに(まあ、それは始まった)「赤ちゃん」。 これを行う場合、寝室に座っているジャックがあなたに似た人形の台紙でta倒しているので、その夜遅くにあなたが激しい頭痛を感じることに驚かないでください。



経験者



「いつか飛ぶことを学ぶ人は、まず歩き、走り、登り、踊ることを学ばなければなりません。 飛ぶことはできません」(単純なものから難しいものへ)-フリードリッヒヴィルヘルムニーチェ




偉大な哲学者で詩人のフリードリッヒ・ヴィルヘルム・ニーチェの驚くべき表現。



たくさんの知識を持つことと経験を持つことには違いがあります。 これを実現するには少し時間がかかりましたが、言わなければならないことですが、この違いは非常に興味深いものです。



免責事項 :私はまだすべてを学び、慣れています。 私はこれがすべて私にも当てはまらないことを決して断言しません。



感情







経験豊富な開発者は、経験の浅い人を破り、形を与える方法を知っています。 しかし... ... ...しかし、それはどういう意味ですか、ジョナサン? いたずらを終える! 私はすでにこれに飽き始めています!



さて、あなたは本当に落ち着いて聞く必要があります。



一つのことは、「若い、熱意と情熱に満ちた」と密接に関連しており、私がそれを呼ぶようになったとき-「専門化」または「フック」。 私の理解では、あなたが開発者であり、彼らがあなたが「フック」を持っていると言うなら、それはあなたがあなたの技術と製品にあまりにも執着していることを意味します。 これらの特性を備えたジュニア開発者として、コードの改善に多大な時間を費やし、これらの適用された設計パターンと原則のすべてを検討し、単体テスト(多くの場合非常に役に立たない)などを考えます。 ある時点で、あなたは終わり、彼の仕事に自信を持っているスーパーデューパーは、「シニア」デベロッパーに向かっていきます。もちろん、彼の顔にはきらめく笑顔があります。 次に、驚いたことに、使用した設計パターンはオプションであり、システムは水平方向にスケーリングされず、最適化に急いでいると彼女は言います。 あなたの中の小さな男はすすり泣き始めますが、あなたは勇気を持って彼女にこれを見せません。 あなたは人形と台紙がどこで売られているかについて考え始めます。 それから彼女はあなたに彼女のポイントを説明し始めます。 彼女は、以前の経験に基づいて、使用した単一のパターンが以前は同じ目的で使用されていたが、依存関係の導入の方が優れていると言います。リファクタリングの沼にうんざりする必要はありません。 次に、アプリケーションからサーバーのディスクに書き込むと、ロードバランシング中にバランスをとる必要があるアプリケーションは、サーバー1のディスク1に書き込まれたファイルがサーバー2で読み取られるため、ロード最適化の候補として自動的に失格することを説明しますそして3番。 彼女はまた、すべての変数識別子が1つの長い文字になる時期尚早な最適化は、このための特別なツールがあるため、将来的にはあなたに害を与えるだけだと言っています。 うーん...あなたは「たぶん、この人形はまったく必要ないだろう」と言います。



それが壊れて、形になるということです。 あなたはあなたの仕事について専門家の批判的なフィードバックを受け取っただけでなく、その過程で何か新しいことを学びました。



有用な読書: ルールナンバーワンのプログラマー-感情をしきい値の後ろに残す



設計とプロセス







Ai Squaredに入社する前は、フリーランスでした。 優れたアーキテクチャを備えた製品を高く評価し、自分が作成したものは適切に設計されているという誤った想定を抱いていました...私は真実とは程遠いものでした。 それでは、良いアーキテクチャとは何ですか? これまでのところ、私はまだこの質問に答えるのに十分な資格がありませんが、数年以内に戻って答えます。 いいですか 手に手。



(今のところ)言えることの1つは、ジュニア開発者が無視するものが2つあり、謙虚な意見では、優れたアーキテクチャを持つ製品を作成するために必要なことです。 これらの2つのことは、私が「デザイン」と「プロセス」と呼んでいます。 もちろん、私たち全員が(願わくば)デザインが通常意味することを知っていますが、デザインを言うとき、私はどういう意味ですか? 設計とは、実行を開始する前に実行したいことを考えることです。



ジュニア開発者として、私たちは考えずに構築し、構築した後に思考する習慣があります。 フリーランサーである平日、私はタスクを与えられ、(原則として)放っておかれたので、それらを完了しました。 このため、15〜20時間連続で[品質の低い]コード(1時間あたり少なくとも75行のコード)をスタンプしました。 私が世話をしなければならなかったのは、クライアントを幸せにし、彼の要件を考慮することだけでした。 質の悪いコードはクライアントが望んでいたことを行いましたが、すべてがうまくいき、誰もが幸せでした。



それでは、「プロセス」という言葉はどういう意味ですか? このプロセスは、タスクを完了するために必要な明確に定式化されたルートです。 これは、プロジェクト管理、ツール、および計画が役立つ場所です。 また、実際のソフトウェア開発チームに入る前に、 TrelloRedmineSprint.lyなどのさまざまなプロジェクト管理ツールについて知っていました 。 TrelloやRedmineなど、それらの一部も使用しました。 ただし、まだプロセスがなかったため、これらの強力なプロジェクト管理ツールをTo Doリストとして使用しました(すべてのタスクを完了済みと未完了に分割しました)。 理論的には、品質保証とは何かを知っていましたが、それでもプロセス自体は理解していませんでした。



今、私はプロセスを正しく作成する方法を学ぶ機会があります。



一般的に、déjàvuは専門家であり、概して、jamais vuは専門家です。







職場では、経験豊富な同僚が過去に犯した間違い、そのような間違いの結果、そして彼らがすべてのことから学んだ教訓について、私の経験豊富な同僚の話を聞くことほど喜びはありません。 そして、私はいつか自分のレベルに到達したい開発者なので、間違いを犯すことを避ける機会があります。



しかし、ジョナサン...あなたの投稿の名前! わかりました、わかりました、説明させてください。

有名な表現「 déjàvu 」は、文字通り「すでに見た」という意味のフランス語の表現です。 この表現のほぼ反意語は「 jamais vu 」で、文字通り「見たことがない」という意味です。



多くのジュニア開発者(もちろん私も含む)は、投稿の名前に接頭辞「Senior」または末尾の「Architect」が付いている人々を知っています。彼らは彼らよりも(プログラミングスキルに関して)教育が少ないと考えています。 しかし、これらの人々の多くに固有の興味深い特徴の1つは、彼らが長い間ビジネスをしていること、異なる企業で働いていること(必ずしもそうではない)、多くの間違いを犯したこと、彼らについて勉強したことなどです それにもかかわらず、彼らは、私たちとは異なり、すべての言語、プラットフォーム、および/またはテクノロジーを知っているわけではありません。 代わりに、彼らはいくつかの分野でスキルを向上させます( 私が知る限り 、通常1つまたは2つ)。 そして、すべての言語、プラットフォーム、および/または技術を学ぶ代わりに、彼らは1つまたは2つの言語、プラットフォーム、および/または技術を選択し、これらの分野の真の専門家になります



あらゆる言語、プラットフォーム、および/または技術に関して真の専門家であるとはどういう意味ですか? 私にとって、 真の専門家とは、専門家レベル(すべてが内外でどのように機能するか)で自分の分野を知っているか理解しているだけでなく、この分野で長年の経験がある人です。 言い換えれば、私の謙虚な意見では、努力をしたすべての開発者は、年にどこかで、たとえばC#で(常に読みながら)専門家になることができますが、親愛なるJohn Skeetなどの真の専門家になるには、



ジョナサン、「 大体デジャヴスペシャリスト」と言ってどういう意味ですか。 私は真の専門家について話している 。 それらの能力は1つまたは2つの領域にしか拡張できませんが、これらの領域では多くのことを「既に見ています」。 スケーラブルなシステムを作成でき、エコシステムを深く理解し、災害につながるショートカットを知っており、最適化をいつ適用するかを知っています。 わあ! 「スケーラブルなシステム」...これはどのようなものですか? 幸いなことに、現時点では、私たち(ジュニア開発者)は「全体、 jamais vuエキスパート」のカテゴリに分類されます。 私たちはさまざまなことの専門家になることができます(「 真実 」では不十分です )、システムの作成方法を知ることができ、生態系についての概念を持つことができ、多くのショートカットを知ることができますが、実際にシステムをスケーリングする方法はわかりません生態系の理解は非常に表面的であり、選択するショートカットは本質的に不要であり、時期尚早な最適化に多くの時間を費やしています。



人々、なぜ急ぐ?







急ぐ必要はありません。



素晴らしいピーターノーウィグが書いた「 10年でプログラムを教えて 」というブックマークから1つの記事を削除することはありません。



まだ読んでいない場合は、モットのナチュラル100%アップルジュースを1杯注いでください(これはあなたにとって有用であり、これは私自身が飲んでいるので... [; p])、テレビの電源を切って、あなたの兄弟の頭を割ってください(OK ...私はそれを言ったことはありません)、上記のリンクに従って、すべてを注意深く読んでください。



待ってください、私は困惑しています...あなたはなぜ「 全般的にjamais vuの専門家」である開発者であることが幸運であるかを言わなかった。 最後に、私の友人、これは私たちができる人生の時間であり、私たちは間違いを犯し、それらから学び、経験を積むことが許されています。 私たちを良くするだけの利点として(もちろん良い意味で)それを見てください。



まあ...それがすべてです。 終わり。



翻訳はトルストイサマーキャンプMetaBetaスタートアップスクールの一部として行われました。



All Articles