web-dev-qa-db-ja.com

プログラミングエクスペリエンスを増やすにはどうすればよいですか

私はコンピュータサイエンスの3年生になり、Head First Java、Head First Cを読みました。現在、C++を読んでいます。C++は、経験のある人向けの優れた教育スタイルがあるため、私が最も好きな言語です。 QTでソフトウェアを作成する方法を学ぶか、objective-C(for iPhone)を学ぶか、Effective C++を読むことを計画しています。

プログラマーとしての経験を得るにはどうすればよいですか?オープンソースプロジェクトに参加するスキルはありますか、それともphp、mySQL、またはその他の言語を学ぶ必要がありますか。一部のクラスは非常に難しい(理論的なコンピュータサイエンス)場合もありますが、私はプログラミングとコンピュータサイエンス全般が大好きです。また、c ++の第一人者になる予定ですが、すぐには実現しません。

9
Anthony

ABC-常にコーディングする。とても簡単です。言語を知るための私のお気に入りの方法の1つは、言語自体の言語のサブセット用におもちゃのインタープリターを書くことです。それがあなたの仕事ではない場合は、レイトレーサーなど、それほど重要ではない大きさの何かを使用することもできます。でもそれほど大きくないので、1か月ほどで完成できません。重要なのは、標準ライブラリと言語が提供するデータ抽象化機能を見ることを強制する何かに取り組むことです。時にはプロジェクトは成功することもありますが、そうでない場合もありますが、最後には言語について十分理解しているので、言語の長所と短所を理解し、さらに学習を続けたいと思っています。言語が好きであることが判明した場合は、興味深い論文やブログの投稿を読むたびに、その論文やブログの投稿で提示されたアイデアの一部を実装するプロジェクトを開始しようとします。このように、私は常に実践し、新しいアイデアを学んでいるので、それは一種の好循環になっています。

過去に私にとって非常にうまく機能したいくつかのプロジェクト:一部の言語のサブセットのインタープリター、レイトレーサー、PEGパーサージェネレーター、HTTPヘッダーパーサー、シンプルエコークライアント/サーバー、キューからツイートを自動的に投稿するTwitterボット、Amazon製品お得な情報を探すためのスクレーパー。

11
davidk01

Teach Yourself Programming in 10 Years でうまく説明されているように、次の手順に従う必要があります。

  • プログラミングに興味を持って、楽しいので何かしてください。それがあなたの10年/ 10,000時間を喜んで入れられるように、それが十分に楽しいことを続けることを確認してください。

  • プログラム。最良の学習方法は、実行することによる学習です。より技術的に言えば、「特定のドメイン内の個人のパフォーマンスの最大レベルは、拡張された経験の関数として自動的に達成されるわけではありませんが、パフォーマンスレベルは、熟練した個人でも、意図的な改善の努力の結果として増加できます」 (p。366)そして、「最も効果的な学習には、特定の個人に適切な難易度、有益なフィードバック、およびエラーの繰り返しと訂正の機会を備えた明確に定義されたタスクが必要です。」 (p。20-21)「実践における認知:日常生活におけるマインド、数学、および文化」という本は、この視点の興味深い参考資料です。

  • 他のプログラマーと話してください。他のプログラムを読む。これは、どの本やトレーニングコースよりも重要です。

  • 必要に応じて、大学で4年間(または大学院で)入学してください。これにより、資格を必要とするいくつかの仕事にアクセスでき、その分野をより深く理解できますが、学校を楽しんでいない場合は、自分でも仕事でも同様の経験を(ある程度の熱意をもって)得ることができます。 。いずれにしても、本の学習だけでは十分ではありません。 「コンピューターサイエンス教育は、ブラシや顔料を研究することで誰かを専門家の画家にする以上に、誰も専門家のプログラマーになることはできません」と、新しいハッカーの辞書の著者であるエリックレイモンドは言います。私が今まで雇った最高のプログラマーの一人は高校の学位しか持っていませんでした。彼はたくさんの素晴らしいソフトウェアを生み出していて、彼自身のニュースグループを持っていて、彼自身のナイトクラブを買うのに十分なストックオプションを作っています。

  • 他のプログラマとプロジェクトに取り組みます。一部のプロジェクトで最高のプログラマーになる。他のいくつかの最悪である。あなたが最高のとき、あなたは自分の能力をテストしてプロジェクトをリードし、あなたのビジョンで他の人を刺激します。あなたが最悪のとき、あなたはマスターが何をするかを学び、あなたは彼らがやりたくないことを学びます(彼らが彼らのためにそれをやらせるからです)。

  • 他のプログラマの後にプロジェクトに取り組みます。他の誰かが書いたプログラムを理解する。元のプログラマがいないときに理解して修正するために必要なことを確認します。あなたのプログラムを設計して、あなたの後にそれを維持する人たちがそれを容易にする方法を考えてください。

  • 少なくとも半ダースのプログラミング言語を学びます。クラスの抽象化をサポートする1​​つの言語(JavaまたはC++)、関数の抽象化(LISPまたはMLなど)をサポートする言語、構文の抽象化(LISPなど)をサポートする言語、宣言仕様をサポートする言語を含める(PrologまたはC++テンプレートのように)、コルーチンをサポートするもの(IconまたはSchemeなど)、および並列処理をサポートするもの(Sisalなど)。

  • 「コンピュータサイエンス」には「コンピュータ」があることを忘れないでください。コンピュータが命令を実行し、メモリからワードをフェッチし(キャッシュミスありとなしで)、ディスクから連続するワードを読み取り、ディスク上の新しい場所にシーク​​するのにかかる時間を把握します。 (回答はこちら。)

  • 言語標準化の取り組みに参加してください。それは、ANSI C++委員会であるか、ローカルのコーディングスタイルに2つまたは4つのスペースインデントレベルがあるかどうかを決定しています。いずれにせよ、あなたは他の人々が言語で好きなものについて、彼らがどれほど深く感じているかについて、そしておそらく彼らがなぜそう感じているかについてさえ少し学ぶでしょう。

  • 言語の標準化の取り組みをできるだけ迅速に終わらせるための良識があります。

8
BЈовић

関数型プログラムを効果的に作成することにより、自分自身を訓練することをお勧めします。基本を理解できたら、もっと大きなプロジェクトに取り組みましょう。ソフトウェア開発のためのqtフレームワークを学び、実践を続けてください。プログラムを学ぶ最良の方法は、実際にコードを書くことです。

私は読書も重要な役割を果たしていると思います。オープンソースプロジェクトをホストしている開発者のチームを探すことができます(githubまたは他の同様のサイトで探してください)。貴重なチーム開発経験を提供できるからです。

3
Bugster

Sourceforgeのような場所は、最初は少し気が遠くなることがあります。やるべきことを見つけるための本当に良い方法は、プロジェクトの課題トラッカーを調べて、修正の音が好きなバグ/課題を見つけることです。

一部の小規模なgithubプロジェクトでは、これははるかにアクセスしやすくなります。盲目的にコードを歩くのではなく、コードを理解しようとする方向性と目的を効果的に持っています。

2
lwm

本のサンプルや大学での課題は、プログラミングのしくみを理解するための良い出発点であり、将来のプロジェクトの可能性を示しています。

実際のプロジェクトに取り組む

しかし、実際のプロジェクト経験がないと、学んだことを忘れがちです。

問題はあなたが何ができるかを示す機会です

さらに、要件がいかに複雑であるかを実際のプロジェクトで確認し、問題をノックするのが難しいと思います。これらの問題は、あなたが何ができるかを示す機会です。改善すべき弱点を見ることができます。

1
Kayser