優れたプログラマであると考えるスキル[終了]


10

私は過去15年間、CS以外の学位でプログラミングを行っています。私がプログラミングを始めた主な理由は、新しいことを学び、それを自分の仕事に適用するのが好きだったからです。そして、私はプログラミングエラーとその原因を他よりも早く見つけて修正することができました。しかし、私は自分がグルや専門家であることに気づくことはありません。おそらく、CS以外の専攻が原因かもしれません。そして、優れたプログラマーに会ったとき、彼らは問題を解決する上で、もちろん私よりもはるかに優れていることに気付きました。

中途採用で優れたスキルの1つは、要件とタスクを逆の順序で抽象的に考えることです。このようにして、私は細部なしで私がするために本当に必要なことを見ることができ、すでに存在するソリューションの部分をすばやく見つけることができます。

ですから、良いプログラマーになるための思考スキルは他にもあるのでしょうか。私は以下のQ&Aをフォローし、実際にそこで推奨されているいくつかの本を読みました。しかし、プログラミング作業に直接適用できる優れたメソッドを実際にピックアップすることはできませんでした。

プログラマーがプログラミング/思考スキルの開発を支援するために読むべき非プログラミング本はどれですか?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

回答:


10

既存の質問へのポインタをありがとう。これらに対する答えは、私があなたが望んでいるものとはかなり異なります。私自身の経験からいくつかの提案をします。私の学位は物理学です。形式、正しさ/検証、アルゴリズム分析、動的プログラミング、データベースシステム、そして最初の大部分はデータ構造とアルゴリズムの選択についてのギャップがありましたか。最も明白なギャップ(例:データ構造とアルゴリズム)は私が早期に閉じましたが、理解を深め、別のプレゼンテーションを見て、記憶をリフレッシュするために、その領域の本をまだ読みました。(私は40歳くらいなので、本は私のために働く:)

ここにリーディングリストがあります(彼らが思いついた順序以外に特定の順序はありません)。

  1. 真珠のプログラミング(Jon Bentley)
  2. その他のプログラミングパール(Jon Bentley)
  3. アートオブコンピュータープログラミング(ドナルドクヌース)
  4. C ++のアルゴリズム(Robert Sedgewick)
  5. アルゴリズム設計マニュアル(Steven Skiena)
  6. プログラミングの実践(カーニハンとパイク)
  7. プログラミングの要素(Stepanov)
  8. 解決方法(ポリア)
  9. コンピュータプログラムの構造と解釈(Abelson and Sussman)

90年代半ばにそれを読んだとき、私はまた、Writing Solid Codeから多くを得ました。しかし、それ自体は思考スキルとは強く関連していないため、リストには含まれていません(誤って誤って使用する可能性を最小限に抑えるためのAPIの設計を扱っています。

10代のとき、ゲーデル、エッシャー、バッハ(ホフスタッター)からも多くのことを学んだが、すでに指摘した質問への回答にはすでに言及されている。これは、コンピュータサイエンスのスキルを直接習得するためではなく、楽しみのために読むための本です。

私はかなりの数の才能のあるプログラマーと仕事をしていますが、彼らはほぼ例外なくプログラミング真珠のファンです。確かに私がインタビューした候補者の多くがその本の第4章を読んでくれればいいのに。


4

最初; 与えられた規律のために、常に何らかの方法でそれをはるかに上手にする誰かがいます。その部分については心配しないでください。

その後; CSの学位は素晴らしいですし、それで得られる理論的な知識は確かに役に立ちますが、誰かが優れたプログラマであることを示すものではありません。最高のプログラマーの何人かは独学で、私を信じています、世界は湿った紙袋から自分の道をプログラムすることができなかったCSの卒業生でいっぱいです。したがって、その部分についても心配しないでください。

優れたプログラマーになるために必要なことについては、2つのことが重要だと思います。1つは、厳密に正式な方法で問題に取り組み、一定の抽象化レベルで考える必要があることです。ポインタと再帰を理解していれば、おそらくこの点で優れているでしょう。もう1つは献身と粘り強さです。他の技術と同じように、プログラミングは習得するために何万時間もの熱心な集中練習を必要としますが、それは一晩では起こりません。いずれにせよ、習得するには少なくとも10年はかかります。あなたが情熱的で、時間をかけ、集中し、これまでにない挑戦を見つけるのは簡単です。そうでない場合でも、それは可能だと思いますが、快適な乗り心地にはなりません。


2

プログラミング言語の学習を開始するときはいつでも覚えてください最初に概念を学び、すぐにテストするということは、この演習を行うと、概念とその使用法を忘れないように実際にそれを行うことを意味します。

次に、よく知られている「練習は完璧になる」であり、これはプログラミングにも当てはまります。コードをいじって、コードを実行し、既存のコードを読んで修正すればするほど、上手くはならないがgr8プログラマーになるでしょう。


0

私が重要だと思う2つの非プログラミングの本があります。

最初はレイモンド・スマリャンによる「レディー・オア・ザ・タイガー」です。これは、一種のオートマトン理論のツアーをこっそりと含んだ素晴らしい論理パズルのセットです。気の利いたもの。

2つ目は、ダグラスホフスタッターによる「ゴーデル、エッシャー、バッハ:永遠のゴールデンブレイド」で、再帰と言語理論について考えさせます。

初心者のための良い習慣が必要な場合は、フーバーの「見習いパターン」とカーターの「新しいプログラマサバイバルマニュアル」を読んでください。これらの本はどちらも、スキルを伸ばす方法とキャリアを伸ばす方法について述べています。彼らは異なるアプローチをとりますが、一緒にうまく機能します。


0

他のプログラマーのスキルを評価する方法に興味があります。

特定の適用可能な知識は、一般的なスキルよりもはるかに印象的な結果を生み出すと思います。すでに多くのコンテキストがあり、以前に同様の問題を見たことがある場合は、問題の原因を非常に迅速に見つけることができる場合があります。適用可能な一連のツールの使用方法をすでに知っている場合は、非常に迅速にソリューションを構築できる可能性があります。まだその知識を持っていないが、必要なスキルがある場合は、必要な知識を習得するのにさらに時間がかかります。その場合、より長い距離をカバーするのに時間がかかりますが、必ずしも遅くなるわけではありません。

もちろん、知識を積み上げ、後で役立つツールの使い方を学ぶことができれば、これは有利になります。多種多様なトピックについて少し学ぶと、予想以上に重複してしまい、必要な情報をどこで探すかを知るだけで大​​幅に時間を節約できるため、ここで役立ちます。しかし、多分それは私だけです。


0

あなたは新しいことを学びたいと思いますし、エラーを素早く修正することができます。それは、熱心さと能力という、教祖になるための2つの重要な要素があるということです。しかし、あなたは自分が専門家であるとは決して思っていないと思います。おそらく、さらに2つのことが必要です。集中と時間です。たとえば、Linus Torvaldsが1991年にLinuxを最初にリリースしたとき、誰も彼を第一人者とは見なしていませんでした。彼はまだLinuxに日々取り組んでおり、最近のLinuxカーネルGitリポジトリからのマージログを見ることができます。彼の焦点は、彼をLinux分野で最も有名な第一人者にしています。時間は抽象的な概念です。つまり、常に最新の状態を保ち、継続的な練習を通じて経験を積み、知識を他の人々と共有し、振り返って改善することを意味します。

私もあなたと同じ状況です。私は15年間、CS以外の学位(EE学位)でプログラミングをしており、自分の分野のグルとの大きなギャップにいつも戸惑っています。しかし、私には第一人者になる夢があり、オープンソースプロジェクトに参加し始めました。思考力は実践と経験から生まれます。いくつかの本は役に立つかもしれませんが、それらの重要性は主に教育です。あなた自身に属する思考スキルはあなた自身の経験からのものです。これから始めましょう!

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