プログラミングスキルを向上させるために行った最も効果的なことは何ですか?


876

プログラマーとしてのキャリアと人生を振り返ると、プログラミングスキルを向上させるさまざまな方法がありました。コードを読む、コードを書く、本を読む、ポッドキャストを聴く、スクリーンキャストを見るなどです。

私の質問は、あなたがプログラミングスキルを向上させた最も効果的なことは何ですか?改善したい他の人に何をお勧めしますか?

私はここでさまざまな答えを期待しており、「1つのサイズですべてに適合する」答えはありません。


18
練習、練習、練習。そして、頭に浮かぶ最初のものに決して満足しないでください。
マークランサム

2
マーク・ランソムの+1 ...まだ頭に浮かんだ100番目のことに満足していないときに難易度が上がります!
Stimul8d

5
Programmers Stack Exchangeサイトで時間を無駄にしないことで、コーディングスキルを大幅に向上させることができました。
ジョブ

3
@Mark Trappはこれが建設的でないのはどうしてですか?
右折

1
@WTP-説明を読みます。「この質問は、私たちのQ&A形式には適していません。」-この質問をした人として、私は同意します。もっとリラックスした時代に聞かれました。
Oded

回答:


753

順不同...

  • 自分よりはるかに賢い人々と働く

  • 後輩、中級者、先輩、または第一人者であるかどうかに関係なく、他者の発言を常に聞いてください。役職は何の意味もありません。

  • 他のフレームワーク/言語を学習し、それらがどのように動作するかを見て、それをすでに知っているものと比較する

  • パターン、ベストプラクティスについて読んでから、古いものを調べ、必要に応じてそれらのパターンを適用する

  • ペアプログラミング

  • ジョエルが言うことすべてに反対する。;)


41
私はそれが本当に無料で潜在的に評判のように見えることを知っていますが、それらの項目を回答ごとに1つに分ければ、人々は同意したものを投票することができ、この質問のより具体的な最終投票の「解決策」が可能になります。

117
賢い人々がどのようにミスを処理するかを見てください

82
これが特定の順序ではないリストである場合、順序付けられたリストではなく、順序付けられていないリストではないでしょうか?:P
ジョンW

3
私はmmyersに同意します-あなたが誰かに同意しないからといって、あなたが彼らを無視しているわけではありません。実際、それは逆です-それらに同意しないために、あなたは実際にそれらに注意を払っています。
クリスティアンロモ

15
私はジョエルが言うことすべてに賛成するわけではありません。多くの場合、彼が言うべき興味深いことがあると思います。私のコメントはほほえみでした。ジョエルに関しては、私が同意するものはたくさんありますが、月に1回程度、彼は私に頭を振って、「何ですか、本気ですか?!」と尋ねさせます。私は自分の立場と私が信じていることを本当に確認することを強いる最も困難なものを見つけるので、私はそれが大好きです。

557

決定TO「三面六臂」であります

かなり早い時期に、特定のデータベースとプログラミング言語の専門家でした。残念ながら、その特定のデータベースは「データベース戦争」を失い、私のキャリアの選択肢は限られていることがわかりました。その後、私は意識的に、二度とそのような状態に陥ることは決してないと決めました。そこで、Windows、Unix、C、C ++、Java、C#、Perl、Python、Access、SQL Server、Oracle、Informix、MySQLなど、手に入れることができるすべてのものを研究しました。 「ゴーツーガイ」になりました-「クレイグに聞いて、彼がそれを知らないなら、彼はそれを学ぶでしょう。」その結果、環境テレメトリ用の組み込みシステムからミサイル防衛用の指揮統制システムまで、あらゆる種類のプロジェクトに取り組みました。

私が今まで経験した唯一の問題は、私の専門がジェネラリストであるときに、ピジョンが私を専門に引き込むことを主張する企業に関するものです。[編集:PolymathまたはRenaissance Manまたはマルチスペシャリストとしても知られています。]

心に留めておくべきこと...ハイテクの知識の半減期は?それはムーアの法則に従って追跡します:あなたが知っているすべての半分は18-24ヶ月で廃止されます。間違った規律を選択する専門家は、テクノロジーのプレスによって簡単に損なわれます。ジェネラリストは、いくつかのスキルを追加し、それらのスキルを適用する際の過去の教訓を覚えるだけです。


224
「すべての取引のジャック、なしのマスター、多くの場合、1つのマスターよりも優れています。」-Adamサベージ
JMS

9
優れたアドバイス、賛成票。私の過去の「孤立した技術」は私の8ビットAtariで、C64に負けました。しかし、私は同じ結論に達しました-ハインラインを引用すると、「専門化は昆虫のためです」。

17
常にトレードオフがあり、1日で86,400秒しかありません。どのように使いたいかを決める必要があります。私の場合、余計な時間(「仕事」時間を超えて)を費やして、自分が面白いと思うものや将来的に需要があるものを学ぶことにしました。独自の選択を行う必要があります。
クレイグトレーダー

74
「専門は昆虫です。」-ハインライン
ケリーS.フランス語

31
「ジェネラリスト」バッジはどこにありますか?^^
アーニスラプサ

459

私はいつも自分をかなりホットなプログラマーだと思っていました。それから彼をアーロンと呼ぶ新しい男が私たちのチームに雇われました。アーロンは、ほとんどの分野で明らかに私よりもはるかに優れていました。彼も私より若かった。彼は私が過去数年間あまり改善していないことに気づきました。私はその場限りのハッカーであり、平凡なハッカーでした。

これは、意識的に自分自身、特に私が書くコードの品質を改善しようとするように警告しました。

アーロンは私に多くのことを学ぶように導きました。彼は、私が書いたコードの大部分を少なくとも数年間維持および拡張する必要があることを教えてくれたので、それを念頭に置いてコードを書く必要があります。コードの自動テストを作成する必要があります。アーロンは常に、最初の作業バージョンで停止するのではなく、コードがエレガントになるまでリファクタリングおよび改良する方法について話していました。私が使用していた言語とツールには、改善の余地があることがわかりました。

アーロンから学んだ最も重要なことは、決して学習を止めないことでした。

数年後、アーロンは会社を辞めました。空っぽに感じました。彼との過去数年間は、私をまったく新しいレベルのスキルに引き上げ、私は今やチームの他のチームよりもはるかに優れていることに気付きました。彼らはまだ悪いコードを書いていて、以前と同じ間違いをしていました。私は彼らに教えようとしましたが、彼らは学ぶことに興味がありませんでした。実際、彼らは誰かが彼らがしているどんな間違いを彼らに伝えるためにとても慢であることに腹を立てていました。

それで、数ヶ月後、私も会社を辞めました。私は非常に才能のあるチームを持つ小さな会社に移りました。みんながもっと学びたいと思っていたので、とても気に入りました。

アーロンに会えてよかった。彼がいなければ、私はおそらくまだ古いギャングと古い会社で働いていて、どこにも行かず、自分自身について考えすぎていたでしょう。


54
通常、これは両方の方法で機能します。現在、私はいくつかの会社に「アーロン」として入り、他のコーダーにエネルギーが与えられると、彼らは私のお金のために走り出し、自分の努力を倍加することを奨励することに気付きました。素晴らしい投稿!

28
「アロンはいつも私が最初の作業バージョンで停止することはありませんかについて話しますが、リファクタリング、コードがエレガントになるまで、洗練された」のための1

17
「最初の作業バージョンで停止しないでください」??? -いつから残りの仕事を終わらせるのですか?:)

4
私はアーロンになろうとしましたが、時にはうまくいきますが、時には間違っています。「歴史から学ぶことができない人は、それを繰り返す運命にある。」新しいアイデアに心を開いておくのは良いことですが、すでにあなたのために間違いを犯した人たちについてn00bを聞くのは悪いことです。自分自身や他の人に質問することから学ぶように、誰もがいくらかの懐疑心を必要としています。

27
問題は、彼らが「アーロン」だと思う人が多すぎることです
-cinqoTimo

257

2つのこと:

  1. さまざまな人が書いたコードを読む。
  2. 他の人が書いたコードのドキュメントを書きます。

コードの記述は非常に簡単です。私が知っている他のすべての人がそれを行うことができます。しかし、他の誰かのコードを読んで、それが何をするかを理解することは、私にとって全く新しい世界でした。


42
そして、してはいけないことを学ぶ最良の方法の1つです:)
AviD

9
あなたは彼らが何かをする方法を見ることができます。たぶん彼らはあなたよりも良い方法でそれをしますか?

4
本当に古くて完全に文書化されていないプロジェクトを掘り下げ、文書化し、バグを修正し、新しいシステムに移植しなければなりませんでした。私は多くのことを学びましたが、それがすべてしてはいけないことではありませんでした。私はコメントの価値を学びましたが。

そして、ドキュメントを書いている間に、それのためのいくつかのユニットテストケースを書くかもしれません(もしそれらが存在しなければ)。次に、コードの使用方法もわかります。
dhable 09

それは本当です、それは長い間私の仕事の最も困難な部分でした。

199

定期的にジムに行きます。

真剣に、私の脳は、私が体調を整えているとき、ずっと良く機能します。問題が簡単になり、圧倒されることはなくなり、グーフオフは誘惑になりません。ステップバイステップで作業することは、このような骨の折れる作業ではありません。


30
大部分の人々が運動をせず、あらゆる種類の定期的な運動をしないという悲しい事実は、今日の世界では大きな問題です。
卑劣性2009

5
可能であれば、これを任意の量の物理的なエクスカーションに拡張します。時々、私はしばらくの間多くの手作業をしなかったとき、私は肉体的な疲労を切望し始めます。あなたが精神的に消耗していることに慣れているとき、それはちょっと小説です、そして、それはあなたがちょうど自分自身を輪になって考えているときにあなたが脱出するのを助けます。
Stimul8d

1
はい、それは今日の大きな問題です。特に労働時間の多いパキスタンでは時間がありません
maz3tt

2
より多くの運動を得るために自分自身へのリマインダーとして+1
SingleNegationElimination

スポーツは大きな動機であることがわかりました-私にとっては、バスケットボールです。
アデル

181

プログラミング。興味深いプロジェクトに取り組んでいます。何かに乗り込んで作業するようなものは何もありません。特にプレッシャーの下で。私はいつもプログラムの作り方を尋ねる人には誰でも教えます-クールなプロジェクトを見つけて(それを作り上げなければならないとしても)それに取り組みます。


4
同意する。プロジェクトで手を汚すことは、おそらく私の改善への最大の貢献者です。; )
マイクグレース

1
まさに。より良いコーダーになるための最良の方法は、コーディングすることです。書籍、ポッドキャスト、同僚から必要なものをすべて学ぶことができますが、実際に理解する前に適用する必要があります。もっとコーディングし、より多くのものをコーディングしてください。同じ古いトリックを繰り返しても多くを学ばないからです。

やりがいのある興味深いプロジェクトを選択する。あなたの快適ゾーンの外で克服するための闘争は本当にあなたのスキルをスピードアップすると思います。彼らは簡単だったので、彼らは月に行きませんでした。
金正日ウー

172

私の大学でCSの学生を指導するアルバイトをしました。何か他の人に説明しなければならないとき、まったく違うレベルで何かを理解するように強制します。


1
私はそれを保証することができます。

1
大学の講師が、私がまだ学生だった頃のオープニングについて教えてくれました。卒業後、ほぼ1年間(パートタイム)滞在しました。
トカゲのビル

29
ダグラス・アダムスが「Dirk Gentley's Holistic Detective Agency」に書いているように:「最良の方法は、他の誰かにそれを試して説明することです。それはあなたの心の中でそれを整理することを強制します。より多くの単純なアイデアに物事を分解する必要があります。」

2
本当です。写真を教えることは私をより良い写真家にした。コーダーthoの多く:(
CADが2008年

9
mutuo ista fiunt、et homines dum docent discunt-セネカ

135
  1. 私は「毎年1つのプログラミング言語を学ぶ」システムの大ファンです。1年で「大丈夫、構文を知っているので、今は言語を知っている」というバイアスを乗り越え、その言語の利点を理解し、ネイティブ言語のスタイルでプログラムすることを強制するその言語(つまり、Ruby構文を使用してJavaアプリケーションを作成することになりません)。各言語はプログラミングに対するあなたの考え方を変えます-私は再帰の使い方を知っていましたが、プロローグのクラスをとるまで再帰の考え方は起こりませんでした(MLのような関数型言語は同じ効果があると思います)。

  2. ペットプロジェクトを開始します。良いペットプロジェクトのための私の個人的な方程式は、あなたが経験したもの+あなたが役に立たないアプリ=あなたが役に立たないアプリです。たとえば、Migratr(私のカフェイン付きの週末になった進行中のプロジェクト)は、「c#を知っていますが、Web APIに対してコーディングしたことはありません。すべての写真をZooomrに移動したい」として始まりました。「Web APIに対して以前にコーディングしたことがありますが、C#がわかりません」と同じくらい簡単にできたはずです。

ペットプロジェクトの公開は、それ自体がすばらしい教育体験です。突然、事実上誰も教えていないことは誰でも知っていますが、誰もが知っているはずです(私にとっては、独自のテストシステムをセットアップし、バージョン管理システムを最大限に活用し、誰もあなたの期限を設定していないときに自分のペースを合わせる方法、あなたとやり取りする方法ユーザーと機能リクエストに「いいえ」を言うタイミングを知る方法)、すべてのものが表面にバブルし、あなたが以前にはなかったレベルで自己教育することを強制します-少なくともdzoneでフレームウォーを読んで「foo」対「bar」のやり方の長所/短所。

これら2つのことを行うことで、スペクトルの両端がカバーされます。新しい言語を学ぶことで、あなたはより良いコーダーになります。ペットプロジェクトはあなたをより良い開発者にします:P


私は同意することができます。「以前は知られていない言語でのペットプロジェクト」は良いです、私は確認できます

慣れ親しんだ何かを学ぶための非常に良い提案。

素晴らしい提案「あなたが経験したもの+あなたがしていないもの」!ありがとう
sica07

今ペットが必要です。
アデル

118

自分で組み立てを教えた。私が13歳のときに古い6502チップでそれをしましたか?14?遠い昔。しかし、ビットレベルに到達する以上に開発を改善できるものは考えられません。

アセンブリを学習することで、コンピューターが根本的に低いレベルで「考える」方法についての洞察が得られます。このレベルでの優雅さは驚くべきことです。このレベルで開発すると、効率性が向上し、クリティカルシンキングとロジックスキルが向上します。また、あなたが持っているずさんな習慣をかなり早く治します!

65xxチップには3つのレジスタ(アキュムレータ、X、およびY)があり、乗算または除算のためのマシンレベルの命令はありませんでした。戦闘ダメージを計算するためのルーチンをコーディングし、本に目を通し、突然自分の数学ライブラリを書かなければならないことに気づいたのを覚えています。数週間かけて、ノートブック全体に1と0を走り書きし、「分割」と「小数点位置」が本当に何を意味するのかを理解しようとしました。

それ以来、C ++、pascal、.NET、その他多くのことを学びました...しかし、どれも私にそれほど教えてくれず、興味をそそられませんでした。 。


16
素晴らしい思い出を持ち帰っただけで投票する必要があります!たぶん私も少し涙を流した:)
チャーリーフラワーズ

3
私はまだC / C ++を68Kアセンブリ言語に精神的に翻訳しています。どのプラットフォームでも効率的なコードを書くのにどのように役立つかは驚くべきことです。
ボブマーフィー

1
ああ、6502は素晴らしい思い出をもたらします。このチップのアセンブラで多くを学びました。

5
プログラミングのすべての学生は、教育の早い段階でアセンブラーに深く触れる必要があります!

2
私は若者と同じことをしました。それは、コンピューターがどのように機能するかを実際に教えてくれました。さらに、高水準言語がこれまで以上に可能でした。
CADブローク

110

私が書いた古いものを振り返ると、それらがどれほど悪いのかを実感しました。


第二に…古いものもほとんど読むことができません。
Unkwntech

28
私の古いものを調べてみると、ファイル全体を削除するという、ほとんど抵抗できない衝動に駆られます。時にはディレクトリ全体。
クリストファーマハン

客観性のために+1。古いコードを見ても、改善方法はわかりません。改善した場合と、改善方法がない場合だけです。

これを実行しました。このスクリプトインタープリター全体をVB6で作成し、2年かけて作成しました。ウィンドウを作成したり、イベントを処理したりすることができました。非常に大きくなり、制御不能になり、すべてを壊さずに追加できなくなりました。それは、プログラミングに関する本のためにプログラミングをあきらめる前に書いた最後のものでした。今、私ははるかに優れていますあー。そのモンスターのプロジェクトに戻って読むと、私が来ているだけでどこまで実現可能
カーソンマイヤーズ

3
@Christopher Mahan:本当に悪い機会に、ボリューム全体。
タナトス

93

読む

  • ウェブサイトだけでなく本
  • 最新のプロジェクトだけでなく、自己改善のため
  • 最新のテクノロジーだけでなく、貿易の改善について
  • あなたが取り組んでいるだけでなく、コードを読んでください。

読むための食欲を開発するだけです。


2
加えて、frickin '、1。私はこの選択がどこにあるのだろうと思い始めていました。
タナトス

87

プログラミング。

真剣に、本があり、コーディングカタがあり、このようなサイトがありますが、開発者として改善する最善の方法は、実際のプロジェクトで作業することであると信じています問題。経験に代わるものはありません。


8
あなたが何かを良くしたいなら、それをすることより良いものはありません。
ジェフシヴァー

4
+
1-

2
他に答えはありません。自明なコードの山を書き、ビジネスマンと顧客とのいくつかの製品イテレーションを通してそれを使い続けるまで、あなたが何をしているのかを本当に知っていると言うことはできません。新しい要件を満たすためにコードを変更する時が来るまで、コードがどれほど優れているかを/本当に/知りません。
blucz

1
間違いなく、プログラミングを改善するために私がした最も良いことは、仕事を得ることでした。
マット・エレン

1
私の推測では、質問は「プログラミング以外」を暗示していたということです
...-UncleZeiv

81

あなたができる最も重要なことは、改善するための意識的な努力をすることだと思います。単一の特効薬はありません。新しい情報源、新しい経験、およびより多くの練習を探し続ける必要があります。

そして2番目に重要なことは、あなたが何をしているのか、なぜそれをしているのか、どうすればそれを改善できるのかを考えてください。以前のプロジェクトと同じこと。あなたがやったことを振り返り、今どのようにそれを違うやり方で行うことができるかを振り返ってください。何がもっとうまくできたのか、どこで改善できるのかを考えてください。

私は毎日仕事でこれの2つの素晴らしい例を見る。私には、学ぶことが大好きで、最高の開発者になりたい同僚がいます。彼はダウンタイムを利用して、ブログを読んだり、本を読んだり、プログラミング手法について話し合ったり、たくさんの質問をしたりしています。また、彼はこの1年間で非常に顕著に改善されました。別の同僚が仕事をしていて、かなりうまくやっています。しかし、それは彼がするすべてです。彼は自分の知っていることに固執し、改善するために多くの努力をせず、既存のプロジェクト以外のプロジェクトには取り組みません。彼。


7
彼の知識の一部が古くなったため、彼はおそらく少ないスキルを持っている...

72

多くの人がコードを書くことを提案しています。他の人のコードを読む方がはるかに有益だと言わざるを得ません。


11
実際、この2つの組み合わせが最適です。偉大な運動です他の人のコードを読んで、それを読みやすくするために、それをリファクタリング

もちろん良いコードを読んで...それを理解します。そして、それを修正するか、テストを作成します。

4
コードを読むのは面倒ですが、実際にやるまでは実際にあなたの肌に触れることはありません。

あなたはそれを学ぶためにそれをしなければなりません。それは...自転車に乗るようなものだ

70

非常に多様で意見のある人とペアでプログラム


私が持っているペアプログラミングの唯一の「経験」は、仲間の同僚を助けなければならない時です。私が直面している問題とそれを解決する方法について議論するために、私と一緒に別の人がいるとき、私はより幸せにプログラムします。
mhitza

67

プログラマーとして私を助けた基本的なこと:

  • タッチタイピングを学びました。
  • 恥ずかしさを克服し、質問をすることを学びました。

プログラマーの入力は不可欠です。誰もが2人の指で正確に入力する「プログラマー」の同僚を持ち、すべてをキーボードで確認する必要がありました。楽しくない。タイプをタッチすることを学ぶと、プログラマーとしての生産性が大幅に向上します。

そして、あなたが尋ねなければ、誰もあなたに話すつもりはありません。


15
タッチタイピングは最も重要なスキルです。プログラミングにおける最大の犯罪は、いくつかのキーストロークを節約しようとする人々によって犯されています。

5
私の意見では、これは他のすべての答えを打ち負かします。入力することで膨大な時間を節約できます。つまり、コードを入力して試してみる時間を増やすことができます。つまり、頭をうなずき、先に進み、忘れるのではなく、本の例を入力することができます。ハントアンドペックでプログラマになろうとすることは、足で象牙をくすぐることによってコンサートのピアニストになろうとするようなものです。
キラレッサ2009

2
私は人々が2文字のコマンドを回復するために15本の矢印を打ったのを見ました。とても悲しい。IDEのない子供たちのように...完全に無能です。

7
ここで反対するために、私はタイプに触れることを学んだことはありません。一度学習してみましたが、すぐに手首に痛みを感じ始め、手首を適切な位置に置くと手首が重くなり、手根管が圧迫されると思いました。ですから、少なくとも私のピックタイピングには人間工学的な利点があると思います。そして、私はそれを長い間やってきたので、キーボードを一目見ただけなので、実際の生産性の損失はありません。私の時間の大部分は、とにかく文字を入力するのに費やされていません。コードを読み、問題が発生したときに最善の解決方法を見つけるのに費やされています。
エロフ

2
手の位置は重要ではありません-重要なことは、見なくてもタイプできることです。私のラップトップでは、手首を休めません。

56

オープンソースプロジェクトへの貢献/参加は、私にとって最大のことでした。


53

好きな本、コード、オープンソースプロジェクトをすべて読むことができますが、ソフトウェア開発のエンドユーザーの側面を理解する必要があります。エコーチャンバーから出る必要があります。そこで、あなたの技術的なキャリアを支援する非技術的なポイントをいくつか取り上げます。

  1. キーボードから離れてエンドユーザーと対話し、目を通してソフトウェアの使用方法を確認します。通常、エンドユーザーは技術的ではないため、ソフトウェアは魔法のような作業であると見なされますが、ソフトウェアは論理的なステップのセットと見なされます。2つの世界は完全に異なっています。したがって、あなたにとって簡単で論理的に見えるものは、他の人にとっては不可解で威圧的だと思われるかもしれません。

  2. テスト、テスト、テスト。大企業で見たソフトウェアの多くはテストケースを使用しています。地獄、彼らはJUnit、xUnit、および他のすべての単体テスト言語を使用しています。しかし、私が見た問題は、ほとんどのプログラマーがプロダクションでソフトウェアがどのように見えるかを決して見ないということです。ユーザー(またはシステム(バッチジョブの場合))がアプリケーション、ライブラリ、またはインターフェイスとどのようにやり取りして、ユーザーがどのような忌まわしい情報をスローするかを調べます。これにより、適切なテストケースを生成し、プログラムに常に正しいデータセットが供給されると仮定するのをやめることができます。


本当です。あなたは(今まで)最終バージョンをテストすることができます。非技術者であると知っている多くの人々に試してもらい、彼らのコメントを聞いてください(「いいね!」と言わないものを選んでください)これは明らかに少しでも助けにはなりません。)

48

学習スキーム。


うん、それは私にとっても大きなものでした。タッチタイピングとペアプログラミングも重要でした。

46

コードとそれをたくさん書きます。


私たちは皆、くだらないコードを書き始めます。あなたが十分に書いて、それで働くならば、あなたは良くなります。コードレビューは役立ちますが、最良の方法は独自のコードをレビューすることです。

コードとその多くを読む。
ステファン

3
大量のコードの読み取りと書き込み...オープンソースは私たちにとって非常に恩恵です;)
オーデッド

45

正規表現を学ぶ。


私がperlを学び始めたちょうど4ヶ月前にこれをやった!一般的な空でvimとunixを使用する私の能力が急上昇しました!すごい。
sixtyfootersdude

正規表現は便利なだけでなく、別の方法で考えることもできます。
ティコンジェルビス

+1。完全に同意します。vi、sed、またはgrepで非常に基本的なことをしている人を非常に頻繁に驚かせます。

39

14
TopCoderには少し問題があると思います。OK、アルゴリズムについて考えるのは上手くなりますが、スタイルが悪い(1つのクラスのすべてのコード)で、時間的なプレッシャーのもとで作業することを余儀なくされるので、おそらくコメントもテストもしません。おそらく、プロジェクトオイラーがより良い選択でしょう。

3
あなたは悪いスタイルで働くことを余儀なくされていません。好きなだけクラスを作成できます。また、単一のエッジケースに失敗したソリューションはゼロポイントを取得するため、一貫して合格するかどうかをテストすることをお勧めします。

2
@hstoerr-競合他社がコードを読みにくくすると報われるという事実は言うまでもありません(彼らのソリューションは挑戦するのが難しくなります)
シェーン・フルマー

7
(これが不快に思えるかもしれませんが)Topcoder(または他の同様のコンテスト)を好まない人は、それを行うとひどいプログラマーになる理由を発明しようとすることがわかります。気に入らなければ大丈夫です。しかし、偽の理由を補うことは私見では役に立たない。TCの重大な競技者は意図的にコードを難読化しません(実際にキャッチされた場合、失格の根拠になります)。競合しない多くの人が常に悪いコードを書いているのを見ます。アルゴリズムコンテストは、優れたコーディング習慣を教えることを目的とせず(他の場所から学習する)、むしろより深い何かを教える/開発することを目的としています。
MAK

2
TopCoderは、自分がどれだけ良くなるかを自分自身に示す方法です。

38

外に出て、独自のプロジェクト、マイルストーン、リソース、依存関係、要件、テスト計画を作成します。特定のパラメータ内で動作するようにプログラミングスキルを向上させるだけでなく、最も改善する必要がある箇所を正確に強調するのにも役立ちます。ブログであれ、より正式なプロジェクトの更新であれ、進捗状況を定期的に更新して、今まで行った場所や行きたい場所を正確に確認できるようにします。


36

最後の仕事をやめる。


2
私も!(さらにいくつかの文字が必要...)

6
理由を教えていただければ、これも答えになるかもしれません。;-)

2
社内フレームワーク(EJB2に基づく)で作成されたプロジェクトをサポートすることは、私の楽しみではありませんでした。新しいものはなく、ただ古いがらくた。そして、新しい仕事の見通しは良くありません。:(
mihn

そこに行って、それをやった。
オールバイト

+1行き止まりではない仕事に上陸してください。
トメクSzpakowicz

29

あなたが何をしているのかを常に質問することが最大のことだと思います。あなたのコードが完璧だとは思わないで、常に改善に努めてください。

私は自分のコードが完璧だと思ったとき、2、3回経験したように見えますが、それから私は長い道のりがあることに気付きました。

最大のことは、自分のコード自体がマシンではなく他のプログラマーによって消費されていると見始めたときだったと思います。マシンで処理できるコードを書くのは簡単ですが、DRYで理解しやすいコードを書くのは困難です。

また、「この行の機能」を理解するだけでなく、「このクラスが他のすべてのクラスとどのように適合するか」を理解することを簡単にすることを意味します。誤用します。


29

彼らは、良いコードの70%がエラーのチェックと処理であると言っています。そのようにプログラミングを始めたとき、私のコードはずっと良くなりました。何がうまくいかないかを考えて、すぐにそれを処理することは大きな違いをもたらしました。それは感じているすべてのことをチェックするだけで、コードのアップを取得し、実行しているの邪魔になっているが、それは2〜4倍の開始から終了までの時間を短縮することのように。

これらの人々は「彼ら」とは誰であり、「彼ら」はどこに住んでいるのでしょうか?


28

何かを実装する前に、このことをどのように文書化するのかと考え始めたとき、私のコーディングスキルは大幅に向上しました。

ここでの「モノ」には、可能な限りの細分性が必要です。メソッドから製品全体まで。たとえば、メソッドレベルでは、実際に書き込む前に、APIに適合しない、または不明瞭なメソッドを追加することを防ぎます。そして、(簡単に)文書化できないメソッドを実装する必要がある場合、それはどこかに設計上の問題がある兆候です...

自動的に、「説明できないなら、書かない」という態度は、悪いコードを除外し、逆に、物事を正しく文書化する方法を知ったら、実装がより簡単になります。


28

学んだことを常に学び、実践します。

によって:

  1. 個人プロジェクト:プログラミングを始めて以来、私は個人プロジェクトをやっています。小さなゲーム、画像処理、ステガノグラフィ、ファイルタイプの仕様の実装、さまざまなプロトコルのゼロからの実装、またはさまざまなプログラムの長期にわたる実装。

  2. 本を読む: 私は暇なときにさまざまな本を読んでフォローすることにしました。読むのを待って座っているだけの専門家による書かれた本がたくさんあります。本から得ることができる深さは、たとえばさまざまなフォーラムの投稿を読むことによって比類のないものです。


10
書籍に言及する場合は+1。すべてが物事を間違った方法で行うことに費やされている場合、多くの経験はあまり価値がありません。
mbillard

27

これは通常、新しいテクノロジーを学習する私の年代順です。

  1. 定期的に良いブログ(Atwood、Martin Fowlerなど)を読んだり、テクノロジーニュースを最新の状態に保ち、興味深い新しいテクノロジーに関する情報をフォローしてください。これらの手順により、さらに探求するために興味深いものが見つかったかどうかを判断できます。

  2. 適切な本や他のリソースを読んで、あなたのレベルについて学んでください(例えば、初心者向けにデザインパターンを学びたい場合は、「Head First Design Patterns」をお勧めします)。また、本の特定の好みがあります。

  3. 私が学んだことを使用して、おもちゃプロジェクトを 1つまたは2つ展開します。プロジェクトの有用性について心配する必要はありません。私の意図は、私の学習を活用することです。(たとえば、OOPの計算プロジェクトは問題ありません)

  4. 仕事で使用できるかどうかを確認します。(たとえば、職場ではSubversionを使用しませんが、ローカルリポジトリとして使用し、単調すぎて時間がかかるタスクにはRubyを使用しました)

  5. これは、ほとんどの人が見逃していると思う最高の部分です。ナレッジ共有セッション。たとえば、仲間のチームメンバーに1つまたは2つのセッションを提供します。教えることは、テクノロジーを実際に学ぶ最良の方法の1つだと思います。視聴者がテクノロジーを理解するかどうかに関係なく、テクノロジーに対する理解のレベルが複数になることを保証します。:-)


24

数か月間、いくつかのオープンソースプロジェクトをハックします。大きいほど良い。あなたのことを知らない、地理的に多様な意見の高い人たちとやり取りしているとき、間違いからもっと早く学ぶしか仕方がありません。それはある種の恥ずかしい要因だと思います。さらに、1人または2人の本当に頭の良い人を特定すれば、純粋な知識ではないとしても、貴重な洞察を収集することができます。

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