私は最近大学を卒業し、それ以来、開発チームに加わりました。開発チームには、経験が浅い開発者であり、おそらくいくつかの仕事の条件が私のベルトの下にあります。その間、残りのチームは5〜10年の経験を積んでいます。
ボトル入りの課題とテストに関しては、私は非常に優秀な学生であり、かなり優秀なプログラマーでした。私はいくつかのプロジェクトで成功を収めてきましたが、今でははるかに大きなコードベースで作業しており、学習曲線ははるかに高くなっています。
他に何人の開発者がチームでキャリアを始め、彼らが夢中になったのかと思っていました。これはいつ変更されますか?どうすればプロセスをスピードアップできますか?私の先輩は私を助けてくれますが、私は素晴らしくなり、今私の価値を示したいです。
ソフトウェア開発の興味深い点は、あなたがどれだけ上手かは問題ではないということです-常に何かを教えるのに十分な、または少なくとも十分に異なる誰かが常にいます。また、経験のレベルに関係なく、数か月前に書かれたコードを見て、それが悪いと思うことも珍しくありません。
私にとって、自分のスキルと同僚のスキルのギャップに気づくと、他の人のコード、ブログ投稿、本を読んだり、同僚がどのように物事を成し遂げたかに注意を払ったりして、今までにない方法で学び始めました。 。大学はコンピュータサイエンスの準備をしましたが、ソフトウェア開発の準備はしていません。それはほぼ4年後のことであり、私は以前よりもはるかに強力なソフトウェア開発者です。だから、ただそこにぶら下がって、あなたの周りの人々からできるだけ多くを学びなさい。それは良くなるでしょう。
いいえ。大学を卒業してから最初の6か月でプログラミング/ソフトウェアエンジニアリングについて多くのことを学びました。しかし、それは大学が時間の無駄だったことを意味するのではなく、それは私の心を整え、基礎となる基礎知識を提供しました。
もう一度、今を振り返ってみると、6か月間何をしていたのか、まだよくわかりませんでした。
教育は、基盤となる基盤を提供しますが、実際のソフトウェア開発の準備にはなりません。それには経験が伴います。私が最初に仕事のプログラミングを始めたとき、私は間違いなくあなたと同じ状況でした。学習、本、ブログの投稿、そして仕事で学んだことの応用を続ける限り、あなたは上達するでしょう。重要なのは、学んだことを応用することです。読むだけでは役に立たない、新しい知識を積極的に適用する必要があります。
私は間違いなくそうだと思ったが、そうではなかった。
信じてください、あなたのキャリアのある時点で、あなたは戻ってあなたが書いたいくつかのコードに取り組みますが、何年も触れていないので、他のプロの開発者がそのコードを見たり、あなたがそれを書いたことを知りたくないのです。それはあなたが成長していることを意味します。
多くの優れたプログラマーが大学のコンピューターサイエンスの学位を取得しています。
コンピュータサイエンスの重要な点は、これまでに説明したように、プログラミングと同じではないということです。大学で勉強したことの多くは、基本的に準備ができていませんでした。講義を聞いていたとき、学問的な意味のないもののように思えたものがたくさんありましたが、数年後、私が役に立たないとして提出したものの束を再び学習することになったので、私はそれにもっと注意を払っていました。実際にコンピュータサイエンスの学位を取得する前に、商業環境で数年のプログラミングを行うことができれば、それができると私は思っています。
また、多くの場合、大学では必ずしも学習方法を知っているとは限りません。私が誤って、または他の開発者から学んで学んだことの多くは、確かに私の講師や大学院生が大学で知っていたものですが、それらを理解することが有益だとは思いませんでした。何かを学んでいる間にあなたが抱えている問題について人々に尋ねること(そしてこれは実際に何にでも当てはまります)は、学習プロセスをより円滑にして痛みを少なくします。自分や他の人から学ぶことができるほとんどのこと-私が自分のために学んだ教訓の多くは私の痛ましい間違いから学んだので、できるときは他の人から学ぶことを選択します...
いくつかの点で、プログラミング言語の選択は、自然言語の選択とよく似ています。あなたは学校でかなりの量の理論を学ぶことができます。文法と語彙の基本的な要素を学び、ネイティブスピーカーとの実際の会話に出会うまではかなり上手だと思います。
ネイティブスピーカーとの会話で自分の言語を保持できるようになるまで、実際に言語を学習する方法は、毎日1時間ごとに実際に言語を話すことです。これは通常、話されている場所に住むことを意味します。そして、それは面白いことが起こるときです。あなたが学校で学んだことは、それ自体、外国の路上で価値がありませんが、実際の言語学習をはるかに容易にする、しっかりとした理論的基礎を提供します。 (それが少なくともスペイン語での私の経験でした。)
プログラミングも同じです。学校で学んだことは、実際のプログラマーとして行う必要のある仕事の準備にはなりませんが、(人気のためにすべてのことを怠らない有能な学校にいると仮定すると)準備に役立ちます実際に優れたコーダーになることを学ぶとき、あなたが必要とする基本的な概念はすでに整っています。 (少なくとも、プログラミングの経験でした。):-)
ブライアン・ハートの post を引用します
コンピュータサイエンスとプログラミングは別のものです
また、Joel Spolskyの 学部プログラミング および Who Killed the Software Engineer という素晴らしい記事も参照しています。
これらすべての議論は現実をかなりよく説明しており、私の意見では、あなたの質問には「いいえ」と答えます。なぜなら、大学はあなたを優れたプログラマーにするつもりはないからです。あなたは自分で自分を優れたプログラマーにする必要があります。
私はCSの学位は持っていませんが、専門的にソフトウェアのプログラミングと開発を8年間行っています。私が持っているすべてのプログラミングスキルは、自分自身を学びました。
私は、大学で少なくとも触れたことがないプログラミング全般について学んだことはないと思います。もちろん、私はあちこちで新しいプログラミング言語を習得し、新しいAPI、新しいコードベース、新しいツールを学びましたが、一般的な概念はすべて学校の外にありました。
経験を積むことは、報告されたバグを絞り込む方法を迅速化する、または新しいコードを記述する最も強力な方法に直接導く、本能のようなものです。新しい場合でも、同じバグを修正したり、同じ機能を実装したりすることはできますが、時間がかかり、予期しない問題が発生した場合に戻って修正しなければならない可能性が高くなります。
そのため、より経験豊富な同僚にあなたを指導してもらうことが重要です。それらに行き、「これは私がこれが処理されるべきであると思う方法です。あなたはより良い方法を考えることができますか?」と言います。それはあなた自身のためにそれを理解する経験と他の人の経験から学ぶことの両方の利益をあなたに与えます。
大学では、実際のプログラマになることを教えていません。これは、学位プログラムと比較して多くの仕事で似ていると思います。私の学位からnothingを得たとは言えませんが、実際に4年間仕事に費やすよりもはるかに役に立たなかったのです。
しかし、それは大丈夫です。私が始めたすべての仕事は、おそらく資格不足でした。自分の能力に自信があり、学習に専念している場合は、ステップアップして仕事をすることができます。
いいえ、私はプログラマーのふりをしていて、難しい方法でそれを学びました。私はフリーランサーとして最初の顧客を獲得し、C/C++と非常にひどく戦って、結局勝ちました。構造体でmallocを実行しても、構造体のポインタにメモリを割り当てるのに十分ではなかったことを理解するのに数時間かかったことを覚えています。
私は大学を卒業したとき、かなり優秀なプログラマーでした。また、卒業する何ヶ月か前におしゃれな仕事のオファーをもらっていました(それをもっとすっきりしたものに断ることができました)。
重要なのは、私が趣味で多くの仕事をし、学年中にウェブ開発の仕事をし、IBM( "ExtremeBlue speed-teams"とExtremeBlueプログラム)で質の高い夏のインターンシップをしたことです。適切な)。優れた専門職経験があるため卒業後、エントリレベルのものを少しスキップできます。
(とはいえ、最初の6か月ほどで、リアルジョブ(tm)でのプログラミングはずっとよくできました。 、しかしそれはそれが本当に多くを示していたときです。)
高校から直接通勤していたので、逆の答えを出せます。私は独学のプログラマーとして働き始めました、そして私は私の雇用者が私に与えるプロジェクトでほとんどすぐに生産的でした。コンピュータサイエンスの学位を取得した同僚が何人かいましたが、彼らはまったく生産的ではありませんでした。
時間の経過とともに、一部の卒業生の同僚はスキルを大幅に向上させましたが、そうでないものもあり、それはGPAとは無関係でした。
誰も言及していないことの1つは、学校で解決するために与えられた問題は、教えられている特定のテクニックとしての使い方を簡単に理解できるように意図的に調整されていることです。あなたは通常、あなたがその特定の問題のために使用することになっているテクニックを知っています。学期全体のプロジェクトは少しベターですが、現実の世界と比較して範囲と複雑さはまだ限られています。
実生活のプロジェクトは乱雑で長年にわたって進化し(当社のソフトウェアは10年以上前からあり、その間絶え間なく変化しています)、さまざまなスキルレベルを持つ多くのさまざまな人々に影響されています。 10年前のデータベースバージョンにまだ触れている可能性があり、新しいSQLテクニックをまったく使用できません。 8年前にすばらしいツールを使用している可能性がありますが、他のツールに取って代わられたため、学校で学習していません。しかし、同社はそれを完全に置き換えるために何カ月もの開発作業にお金をかけたくありません。
あなたは、開発する時間がクライアントが支払うものと時々(通常はOK)人工的な締め切りが何であるかによって著しく制約される世界に行き詰まっています。
クライアントが具体的に要求したツールを使用するように制限される場合があります。あいまいな要件や、ほとんど意味のない要件がある場合があります。あなたは何も知らない、したがって要件が理にかなっているかどうかさえ判断できない非常に複雑なビジネスドメインを扱っているかもしれません。
現実世界の問題は、学校で彼らが与えるニースのきれいな問題に匹敵するものではありません。最初の1年のほとんどの間、混乱したり場違いに感じたりしていなければ、私はあなたのことを心配します。
私は大学の先生よりも優れたプログラマーでした。
その後、私は仕事を始めたときに素晴らしいプログラミングの実践を学びました。
それよりも悪い...この仕事で数年後、あなたはあなたが学んだことについてかなり気分が良くなるでしょう。しかし、あなたは転職し、あなたの新しい会社(あるいは同じ会社内の新しいグループさえ)は違うことをするでしょう、そしてあなたは正直に戻ったように感じるでしょう。さまざまなコード、さまざまなコーディング標準、さまざまなツール、およびさまざまなプロセスがあり、その2日後には、最後の仕事で本当に何を学んだのか疑問に思うでしょう。今回は、この魚の水切れの感覚をより早く乗り越えますが、それでも、必要以上に時間がかかります。
ジョブを切り替えるたびに適応期間があります。経験を積むにつれて短くなりますが、常にそこにあります。
優れたプログラマーは常に学んでいます...これを行う別の方法またはそれを行うためのより良い方法を学びます。同僚のプログラマーがあなたに教える必要があるものは何でも、私は耳を傾けます。