より良いプログラマーになるために、物理学者として自分自身を教える[非公開]


17

私はいつも物理学が好きで、コーディングがいつも好きだったので、大学で数値物理学(詳細は関係ありません、クラスターのほとんどは並列プログラミング)を行う博士号取得者のオファーを受けたとき、それは無かったです-私にとっては非常に簡単です。

しかし、ほとんどの物理学者として、私は独学しています。オブジェクト指向の方法でコーディングする方法についての幅広い背景知識や、kDツリーでの検索を最適化する特定のアルゴリズムの名前はありません。

これまでの私の仕事はすべて物理学と科学的結果に関心があったため、間違いなくいくつかの悪い習慣があります。それは、自分のコーディングがチームワークではなく自分のものだからです。Cは非常に単純で、「あなたが書くものはあなたが手に入れるもの」なので、私はほとんどCを使用しました-派手な抽象化の必要はありません。ただし、抽象化に伴うパワーについて詳しく知りたいため、最近C ++に切り替えました。これはかなりCに似ています(少なくとも構文的には)。

コンピュータサイエンスの卒業生のように、優れた抽象的な方法でコードを作成する方法を教えてください。

私は自分のコードが効率的であることは知っていますが、エレガントで読みやすいものにしたいのです。抽象プログラミングに関する1000ページの本をいくつか読む時間がないことに注意してください。私は実際の物理学関連の研究に時間を費やす必要があります(上司がプログラムを洗練する方法について考えることに時間を費やしていることを知っていたら、スーパーバイザーは私を笑います)。プログラマーの観点から、自分の仕事も良いかどうかをどのように評価しますか?


12
質問:コードが効率的であることをどのように知っていますか?
マツマン

私は多くの人が最初のオブジェクト指向言語としてC ++にノーと言っているのを見ました。私はJavaを学んでおり、Mark Dexterのビデオチュートリアルをeclipsetutorial.sourceforge.net/totalbeginner.htmlで見つけました。それらはかなり優れており、TDDの方法で教えてくれます。また、Javaをオブジェクト指向でカバーするのに非常に優れているHead First Javaもチェックしてください。
-Garv

4
@DeveloperDon、計算は電子計算機が登場する前から物理学の中心でした。計算は手動で、または機械的な計算機で行われました。第二次世界大戦以来、物理学者はソフトウェアに深く関わってきました。あなたが連鎖反応で中性子の生産をシミュレートし、彗星のリターンを計算、またはヒッグス粒子の兆候を探してギガバイトのデータを分析している場合は、しなければならない多くの数のクランチングのを。1974年に戻って、私の最初の年の物理学研究室の前半は、FORTRANを教えることに専念していました。
チャールズE.グラント

1
@DeveloperDonたとえば、CERNの物理学者がデータを取得すると、数百万の粒子衝突からデータが取得されます。この量の情報を処理するにはコンピューターが必要です。また、原子の微視的な相互作用から物質の巨視的な特性を理解しようとする固体物理学のような領域も考慮してください。そのようなシステムでは、単一の電子が何十億もの核と電子からの反発/引力を感じます-そのようなシステムを正確に記述するには、高速なコンピューターと効率的なアルゴリズム(および基本方程式のいくつかの適切な近似)が必要です。
-user787267

1
時間をもっと使えるように、言語をC / C ++からPythonに変更する必要があるかもしれません。Pythonは科学者によってよく使用されます。PythonSciPy を使用した科学計算用のNumPyパッケージなどのモジュールがあります。PythonでC / C ++の速度が必要な場合はCythonを使用します。C/ C ++のタイプと構造を使用できるため、C / C ++と同様の速度が得られます。また、Cythonを使用して既存のC / C ++ライブラリと簡単に統合できます。
チャレックトムザック

回答:


20

抽象プログラミングに関する1000ページの本をいくつか読む時間がないことに注意してください。

だから、あなたはあなたに熟練したプログラマーになる5つのステップのチェックリストをあなたに与えるように誰かに頼んでいますか?それは起こらない

他の分野と同様に、プログラミングを上手にしたい場合は、練習と勉強に時間と労力を費やす必要があります。たくさんのコードを書き、他の人のコードを注意深く読むことで、明確でエレガントなコードを書くことを学びます。これらの1000ページの本のいくつかは、他の人が学んだハードレッスンを要約することで実際に時間を節約します。物理学の博士号を取得することの痛みのない副作用として、熟練したプログラマになることができると考えるのは妄想です。物理学の博士号から抜け出すことができないということではありません。気違いのプログラミングスキルがあれば、時間と手間がかかります。

Code Completeは、明確で保守可能なコードを作成および構成する方法に関するアドバイスを含む、ソフトウェア開発の仕組みの優れた入門書です。はい、それは巨大な本ですが、それは確かに、ディラックの「量子力学の原理」またはMTWの「重力」ほど言うほど密ではありません。コード完了は、より優れたソフトウェアを作成するための5つのステップのチェックリストに近づいています。

Matlab、VIM、C、MPI、Valgrindは優れたツールです。バージョン管理システムの使用については言及していません。何らかの理由でバージョン管理システムをまだ使用していない場合は、すぐに使用を開始する必要あります。バージョン管理は、論文を書くための天の恵みでもあります。他に知っておくべき基本的なツールは、デバッガー、実行プロファイラー、ロギングフレームワーク、および単体テストフレームワークです。これらのそれぞれについて1000ページの本を読む必要はありません。オンラインチュートリアルを実行して基本を習得し、それらの操作を開始します。ニーズが高度になるにつれて、ドキュメントをより深く掘り下げてください。

(ソフトウェア構築の基礎とは対照的に)コンピューターサイエンスの基礎を学ぶことについて助言することは、より困難です。新しいアルゴリズムを開発するのか、既存のアルゴリズムを適用するのかに関係なく、どの問題に取り組んでいるかを指定しません。研究問題によっては、基本的なデータ構造と標準アルゴリズムの調査が役立つ場合があります。他の問題は、数値解析の堅実な背景からより多くの恩恵を受けるでしょう。アルゴリズム分析の基礎を学びたいのであれば、いくつかの良いテキストがあります。アルゴリズム設計マニュアルアルゴリズムの概要が思い浮かびます。オンラインで利用できる優れた入門コースもいくつかあります:アルゴリズムの設計と分析、およびアルゴリズム


リンクをありがとう、私はそれを調べます。私は週末にはコーディングの達人にならないことを知っていますが、時間の経過とともに徐々に改善することを期待しています-特に物理学以外のインスピレーションを求める場合(私が知っている多くの物理学者は優れたコーディング慣行をあまり気にかけられないので)。
user787267

1
私は読みやすい数などのツールでのpythonを追加する
ザビエルCombelle

2
コード補完を提案するための+1。問題の問題を解決するためにopが読むことができるのは本当に最高のことです。
JW01

9

私の経歴はあなたと少し似ています。私は物理学の卒業生で、プログラミングを独学で教えていました。卒業後、いくつかのITの仕事を引き受け、最終的にソフトウェアエンジニアになりました。OpenGDA(さまざまなシンクロトロンサイトで実験を実行するために使用されるソフトウェア)に取り組んでいる少しの時間を含みます。

私がここに来ている間にあなたが持っている質問について私が学んだ主なことは、他の人からこれらのスキルを取得することは自分でそれらを取得しようとするよりもはるかに簡単だということです。経験豊富なメンターは、コードの脆弱な箇所や、一般的なパターンやプラクティスが役立つ箇所を簡単に特定できます。私はCとObjective-Cの書き方を自分で学びましたが、同じコードで他の人と作業をするまで、私が知らなかったことを正確に知りませんでした。ここでアドバイスを求めているということは、あなたが私がすでにやったよりもうまくやっているということです:-)。

さて、どこに慣れたプロのソフトウェアエンジニアがいますか?最近、MentorNetに参加しました。このシステムは、経験豊富なプログラマーとプロテジェのパートナーです。

しかし、そのような正式なシステムに行く必要はありません。地元のプログラマーの交流会(または金曜日に大学のソフトウェアエンジニアリング部門が仕事をする場所)を見つけることは、始めるのに最適な場所です。


MentorNetは非常に興味深いように見えます。物理学者からソフトウェアエンジニアへの移行は困難でしたか?
-user787267

@ user787267私はプログラミングに興味があったので(そしてすでに趣味のプログラマーでした)、私はあなたがそうであるように聞こえるように移行をやる気になりました。把握するのに時間がかかったのはウェットウェアでした。より大きなプロジェクトチームでの自分の立場を理解し、以前に行っていた "lone wolf"コーディングからの大きな変化を熟知していました。

5

ソフトウェアへの王道はありません

古代、ユークリッドは学生のプトレマイオス王からあなたのような質問を受けました。彼の回答:「幾何学への王道はありません。」

あなたは、プロの開発者のようにコードを書くのにどれだけの時間を費やすかを知っていれば、スーパーバイザーは笑うと言います。他の人は、ソース管理からアルゴリズムの設計と分析に至るまでを学ぶための物事のランドリーリストであなたの質問に答えました。

彼らはあなたの目標に達していない:

「実際の物理学に時間を費やす必要がある」

コンサートピアニストまたはワンマンバンド?

世界の動きは速すぎて、人々は手を出せません。コンサートのピアニストになりたい場合は、時間を学習する楽器を分けて一人のバンドにしないでください。

中規模から大規模プロジェクトの物理学における博士号の役割の私のコンセプトは、システム定義のアイデアリーダー、理論の専門家、ユースケース作成中の主題の専門家、およびソフトウェア成果物によって生成された結果のエンドユーザー/ジャッジとしてです。可能な限り最高のソフトウェアエンジニアと緊密に連携します。

プログラマーの観点から、自分の仕事も良いかどうかをどのように評価しますか?

バーを高く設定する場合は、ここから始めます。

ソフトウェアアーキテクチャの実践、レンバス、ポールクレメンツ、リックカズマン

「品質属性について」の章を探してください。コードを超えて、使いやすさ、変更可能、パフォーマンス、セキュリティ、可用性、信頼性、テスト容易性、保守性、移植性を考慮します(持ち運ぶことはできませんが、あるプラットフォームから別のプラットフォームに設計を移植できます)。すべてに特定の測定可能な目標が必要です。同様の参照が含まれます:

http://msdn.microsoft.com/en-us/library/ee658094.aspx

http://www.sei.cmu.edu/reports/95tr021.pdf

目標とCおよびC ++

FORTRANと同様に、これらはハードで古い言語です。C / C ++の肯定的な指標は次のとおりです。

  • ハードウェア、組み込みシステムを備えたアプリケーション。
  • 出発点として必要な既存のプロジェクト。

Web開発、データの視覚化、ビッグデータを行う人はたくさんいます。多くの人が他の言語を見つけたり作りたいと思っています。たとえば、物理学者のTim Berners-Lee HTMLはHTMLで成功を収めました(しかし、物理学についてはほとんど知られていません)。目標とプログラミング言語を比較してください。

Matlabの使用を検討する

Matlabには素晴らしいインストールベースがあり、数学と科学に特化しています。データの視覚化のためのツールがあります。科学者や数学者は、ソリューションドメインではなく問題ドメインで問題を表現できます。MatlabはParallel Computing ToolboxおよびDistributed Computing Server製品を製造しています。

Matlabの成功は、物理学、数学、電子機器、計装、オペレーティングシステム、プログラミング言語、ソフトウェア開発、ソフトウェアテスト、ソフトウェアアーキテクチャおよび設計の専門家である学際的なチームを使用することによるものと期待しています。類推は一筋縄ではないかもしれませんが、3Dプリンターが利用できるのに、ハンマー、ノミ、やすりで何かを作るために始めて、なぜ一人でそこにいるのでしょうか?ニュートンが尋ねるかもしれないが、なぜ誰かの肩の上に立たないのか?


4

「経験」から言えば、「プロ」スタイルについて何も知らなくても、物理学で長い道のりを進むことができます。しかし、私は多くの人々がどこで何をしているのかを追跡できなくなったため、またはその複雑さでコードを数年間成長させた後、無限の時間を無駄にしているのを見てきました最初に考えているよりもずっと長く貼り付けます)。

このコースなどで、アルゴリズムとデータ構造に有利なスタートを切ることをお勧めします。その後、より生産的なレベルでパフォーマンスについて考え、ウィキペディアの記事などでフォローアップできるようになるはずです。

その後、C ++ cppreference.comなど、言語のコアで利用可能なものに慣れます。また、Scott MeyersによるEffective C ++シリーズとKoenig&MoeによるAccelerated C ++を読むことを強くお勧めします。少なくともC ++の場合、これは言語側の強固な基盤を提供します。

並行して、ツールをよく理解するようにしてください。Linuxでコードを開発することはまずないので、コンパイラ(少なくともgccとclang)からより多くの診断(警告)を取得する方法を学んでください。cppcheckclangのscan-buildなどの静的分析ツールについても学びます。これらのツールを開発プロセスの不可欠な部分にする方法を学びましょう。例えば、ビルド設定に統合することで可能です(はい、少なくともGNU makeを使用するか、GNU autotools / cmake / ...のようなものを使用する必要があります)。また、プロファイリングツールをツールセットに追加する必要があります。C ++の場合、非常に低いレベルでプロファイルできるvalgrindについてできることをすべて学ぶことを強くお勧めします(リソースリークの検出にも役立ちます)。

これはすべて、バグの発見や無駄な最適化を行う時間を無駄にするのではなく、最も関心のあること(研究)に集中するのに役立ちます。もちろん、これをアドバイザーに販売することはほとんど不可能ですが、彼ら(およびあなた)は感動しますが、信頼できる結果を得ることができる速度です。

CとC ++について言及しましたが、数値計算については、numpyとscipyで十分なPythonを推奨することはできません。C、C ++、およびFORTRANで実装された非常に最適化されたルーチンを活用しながら、非常に高レベルできれいなきれいな言語で(インタラクティブに作業することさえできます)書くことができます。また、独自のCまたはC ++コードとPythonのインターフェイスはほとんど簡単です。


リンクをありがとう!私は間違いなくそれを調べます(しかし、私はいくつかの本を読む時間がないと思います-ある時点で高校で加速C ++を読んでいますが)。私はUnix環境で作業しています(エディターとしてVimを使用しており、気に入っています)。makeとValgrindを広範囲に使用しています。また、gccと-Wallで-pedanticオプションをトリガーしました。たぶん、大学のスーパーコンピューターで(並列プログラミング用のMPIライブラリーを使用して)高性能コンピューティングを行うことに言及すべきでした。
-user787267

また、コードは非常に高速である必要があるため、Pythonは実際にはオプションではないことにも言及する必要があります。Matlabもよく使用しました。
-user787267

私は、自分のC ++で実装されたルーチンと対話するためのフロントエンドとしてPythonをよく使用します。Boostを使用すると、これは非常に簡単で、Pythonの完全な柔軟性が得られます(たとえば、プロット用のデータを処理する場合)。また、Pythonはプロトタイピングに適しています。何かが重要になるとわかったら、いつでもC ++に移行できます。MPIについて言及しているので、分散コンピューティング用の優れたインターフェイスを備えたIPythonで夜を過ごすことをお勧めします。
ベンジャミンバニエ

@ user787267 Pythonのパフォーマンスが必ずしも低下することは必ずしもありません。たとえば、youtube.com / watch?v = Iw9-GckD-gQをご覧ください。重要なのは、Pythonを使用して作業コードをより迅速に記述し、1)numpy / scipyを使用して2)Cythonまたはshedskinを使用し、3)C / C ++またはFORTRANモジュールにコアアルゴリズムのみを入れることで高速化できることです最後の5%の改善が本当に必要です。また、覚えているあなたがコーディングに費やす時間は、時間、いつか半分の時間で書かれた80%の-公演コードを持っている方が効率的かもしれので、コードはすでに実行されないです
トビアスKienzler

通常、Matlabでプロトタイプを作成して簡単なものをテストしますが、しばらくの間Pythonに変更したいと思っていました。それを見てみましょう。コードの大部分が既にC ++で記述されているため、途中で言語を変更したくありません。確かに、実際の時間プログラミングの時間も考慮する必要があります(そして、私はそう信じています)が、それがあなたのプログラミングスキルを(徐々に)向上させない言い訳になるべきではないと思います。
-user787267

4

プログラマーの観点から、自分の仕事も良いかどうかをどのように評価しますか?

  • それが正しいか?すべての場合に正しい結果が得られますか?

  • 他の人があなたのコードを読んで簡単に理解できますか?

  • スーパーバイザーが「今、Xも実行してください...」と言ったら、多くのコードを書き直す必要がありますか?

  • あなたがプログラムを書いたとき、それはあなたが何度も使用できるツールになりますか?

「はい」、「はい」、「いいえ」、「はい、1回限りの計算ではなくツールを作成しよう」と答えることができれば、すでにかなりうまくいっています。プログラマーとして私たちが行うことの多くは、上記の種類のことを支援することを目的としています。


3

プログラムは商用ソースコードとは完全に異なるため、日々のソースコード開発には多くの優れた手法とアプローチが適用されません。しかし、いくつかのヒントとコツを学ぶ良い方法があります。

優秀なソフトウェア開発者にコードをレビューさせ、一緒に最適化させます。それはあなたにより多くの経験を与え、あなたに良い習慣を教えます。また、他の人が書いたソースコードを確認します。sourceforgeまたはgithubでオープンソースプロジェクトを検索し、ソースコードを読んでください。

しかし何よりも、目標を達成するために実際に新しいことを学ぶ必要があるかどうかを考えてください。コードをきれいに見せるためだけに不要なことをしても、アプリケーションに価値は追加されません。


オープンソースプロジェクトを読んで参加することは、実際には非常に良い考えですが、暇なときにやらなければならないことです(しかし、私はプログラミングが好きなのであまり問題になりません)。より良いプログラマーになりたい理由の1つは、私が学界に留まるかどうかわからないことです。私のph.d. 業界で仕事を得るかもしれません-そして、ここでは熟練したプログラマーが高い需要があるはずです。別の理由は、エレガントで美しい何かを作成することの知的満足です-本当に難しい微分方程式を解くことのような
user787267

残念ながら、産業界では、学業開発では通常得られないスキルが必要です。学術研究中に書くものは通常、商用アプリケーションのソースコードの5%未満です。
アンジェイBobak

3

より良いプログラマーになることに関しては、特効薬はありません。独学の場合、鍵は自己認識です。ただし、コードを上手に学習することは、ほとんど読んで練習することです。

自分のコードを批判することは、改善するための最良の方法の1つです。常に自問してください:

  • これは簡単に変更できますか?
  • これは簡単にテストできますか?
  • これを簡素化できますか?3か月後にもう一度見たときに、これを簡単に理解できますか?

私の他の提案は、C / C ++に縛られないことです。これらは、ある理由で使用される優れた言語ですが、主題に関連しない多くのことを行う必要があります。Matlabを調べてください。大学がそれを利用できない場合、私は驚くでしょう。Pythonのようなスクリプト言語を考えてください。Haskellのような関数型言語の選択を強く検討してください。パラダイムは本質的に非常に数学的であり、グローブのような問題に適合する可能性があります。要するに、いくつかの他の言語/パラダイムを調べてください。彼らがあなたのベルトの永久的なツールにならなくても、彼らはあなたをより良いプログラマにします。

アルゴリズムの設計を検討することもできます。仕事に就いたのではないかと思われますが、あなたはすでにこれを十分に理解していますが、数値解析を行う際にはアルゴリズムが非常に重要です。実際、数値解析アルゴリズムに特化したリソースがあると思われます。

コードを書く際の主な目的を見失うことはありません。物事を成し遂げる必要があります。優れたプログラマーになることは、そのための1つの方法です。ジョブに適したツールを選択するのも別です。


2

まず、「エレガント」は相対的な用語です。抽象化はあなたにはエレガントに見えるかもしれませんが、別のC愛好家には、それは不必要に見えるかもしれません。とにかく、質問に答えるには、http://codereview.stackexchange.comにレビュー用のコードを投稿してみてください
要点から逸脱すると、私自身の経験に基づいたいくつかの未承諾のアドバイス。すべての作業をCだけで完了できる場合、なぜそれを抽象的な方法でコーディングしたいのですか?これにより、他のユーザーがコードを再利用できるようにしますか?C ++に切り替える確かな理由が本当にある場合は、抽象化とC ++およびOOの概念の学習に進んでください。それ以外の場合は、アイデアをドロップします。私の謙虚な意見では、オブジェクト指向の抽象化を与えるよりも、コードをより読みやすく、科学的な結果を再現できるようにすべきではありませんか?私自身は、OOPSとコードを「エレガント」に学習するというこの種の強迫観念がありました。ただし、C ++の習得には時間がかかります。ガベージコレクションはC ++では自動ではないため、メモリ管理を学習する必要があります。私は自分で研究室で働いており、C ++とOOの学習に多くの時間を費やしていたので、アドバイスをください。


1
しかし、CはC ++よりもさらに管理されていません。C ++には少なくともRAIIがあります。
ベンジャミンバニエ

私はコーディングが好きなので、より良いプログラマーになりたいです。私は最初は物理学者であり、プログラマーは2番目ですが、だからと言ってプログラミングスキルを向上させてはいけないというわけではありません。読み取り可能なコード。
-user787267

2

理論を勉強する時間がないというあなたの言及を考慮してください。

数か月後に古いコードを振り返り、「どのような馬鹿がそのコードを書いたのか」と思ったら、あなたは進歩しています。

どのように進歩しましたか?他の人によって書かれたより良いコードを見ることによって。人は、仕事に価値を追加するのを見ない限り、「優雅」または「良い」コードの価値を決して知りません。理論を読むのではなく、あなたの仕事の分野で他の人が書いたコードに目を向けておくことをお勧めします。stackoverflow(C ++タグ)で議論されている概念に目を光らせてください。このような検索を1日15分間行うだけで、役立つ概念にランダムにさらされる可能性があります。コードよりも優れたコードを表示できます。ウィキペディアでフォローアップして、それについてもっと調べてください。好奇心から生まれるこのような学習は、翌日目を覚ますときに忘れる理論よりも長く続き、あなたにとって有用です。

また、MATLABやPythonなどの言語を試すことも検討してください。


Stack Exchangeにはかなりの時間を費やしています。日常業務では貴重なリソースです。私はMatlabを頻繁に使用しましたが、非常に寛容なので、配列を事前に割り当てないなどの悪い習慣を開発することは非常に簡単です。
user787267

配列を事前に割り当てていないことは悪い癖である理由のpythonのための+1は@私は本当にキャッチしないuser787267
ザビエルCombelle

2

物理学者が自分でプログラマーになったとき、ソフトウェアの概念を理解するための適切な比phorを形成するのに物理学の背景が最も役立つことがわかりました。この視点は、プログラミングの学習をより楽しくし、あなたが努力しているように見えるソフトウェアの「優雅さ」の感覚を開発するのに役立ちました。

CUJのコラム「思考のパターン-名前、比meta 、より良いプログラミング、言語の政治」で、ソフトウェアにおける比metaと類推の重要かつ過小評価されている役割を説明しました。たとえば、クラス継承のオブジェクト指向の概念は、多くの場合、家族の親から子孫に形質を渡すことと比較されます。これは間違った例えです。クラス継承の正しい例えは、生物の生物学的分類です(たとえば、クラスRedRoseは花の一種であり、花は植物の一種です)。

または、階層型ステートマシンのソフトウェアコンセプトを例にとってみましょう。ここでの良い例えは、水素原子などの束縛量子系の概念です。思い出すと、原子の状態は3つの量子数| n、l、m>で番号付けされます。これは、「ネスト」(階層)されているからです。この比phorは、状態が状態内にネストすることを理解する方法を示します(角運動量(l)の状態がエネルギー状態(n)にネストするように)。また、状態のネストは常にシステムの対称性を反映していることがわかります。

物理学からのもう1つの興味深いアナロジーは、「計算のアクターモデル」です。これは、最近、マルチコアCPUと「クラウド」の分散コンピューティングのために再発見されました。QEDの光子やQCDのグルーオンなど、ステートフルアクター(アクティブオブジェクトとも呼ばれる)によって交換されるイベントを仮想ボソンと考えると、便利で楽しいことがわかりました。このメタファーは、通信の基本的な非同期性、実行から完了までのイベント処理(クォンタムリープ)、アクティブオブジェクトの厳密なカプセル化を説明します。

とにかく、システムメタファーの開発はXP(eXtreme Programming)で推奨されるプラクティスであり、物理学者としては、優れたメタファーを思い付くことができます。あなたのソフトウェアはあなたが適用する良いメタファーから概念的整合性を継承するので、あなたは「優雅さ」の感覚も得るでしょう。


物理学は潜在的にメタファーの豊富なソースですが、XPの目的は、現場の顧客や他のチームメンバーとのコミュニケーションを促進するメタファーを見つけることです。
ピートカーカム

2

私は、問題解決のアプローチに関して私が得た最大の利益は、関数型言語とパーサーを学習することによってすべて達成されたと言えます。両方の発見は偶然に行われました。より良いプログラマーになることを真剣に考えているなら、パーサーやパーサージェネレーターなどのコンパイラーの作成に関係するさまざまなテクニックを学ぶ必要があり、高次の計算を構成する方法を学ぶ必要がある関数。

パーサーとコンパイラーに関する優れたリソースはPL101:Create Your Own Programming Languageです。私はまだ関数型プログラミングの良い紹介を見つけていませんが、SICPについて本当に良いことを聞きます。


-5

コンピューターサイエンスの卒業生は、卒業時に適切にコーディングする方法を知りません。彼らが大学を去るとき、彼らはそれほど需要がありません。彼らが経験を得た場合のみ。

あなたの質問に対する答えは、デザインパターンを学ぶ必要があるということです。私はJava、.NETでプログラミングし、現在はPHP、Javascript、およびMySQLプログラマーとして働いています。ちなみに.NETには、ASP.NETなどの非常に大きな抽象化レベルがあります。これは、抽象化学習をスキップできることを意味します。Perl、PHPなどの言語の抽象化レベルは低いです。

Head First Design Patternsを読んでください、それは良い本です。それは非常に包括的な本です。それがあなたが必要とするすべてです。


私はこの答えがなぜダウンボットされたのか考えがありますが、ダウンボッターが理由を言ったら役に立つでしょうか?
ピエールアラード14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.