技術的に熟練した上級ソフトウェア開発者が改善し続けるために研究できること[非公開]


15

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

そして、あなたは読んでいる本のほとんどが、100ページのテキストあたりますます価値のない情報を与えるという感覚を徐々に身につけます。そのため、収益は減少し始めます。あなたはまだ学びますが、飛躍的に向上することはありません。

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

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


9
パーよくある質問、あなたは次の(プロジェクト、書籍、技術、または言語を)何をすべきかについての質問がオフトピックです。あなたの視点は理解できますが、ソフトウェア開発に関連して知っておくべきことをすべて知ることはできません。あなたの問題は、あなたが退屈し、おそらく知的thatに陥ったということです。あなたがそのマンネリから抜け出すために刺激する事は非常に依存します、そしておそらく他の誰かのための完全に異なるものになるだろう。しかし、ここに答えがあります:あなたの快適ゾーンから出てください。組み込みシステム、数学、グラフィックスなど、興味のあるものについて学びます。
カレブ

2
私は、OPが次に何をすべきかに関して、この質問が制限されているとは思わない。むしろ、専門家が研究を進めるために利用できる一般的なアプローチについてです。多分それはよりよく言うこともできるが、それは、「何をすべきであるように読んでいない私は私の隣にやります」。
フランク

3
まあ、私は最近、どの質問がトピック外ではないかを正直に知りません。実際、ここで興味深い議論を見つけるのは難しくなっています。OK、w / e、トピックをロックするだけです
。-コーダー

2
私は質問をすることができると信じて編集を再開する編。私の知る限り、問題が提示:「...パターン、ベストプラクティス、効果的なコーディングガイドライン、ユニットテスト、マルチスレッドを勉強...収穫逓減」にトピックプログラマのためのかなりある
ブヨ

2
他の人に教えようとするとき、あなたは主題のより完全な理解を得るでしょう。
-JeffO

回答:


23

第一に、あなたの質問が定式化されているにも関わらず、特に私たちの分野では、あなたがそれらについて読むことができるよりも速く新しいものが現れてくるので、勉強に終わりはありません。そうは言っても、改善したい場合は、次のカテゴリを検討します。最大限の利益/ ROIを得るには、もちろん最も弱い領域から何かを選択する必要があります。

基礎知識

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

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

数年間大学レベルの学位を取得してきたように、あなたがよく教えられているなら、あなたはすでにこのカテゴリーで強くなっている可能性が高いでしょう(もちろん、完成からは程遠いですが、しっかりした基盤です)。それ以外の場合は、これらの分野で数冊の本を読んで、レパートリーに欠けているとさえ知らなかったものがあるかどうかを調べてください。このカテゴリは、自分を過大評価するのが最も簡単です。

パラダイム的知識

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

忘れないでください:パラダイムであると考えられるかどうかについての議論が(その性質上むしろ哲学的に)しばしばあります。これらに左右されないでください。あなたの目標はあなたの地平線を広げることであり、それはこれらのことについて学ぶことを意味します。他の誰かがXを独自にパラダイムと考えているかどうかにかかわらず、それに違いはありません。

専門知識

それらすべての中で最も簡単-同時に最も有用ではありません。もちろん、単一のテクノロジーに専念し、そのすべてのインとアウトを知ることができますが、代価を支払う準備ができている必要があります。テクノロジーは古くなり、速度はますます速くなっています。これにより、ここで投資する時間が数年後には無価値になることをほぼ保証しています。

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

領域知識

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

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

ただし、これは他のカテゴリよりもあなたの方向性を根本的に変える方法です。日々の仕事では、その分野への連絡がない場合があります。ジョブの切り替えを意味する場合もあります。さらに、新しいドメインに関する何らかの認定が必要になります。結局、あなたはそのドメインの完全な初心者であり、そのニッチの専門家になるための旅を始めた学際的な研究の卒業生と競争する必要があります。

補足知識

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


+1、特に「ドメイン知識」の場合-それは少なくとも私にとってはうまくいったことです。
ドックブラウン

1
私はあなたの言うことに100%同意します。私は、より深い基礎知識に強い関心を持っています。私が現在コンパイラーのコースに登録しているという効果のために。何あなたが触れていないことは、私が補足的知識として分類したいものです:グラフィックデザイン、プロジェクト管理など
マイケル・ブラウン

パラダイムのために+1-私はOOP / proceduralを10年ほど(そしてそれに飽き飽きして)いましたが、それから関数型プログラミングを学び始め、私の目はまったく新しい世界に開かれました。
ポール

9

ソフトウェアは常に進化しているため、絶え間ない改善に重点が置かれていると思います。私はあなたがどこから来たのか理解しています。最近似たような感じがしており、現在、SQL ServerでMCSMを追求しています。

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

常に改善の余地があります。あなたがすべての専門家になれる可能性は非常に低いと思います。私は多くのことを読み、常に学んでいます。100ページあたりの学習量が少なくなることについてあなたが言うことに同意しますが、これは主題の専門家である場合に予想されることです。

できることに関して、いくつかの提案があります:

  1. コミュニティの変化と人々が「参加」しているものに遅れないようにしてください。少なくとも、適切な場所でそれらを推奨するのに十分であるように、新しいスタックを学ぶ

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

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

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

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

個人的には、現時点で何が私の心を開いているのかを説明します。私はすべてのソフトウェアアーキテクトが知っておくべき97の事柄を読んでいますが、部分的にしか読んでいませんが、賢明なアドバイスがたくさん寄せられています。この本は、私が提供したリンクから無料でオンラインで読むことができます。

私が最終的に取り上げた趣味の観点から、私は自分の車を完全にメンテナンスできるようになった車両診断(明らかにコンピューターを使用)に入りました。私は実際に自分の手で仕事をする時間を本当に楽しんでいます。


おかしい、私は97のことの著者の1人を知っています;)
マイケルブラウン

それは良い本です。
サム

どういたしまして。素晴らしいですね。
サム

1

一定のポイントの後、特定のトピックについて十分に学んだので、アドホックベースで新しい知識を習得しても問題ありません。プライマリーフィールドについて学ぶことはこれ以上ないと感じたら、プライマリー知識を補完する補足的な知識を得ることから始めましょう。

私にとって、UXとグラフィックデザインに飛び込んでいるのは、コードのエレガントな構造だけでなく、エンドユーザーに洗練されたインターフェイスを提供することで、開発者としての自分が良くなると思うからです。

アプローチできる他のトピックには、プロジェクト管理、ビジネス分析、システム管理、およびソフトウェアプロセスの改善が含まれます。特定のドメインで作業していることがわかった場合は、そのドメインを深く掘り下げることをお勧めします。たとえば、私は最近、金融サービス部門で大きく働いています。財務モデリングなどのコースラのコースにサインアップしました。これは、顧客の条件で顧客と話すのに役立ちます。

常に学ぶべきことがあります。箱の外で考えるだけです。


0

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

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

できることは、シニアソフトウェアエンジニアの技術的側面に集中しているようです。言語やフレームワークを学ぶよりも、チームがソフトウェアを作成するのを支援するためにより多くのことができます。こうしたチームの規範を、要件、プロジェクト管理、プログラムの設計を交渉し、他の開発者を指導ビジョンを伝える、実装などのソフトスキル、...作るために必要なすべてのものを大切なチームだけではなく、あなた、ソフトウェアを作るのが効果的な開発者のを。


-3

Lambda The Ultimateのサイトにアクセスするたびに、コンピューターサイエンスの分野のすべてを知っているとはまったく思いもしません。

LtUは、学習すべきパラダイムと理論的知識の良い出発点を提供します。

「あなたが知っているほど、あなたがどれだけ少ないかを知っている。


1
「学習が以前と比べて生産性が低くなるのはなぜですか」という質問にどう答えますか?
グナット

私がそこに行くとき、私が学ばなければならない新しいことの90%のようなものがある記事があるからです。OPが文句を言っているのはまさにこれです。彼の場合、行の読み取り数によって学習されたものの割合が低すぎます。このサイトもご存知ですか?
ステファン・ローランド

@gnat、そしてあなたは「技術的に熟練した上級ソフトウェア開発者が改善を続けるために勉強することができるもの」と題された質問を間違えますか?
ステファンローランド

タイトルの後に質問の内容を読みましたか?
ぶよ

@gnatはい、もちろん、私は彼の質問を読みました。OPが理由を尋ねるだけの場合、それはむしろ声明です。はい、読みました。私は笑った。私は「あなたが知っているほど、あなたがどれだけ少ないかを知って
ステファン・ローランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.