web-dev-qa-db-ja.com

技術的に熟練した上級ソフトウェア開発者が改善を続けるために何を研究できるか

10年以上プログラミングをしているとしましょう。多くの言語を知っていますが、非常に詳細なレベルの言語はほとんどありません。あなたはソリューションのアーキテクチャを設計し、より大きなプロジェクトに取り組み、提供してきました。パターン、ベストプラクティス、効果的なコーディングガイドライン、単体テスト、マルチスレッドなどを研究してきました。

そして、あなたはゆっくりと、あなたが読んだほとんどの本が、100ページのテキストごとにますます価値の低い情報を与えるという感覚を発達させます。したがって、彼らは減少するリターンを与え始めます。あなたはまだ学びますが、あなたはもはや飛躍的に向上しません。

学習は以前と比べて生産性が低下するのはなぜですか?

当時、それはあなたの考え方を変え、新しいことを教え、視野を広げ、現在の職業を改善したり、何か新しいものを発明/管理/構築したりすることができました。なぜそうならないのですか?

15
Coder

第一に、あなたの質問が定式化されている方法にもかかわらず、特に私たちの分野では、あなたがそれらについて読むことができるより速く新しいものがポップアップする分野では、研究に終わりはありません。とはいえ、上達したい場合は、以下のようなカテゴリーを考えます。最大の利益/ ROIを得るには、もちろん最も弱い領域から何かを選択する必要があります。

基礎知識

プログラミング言語を知っていて実際的な経験を持っているにもかかわらず、基本的な基本的な問題が不完全なままになっている(特に自己学習した)領域がしばしばあります。データ構造、アルゴリズム、キャッシュ戦略、ハッシュ関数などについて考えてみましょう。

これには、プログラミング言語の基礎-コンパイラ、最適化手法、型システムから、カテゴリ理論、モナドなどまで、すべてが含まれることに注意してください。

数年にわたって大学レベルの学位を求めてきたように、十分に教えられていれば、あなたはすでにこのカテゴリーに強いと思われます(もちろん、完成からは程遠いが、強固な根拠)。それ以外の場合は、これらの領域のいくつかの本を読んで、知らないものでもレパートリーに欠けているものがないかどうかを確認してください。このカテゴリは、自分を過大評価するのが最も簡単です。

パラダイムナレッジ

プログラマーが自分たちがすべて知っていると思っているにもかかわらず、主流のパラダイム以外にはまったく無知であると思われるプログラマーが現れると、私はいつも驚かされます。あなたがオブジェクト指向がそれの終わりであると思うならば、これは改善のためのあなたのカテゴリーです。関数型プログラミングも存在し、論理プログラミングについて聞いたことがあると思われる場合でも、それは良い選択です。そこにはもっと多くのパラダイムがあり、それらについて学ぶことはプログラミングの世界の新しい見方に似た何かをあなたに与えるという大きな影響を与えます。

忘れないでください:パラダイムと見なすことができるかどうかについては、(本質的には哲学ではなく)しばしば議論があります。これらに横行しないでください。あなたの目標は視野を広げることです。つまり、他の誰かがXをそれ自体パラダイムと見なしてもしなくても、これらのことについて学ぶことは何の違いもありません。

専門知識

それらすべての中で最も簡単-同時に最も役に立たない。もちろん、1つのテクノロジーに専念し、そのすべての内外を知ることができますが、代償を払う準備をする必要があります。テクノロジーは古くなり、そのスピードはますます速くなっています。そのため、ここに費やされた時間は、今後数年の価値がないことがほぼ保証されます。

また、収益の減少の問題もここに現れます。本質的に何かの専門家であることは、その狭い主題に数え切れないほどの時間を費やさなければならないことを意味します。したがって、定義上、何か新しいことを学ぶには長い時間がかかり、その新しいことは小さなパズルのピースになります誰の見方も変えない。

領域知識

それがあなたの仕事のドメインであるか、単にあなたの個人的な興味に基づいているからですが、コンピュータサイエンスの専門家であることand特定のドメインは非常に価値があり、やりがいがあります。ここでは、コンピュータグラフィックスやAIなど、CSの側面については触れていません。代わりに、コンピューターがすべての人の生活の中で定着し、それによって他のすべての分野がコンピューターとあなたが入ることができる領域の対象となることに注意してください。

これは明らかに「分野外」のカテゴリーに分類されますが、それは鋭い数学的な「分野外」ではなく、むしろ応用分野です。医学を考える:私はあなたが医者になることを勧めていません。ただし、コンピュータサイエンスに関する既存の知識をその分野の問題に適用するために医学の基礎を学ぶことは、実際に価値があります。これは、視覚化技術からロボット工学に至るまで、会計や管理のためのエキスパートシステムや単なるデータ管理にまで及びます。これまでにすべてのことを行ったことがありますが、別のドメインでそれを行うと、まったく新しい経験になる可能性があります。

ただし、これは他のカテゴリに比べて、方向性を大幅に変える方法であることを覚えておいてください。日々の仕事でそのフィールドに接触していない可能性があり、そのため離陸が非常に困難です。それは仕事を切り替えることさえ意味するかもしれません。さらに、新しいドメインに関する何らかの認定が必要になります。結局のところ、そのドメインの完全な初心者であり、学際的な研究の卒業生と競争しなければなりません。学際的な研究は、そのニッチの専門家になるための旅をすでに始めています。

補足知識

マイク・ブラウンが付け加えたように、あなたの現在の仕事に何らかの形で付随する知識の領域もありますが、厳密には必要ではありません。プロジェクト管理について学ぶためにプロジェクトマネージャーである必要はありませんが、いつものように、追加の知識があると、反対側がどのように動作するかについてより深い洞察が得られます。これを一般化して、ソフトスキルに焦点を当てることもできます。他の人と一緒に実際のプロジェクトに取り組んだ人は皆、これらの価値を知っていると思います。

23
Frank

ソフトウェアは常に進化しているので、継続的な改善に重点が置かれていると思います。私はあなたがどこから来たのか理解しました。最近、私は多少似ていると感じ、SQL ServerでMCSMを追求しています。

次の新しい言語、フレームワーク、または現在「ホット」なものを学びます。毎年、テクノロジー、フレームワーク、または言語が出てきたり、クリティカルマスに達したりして、それ自体が流行語になる。ここ数年、node.js、Ruby、jQueryのいくつかを考えることができます。これは、他のプラットフォームでの考え方にも影響を与える可能性があります。たとえば、RORがGrailsでJavaに対して)したことを確認します。

常に改善の余地があります。あなたがすべての専門家になることはほとんどあり得ないと思います、そして私はたくさん読んで、私は常に学んでいます。 100ページあたりの学習についてのあなたの言うことには同意しますが、これは、あなたが主題の専門家である場合に予想されることです。

あなたが何ができるかという観点から、ここにいくつかの提案があります:

  1. コミュニティの変化と人々が「入り込んでいる」ものに遅れないようにしてください。新しいスタックについて学びます。少なくとも、必要に応じて推奨するのに十分です。

  2. このようなQ&Aサイトに参加して、自分の知識を他の人に伝えることができます。時間をかけて他の人々の貢献を読むと、おそらく何かを学び、少なくとも他の人々が持っている見解を見ることができるでしょう。

  3. あなたの仕事に何らかの関係がある趣味を選んでください。クロスオーバー、思考AI、レゴマインドストーム、RaspPiなどの趣味はたくさんあります。

  4. 知識の幅を広げようとするだけでなく、深さを増やしてみてください。たとえば、EFが内部でどのように機能するかを学び、フレームワークを使用するだけでなく、これらの奇妙なコーナーケースを診断できます。

  5. あなたが自分のものを知っていることを証明するためだけにトップレベルの認証を追求する

個人的には、今心がけていることを教えてあげます。私は読んでいます すべてのソフトウェアアーキテクトが知っておくべき97のこと そして私は部分的にしかそれをしていませんが、それは多くの賢明なアドバイスを投げかけています。本は私が提供したリンクでオンラインで自由に読むことができます。

私が最終的に取り上げた趣味に関して言えば、私は(コンピューターを使って)車両の診断に入り、自分の車を完全にメンテナンスしました。手で作業する時間を本当に楽しんでいます。

9
Sam

ある時点で、特定のトピックについて十分に学習し、臨時的に新しい知識を習得できるようになりました。あなたの主な分野について学ぶべきことはこれ以上ないように感じたとき、あなたの主な知識を補足する補足的な知識を獲得し始める時が来ました。

私にとっては、UXとグラフィックデザインに飛び込んでいます。コード内のエレガントな構造だけでなく、エンドユーザー向けのエレガントなインターフェイスも開発者として提供できると感じているからです。

アプローチできる他のトピックには、プロジェクト管理、ビジネス分析、システム管理、ソフトウェアプロセスの改善などがあります。特定のドメインで作業していることに気付いた場合は、そのドメインをさらに深く理解することは理にかなっています。たとえば、私は最近、金融サービス部門で多忙な仕事をしています。財務モデリングなどに関するコースラのコースに申し込んだので、顧客との条件について話し合うのに役立ちます。

学ぶべきことは常にあります。それは、箱から出して考えることです。

1
Michael Brown

この質問には2つの部分があります。なぜ学ぶのが難しいのか、そして何ができるのでしょうか。

最初の部分は非常に簡単です-より高度なトピックは難しいです。プログラムの方法を学ぶことは難しいのですが、プログラムをうまく設計する方法を学ぶことはかなり難しく、大規模なアプリケーションを設計する方法を学ぶことはさらに困難です。問題の事実は、高度なトピックが難しいか、そうでなければ高度なトピックではないということです。それらを学ぶためにより多くの時間を費やす必要があります。それらを習得するために練習するより多くの時間。

何ができるかについては、シニアソフトウェアエンジニアであることの技術的側面に重点を置いているように見えます。言語やフレームワークを学ぶよりも、チームがソフトウェアを作成するのに役立つことはたくさんあります。他の開発者へのメンタリング、要件の交渉、プロジェクト管理、プログラム設計、ビジョンの伝達、チームの規範の実装などのソフトスキル...ソフトウェアの作成に効果的な開発者をteamにするために必要なすべての重要なこと、あなただけではなく。

0
Telastyn