すべてのプログラマが知っておくべきことは何ですか?


245

使用するプログラミング言語、オペレーティングシステム、またはそれらが開発する環境に関係なく、すべてのプログラマは何を知っておくべきですか?

背景:

できる限り最高のプログラマになることに興味があります。このプロセスの一環として、私はわからないことを理解しようとしています。「[プログラミング言語を挿入]開発者が知っておくべきこと」という行に沿ってたくさんのリストがありますが、特定の言語に限定されない類似したものをまだ見つけていません。

また、この情報は他の人にとっても有益であると期待しています。

回答:


636

プライドを飲み込み、ミスを個人的に認めずに認める方法。


60
それは、すべての人間が仕事(...性別、宗教、文化、社会的地位...)に関係なく行うべきことです。;)

3
そうそう。しかし、私たちプログラマー(少なくとも私はそうです)は、ほとんどよりも明白なプライドを持つ傾向があります:

17
二度投票できたらいいのに。

4
これは大学で学んだことの一つだと思います。高校では、私は常に賢い子供の一人でした。もし私が大学に行っていなかったら、私はかなり頭が良く、大きな自我を持っていると思っていたでしょう。その後、私は私が私がしただけでどのようにダム見助けられた、本当に多くの熟練した人UNIに行く、そして人々との対話
Kibbee

4
これは非常に真実ですが、問題は常に否定または大きなエゴではありませんが、少なくとも何らかの自己防衛/損傷制御がまずなければ、間違いを公然と認めることの潜在的な結果です。時々それは文化的なものです。:)

309

専門家オタクプログラマーではなく、ユーザーのように考える方法。


2
業界で私たちのほとんどが不足していると思われるものが、最も重要なスキルの1つである可能性があることは皮肉なことです。コミュニケーションスキルです。

これにもっと同意できませんでした。これは#1でなければなりません。

23
私は実際に同意しません。それはあなたが人々を雇うものです。ユーザーのように考えることは決してできませんが、ユーザーがその考えに基づいて行動し、そのアドバイスに基づいて行動するように人々に伝えることができます。ユーザーの意見を聞かないでください!それはすべての最悪のオプションです。

1
他の人を雇ってそれを行うこともできますが、開発チームがユーザーの考え方を理解できれば、物事が正しくなる前に議論や反復がはるかに少なくなります。開発者はどのような新機能を知っているユーザー、のように考えることができればプラス、彼らは思い付くだろう

3
ユーザーは専門家オタクのプログラマーである可能性が非常に高いかもしれませんが、コードを実装した専門家オタクのプログラマーである可能性は低くなります。アプリケーションは非常に微妙で複雑なセマンティクス/振る舞いを持っている場合は、コードを書いた人は...アプリケーションの使用方法を理解することができる唯一の人かもしれない
ルーベン

244

いつ助けを求めるか、いつ助けを求めないか。


2
仰るとおり。最近、私は誰かに尋ねていたので、答えが頭に浮かびました。:(
kevindaub 08

だから、答えは何ですか?)

28
最初にゴム製ダッキーに聞いてください。彼はあなたを助けることができない場合は、...他の誰かに頼む
ディーンむしろ

3
私が最初に始めたとき、私は他の開発者に単純なものを絶えず尋ねることでどれほど悩まされているのか分からなかったので、n00bを私にやってもらうまで自分自身を理解する必要がありました。

1
私はいつも「同僚に尋ねたら、同僚は何を言うだろう」という線に沿って質問をします。通常は、実際に質問する前に、問題を少し掘り下げるのに役立ちます。

184

他の人のコードを読む方法。


102
補遺:他の人が読むことができるコードの書き方

42
補遺#2:6か月後の独自のコードの読み方

10
@Nathan Koop:「6か月後に自分で読むことができるようにコードを書く方法」の方が良いでしょう。
Doc Brown

4
6か月が経過すると、すでに他の人のコードになっています。あなたがそれ以来進化し、より良くなったという意味では、そもそもそれを書いた誰かかもしれないので、そのように扱ってください。
MPelletier

7
補遺#3:6分後にコードを読む方法。
mpen

152

バージョン管理システムに精通している。必ずしもすべてである必要はありませんが、それらすべてに適用できる基本的な概念を知っておく必要があります。


そして、そのリビジョン管理はソフトウェアではありません
jrhicks

4
集中型SCM(例:subversion、CVS)と分散型SCM(例:git、mercurial、bazaar)には十分な違いがあるので、それぞれを学ぶことが重要だと付け加えます。
直観

128

これが私の10ビットです。

  • 謙虚になる方法。私たちは皆、学ぶためにここにいます。あなたは他の人より賢いかもしれませんが、あなたより賢い人がたくさんいます。
  • 情報を勉強/消費する方法。あなたのことは知りませんが、ずっと勉強しています!書籍、インターネット、何でも!
  • 辞書とは何か、どのように使用するか、頭字語をすばやく見つける方法。
  • 取引の基本的なツールとは何か(IDE、CVSなど)。
  • 一般的な用語とその意味を理解する:デザインパターン、使いやすさ、テスト(ha!)、スタックなど。
  • OOPを理解している。
  • 少なくとも1つの言語で「対応」し、驚くべきことは何もありません。変数とメソッドを識別する方法などを知っているだけです。ここからFASTを学ぶことができます。
  • 人々は最終的にソフトウェアを使用し、それらの人々を幸せにしたいことを理解してください。

38
これは8進数のポストでなければなりません。
ミエン

10
最初のビットについては....「それほど謙虚にならないでください、あなたはそれほど偉大ではありません」。
マグナス

@TheOtherScott、素敵なキャッチ笑、しかし私は実際に2ビットを言っていました:D;)

3
ポイント3について:www.acronymfinder.com
ジャスパーベッカーズ08

1
@ jasper / intuited:頭字語をgoogleに入力するだけで、いずれかが表示されます。答えは通常、最初の10個の結果のいずれかになります。クリックすると詳細情報を入手できます!
mpen

104

微妙すぎるかもしれませんが、「どの問題を解決すべきか知る」と考えています。多くのプログラマー(および通常の人々)は、あまり重要ではないことを解決するために多大な労力を費やしています。または、多くの余分な作業を伴うソリューションを作成しますが、それは必要なものではありません。


4
より多くのコア機能の代わりに少数のユーザーのみが遭遇するフリンジユースケースシナリオを心配することは、あまりにも一般的なトラップです!私はまだ...これにハードな方法を学ぶ
イアン・ロビンソンに

元チームリーダーのホームページとして、あなたの答えへのリンクを張るべきです。あなたはとても正しいです。

4
私は、あなたが「プログラマ(と普通の人)の多くの」:-)言ったことを愛する

95

リラックスする方法。それは生産性の秘密です。

最終的に、意志力とカフェインは十分ではありません。この絶え間ない収縮は、非常に有害です。

これは大したことです。


1
収縮とはどういう意味ですか?

4
@Egg:仕事をするとき、時々完全にリラックスして、非常に生産的になります。私の悪い日に、私はアドレナリンとカフェインで走ります、そして、私は私の体に途方もない緊張を感じます。細心の注意を払えば、実際に筋肉を収縮させています。私はいつも他人のこの緊張に気づきます。残念ながら、燃え尽き症候群や心臓病などのあらゆる種類の問題につながる可能性があります。また、限られた時間しか走ることができないため、生産性の純損失にもつながる可能性があります。それが私が話している収縮です。
ブライアンマッケイ

@Egg、彼は未使用の筋肉の収縮を意味します。

2
コーヒーと収縮について言えば、コーヒーが脳に血液を供給する動脈を収縮させることを知っていましたか。それにより、脳が目覚めます。結局のところ、コーヒーはそれほど良いものではありません。tl; dr飲料水
リノ

83

基本的なデータ型とアルゴリズム理論。Big O表記、配列、キューなどのようなもの


Webコンテンツ管理システム用のテンプレートを作成するだけであれば、まったく役に立ちません。

3
まあ、最近は標準アルゴリズムは、ライブラリ/フレームワークで実装されているが、私はいくつかのハード・アルゴリズムのような考え方は非常に便利ですが、ないことに同意します

7
それらが既に実装されているからといって、いつ使用するか、複雑さの保証などを理解する必要がないわけではありません。これはアルゴリズムの背後にある重要な要素です。

3
グレッグロジャースに同意しました。アルゴリズムを実装する必要があるかもしれませんが、それらの複雑さとトレードオフをよりよく理解します。例えば。一部のアルゴリズムはより多くのメモリを必要としますが、高速です。

6
あなたがそれらを理解していなければ、どれを使うべきかわかりません。アルゴリズムは非常に重要です。

60

適切なタスクに適切なツールを選択する方法、および彼のお気に入りのプログラミングツールに関する愚かな炎の戦争に参加しない方法。


これが42に留まらないように+1 :)
CharlesB

54

さて、ここに私の.02 $があります:

  • 学習が停止することはありません。自分がどれほど優れていると思っていても、常に自分よりも優れた人がいて、自分自身について改善できる何かが常にあります。学習をやめると、必然的にプログラマとしての能力が低下します。本を読む。ブログを読む。他のプログラマーに相談してください。
  • いくつかの言語を学びましょう。それらのうち少なくとも1つはオブジェクト指向です。また、学習する言語に関連するさまざまな技術について何かを知っておく必要があります(たとえば、Javaを学習する場合、Springについて何かを知っていればいいと思います)。
  • リファクタリング。遅かれ早かれ、その知識が必要になるでしょう。
  • レガシーコードの処理方法を学びます。
  • 単体テストを作成します。TDDについて学びます。
  • チームで働くことを学ぶ。
  • エレガントで読みやすいコードを書きます。古いことわざにあるように、「コードを、それを維持しようとしている人が、あなたが住んでいる場所を知っている精神病の連続殺人犯であるかのように書いてください。」
  • 怠laと規律を同時に行う方法を学びます。優れたプログラマーは、これらの両方の特性を備えています。奇妙なことに、それらは互いに矛盾しているのではなく、補完的なものです。

それはあなたの.02ドルですか.02セントですか?笑!:-D

「それを維持しようとしている人が、あなたがどこに住んでいるかを知っている精神病の連続殺人犯であるかのようにコードを書いてください。」+1
ベン

50

製品の品質をテストすることはできません。


2
したがって、「品質保証」の専門家の名前は間違っています。

1
技術的に言えばQAとテストは同じものではありませんが、ほとんどの組織が実際に違いを実践しているとは思いませんが。
背の高いジェフ

5
最近遭遇した-と立ち往生:「テストの結果は品質ではなく、知識です」。
ペテルヘン

richdiet:SQAの専門家James Bachは、SQA / QAの「A」は「Assistance」を表すべきだと考えています。彼の意見とあなたの声明に強く同意します。

44

すべてのプログラマは、設計パターンを理解する必要があります


13
私は、彼らがすべてが与えられたデザインパターンに靴べらになることができるというわけではないという理解も必要だと付け加えます。
トローチ

10
また、すべてのプログラマーが設計パターンを理解する必要はありません。遠く離れた国には、非常に強力な機能を備えた言語が存在し、思考がプログラマーから作業プログラムに直接流れ込んでいます。これらの言語では、意図的なパターンは誤った方向にあります。
アリ

2
デザインパターンはdesingersない「プログラマー」のためのものである-プログラマは、彼/彼女は「デザイナー」になったときにことを知っておく必要があります

10
2種類の人がいます。コーディングを楽しむ人と、コーディングについて話すことを好む人がいます。デザインパターンは、第二のグループのために必要不可欠です。..
ビョルンReppen

1
このようなパターンは、言語の制限を克服する方法です。プログラマーは、自分の言語の弱点を理解し、克服できるためだけに、それらを理解する必要があります。

44

私はこれに少し遅れていますが、Edsger Dijkstraによって定められた知識で行きます。

数学的な傾向に加えて、母国語の非常に優れた習熟は、有能なプログラマーの最も重要な資産です。

良い段落を書けないなら、良いコードも書けない可能性があります。


8
しかし、私は、一部のプログラマーが自然言語の文章で使用するひどいスペル、文法、句読点に驚いています。あなたは...スペルミスや不正な構文のためのゼロトレランスを持っているシステムで毎日作業が有益な効果を持っていると思うだろう

1
@cheduardoは、ほとんどの言語でプログラムをコンパイルまたは実行すると、スペル、文法、または句読点のエラーが通知されるため、簡単に修正できます。論理エラーの場合はそうではありません。
2009年

@Inshallah:のようなことをしない限りif (BlowUpTheSystem = 1)。確かに、適切な単体テストが行​​われていれば、時間の節約になりそうです。しかし、時間は非常に重要です。
直観

2
同意します..うーん...「ネイティブの舌」部分を除いて、私たちの一部は[残念ながら?]私たちの非ネイティブの舌でより良い/より明確に通信します。

39

特定の技術、OS、または言語に過度に感情的になりすぎたり、執着したり、宗教的になったりしないでください。それぞれ異なるものが好きです。

車のように考えてください-あなたは以前に特定の車を運転したことがないかもしれませんが、それらはすべてキー、ステアリングホイール、アクセル、ブレーキを持っています-あなたはどこにあるかを整理したらすぐに乗り込んですぐに運転できるはずです。OSと言語を同様に扱い、特定のインスタンスの詳細に悩まされている場合でも、それらの基礎となる重要な概念の学習に集中してください。

そして、時間の経過とともに、視点を維持するのに役立つさまざまなテクノロジーの祖先、遺産、および共通性を理解し、評価してください。たとえば、進化のツリーは活発に分岐して行き止まりになっていますが、時間の経過とともにテクノロジーは「ベストプラクティス」と「規模の経済」を繰り返し収束する傾向があることを認識してください例:Macは、最近のフードの下のPC ...)。

最後に、テクノロジーがどれほど楽しいものであっても、テクノロジーは本質的に、あなたの心が思い描くものと実際に作り出すものとの間の不完全なレンズを表していることを忘れないでください。最善を尽くし、学び、順応し続ける...



35

学習をやめる日は、もはやプログラマーではない日でなければなりません。


願いが一つあれば、それはサンタが私の父だったことでしょう。

サンタだから...?

1
学習を停止する日は、あなたが死ぬ日でなければなりません。:)とにかく+1
ShdNx 09

永遠に生きるために、あなたは常に学び続けなければなりませんか?今、私が支持できるアイデアがあります!
canadiancreed

34

単体テストとデバッグ。


前者は後者の必要性を取り除きます。;-)

4
いいえ、単体テストが失敗した場合、デバッグが必要です。二人は一緒に行きます。
ザンリンクス

これを十分に強調することはできません。
fastcodejava

33

それは前に言及されましたが、それはそれ自身の答えに値すると思います。


私はそれの使用にますます遭遇し、あちこちで作品を拾いますが、私はまだアマチュアでさえありません。

同意します。理解していないと奇妙で難しいように見えますが、理解すると、同じことをするために必要なサブストリング/ indexof関数呼び出しのトンよりもはるかに簡単です。あなたのパターンが十分にコメントされていることを確認します。
キブビー

9
問題に直面したとき、一部の人々は「私は知っている、私は正規表現を使用する」と思う。現在、2つの問題があります。-「ジェイミーザウィンスキー」:comp.lang.emacsの
jwz.livejournal.com

基本的にそれらの周りに構築されたエディタを使用すると、厄介な核心を学ぶための良い方法です。私の経験では、事実上の標準PCREとほぼ同等のvimを使用したvimを使用していますが、emacsの世界でも同じルールが適用されるという印象を受けます。
直観

1
一部の人々は、正規表現に直面したとき、「私は知っています、ジェイミー・ザウィンスキーを引用します」と思います。今、彼らには2つの問題があります。
ドナルドフェロー

29

誰もソフトウェアを使いたくない。彼らは問題の解決を望んでいます。


7
まさに。開発者が、なぜ何かができないのかという彼らの質問に対する答えとして、エンドユーザーにデータベースを説明しようとしているのを聞くと、私はうんざりします。彼らは私たちがどのように仕事をするかを知る必要はありません。彼らはただそれが機能することを望んでいます。そして、それはあるべき姿です。
ケビンフェアチャイルド

私は、人々が使う喜びを見つけるソフトウェアを書くことができると信じたいです。

もっと同意できませんでした。ただし、これはAPIにも適用されます。誰も新しいAPIを学びたがりません。APIの機能ではなく、それが表すコードが必要です。
ブラブ

ケビン、私たちの「実装プログラマー」(テスト担当者の言葉)がそれを読んで理解してくれることを願っています。私も机の後ろに座って、彼がループとifステートメントについてエンドユーザーに話し始めたときに、彼が世界を飲み込むことを望んでいます。

27

コーヒーとIntelliSenseはあなたの親友です。


これを1つ以上の賛成票で表せたらいいのに!
ダイナ

もっとコーヒーを飲みたいです!!!! ñ_ñ

私は、SOに関する他のことよりもこれに同意すると思います。
Unkwntech 09年

次の場合、プロジェクトをX時間以内に完了する必要がある場合を除き、コーヒーを飲むことはほとんどありません。1日の使用時間数+ X> 8。
ブラブ

コーヒーはあなたにエネルギーを与えません。それはあなたの内部保護区からいくつかを絞るだけです。それは悪い/不健康です。
アンドレイリネア


18

ユーザーを決して信頼しないでください(特にアプリが公開されている場合)。ユーザーは、アプリを破壊するためにあらゆる力を尽くします。

将来の証明と拡張を可能にします。数年後にいつ拡張したいのかわからず、不適切に作成されたコードを再コーディングするのにどれだけの労力がかかるかがわかりません。


1
これはあまりにも一般化されています。いくつかのプラグマティズムも同様に良いです。
マフ


16

優れたUIデザインとコミュニケーション(別名グラフィック)デザインの基本

デザインや使い勝手が悪いために、非常に多くのアプリやプロジェクトが台無しになっています。基本を学ぶだけで、世界に違いが生まれます。さらに、視覚的な問題解決技術(つまり、概念を視覚的に伝える方法)は刺激的な課題であり、新しい見方に目を向け、コードに影響を与えるはずです。

おすすめの本は、ロビン・ウィリアムズのThe Non-Designer's Design Bookです。

ここでは何ジョエル・スポルスキはそれを言います

うわー!誰もがグラフィックデザインを行う必要があり、すべてのソフトウェアチームがプロのデザイナーの豪華さを備えているわけではありません。この優れた薄い本は、ページレイアウト、フォントなどの背後にある原理を理解するのに役立ちます。良いニュースは、水が冷える前に風呂で読むことができ、翌日、ダイアログボックスとパワーポイントとWebページの見栄えが良くなります。


1
次に、「日常的なもののデザイン」にうなずきます。 amazon.com/Design-Everyday-Things-Donald-Norman/dp/0385267746
Stimul8d 2009年

14

すべてのプログラマーは、素早く学ぶ方法を知っている必要があります。多くの場合、仕事に就き、一度も使用したことのない技術で開発するよう求められます。プロダクション品質のコードを書くように頼まれる前に、(幸運なら)1週間かそこらで立ち上がることができます。


初めてのプログラミングの仕事を始めて、1週間以内に、最終的に稼働するコードを書いていました。幸いなことに、私は素早い学習者であり、過去のプログラミングの経験がありました。6か月以内に、クライアントとサーバーの接続を再構築して、パフォーマンスを3倍に改善しました。これは私が今まで使用したことがない言語でした。

14

バージョン管理。そして、私のガールフレンドを引用するために:「私はあなたに料理をして欲しいだけではなく、あなたにそれ好きにして欲しい!」



10

私の頭の上から:

  1. 加算、減算、乗算、除算以外の数学を必要とするプログラミング問題はほとんどありません。微積分を使用して問題を解決することを考えている場合は、その前に選択肢を徹底的に調査してください。

  2. 何かがどのように機能するかについて推測しているときはいつでも、あなたはそれを間違っています。テレパシーになるのはあなたの仕事ではありません。

  3. 仕様を提供してくれる人は、あなたがそれをハッシュするまで、彼が望むものをすべて知っていることはめったにありません。

  4. 優れたプログラマーの半分以上は人間との関わりから来ています。チームとやり取りし、マネージャーを管理し、エンドユーザーに罰金を科すことは仕事の半分です。

  5. 優れたコードは、コンパイラーが読むのと同じくらい人々が読むように書かれています。

  6. ベストプラクティスと実際の現実は、プログラマーが考えるよりも多く対立しますが、マネージャーはそうではありません。彼らが対立しているように見えるとき、対立を描き、理解し、それから実践に屈するのはあなた次第です。微妙で賢い解決策は、長期的に見てより費用対効果が高い場合、onlyくて野bruな解決策よりも優れています。

  7. 優れたツールは優れたプログラマーを作ることはできませんが、悪いツールは私たちを同じように恐ろしくさせます。

  8. テクノロジーを軽視することはありませんが、常に最適な代替手段を探してください。

  9. 知っている言語が多ければ多いほど、使用している言語が上手くなります。

  10. プログラミング指向の思考があなたの日常生活にゆっくりと忍び寄るのに邪魔されないでください。コンピューターを使用していないときでも、帯域幅の制限に悩まされ、タスクの切り替えによるパフォーマンスの低下が発生し、バックアップストレージからデータを読み込む必要があります。コンピューターは人間の思考を模倣することになっており、類似物はどこにでもあります。


10番は私を笑わせました。何回も職場で問題に取り組んでいますが、最終的に答えが出たのは午後10時になってからです。

9

他の人のコードを読むことはあなたの脳を台無しにするつもりはありませんが、むしろあなたがそのようにそれをしなかった理由を理解します(良いかどうかは別の質問です)。

これにより、プログラミングされたgedankenexperimentが得られ、時には誰かがより良い方法を実装している人を見つけることがあります!より良い方法で好きです。

この答えは、当然、独自のコードを読むことに拡張されます。したがって、バージョン管理とDIFFを使用するように拡張され、したがって42に拡張されます。

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