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


8

システムやネットワークの管理ではなく、プログラミングのみに関連することについて話しています。

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

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

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


2
それは完全に仕事の種類依存します。フロントエンドWebについて知っておくべきことは、バックエンドWebとは異なります。組み込みとは異なり、OSの動作とは異なります
Oded

1
こんにちはマイケル、プログラマーへようこそ!これは素晴らしいディスカッショントピックになるかもしれませんが、Q&AのStack Exchangeスタイルのトピックとしては広すぎます。誰かに説明して欲しいソフトウェア開発について何か特別なことがあれば、代わりにそれについて気軽に尋ねてください。

2
手の甲のようにキーボードを知っている必要があります。

2
なぜこれらの種類の質問が絶えず閉じられるのか理解できません。WTF。男は大学を出たばかりです。彼はジュニアなので、彼の質問は自由回答で、具体的ではありません。彼はおそらく何を尋ねればよいのかさえわからない。それが彼がおそらく望んでいる応答が彼を助けることができる何かである理由である。彼は一般的な洞察を求めています。彼の質問に答えるために特定のスコープは必要ありません。このスレッドの答えは素晴らしいです。これが100回尋ねられたとしても、他のスレッドとはまったく異なる、まったく異なる、まったく新しい答えが得られます。
WeDoTDD.com

1
これはスタックの問題です。プログラマーフォーラムの重要な点は、投票、意見、議論などの主観的な質問の両方を尋ねることができるということです。意見は、彼のような質問に対する良い答えを導くものです。誰もがソフトウェア業界で独自の経験を持っているので、意見はまさにこの男に必要なものです。彼はここで幅広いアイデア、経験、洞察を必要としています。それでは、彼らは、特定のいないのであれば、これは一般的なキャリアアドバイスについて..です
WeDoTDD.com

回答:


14

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

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

7
私たちの職業では謙虚さは稀です。私たちは時々言うことができるもっと謙虚な開発者が必要です、私はx、y、またはzの方法がわからず、彼らのガードを降ろして質問をすることを恐れていません...私たちは、自分たちが神であると考え、仕事で自分たちの神のような世界に自分を孤立させる自己主義的な開発者ではなく、本当に一緒に仕事をすることに関心がある開発者が必要です。
WeDoTDD.com

@CoffeeAddicat:+1。できればもっとあげます。
quick_now

1
@CoffeeAddict:私の謙虚な意見では、謙虚であることは過大評価されています。一方、コーヒーはそうではありません... :-)
失敗する

3
@Coffee-私が見たものから、私たちの職業には謙虚さがまったくありません。投資銀行で働いていたとき、私は上司のところに行って、わからないことについて質問したり、みんなが聞こえるほど声を大きくしたりしていました。それは明らかに私に質問をすることについてお粗末に感じさせようとする哀れな試みでした。
荒涼とした惑星2012

1
@荒涼としたうん、私はあなたの痛みを聞きます。エンジニアリング業界では、このような人々に我慢する必要はありません。これは、世の中の開発者の大多数による態度の問題です(すべてを言っているわけではありません)。なぜ「私はあなたより賢い」という戦争があり、同僚に対する尊敬の念が欠けていなければならない理由がわかりません。私たちはみんな一緒に働かなければなりません...学び、次に進みます。
WeDoTDD.com

8

プログラマコンピテンシーマトリックスは十分に優れたチェックリストであり、単一のソースから簡単に情報を読み取ることができます。

21日間でプログラムを学ぶ」に関するNorvigの古典的なブログも良い読み物です。


@Expressions:はい、問題ありません-最初は質問を開くと少し推測できるかもしれませんが、それについて考え、数年前に見つけたこのチェックリストを掘り下げました。
失敗

ええ、私もこれが好きです...良いもの。
WeDoTDD.com

3

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

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

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でうまくやったとしても、私たちの職業の基礎を習得するには数年かかることを理解する必要があります。時間がかかり、懸命に働き、質問をし、研究し、忍耐してください...そして特に、私たちの業界は現在そのような流動的な状態にあるので、すべてを知らなくてもイライラしないでください。最初に基本に焦点を当ててください...最初の数年間はよく理解してください。心配事を複雑にしすぎないでください。あなたはJr.の開発者であり、上手になろうとしています。それは、一生懸命に働き、基本的なOOPを最初に得た場合に起こります。私たちの業界の多くの開発者は、ファンダメンタルズをまだ理解していません。彼らは彼らを知ることに努力を注いでいないため、それはネガティブです。あなたはまず基礎をよく知りたいです(ポリモーフィズム、カプセル化、やだやだ)。最初のいくつかの仕事で多くのOOPを実行する機会があまりない場合は、楽しいペットプロジェクトを楽しんでいる側でコードをいじって、家でそれを研究して実践するために多大な努力をしてください。

この投稿を長くすることはできますが、ここで終了します。私の投稿ごとにさらに質問がある場合は、コメントで返信してください。議論を続けることができます。

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


露骨に複雑な問題の解決と分割は2番目のステップに過ぎないことを付け加えたいと思います。1つ目は、実際に問題があることと、その問題が何であるかを認識することです。
ジョンワイズ2017

1

わからないことをできるだけ早く見つける方法...


わからないことを見つけたり、知らないことへの答えを見つけたりするということですか?あなたが知っていること、あなたが知らないこと、そしてあなたが知っているあなたが知らないことを知ることは、今のところあなたを得るだけです。知ることではなく、行うことから学ぶことは、未来の輝かしい道への道です... :-)
失敗

間違ったことをすることは苦しみにつながり、他の誰かがより速く、より良いことができることをすることは苦しみにつながり、助けを求める人と場所を知ることが未来の輝かしい道への道です!多くのジュニアレベルの人々が、助けを求めたり、実際に外出する前に釣りをしたり、必要のないときにボートを造ったりする方法を実際に学ぶことができるものに腰を下ろして煮込みます。

わからないけど、誰かが頭を壁にぶつけてしまうのを見るのはつらいことですが、他の人から失敗する機会を奪い、そこから学び、次に進むこともよくあると思います。 。私の意見で失敗することは、学習の大きな部分です。
失敗

0

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

私はまた、問題を解決するためにprojecteuler.comとインタビュアーストリート.comに時間を費やして、それらの新しく再学習した学習を適用してそれらを固定するのを助けるのに役立ちます。


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

0

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

インタビューの私のチェックリストは

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

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


ベストオブラック


1
「アルゴリズムとデータ構造を完全に理解する」:それぞれの膨大な量を考えると、これはかなり困難な発言です...おそらく、エントリレベルのインタビューについて、もう少し具体的に説明します。
Demian Brecht

提案してくれたDamienに感謝します。より具体的に編集されました。
Priyadarshi Kunal 2012年

3
@demianそして確かにそれは真実ではありません。たとえば、リストをソートする場合、リストオブジェクトで.sort()を呼び出さないことがよくあります。

@Lee実際のアプリケーションで問題を解決することは、面接で行うこととは異なる場合があります。インタビュアーはおそらく、単に答えるのではなく、問題を解決してほしいと思うでしょう。
Priyadarshi Kunal 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.