23

プログラミングをすればするほど、上手になるといつも言われています。良いと真実に聞こえます。しかし、より良いプログラマーになるための実証済みのルートがあるかどうか疑問に思っていました.

何かのようなもの:

  • 学ぶ
  • 学びます
  • Learn c > 「これでエンジンを燃やしても大丈夫です」
  • 学んだことをもとにいろいろ試してみてください。

答えは CS コースのロードマップに似ているかもしれませんが、成功したプログラマーの意見を聞きたいと思っています。

ありがとう

4

22 に答える 22

41

練習すれば完璧になるというのは真実ではありません。

完璧にするのは完璧な練習です。

同じ悪い習慣を何度も繰り返すだけでは、悪いコードをより速く作成できるようになるだけです。

ぜひコーディングを続けてください。しかし同時に、自分のすることすべてに批判的であること。物事をより良くする方法を探す黄疸の目を常に持っています。新しいアイデアを得るために広く読んでください。彼らがどのように物事を行うかについて他の人と話してください。良い点も悪い点も含めて、他の人のコードを見てください。

私が知っていることを学ぶための「確実な」方法はありません。これがあれば、誰でもマスターできます。

于 2009-10-09T21:39:40.290 に答える
32

すべての質問は修辞的であり、思考を刺激するためのものです。

技術的な部分:

  • デザイン パターン - ドメインに固有のものもあると思われますが、一般的にこれらはアプリケーションの一部を開始するための便利な方法です。MVCまたはMVPを知っていますか?
  • 基本的なアルゴリズムの出発点 - 分割統治、動的プログラミング、再帰、ヒープなどの特殊なデータ型の作成、欲張りなど。
  • 問題解決スキル - どれだけ簡単にバグの場所に飛び込んで見つけることができますか? 問題の解決策を複数考えられますか?
  • 抽象モデリング - 誰かが問題を説明しているときに、コードやクラスの観点から物事を頭の中でどれだけうまく描くことができますか?
  • ハイレベルとローレベル - 高いものと低いものを求めるタイミングをどの程度理解していますか? これらの用語は、何かの高レベルのビューや低レベルの言語のように、よく使われるため、私が放り投げたいものです。

プロセス部品:

  • アジャイル - スクラム、XP、およびソフトウェア プロジェクトを管理するためのその他の新しいアプローチを知っていますか? YAGNI、DRY、KISS などの原則はどうですか?それともSOLIDのような原則?壊れた窓のようなアイデア?
  • 開発者環境 - 使用している IDE についてどの程度知っていますか? ソース管理? 継続的インテグレーション?生産性に関して、マシンのボトルネックを知っていますか?
  • xDD - TDD、BDD、およびパラダイムに基づくその他の開発について知っていますか?
  • リファクタリング - 古いコードに戻って改善しますか? それとも、一度書いてからコードを放棄する傾向がありますか?

ソフトスキル:

  • Emotional Intelligence - プレゼンテーションや他の人との共同作業に役立ちます。
  • 情熱/モチベーション - 何があなたのやる気を引き出し、生産性を高めるか知っていますか? 何年も何をしたいのか知っていますか?
于 2009-10-09T22:07:45.080 に答える
13

私の主なアドバイスは次のとおりです。自分のコードを書き直すことを恐れないでください。1 か月前に書いたものを見ても、欠陥が見つかり、書き直したくなるでしょう。

コレクション、等価性、ハッシュコードなど、いくつかの基本事項を理解していることを確認してください。これらは、ほとんどすべての現代言語で役立ちます。

使用する言語に応じて、lint ツールとメトリック ツールを使用し、コード上で実行します。彼らのすべての提案が当てはまるわけではありませんが、どれが重要でどれが重要でないかを学ぶことは重要です。たとえば、Java の FindBugs、PMD など。

何よりも、自分の仕事を洗練し、洗練し続けてください。あなたの作品を放棄されたものとして扱わないでください!

于 2009-10-09T21:34:41.530 に答える
7
  1. 初めてのプログラミング言語、新しいプログラミング パラダイム、または
  2. 学べるメンターを見つける
  3. 学んだことを実際のプロジェクトに適用する
  4. 過ちと成功から学び、ステップ 1 に進む

秘訣は、最初に何を学ぶべきかを知ることです。

  • プログラミング言語 - これらのうち少なくとも 1 つを知らずにソフトウェアを作成することはできないため、ここから開始します。1 つの言語を習得したら、別の言語を学習してみてください。
  • プログラミング パラダイム - オブジェクト指向、動的/関数型プログラミングなど。新しい言語ごとに新しいパラダイムを習得してください。
  • デザイン コンセプト - SOLID、デザイン パターン、およびアーキテクチャ コンセプト。
  • 対人スキル - 自分の考えを伝える方法を学びます。
  • チームのリーダーシップ - 他の人を一掃する方法と、チームまたは技術のリーダーになる方法を学びます。

あとは空が限界。

于 2009-10-09T21:38:07.043 に答える
5

前の建物の各建物で繰り返し、この順序で大まかに改善を検討します。

  • プログラミングの概念。メモリ管理、ポインタ、スタック、変数スコープなどを理解します。
  • 言語。いくつかの現代言語の習得に取り組みます。
  • 設計コンセプト。デザインパターンについて学びます。それらを使用して練習します。
  • コミュニケーション。よく見落とされます。非技術者と効果的にコミュニケーションできる場合にのみ、価値の高いソフトウェア エンジニアになることができます。人々が表明しているニーズを聞いて理解し、それを一連の要件と技術設計に変換することを学びますが、コーディングする前に検証のために、理解したこと (および設計したこと) を彼らが理解できる言葉で彼らに説明します。これを習得するのは簡単ではありませんが、不可欠です。
  • アーキテクチャの概念。大規模で複雑なシステムの全体像を理解する方法を学びます。
于 2009-10-09T21:39:01.233 に答える
4

プログラミング言語を学ぶことは、多くの点で話し言葉を学ぶことに似ています。上手になる唯一の方法は、できるだけ頻繁に行うことです。他の作品では

練習、練習、読んで、さらに練習

于 2009-10-09T21:41:11.143 に答える
4

あらゆる種類のコーディング手法、ツール、プログラミングの知恵について時間をかけて学びましょう。これは、私の開発にとって非常に重要であることがわかりました。コーディングするだけで生産性を感じるのは簡単です。その次のウィジェットを打ち負かすために、もう少し知識/武器をベルトの下に持っていたらどうなるでしょうか。

知識/ノウハウは私たちの本当の通貨です。知れば知るほど、何かをどのように行うべきかについてより適切な決定を下し、より迅速に行うことができます。

たとえば、次のことを学びます。

•開発プラクティス、ソフトウェア設計、見積もり、方法論 ビジネス分析 データベース設計 (優れた書籍やオンライン リソースがたくさんあります)

•コードを読む - オープン ソース プロジェクトは、これに適した場所です。プログラミングのブログを読む

•オープン ソース プロジェクトに参加してみてください。

• あなたの町のプログラミング ユーザー グループや、あなたを指導できる人を探してください。

そして、はい、前述のように練習します。読んだり、実行したり、見たりするだけでなく、どのように改善されるかを見てください。:)

于 2009-10-09T21:47:40.153 に答える
3

確かに、厳密に言えば、プログラミングを練習すればするほど、この種の問題を解決するのが上手になります。しかし、それはあなたが本当に望んでいることですか?

プログラミングは、本質的に、技術的なものよりも人間の活動です。コンピューターのスキルを向上させるのは簡単ですが、対人スキルを向上させるのはそれほど難しくありません。

Hohmann の「ソフトウェア プロフェッショナルの旅」を読んでください。ホーマンが説明する概念の 1 つは、プログラミング スキルと非プログラミング スキルの両方を含む「認知ライブラリ」です。コグニティブ ライブラリを拡張すると、プログラミング スキルも向上します。

プログラミング以外の本もたくさん読んで、身の回りの世界を観察してください。有用な比喩を作成することは、成功するプログラマーにとって不可欠なスキルです。レストランはなぜ彼らのやり方をするのですか?毎日ではなく数日おきにごみを収集する場合、ごみ部門はどのようなトレードオフを行っていますか? スケーリングは、食料品店のビジネスにどのように影響しますか? より良いプログラマーになるためには、好奇心旺盛な人間になりましょう。

于 2009-10-09T22:07:41.400 に答える
3

練習、練習、練習。

プログラミングができるという基本的な困難を乗り越えたら、コードを改善する方法についてのアイデアを得るために役立つ本 (つまり、Code Complete、Effective Java またはそれに相当するものなど) を読むこともできます。

于 2009-10-09T21:33:51.153 に答える
3

何よりもまず、コードを記述します。できるだけ多く書いてください。難しい問題に取り組みます。本当に優れたプログラマーになりたいのであれば、自分がしていることの根性に入る必要があります。デバッガーで多くの時間を費やして、物事がどのように機能するかを調べます。何が起こっているのかを本当に理解している優れたプログラマーになりたい場合は、金属に取り掛かり、高度な非同期コードを記述し、プロセッサの仕組みと SSE がなぜそれほど優れているかを学ぶ必要があります。スレッドプリミティブを理解し、それらを記述できるようになり、プロセッサで実際に何が起こっているかを説明できるようになります。私はここに行くことができますが、あなたはアイデアを得る.

次に、あなたよりも多くのことを知っている人を見つけて学びましょう。この関係は、すでに多くのコードを書くことに深く没頭している場合にうまく機能します。

第 3 に、大規模で高品質なオープン ソース コード ベースにしばらく時間を費やします。Quake I と Quake II のコードから多くのことを学びました。私がより良いプログラマーになるのを助けてくれました。

難しい問題に挑戦する第4弾。あなたの限界を押し広げます。不可能だと思っていたものを構築します。現在、専用のコンパイラを作成しています。この数か月間、これに取り組んでいるだけで、多くのことを学びました。

于 2009-10-09T21:45:07.680 に答える
2

学習には2つの種類があります-1。非公式(社会でどのように機能するかを学んだように-仲間や家族との交流を通じて)2。公式(高校のトレーニングのように-計画された指導を通じて)

エントリーレベルのプログラミングの仕事が必要な場合は、学部のコンピュータサイエンス/エンジニアリングの学位を介した正式なトレーニングが最適です。ただし、ロックスターの開発者になりたい場合は、非公式のトレーニングを行うのが最適です。意図しないミスを犯し、上級開発者に呪いをかけ、更新しているアプリがそれを使用しているためにデザインパターンを学び、悪いために泣きそうになります。開発者は、ドキュメントとベストプラクティスが不足している巨大な厄介なプログラムを作成しました。今では、できるだけ早くそれにいくつかの更新を行う必要があります。これらの性質のもの。

あなたが知る必要があるすべてのリストをあなたに与えるのは誰にとっても難しいことです。それは地域ごとに異なり(たとえば、Web開発者とデスクトップ開発者)、会社ごとに異なります(たとえば、ソフトウェアを販売するMicrosoftと、主に車で使用するゼネラルモーターズ)。私の意見では、あなたの仕事をより良くし、昇進することが最善の策です。

私の主張を証明するために、ここの誰もが素晴らしい答えを持っていますが、それらはすべて異なります。ロックスターの開発者に、彼が何かをどのように、いつ、なぜ学んだかを尋ねます。彼らは知らないかもしれません-物事はただ起こるだけです。

于 2009-10-09T23:06:50.780 に答える
2
  • 個別にそして集合的に練習する

  • 心を開いて、常に新しいことを学び、慣れ親しんだものに限定しないでください。技術的な観点、UIデザイン、人のスキルだけでなく、...新機能を恐れないでください

  • ピアレビュー、あなたのコードについて人々に話し、人々に彼らのコードについてあなたに話させてください、誰もが問題を見るユニークな方法を持っています、そしてあなたは仲間から多くを学ぶでしょう

  • コーディングが大好きです。あなたがしていることを愛しているなら、たくさんの時間を入れるのは簡単に思えます。すべてのコーダーにはドライブが必要です!

于 2009-10-10T00:14:21.493 に答える
2

「先週のコード」を見るだけでなく、配信後にあなたの作品のユーザーと話してください-可能であればあなた自身になってください。

それは私のバッグではありませんが、私が知っている最高のコーダーのいくつかは、アプリケーションのサポートに時間を費やしてきました。経験は彼らの製品を改善したと私は確信しています。

于 2009-10-09T23:01:14.220 に答える
2

息をのむ夢を見るあなたが使用しているプログラミング言語(真剣に、それは役に立ちません)

于 2009-10-09T23:02:23.723 に答える
2

興味をそそるプログラム、問題を解決するプログラム、または多くのタスクを簡素化するプログラムを見つけてください。似たようなことを書いてみてください。あなたは非常に迅速にスピードを上げ、同時にそれを楽しむことができます.

于 2009-10-09T21:54:07.247 に答える
2

これらの良い答えへの小さな追加。私が他の人のコードに取り組んでいるときは、通常、何か新しいものを取り上げます。同等またはそれ以上のスキルを持つ他の人と一緒に仕事をする機会があれば、彼らのプログラミング スタイルに注目することで多くのことを学ぶことができます。

たとえば、C++ と Javascript では、中括弧なしで if() ステートメントを使用しなくなりました。その理由は、間違って置くのが簡単すぎるからです:

while (true) {
    if (a > b)
        print a
        print b
}

これは明らかなタイプミスですが、特に既存のコードを編集している場合は、非常に簡単に導入できます。私はこれを防御的プログラミングと呼んでいますが、このようなちょっとしたトリックは、あなたをより良くするのに役立ちます.

そのため、仲間やメンターを見つけて、彼らのコードに取り組んでください。

于 2009-10-10T07:24:14.223 に答える
2

1 つのことを非常によく学習してから、学習した内容に関連するプログラミング領域に拡大して、顧客に完全なソリューションを提供することができます。

同時に、自分のコンフォート ゾーンの外にあるものを探索することに時間の一部を費やしてください。

于 2009-10-09T22:04:34.487 に答える
2

OPが優れたプログラマーになる方法についての一般的なアドバイスを探していたのかどうかはわかりませんが、より具体的なものです。

このスレッドを復活させていることは知っていますが、すでにこの質問をした人がいるかどうかを確認しようとしていたため、このスレッドを見つけました。

私が念頭に置いていたのは、カーン アカデミーが使用するマップに似たプログラミング概念の「知識マップ」を思いつくことができるかということでした。

プログラマーとして、さまざまなアイデア間の依存関係と関係を視覚化して、自分の現在のスキル レベルを理解できるようにしたいと考えています。難しいテーマに取り組む前に知っておくべきこと。自分の進歩を視覚化することができます。

于 2012-03-25T02:34:10.577 に答える
2

何かを学んだら、もう少し難しいことを学んでみてください。最初はわかりにくいと思われる事柄 (ラムダ関数、スレッド化、配列操作など) をよく読んで練習してください。時間はかかりますが、十分に練習すれば、最初は戸惑うように見えたものも、親しみやすく簡単になります。

于 2009-10-09T22:06:04.050 に答える
2

私にとって、何か新しいことを学ぶには理由が必要です...つまり、頭にあるプロジェクトや解決しなければならない問題がない限り、希望はありません。その前提条件が満たされている場合、私は通常、「Hello, world」を機能させようとします。その後は空が限界です。最近の開発の多くは、新しい API の学習にすぎません。時折、ある種のパラダイム シフトが発生して気が遠くなることがありますが、それは人々が考えているほど一般的ではありません。

于 2009-10-09T21:33:31.373 に答える
1

ロードマップの存在に対する信念そのものが、完成への道を妨げています。

于 2009-10-09T21:52:11.113 に答える