優れたプログラマーと本当に優れたプログラマーとの違いは何ですか?[閉まっている]


59

あなたは彼らが誰であるかを知っています。彼らはプログラミングのロックスターです:

  • 10倍速くコーディングされます。

  • 彼らのコードは機能します。

  • 彼らは、主要な言語の内外を知っているだけでなく、それが内部でどのように機能するかを知っています。

  • あなたが尋ねる前に、彼らはほとんどの質問に対する答えを知っています。

  • それらのいくつかは、私たち全員が使用するプログラミングの原則を発明しました。

  • そして、彼らも同様に謙虚になる傾向があります。

これらの人々についてはどうですか?彼らの思考プロセスについて、平均以上のプログラマーと根本的に異なるものはありますか?それとも、彼らは一生懸命働く非常に才能のある人々ですか?

別の言い方をすると、どうすれば彼らのようになれますか?そんなに良いことを学ぶ必要があると思うことは知っていますが、それを学ぶには今後10年かかると思われ、それから私の知識は時代遅れになります。


49
例外的なプログラマーは、コードの周りにtry-catchブロックを持ちません。熱意

11
@ジョン:私は全く反対し、10倍のものが何度もプレイされているのを見てきましたが、悲しいことに十分に真実であるようです。多くの問題は、ほとんどのプロのプログラマーが実際にプログラミングできず、一部のプログラマーは単純なことさえプログラミングできないことだと思います。神のようなコーダーが良いコーダーの10倍上にあるということではなく、むしろ神のようなコーダーが彼の組織やチームで最悪のコーダーの10倍上にいるということではありません。
パックスノクティス

10
@fennec:する、しない。ありませんtry
mmyers

29
15年前に発明された言語の18年の経験はかなり印象的です!
リッキークラークソン

15
@Tjaart-いいえ、1960年代以来、これは確かな数字であり、研究がこれを示しています。最初の研究は、1960年代後半にSackman、Erikson、およびGrantによって実施されました。彼らは平均7年の経験を持つプロのプログラマーを研究し、最高のプログラマーと最悪のプログラマーの間の初期コーディング時間の比率は約20対1であることがわかりました。25対1を超えるデバッグ時間の比率。プログラムサイズ5から1。また、プログラムの実行速度は約10対1です。プログラマの経験とコードの品質または生産性との間に関係はありませんでした。(Steve McConnellに感謝します)。
ジョンホプキンス

回答:


88
  • 謙虚:例外的なプログラマーは自分のコードが最高だと主張することは決してありません。実際、彼らは常により良い方法を探しています(彼らが得るあらゆる機会)

  • 患者:例外的なプログラマーは、無限の忍耐力を持ちます(これは、彼らが問題に何日も浪費するという意味ではありません。トラブルシューティングを参照してください)

  • トラブルシューティング:並外れたプログラマーなら、平均的なプログラマーにとっては数日かかる問題を数分で解決できるでしょう。

  • 好奇心が強い例外的なプログラマーは、何かが発生する理由を理解しようと抵抗することはできません。

  • エンジニア:並外れたプログラマーは、フレームワークのごちゃごちゃになってしまうのではなく、システムをエンジニアリングします(これは、フレームワークを使用しないという意味ではありません)


5
私はあなたの「エンジニア」ポイントが好きです!
セドリックH.

1
@Chaos-私が知っている最速のプログラマーは、彼自身のWebフレームワークを構築しました。そのようなことが、誰かをより良く、より速くするものだと思います。ご回答有難うございます。常に物事をリエンジニアリングしたいという無力感が減ります。
-orokusaki

11
「エンジニア」は重要なポイントです。コードのすべての行は、不安定なJengaのような作成に追加するのではなく、強固な基盤を作成します。
アレックスファインマン

5
私は-1ではありませんが、カウンターポイントとして、これらすべての資格があります。そして、私はまだ吸います。(私が比較する私の例外に対する平均的なプログラマーが実際にひどいものでない限り)
スティーブン・エヴァース

1
@Chaos、「好奇心が強い」が、ほんの少し。

28

あなたはあなたの最後の弾丸ポイントでそれの多くに当たりました:

「そして、彼らは特徴的に謙虚になる傾向もあります。」

それは謙虚さの組み合わせだと思います-外見だけでなく、彼らの心の中にも。彼らは間違っていることを受け入れ、間違いを犯し、欲求不満からすぐに立ち直ります。多くのプログラマーは何かを試して失敗し、すぐに非常に感情的に鍛えられます。これは、優れたコードを書くことへの嫌悪感です。あなたは完璧ではないこと、そして(しばしば!)失敗することを受け入れなければなりません。そして、あなたができる最善のことは、失敗したときに素早く回復する方法を学ぶことです。それは謙虚な自信であり、「私は混乱することは知っているが、私が挑戦し続ければ、最終的にそこに着くであろうことも知っている」。

NLPには「失敗はなく、フィードバックのみがあります」という言葉があります。ロックスターのプログラマーになるには、それを受け入れなければならないと思います。コーディングできないものは何もありません。最初は遅いかもしれませんが、失敗したり何かを台無しにしたりして、やめようとするのをやめただけなら、あなたは配達します。そして、そのプロセスでは、最高の1つになるために必要なすべてのメンタルトリックを学びます。

アドバイスは、もちろん、そのソースと同じくらい良いだけなので、...すべて私の意見だけです。


「私は失敗していません、私はうまくいかない10000の方法を見つけました」-トーマスエジソン
-ninjalj

1
速く学ぶことができる唯一の方法は、あなたが改善し、したいことを受け入れることです。

25

彼らは自分のコードを深く気にかけています。


2
間違いなく本当です。
ロバートハーベイ

3
貧しいプログラマーは自分のコードを深く気にすることはできませんか?Eventhoughほど良くないかもしれませんか?
ウォルター

2
@ウォルターはできましたが、私はそれを見たことがありません。私が見た中で最も近いのは初心者のプログラマーで、自分のコードを気にかけているが、初心者の間違いを犯しました(誰も免疫はありません)。これらの間違いが指摘されたとき、それらは迅速に修正され、めったに繰り返されませんでした。
JaredPar

15

個人的に、私が知っている/知っている最高のプログラマーは基本を理解しており、特定の言語の専門家ではありませんでした。彼らは、ほぼすべてについて十分な経験を持っていました。正規の「すべての取引のジャック」。

それは基礎科学以上のものであり、実際の運用の経験には大きな価値があります。例、Unix哲学を理解し、与えられたさまざまなツール(IOWはどこを見ればよいか)で未知の問題を解決できるものは、スレッド化された並列ソリューションをコーディングしたJavaエキスパートよりもはるかに価値があります。

優秀なプログラマーは、彼らの前に来た人々も尊敬しています。SQLを正式なAPIとして見たときに、リレーショナルデータモデルを嫌ったり、縮れたりすることはなく、数学でFORTRANをbしません。彼らはオブジェクト指向がすべてではないことを知っており、とりわけプログラミングは科学ではなく芸術であることを理解しています。


2
テキストファイルの場合grepawksort、とuniq多くの質問に答えることができます。あなたも持っているならperl、もっと!

2
科学でも芸術でもない、手芸だと思います。
アレクサンダーゲスラー

11

私が最初に始めたとき、私はこの男と一緒に仕事をしていました。彼はプログラミングに関して彼がしたことすべてに絶対に素晴らしいと思っていました。彼はまだそうかもしれませんが、現在は東南アジアの会社のディレクターになりました。

とにかく、彼は物事をシンプルに保ち、シンプルなものは機能します。必要以上に多くのコード行を書きたくないので、彼がしたことはすべてうまくいきました。私は彼のレベルに近づくためだけに1年間追いつきました。しかし、もう1つは時間です。彼は私が当時よりもずっと長く仕事をしていたので、すべての答えを(一見)知るまで、これらの正確な質問を何度も尋ねる機会がありました。

彼も質問することを恐れませんでした。それが最大のことだと思います。


私はすべて設定されているように聞こえます(SOに関する私の質問カウントを参照)

2
@ acidzombie24-または...あなたはまだ始まったばかりです。
-orokusaki

ははおろくさき。+1

「物事をシンプルに保つ」ことは、テスト駆動開発の美しさの1つです。あまりお勧めできません。

10

プログラマーコンピテンシーマトリックス

プログラミングトピックのレベルを確認するのに役立つ多くのトピック。


stackoverflowの知識:2 ^ n:聞いたことがないO(n ^ 2):SOに簡単な質問を定期的に投げますO(n):興味深い質問を投げかけ、プログラマーを認識しています。SEO(log(n)):Top CS関連のSEサイトのユーザー。;-)
shuhalo

このリンクをありがとうございます!それは私が知っていることについて自信を与え、どの分野を改善するべきかを教えてくれました。
-oksayt

7

テキサスホールデムポーカーに関する本でこの質問に対する答えを学びましたが、それはすべてのイライラする努力に当てはまります。最高のコーダーは決して傾きません。Tiltを使用するのは、期待どおりに何かが機能しないときであり、アプリケーション全体に指数関数的な間違いを引き起こすような方法で対応します。トーナメントポーカーでは、悪い賭けをしてノックアウトします。

プログラミングでは、傾きによって髪の毛が抜け、アプリケーションの特定のインスタンスでのみ機能するコードのとんでもないパッチを作成することになります。Tiltを使用すると、プログラマはプロジェクト全体のニーズを無視し、即座に満足してすぐに問題を解決できるようになります。多くの場合、問題は今日解決されますが、アプリケーションは明日苦しみます。

最高のコーダーは傾斜の概念を取り入れ、常に外部の視点から問題を見ることができるように管理します。それが失敗した場合、カフェインを飲みます。


プログラミング中に「傾き」を克服するための活動として何をすることを提案しますか?私はいつもそれを手に入れて、いつもコードを書き直しています。
-orokusaki

@orokusaki-傾きを回避する最も簡単な活動は、プログラマーが毎日自問する基本的な質問を変更することです。問題に取り組むとき、「なぜこのように問題を解決すべきなのか」と考える代わりに。「なぜこの方法で解決しないのですか?」多くの場合、特定のソリューションで問題を解決してはいけない理由に対する答えは、より良いソリューションを見つけるための一連の指針を提供します。
JMC

6

優れたプログラマー:

  • コードを気にする
  • コードを使用するユーザーを気にする
  • コードを保守する人を気にする
  • 生産性を気にする
  • 製品だけでなく、プロセスに注意する

「10x」係数に関する2つのこと:

  1. エンドツーエンドで適用する必要があります。テスト、修正、保守に10倍の時間がかかると、コードを10倍速く書くのは良くありません。
  2. 「10倍」の要因は、少数のプログラマーがどれほど優れているかではなく、多数のプログラマーがどれだけ貧弱であるかを反映していると思います。

3

それらのほとんどは予約されているように見え、特別なものはありません。一部は超スマートに見えます。しかし、品質は良く、普通の人でもソフトウェアの動作を理解できます!

私は10歳で彼の最初のASMプログラムを書いた友人がいますが、彼は24歳で大学を卒業しませんでしたが、それは彼が彼自身の会社を作り、何百万人も作ることを止めませんでした:)すべてが器用です:)

例外的なプログラマーは、このコードを他のプログラマーの評判を完全に間違っていると言うよりも、別のより良い方法でコーディングできると言うでしょう。

「これらの人々についてはどうですか?彼らの思考プロセスについて、上記の平均的なプログラマーと根本的に異なるものはありますか?それとも彼らは一生懸命働く優秀な人材ですか?」

私は彼らがそのように生まれたと思う、彼らのDNAの内側:piは彼らの思考プロセスを知らないが、私が今まで知っていた最高のプログラマーはてんかんを持っていた


3

例外的なものと典型的なものを区別するものはほとんどありません。

例外的:

  1. 彼の仕事に非常に情熱を傾け、傑作を提供するよう努めています。

  2. パフォーマンスと品質は、コーディングを開始する前でも頭に浮かぶ全体像です。

  3. 彼らは各リリース後に継続的な改善を考えています。

  4. 彼らは代替案を厳しく監視しており、早期導入者です。

  5. 職業生活における彼らのテーマは、「書くことをより少なく伝える」です。

  6. 彼らはコーディングしなくても、論理的な視点について考え続けます。

典型的な

  1. 時々やや情熱的ですが、やっぱり仕事だからです。それが傑作でなければ、OK。少なくとも時間通りに配信。

  2. パフォーマンスについては後で考えますが、とにかく最近のPCは十分に高速です。

  3. ジョブを保存するオプションが残っていない場合にのみ改善します。

  4. 他のテクノロジーを掘り下げる時間はありません。あなたの仕事が今要求するものに固執してください。必要に応じて他のことを学びます。

  5. 彼らのテーマは、「求められていることを実行し、時間通りに家に着く」です。


2

優れたプログラマーはSpartan Principlesを適用します。

注意を引く画像:

ここに画像の説明を入力してください

この記事:http : //willcode4beer.com/design.jsp?set=codeReduction

そしてこの引用:

どんな愚か者でも、物事をより大きく、より複雑に、より暴力的にすることができます。反対の方向に進むには、わずかな天才、そして多くの勇気が必要です。- アルバート・アインシュタイン


5
画像はBig-O表記のイラストです。

0

自己宣伝、そして私は可能な限り最良の方法でそれを意味します。特にチームでプログラミングのような仕事をするということは、あなたの個人的な貢献が全体像のどこに当てはまるのか、または誰がどのビットに責任を負ったのかがすぐにはわからないことを意味します。「偉大なプログラマー」として私たちが耳にし、学ぶ人々は、献身的であるか自己中心的であるとは思わずに貢献を知ろうとする技術を習得したIMOです。多くの場合、これは他の人が日々のパンを稼ぐために依存するツール、ライブラリ、およびソフトウェアを作成することによって行われます。


3
おそらく、しかし、John ResigはJavascriptとjQueryでの顕著な業績で有名だと思います。ジョンが優れたマーケティングスキルを持っているからではなく、彼のものが広く使われています。
ロバートハーベイ

@Robert Harvey-それとも、そうですか?彼は間違いなく優れたプログラマーですが、おそらく彼を本当に優れたものから「例外的な」ものにしたのは、彼の作品が人気を博し、彼が需要の高まりに遅れずに耐えなければならないという事実だったのでしょうか?シャツが本当に好きなのに大きすぎるときは、購入する前にシャツに成長しようとしないでください。それまでになくなるでしょう。それを購入してから、一生懸命に成長してみてください。
-orokusaki

ロバート:間違いなく。しかし、彼がjQueryを数人の友人や職場で共有しただけなら、私たちは彼についてまったく知らないかもしれません。jQueryを世界と共有するだけでなく、Javascriptを実行するためのより良い方法として積極的に宣伝する勇気を持っているからこそ、彼が優れたプログラマーであることを知っています。もっと効果的にそれを行う方法を学んでいるプログラマー(私を含む)を見たいです。
ガウラブ

1
-1セルフプロモーションに関しては、これはマネージャーの目には当てはまるかもしれませんが、他の開発者の間で機能することは一度もありません。開発者の中で、誰が良いのか、誰が平均的で、誰が嫌いなのかを理解するのに、それほど時間はかかりません。自己宣伝は方程式の一部ではありません。
ダンク

1
@Gauruv-「ロックスター」プログラマーは、難しい問題を抱えて本当にシンプルにできるプログラマーだと思います。したがって、コードを見たときに「すごい-誰がこれを書いたのか」と言ったら、そのコードはすごいと思いませんか?私はそうでなければ学校を離れると考えていましたが、現実世界の経験から、コードの賢さは美徳ではないことがわかりました。私は彼らがそれを見る必要なしに機能することをすでに知っているので、私は彼らのものが機能するかどうか心配する必要がない人々にもっと感銘を受けています。それらの人々はほとんどなく、真のロックスタープログラマーです。
ダンク


0

非常に良い関連記事:The Free Electron(from randsinrepose.com)

ここで記事を要約しないことをおpoびしますが、ポイントは散文から簡単に分離されません。


理由についてはあまり言いません。しかし、はい、これらは私が話している人々です。
ロバートハーヴェイ

記事から引用:「フリーエレクトロンは、コードに関しては何でもできます。週末に完全なアプリケーションを作成し、週末に言語を学び、最も重要なことには、スパゲッティコードの膨大な山に飛び込むことができます。それを理解し、実際に機能させることができます。フリーエレクトロンを中心にビジネス全体を構築できます。
ロバートハーベイ

0

純粋に直感的にプログラムします。それがただ流れると考える必要はありません。


プログラミングだけでなく、あらゆる職業の経験を持つ人々にとって間違いなく真実です。例外的なプログラマーを特に差別化するものは何ですか?
ロバートハーヴェイ

まあ、私は彼らの一人ではないので、私は間違いなく100%確実にこの質問に答えることはできませんが、それは知識ではなく思考プロセス(無意識)ではないと思います。何でも例外的である人は、自分の思考の干渉を取り除き、非常に単純な形で何かを見る能力を持っていると思います。シンプルなものほど処理が簡単です。
ジョンシャフト

3
-1それはあらゆる方法でとても間違っています。-100できたらいいのに。私はまったく反対だと思います。彼らは考え始める前に問題を解決します。
ダンク

@ダンク-私は同意しません。あなたが書いたもので、私は通常のプログラマーがすることを言うでしょう。それについて特別なことは何もありません。優れたプログラマーと優れたギタリストを比較します。彼らは演奏しているノートについて考えているのではなく、それを感じているだけです。
ジョンシャフト

@Pablo-私たちの経験は異なると思います。私の経験では、通常の開発者は直観的に考えて、それがただ流れると勘違いしています。したがって、彼らは多くのゴミを作成します。優れた開発者は、時間をかけて自分がどこへ行くのかを理解します。誰かがその場であなたのコンポーネントをどのように設計すべきかを示すことができるからといって、彼らが直感からそれをしているというわけではありません。私は彼らが以前にそれをしたか、ドキュメントではないにしても彼らの頭の中にシステムの全体像を持っているに違いないと思う。したがって、直観に基づいてあなたが呼ぶものは、本当に考え抜かれた計画に従っています。
ダンク

0

例外的なコーダーは、自分のコードの範囲を超えてプロジェクトに影響を与え、経験から問題が発生する前に発見します。彼らはチームの全員を改善し、悪い設計と管理からプロジェクトを救います。

彼らは実際に例外的なものを作成しました。


0

しかし、それを学ぶには今後10年かかると思われ、それから私の知識は時代遅れになります。

そうなる。あなたはすでにこれらの人が10倍速くなっていることを確立しているので、彼らは1年でそれを習得し、あなたを連れて行きます10。答えの深刻な部分について何でも)、彼らはコーディングが大好きで、何らかの理由でコーディングを練習したり、個人的なプロジェクトに取り組んだりする自由時間が豊富にあります。

ここでこの質問をしている場合、おそらくあなたはそれが必要なものを持っていないでしょう(私はここで答えているので心配しないでください。コーディングが好きなら、あなたはまだクレイジーになれますが、心配しないでください。


0

謙虚さ、工学、情熱、患者、トラブルシューターについての意図的な投稿がここにたくさんあります。IMOこれらはすべて必須です。ただし、プログラマの上位30%について説明しています。

本当に例外的なプログラマー、上位1%について質問していると思います。

私が仕事をすることもある非常にまれな才能がうらやましいのは、複雑なシステムについて一度に非常に多くの詳細を把握し、すぐに思い出すことができることです。本当にゾーンにいるとき、たまに月に一度、これを行うことができると思います。この気持ちは素晴らしいです。私が考えている開発者はたいていそのゾーンにいることができるようです。

謙虚さ、好奇心、エンジニアリング、情熱、忍耐、トラブルシューティングの能力に加えて、この1つの特徴であるIMOが、それらを本当に例外的なものにします。


0

自己の動機付けと自己決定の質を持ち、未知の深byに入る意欲を持ち、プロセスの一部として絶対に混乱することに満足していることは巨大です。頭がいつも思っていることよりも頭が良くなるので、最初のスマートについてはあまり考えません。私は大学の何もないところからやって来ましたが、他のすべての人がそれを理解しようとして疲れたときに問題を抱えていた男であり、決してあきらめずに、純粋な粘り強さによって非常によくなりました。そのタイプの永続化の後、問題はますます簡単になり、大学の新人であることから、この時点でそれらのほとんどを恥ずかしく思うようになりました。素朴な才能は十分ではなく、あなたの栄冠にとどまることもあります。

また、Robert Harveyに、私が最初から書いた私のCMSに関係することを言うとき、あなたは私の投稿をし続けます。あなたが書いたかもしれないし、書いていないかもしれないリンクをリストしている他のいくつかを見ます。あなたは自分のやる気を起こさせる人々を押し倒しています。あなたはこの小さな宇宙の「男」であり、彼らの功績に基づいて物事を読んでいるのではなく、あなたの気まぐれでやる気をなくして削除しています。また、スターウォーズの方法が大好きすぎて、おそらく食料品店の自動開閉ドアに手を振って、自分が力を持っていると信じているようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.