web-dev-qa-db-ja.com

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

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

背景:

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

私はまた、この情報が他の人にとって興味深く、有益であることを期待しています。

245
Matt Lacey
  • あなたが最も弱いプログラマの1人である小さなチーム(2-10)で作業します。経験豊富な人々と仕事をすることで、契約/フリーランスや本を読むことよりも多くを学ぶことができます。
  • 醜く、完全で機能することは、エレガントで、不完全で、壊れています。
  • 無視できるように、すべての流行の概念について、それが良いか、悪いか、それともまだ不十分か(例:MVC、Ruby on Rails、それぞれ))について学びます。それまたは正当な理由でそれを受け入れる。
  • コメントを書き、変数/メソッド/オブジェクト/関数に正しく名前を付ける方法。提案については、Code Completeの最新版をお読みください。
1
Roger

自分の仕事に誇りを持ち、同時に間違いを認めることができる方法。

プライドを飲み込まないでください!

1
pointernil
1
ksuralta

私はこれらのモットーに従っています:

「成功は、10%のインスピレーションと90%の発汗です。」

「私がどれほど頻繁に、あなたが不可能を排除したとき、どんなに残っていても、ありそうもないことが真実でなければならないことをあなたに言ったことがありますか?」

1
Jonathan Swift

仕事に入ると、自我は車の中にとどまります。仕事とその品質以上に重要なことはありません。彼らがどれほど愚かに聞こえるかもしれませんが、個人的に批判を受け入れて皆に耳を傾けないでください。しかし、それがより速くまたはより簡単であるという理由だけで、品質を決して妥協しないでください。

そしてもちろん、学ぶ、学ぶ、学ぶ。 :)

1
Antonio Louro

何をコーディングし、どのようにコーディングするかを知っている必要があります。わからない場合は、少なくともそれを学ぶための適性と熱意を持っている必要があります!

1
Nrj

優れた(最良の)プログラムは必ずしも高速で実行されるプログラムではないことを理解してください。優れたプログラムとは、次のようなものです。-理解および変更が容易です。 -使いやすいです-それはシンプル/明確/習得が容易なインターフェースを持っています。

最高のプログラマーは、最悪のプログラマーでも理解できるプログラムを作成でき、最もカジュアルなユーザーでも使用できるプログラマーだと言いたいです。

1
unknown (yahoo)

素晴らしいスレッド!さらに、Programming Pearlsの本から多くのことを学びました。

1
user21110

私は数学にかなり熱心ですが、プログラマーが知っておくべきことは、時間の経過とともに、どのウサギを追跡し、どれを手放すかということになると思います。質問への回答を検索しても、どこにも回答が見つからない場合でも、別の方法を試してみることはあきらめません。問題を解決するために報酬が支払われます。問題を解決するためのmethodは支払われません。

あなたも間違いを犯すことができます。これは2つの点で役立ちます。最初に、あなたは自分自身に降りていません。第二に、同僚を軽蔑することはありません。この2つ目は、キャリアを積む上で役立ちます。

1
Anthony Potts

完璧ではなくても十分に良いソフトウェアを書くように自分を訓練する

1
Karl

明確かつ簡潔に書く方法。私はコードについて話しているわけではありませんが、それも良いでしょう。

1
Ferruccio

すべてのプログラマは、問題を解決する方法を知っている必要があります。どのツールや方法論を使用するかについて、オープンマインドですべてのタスクに取り組むことが重要です。フレームワークやパターンが答えになることもありますが、そうでない場合もあります。

1
Heat Miser

ゲームをプレイして、日常業務のほとんどが職場の政治であり、プログラミングではないことを学びます。

1

明らかに、バージョン管理。しかし、もっと重要なことは、コンピューターのメカニズムです。

コンパイラ理論:ある言語を別の言語にどのように変換しますか?これがどのように機能し、何ができるかについてのアイデアがなければ、コードは悪い決定に満ちていることになります。コンパイラーは、初心者でない人には不思議に見える傾向があり、恐ろしいコードを書く傾向があります。

コンピュータアーキテクチャ:優れたコードを実際に作成するには、マシンをある程度深く理解する必要があります。ミドルウェアの複数の層の上にさえ、基本的なマシンが輝きます。キャッシュ、マルチプロセッシング、およびIOの動作の仕方をある程度理解して、まともなコードを書くチャンスを得るには、理解する必要があります。メモリサイズやキャッシュなどの問題に気付かずにコードを書くと、ある程度はうまく機能しますが、同期が取れていない場合やパフォーマンスの壁に達した場合は、マシンの内部で何が起こっているのかを理解する必要があります。

1
jakobengblom2

あなたよりも賢い人で自分を囲んでください。

1
JesperE

彼らが働いている問題ドメイン。

1
user39733

そこにいるすべての開発者はこれを読む必要があります post

「コードを書くより読むのが難しい」

1
antonio

私がアドバイスのためにあきらめることができる一つのこと:

  1. プログラミングは単に機能するだけでなく、アートの形でもあります
  2. プログラミングは、怠惰になるために支払う唯一の芸術形式です。

オープンソースプロジェクトからコードを取得する怠惰な形式ではなく、それで十分だと思い、自分のアプリでそれをカットアンドペーストしてください。つまり、将来、怠惰になる準備をするということです。

私は常に、すべてを専用のタスクを実行する基本的な標準オブジェクトに分解しようとします。 SSH接続処理とSCP処理を実行するSSHオブジェクト、すべてのdb通信を処理するdbconnectionオブジェクトには、名前を付けます。

ドロップインして、機能させれば完了です。優れたプログラマであるほど、何かを成し遂げるのが簡単になります。

また、もしあなたがnot十分に怠惰な場合(たとえば、 TheDailyWTF を確認してください)、他の仕事をしてください。 makesプログラミング言語を言語自体に再実装したくない、またはTheDailyWtfで見られる他の愚かなことをしたくない場合。

1
SchizoDuckie

それを行うには複数の方法があることを知ってください。これはPerlのモットーですが、非常に一般的です。 無料のソフトウェアソング を学ぶこともできます。

1
stephanea

謙虚。あなたは人間であり、作業しているマシンの延長ではありません。あなたは何も知らないし、決して知ることはなく、常に間違いを犯します。

1
Firas Assaad

すべてを再発明しない方法を知る。開発者が直面する問題の大部分は、ずっと以前に、より賢い開発者が直面し、うまく解決してきました。この知識を使用しないことは、開発者が犯すことができる最大の間違いです。最悪の場合、問題を解決することができません。最良のケースでは、既存のソリューションを思いつくのに時間を浪費します。

ゴラン

1
Goran

P == NPの場合

そして、いくつかのプラットフォームでのアセンブリ。おそらくそれを使いたくないでしょうが、それがずっとカメ(またはオブジェクト)ではないという認識があると、バイトはここで止まります。

もちろん私はNPについて冗談を言っていますが、実際に問題を解決するのが難しい問題を理解することは非常に役立ちます。

理想主義と実用主義の違いを理解し、ソフトウェアを設計するときに両方が重要である理由を理解します。

1
sammyo

これらは、教育とキャリアの過程で試行錯誤から学んだことです。自分の不足を克服するのに苦労することもありますが、これらのレッスンは私に役立ったと思います。

  1. コーディングする前に問題を概念化する方法。事前に設計することが重要であり、問​​題を適切に概念化する機能があると、優れた設計を得ることができます。

  2. 謙虚。私たちは学習を止めることはなく、私たちはそれをすべて知っていると決して考えるべきではありません。常に学ぶべきことがあり、私たちは常に間違っている時を経験します。それを認識して受け入れることが重要です。

  3. コードを壊す方法。私を含む多くの人(私を含む)は、要件を満たすようにコーディングしており、コードが不正なデータや不正な制御フローに対して堅牢であることを確認するのに十分な時間を費やしていません。

  4. コードを理解する方法。他人から借りるのは悪いことではありませんが、何を借りているのか分からないまま借りるのは悪い習慣です。アヒルのように見えるし、アヒルのように鳴くからといって、ライオンのように食べたり、空飛ぶ象のようにBMを食べたりしないわけではありません。

1
Jeff Yates

彼らの後にプロジェクトを引き受ける可能性のある開発者の立場に自分自身を置くために-よくコメントし、賢明な名前を付けます。

1
unochild

すべてのプログラマーは、少なくとも一度は彼の顧客/ユーザーに会うべきです。あなたはユーザーのより良い見解と彼が時々そのような「奇妙な」要件を持っている理由を得るでしょう。

バグレポートを受け取った場合、非難や再考する人を検索しないでください。多分それはあなたのせいです。

1
ravicini

最近、私はテクニカルマネージャーから信頼できるブログを読んでいますが、プログラミングポジションの求職者のほとんどすべてが、CSの学位を含むものを含め、実際にはコーディングできないと不平を言っています。これが本当なら、あなたの質問への答えは明らかです:すべてのプログラマーが知っておくべきことは、彼らが実際にプログラムできるかどうかです。警告がなければ、簡単な問題を聞いてから、コンピューターの前に座って、数分で正しい解決策をコーディングできるはずです。

http://steve.yegge.googlepages.com/five-essential-phone-screen-questions を参照してください

1
dongilmore

一般:

  • 学習方法(常に変化するもの)
  • 非技術者とのコミュニケーション方法
  • 技術者とのコミュニケーション方法
  • グループで働く方法
  • 時間を管理する方法
  • プロジェクトを分解、見積もり、計画する方法
  • 異議を唱えたり批判したりする方法なしディックであること

テクニカル:

  • 基本的なデータ構造(リスト、ハッシュ、ヒープなど)選択した言語がこれらを実装していても、ブラックボックスであってはなりません。
  • いくつかの異なるアルゴリズムと実行時間の分析方法。全員ではない必要並べ替えについて知る必要がありますが、正直に言うと、多くの人が知っているように、そうでない場合は少数派です。

そこからのほとんどのものは一般化するのが難しいです。たとえば、組み込みコントローラーで作業している人はおそらくSQLを知る必要はなく、同様にDBAはおそらくSTLを知る必要はありません。

1
Bill

すべてのプログラマーは、作業する基本的なハードウェアの基本を知っている必要があります。言語を選択する前の言語間の違いは何ですか。彼が取り組んでいる言語のあらゆる面を知っている。ほぼ10の異なるコンテナーを知っています。一般的なプログラミング。基本的なブール論理、いくつかの基本的な数学の原理。 100の基本的なアルゴリズム。そして、良いgogglingテクニック。

しかし、優れたプログラマーの最大の能力は、問題を解決してすぐに使える思考であり、あなたがそれで生まれていることを学ぶことができないと私が信じていることです。

1
user28954

明白なことに加えて:

コミュニケーションスキル

グラフィカル、音声、書面。

1
Demian Garcia

何も想定しない。スティーブンキングのセルのように..AssumeはUとMeからロバを作る

1
Tanmoy

厄介者に注意してください!

1
Mike Robinson

優れた開発者は、次のことができる必要があります。

  • コードワンスから少し離れて、全体像を見てください
  • 彼らが何をしているのか(そしてなぜ)同僚の開発者、オフィスPA、ディレクター、およびマーケティングマネージャーに説明します。
  • 仕様がリリースされるまでに変更されていない場合、何かが必然的/本質的に間違っていることを理解する
  • 学習方法として開発者の批評をとる
  • 学習を停止しないでください
  • まだ良いソフトウェア/コードの開発から話題を得る
1
chillfire

いつ停止するかを知っています。

過度の装飾や過度の洗練によって、良いプログラムを台無しにしないでください。次に進んで、コードをしばらくの間そのままにしておきます。

-「Pragmatic Programmer」より

時々、私はそれを助けることができず、私の手は単に「もう少し」それを最適化するために単にかゆみます。 =)

1
teriz

指を指すのではなく、可能な解決策を指摘します。重要なのは良い結果です。

(from: "アジャイル開発者の実践")

1
Patrick Peters
  • SQL
  • mATLAB
  • 1つOO言語
  • 1つの関数型言語
  • 1つのスクリプト言語
  • Lex/yaccまたは類似の解析ツール
  • おそらくtex、prolog、vhdl、postscript

ほんの数時間または数日の探索で十分です。これらに慣れる必要はありません。

主なポイントは、プログラマーのviewを広げることです。非常に異なるプログラミングには多くの種類があります。 使用する言語に思考を制限させないでください

1
kcwu

私の.02セントの価値......

クライアントがタスクを要求しているときに、タスクをどのように設計/コード化/達成するかを知らないことは、クライアント要求を拒否する十分な理由にはなりません。時々、クライアントがそれを必要とするために何かをすることに同意する必要があります...そして、それを行う方法を見つけます。

パットンがかつて言ったように:「私たちは不可能なことをするためにビジネスにいます」....どんなslobも可能なことを成し遂げることができます。その最後の部分は;))で追加しました

1
jfq722

ここにはたくさんの素晴らしい答えがありますが、もう1つあげます。スキルを向上させるために仕事に依存しないでください。多くのプログラマーは、通常のITショップでCRUDプログラミングを行って5年間の注文とバグ修正作業を行うと、自動的に「上級プログラマー」になると考えています。必ずしもそうとは限りません。私はJared Richardsonのラインが好きです。「一部のプログラマーは5年の経験を積んでいます。一部のプログラマーは1年の経験を5回経験しました。」

それは最終的にはあなたの上司の責任ではなくあなたの責任であり、スキルセットを改善し、新しい言語を学び、高品質で適切に設計されたコードを生成することを受け入れます。これは、職場で独自のツールを作成することを意味することもあれば、余暇に行われる副次的なプロジェクトを意味することもあれば、月に1度新しい技術書を作成することもあれば、オープンソースプロジェクトに貢献することを意味することもあります。あなたが情熱を注いでいる何かに関連するプロジェクトを見つけることができれば、はるかに良いでしょう。

サラリーマンであろうと請負業者であろうと...最終的には、私たちはすべてフリーランサーです。

1
pbailey19

すべてのプログラマが知っておくべき97のこと: http://programmer.97things.oreilly.com/wiki/index.php/Edited%5FContributions

1
amit
1
OrElse

グーグルの使い方

1
Hagai L
  1. エゴを落とす

  2. 批判は悪ではない

  3. 失敗を受け入れる

  4. 障害から迅速に回復する

  5. 練習、練習、練習...

  6. 他の人から学びたがる

  7. 喜んで変える

1
gath

学んでいないプログラミング言語で書かれたプログラムを理解する方法。

(たとえば、a Java C#を学習せずにC#コードを読み取るプログラマー)

1
Ming-Tang

堅牢なコードを本当に作成したい場合は、自分のドッグフードを食べる必要があります。

1
Mark Tomlin

LISPについて学びます。

ESR釘付け これ

「ハッカーにとって特に重要な言語には、PerlやLISPが含まれます」...「LISPは、別の理由で学ぶ価値があります—最終的にそれを手に入れたときに得られる深い啓蒙体験です。この経験は、残りの人にとってより優れたプログラマになりますLISP自体を実際に何度も使用したことがなくても、あなたの日々。」

私は、非常に簡単に新しい言語を選択することができないLISPプログラマーを見たことはありませんが、新しい言語を学ぶのに苦労した他のすべての想像できる言語。 LISPには、脳を伸ばすものがあります。 (私はそれ自体が何かを定義する循環性に関係していると思います。)曲芸師のように、もはや他に何もないようです。

私の大学では、すべての学生に、非西洋文化を含む外国語や文化のコースを履修するように要求しました。 C++とJavaしか学んでいないコンピューターサイエンススクールを卒業することを許可してくれたことに驚いています。

はい、採用の際、私はこの方法で他の多くのものよりも上位にランク付けしています。すべてのLISPプログラマーは「ソース管理、ユニットテスト、継続的インテグレーション」をほとんどすぐに学ぶことができますが、これら3つのことを知っているJavaのみのプログラマーは、クロージャー、パーサー、または実際に必要なものに苦労するかもしれません。コンピュータサイエンスとプログラミングを知っている場合は、プロセスを教えることはできますが、その逆はできません。少なくとも、給与を支給する予定のあるタイムスケールでは教えていません。

1
Ken

大学卒業生といえば、学校で学んでいないことがたくさんあるので、自分で習得しなければなりません。私は自分で学ばなければならないさまざまなことについて続けることができましたが、それはしばらくかかるかもしれません:)代わりに、次のことは特定のツールやテクノロジーよりも優先されます:

新しいことを学び続ける。鋭い競争力を維持するためには、継続的な改善への意欲が必要です。

1
Grant Palin

おかしいですが、私の仕事で最も重要なスキルはググリングです。時々私はそれについて考える前でさえググってググって:)
または、一般化すると、それを「情報処理」と呼びます。大量のデータをすばやく「スキャン」して、必要な情報を見つける機能です。

1
Nikita Rybak

すべてのデモの母

から Wikipedia

マザーオブオールデモは、ダグラスエンゲルバートの1968年12月9日、サンフランシスコのコンベンションセンターでの秋の合同コンピューター会議(FJCC)でのデモに遡及的に付けられた名前で、その後、一般的になっている多くの実験技術が発表されました。 。デモでは、一般の人が初めて目にしたコンピュータマウスを紹介し、インタラクティブテキスト、ビデオ会議、テレビ会議、電子メール、ハイパーテキスト、共同リアルタイムエディタを紹介しました。

1
Özgür

すべてのプログラマーはプログラマーです。それからデザイナーやアナリストもいます。分析フェーズがスキップされている場合、プログラマーが間違ったことをプログラムしたとしても、プログラマーのせいにするべきではありません...

もちろん、小規模なプロジェクトの開発者は1人だけかもしれませんが、要点はわかります。

0
Silvercode

プライドラインを飲み込む-より良いアイデアが提案された場合に、ハートビートでアイデアを離婚する方法を学びます。

0
stephbu
  • 謙虚に新しいことを学びましょう。
  • 言語コミュニティに参加してください。
0
amadamala

数学。プログラミングは、数学の言語の恐ろしく小さなサブセットです。

0
directrixx

クールな方法を知ることに加えて、ボイラープレート、誕生、および冗長です。一つのことを知って学び、あなたは置き換え可能です。それを乗り越えると、あなたは仕事が簡単になります。 「インターネット時間」があるとしても、やりがいのあることには時間がかかり、上司が何を考えていても5分で達成できないことを知ってください。

0
Chris
  • あなたの過ちから学びすぎる。
  • 正規表現-私はまだ知りません:-(
  • バージョン管理。
  • パフォーマンスの最適化で停止する場所。
0
Adam Gibbins

理論とアルゴリズムを理解します。誰でもコーディングを学ぶことができますが、コーディングを教えることができる人になるのはごくわずかです。

0
andy.gurin

ステップ1. http://www.pragprog.com/the-pragmatic-programmer を読みます。

ステップ2.勝つ。

0
user23313

あなた自身で物事を理解してください。または、少なくとも、自分で問題を解決するために、真に正直な試みをしてください。他の人から答えを得ることは、これまで以上に学び、はるかにやりがいがあります。

0
Kyle Walsh

プログラミングはコンピュータを作っています

  1) Get input  
  2) Process input data  
  3) Generate output

コンピュータは馬鹿げていますが、本当に速いです。

そして、電気「または関連するエネルギー源」がなければ、スプーンはありません。

0
fsniper

すべてのプログラマーはリソースを大量に消費する必要があり、絶えず学習して適応する必要があります。

0
arshad

私のリスト:

  1. あなたが取り組んでいるテクノロジーよりも、プログラミングのサイエンスとロジックを重視し、よく理解してください!
  2. エンドユーザーに共感し、何らかの技術やテクノロジーに熟達していることを示すためだけに何かを与えないでください。つまり、実際に自転車が必要なときにロケットを無理に押し込まないでください。
0
Shyam

ユーザーの満足度が重要で、コードの品質はそれほどではない

0
Daniel Melo
to understand
to think
to write well
to optemize
..and to cheer up :D
0
Ahmad Dwaik

ちょうど良いチームプレーヤーであること-常に破壊的な批判ではなく、改善の提案としてフィードバックを受け入れます。

0
ruibm

あなたの気性を失うことなくイライラする人々に対処する方法。


マネージャーがデスクにアイテムのリストをドロップし、金曜日までに完了することを期待していると言ったとき。 DBAがデータロードスクリプトを2回実行するとき。 sysadminが誤ったバージョンのコードをデプロイした場合。 again-ユーザーがそれがどのように機能するかを説明するように頼んだとき、それはあなたが優雅にそれを扱うことができる必要があるときです。あなたはこれらすべての人々と仕事をしなければならないので、どんなに 間違った であっても、あなたが嫌なジャークだと思わなければ、それははるかにうまくいくでしょう。

0
Sean McMillan
  • あなたが思っているほど多くのことを知ることは決してないでしょう。ビジネスで数年経った後でも、あなたは自分の専門分野についてあなたよりも多くのことを知っている人々に出会います。それについて心配しないで、勉強と学習を続けてください。

  • 十分な言語、アーキテクチャ、パラダイム、流行語を学んだことは決してありません。すべてを理解したら、誰かが新しい(ここにお気に入りのテクノロジーを挿入)を発明し、再び連絡が取れなくなるためです。

  • あなたはすぐに、その古い古臭いダディになります。彼/彼女のたるみを切り、昔々、彼/彼女はあなたの靴を履いていたと仮定します。

0
MJB

ボックスの外側を考えてください!

0
fastcodejava

現実の世界は、あなたが学校にいたときと同じようには動かないかもしれません。企業がソフトウェア開発を実行する方法は、あなたが教えられた理論と正確には一致しないことを受け入れてください。

新しい組織での状況を理解するために、少し時間をかけてください。これはすべての人に当てはまりますが、卒業生は他の人よりも落ち着きがあると思います。

0
JB King

開発ジョブを取得するために必要なスキルと、開発ジョブで成功するために必要なスキルは、通常、2つの非常に異なるものです。キャリアの選択をする際には、彼らが同じである場所を選んでください。

逆に、ほとんどのジョブでは、データ構造/アルゴリズムのニーズの95%がライブラリクラスによって提供されます。あなたの時間の95%は、CSの忍者であるが、ロボトマイズされたビーバーのエンジニアリングスキルを持っている人々によって作成された保守不可能なコードを処理することによって無駄になります。

0
Uri

なんと獣医師が彼の仕事をしているのでしょう!

0

今日、私はこの本に出くわしました。これは非常に素晴らしい本であり、すべてのベストプラクティスの良い要約です。

すべてのプログラマが知っておくべき97のこと

0
user171523
0
CMA

通常、独創的な考え方は良いことです!開発のほとんどは単純なものではありません。

0
Marcos Bento

現在の組織の内部と外部の両方で連絡先のネットワークを活用する方法。あなたが誰かとあなたの問題を検討する必要があるときや、次の興味深いプロジェクトがどこから来るのかわからないためです。

0
TomY

すべてのプログラマは、コードに適切なドキュメントを添付する方法を知っている必要があります。

十分に文書化されたコード(埋め込まれたコメントの自由な使用)は、保守とアップグレードが容易であることがわかりました。

プログラマーが(コードにインラインで)実装の理論的根拠を埋め込むと、機能の追加や他の関連する問題のデバッグに関係なく、それを理解するのにかかる時間を減らし、手元のタスクにより多くの時間を費やすことができます。

0
Bob Minteer