web-dev-qa-db-ja.com

プログラマーとして、私は私の手の甲のように何を知っているべきですか?

私はプログラミングのみに関連するものについて話していて、システムやネットワークの管理には関係していません。

大学を卒業してプログラミングの仕事に就こうと思っているので、これについて知りたいです。これは主観的な質問に思えるかもしれませんが、これは完全ではなく、ベストプラクティスのカテゴリに分類されると思います。

プログラマーは、自分が取り組んでいるOS、自分が取り組んでいるフレームワークのすべてのAPI、自分が使用している言語のすべての機能と癖、すべてのデータ構造とアルゴリズム、自分のすべての設定についてすべてを知ることができるとは思いません。コンパイラ、リンカ、IDEなど。それも実用的ではないと思います。それとも彼はできますか?

通常の答えは「ほとんど」です。これは何が一番ですか?約5年の経験を持つプログラマーにインタビューする場合、彼に何を知ってもらいたいですか?または、面接に出席し、10年以上の経験がある場合、何を復習しますか?

8
Michael

あなたは知る必要があります:

  1. 考え方。考えられない場合は、他の職業に就いてください。
  2. どこを見ればよいかを知ってください。何かについてすべてを知っている必要はありません。役立つために十分に知っている必要があり、「ちょっとXを行う方法が必要だ」と考えて調べてみる必要があります。
  3. あなたの限界を知っています。これはあなたの能力、知識の欠如、あなたがすべてを知っているわけではないという事実を意味します(そして決してそうしません)。少しの謙虚さが大いに役立ちます。
14
quickly_now

Programmer Competency Matrix は十分なチェックリストであり、単一のソースからの簡単で有益な読み取りです。

Norvigの「 21日でプログラムを学ぶ "」に関する古典的なブログもよく読んでいます。

8
blunders

この質問はおそらくこれらのフォーラムで多く聞かれていると思いますが、それは問題ではなく、質問されるたびに異なる視点を得ると思うので、これについてコメントしたいと思います。

それで、これが私の経験であり、私たちの職業に「知恵または現場」があると思います。これの一部は他の人がすでに述べたものと重複しますが、私は私の経験をリストし、次にそれぞれについて私の哲学/意見/提案をあなたにリストします

1)はい、他の人が述べているように、複雑なアイデアを消化し、処理し、問題のコードで作業し、独自の解決策に到達できるレベルが必要です。一方で、それを使い続ける積極的な動機があり、懸命に働き、多くの質問をするなら、時間の経過とともにより良い問題解決者になることを学ぶことができます。すべてを知っている、または自分のように見せようとしているほとんどの開発者は、自分がいる場所にたどり着き、同じように上手くいくために、多くの質問をした、コードでお尻を動かしたなどの事実を単に隠しています。彼らは

2)私たちの業界でも、残念ながら、対処しなければならないエゴがたくさんあります。私はこれを良いことだとは思いません、そしてそれはそこにいる多くの開発者にとって特に特徴です。

私の経験からわかるのは、次のタイプのチームの1つです。

  • 「コードと実行」チーム。つまり、彼らが気にしているのは、ドアをすばやく外に出すことだけです。コードの品質(クリーンなコード)や後で保守可能なコードについてはあまり気にしない可能性があります。可能であれば、これらのショップには近づかないでください。面接で会社をドリルしたとしても、就職するまでチームがどのように運営されているかを本当に知ることはできず、実際にどのようにコーディングされているか、またはチームワークを本当に促進しているかどうかを確認するために約4〜6か月かかります。コラボレーションの促進(アイデアなど)

  • 「大丈夫」な平均的な開発ショップ。これは、彼らがコードの品質に少し関心があることを意味します。チームには、チームでうまく機能し、前向きな姿勢を持っている優れた開発者が何人かいる可能性があります。その後、エゴイスティック、怠惰などの他の特性を持つ可能性のある開発者が混在している可能性があります。しかし、コードが最大ではないが許容できる場合

  • 素晴らしいお店。このショップは、優れたデザインパターンに従うように最善を尽くしています。彼らはデザインパターンの専門家ではないかもしれませんが、DRY、SOLIDなどの優れた手法を知っています。彼らは必ずしもスーパースターがチームに加わることを期待しているわけではありませんが、少なくともある程度クリーンなコードをコーディングしていて、最初に十分な経験を積んだ開発者を探しています。これらはあなたが歩きたいチームです...しかしあなたは良いチームを見つけるためにいくつかの店を通過しなければならないかもしれません

  • スーパースターショップ。これは絶対に最高のプログラマーだけでなく、それをすべて持っている最高の意味のプログラマーを探すショップです。彼らはうまくコミュニケーションを取り、チームとしてうまく機能します(テマをより良くするために他の人と積極的に)。すべての店がそうだと言うつもりであることに注意してください、私たちは最高のものを探します。そのほとんどはナンセンスです...彼らは善意を持っていますが、多くの場合、それは単なるマーケティングの話です。しかし、本当にトップの才能を探しているお店の割合があります。そして、あなたがインタビューに参加し、彼らがスレッドや高度なデザインパターンなどについて質問しているときは、そのレベルに到達するために、そしてこの種の期待を持っているチームで働きたいかどうかがわかるでしょう。 、そこに着くまでに数年かかる場合があります

  • ネガティブな雰囲気/エゴのあるスーパースターショップ。そこにはトップの開発者を雇うべき店がありますが、その店の大部分はスーパースターであるたくさんの刺し傷を持つことができます。ですから、悪いコードを容認しないチームもありますが、彼らはそれについての本当の刺し傷です。それはチーム環境ではなく、あなたはこのがらくたから離れたいと思っています。私たちの業界はそれを必要とせず、あなたもそれを必要としません

そしてそこにいる次のタイプの開発者の一人:

a)巨大なエゴ、すべてを知っている、常にすべてから距離を置きたい、ほとんど明らかにしない、態度を持っている...本質的にチームプレーヤーではなく、あなたが一緒に仕事をしたい、またはあなたのチームにいる誰かではありません

b)平凡な仕事をし、仕事を終わらせて家に帰るためだけにそこにいる開発者。個人的には、最初の観点からは何も悪いことはないと思いますが、同時に私たちの職業には、情熱的で、最終的に価値を提供するだけでなく、長期にわたって開発者として向上するために、自分の技術を犠牲にして楽しんでくれる開発者が必要だと思います彼らは良くなることを気にするので

c)おそらく成功する可能性はあるが、あまりにも怠惰、否定的、または彼らが持っている他のどのような特性でもある開発者。私のチームに怠惰な人を入れたくない...怠惰なエンジニアは私たちの職業に必要なものではありません

d)優れた開発者に適し、チームワークを気にし、謙虚になり、他の人に教え、コミュニケーションを取り、プロセスやコード(コードレビューなど)に対する建設的な批判を受け入れる開発者。すべての同僚と一緒に開発者として働いている間、仕事で前向きになることに注意してください。このような人々と協力して、積極的な協力的な開発環境を作りたいと考えています。今、私はチームが浸出液を探すべきだと言っているのではありません...あなたは自分の体重を保持できる必要がありますが、あなたが「スター」開発者であると彼らが期待するチームに行きたくはありません決して質問しないでください...それは悪い環境です。それから離れてください...私と他の友人のキャリアを通しての経験の中で、私たちの職業全体でこの環境を見つけるのは難しいと思います。あなたは良いチームを見つけることができますが、態度が悪い混沌とした店に着陸するよりも見つけるのは難しいです。だから、あなたが何に取り組んでいるのかを知ってください。開発者がいわゆる「専門家」であるという理由だけで、草は常に緑であるとは限りません。これはおそらくどんな仕事にも関係していると思いますが、私たちの職業では、他のほとんどの仕事よりもそう思います。

3)私が苦労して学んだことの1つは、あなたが完璧主義者であり、優れたプロセスと完璧なコードに関心がありすぎると、いつか問題が発生するということです。そのバランスを見つけます。あなたは純粋なずさんなコードを望んでおらず、雇用主が腹を立てるほど多くの時間を無駄にしたくないので、通常中程度のサイズのタスクを完了するのに2週間かかりました。あなたがそれをあまりにもきれいにしたかったので3-4日。私たちの業界で読むのに良い本であり、従うのに良い人は「ボブおじさん」です。多くの開発者がいるように、私は彼の大ファンです。コードに関する彼のブログ投稿を読んで、彼の本を購入してください。最高の実践、態度、哲学などの観点から、私たちの職業について大学を卒業したばかりのあなた自身を含む人々に、彼がどれほどの知恵と経験を提供しなければならないかは言えません。

彼の会社のブログ: http://blog.objectmentor.com/articles/category/clean-code (そしてチェックアウト http://blog.objectmentor.com/articles/2009/ 02/03/speed-kills

すべての開発者が読んでいるか、読んで棚に置いておくべきだと私が感じる彼の多くの優れた本の1つ: http://www.Amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

彼の個人ブログ: http://cleancoder.posterous.com/retarded-architecture

そして彼が話した会議での彼の良いビデオ: http://www.viddler.com/explore/oredev/videos/36/

4)一緒に仕事をしているすべての開発者と競争することについてストレスを感じないでください。 CSでうまくやったとしても、私たちの職業の基本を習得するには数年かかることを理解する必要があります。時間がかかり、一生懸命働き、質問をし、調査し、辛抱強く...そして特に私たちの業界は今そのように流動的であるため、すべてを知らなくてもイライラしないでください。最初に基本に焦点を当ててください...最初の数年間はよく理解してください。あなたの心配を過度に複雑にしないでください、あなたはより良くしようとしているジュニア開発者です、そしてそれはあなたが一生懸命働いて基本的なOOP最初に上手になれば起こります。私たちの多くの開発者業界はまだファンダメンタルズを知る努力をしていないため、ファンダメンタルズを知りません。それはネガティブです。ファンダメンタルズを最初によく知りたいと思います(ポリモーフィズム、カプセル化、ヤダヤダ)。あなたの最初のいくつかの仕事でたくさんのOOPをする機会がたくさんあります、あなたの側でいくつかの楽しいペットプロジェクトでコードをいじって、家でそれを研究して練習するために多大な努力をしてください楽しい。

この投稿を長くすることもできますが、ここで停止します。私の投稿ごとにさらに質問がある場合は、コメントに返信してください。引き続き話し合います。

究極的には、あなたが天才、超賢い、賢い、平凡、または吸うなら、あなたがどのレベルにいても、私たちの職業でそれを達成したいのであれば、あなたは常に超一生懸命働き、継続的に学ぼうとしなければなりません自分自身を向上させ、できる限りのこと(コード、コミュニケーションなど)を目指します。私たちの職業は軽視するものではありません。

3
WeDoTDD.com

あなたが知らないことをできるだけ早く見つける方法...

1
user7519

アルゴリズムとデータ構造を完全に理解してください。言語/フレームワークで一般的なタスクを実行する方法と、エキスパートが同じことを行う方法を理解します。あなたが業界にいる限り、仕事をし、間違いを犯し、改善し、あなたの経験があなたにもっと教えてくれるようにしてください。

面接のチェックリストは

  1. 並べ替え、検索、グラフアルゴリズム、および動的プログラミングの基本。
  2. 配列、行列、スタック、キュー、リンクリスト、ツリー、ハッシュテーブル。
  3. オブジェクト指向プログラミングとテストの概念

人々が夢見ている大企業の1つを目指している場合は、ソリューションの時間とスペースの複雑さを覚えておくのを忘れないでください:)。


幸運を祈ります

0

私自身は約10年の経験があり、アルゴリズム(並べ替え、データ構造、グラフ)をブラッシュアップします。私にとっての最大の問題は、私の過去数年間がリーダーシップの役割に費やされたか、または一般的に低レベルのアルゴリズムの設計と分析を必要としない高レベルのアーキテクチャの問題に対処してきたことです。レベルはすでに書かれていて、地獄に最適化されており、戦闘テストが行​​われています。

また、projecteuler.comとinterviewstreet.comで問題を解決し、新しく再学習した学習を適用して問題を解決するのに役立てることもできます。

0
Demian Brecht
  1. 数学を学ぶ。視覚効果を削除すると、プログラミングは数学です。
  2. プログラムに適した言語を使用してください。次に、少なくとも言語の機能を理解します。
  3. コーディングする前にアルゴリズムに時間をかけてください。グループのメンバーとしてコーディングしている場合は、一緒にアルゴリズムを調べてください。
  4. 実行速度が問題で、アーキテクチャのコードを自由に修正できる場合は、CPU、GPUなどに特化したルーチンを使用してください。
  5. デバッグとテストに十分な時間を費やしてください。
  6. プログラミングに関するほとんどすべてに興味を持ってください。あなたは時間とともに学びます。
0
cosmicstring