非常にまれに、私たちの前提をひっくり返すソフトウェア学習体験を経験し、まったく新しい視点からソフトウェア開発を見ています。しばらくそこにいた私たちのほとんどにとって最も明白なものは、ハードコア OOP への移行でした。他にどのような地震を経験したことがありますか?また、あなたの経験を使用して、私たちの仮定に疑問を投げかけるにはどうすればよいと思いますか?
EDIT:あなたが学んだこと、そしてそれがあなたのプログラミングをどのように変えたかについての提案はありますか?
非常にまれに、私たちの前提をひっくり返すソフトウェア学習体験を経験し、まったく新しい視点からソフトウェア開発を見ています。しばらくそこにいた私たちのほとんどにとって最も明白なものは、ハードコア OOP への移行でした。他にどのような地震を経験したことがありますか?また、あなたの経験を使用して、私たちの仮定に疑問を投げかけるにはどうすればよいと思いますか?
EDIT:あなたが学んだこと、そしてそれがあなたのプログラミングをどのように変えたかについての提案はありますか?
最近ではありませんが、趣味でプログラミングを始めました。私はそれが得意になり、知る必要のあることはすべて独学で学びました。私はコンピューター サイエンスの 2 年間の学位を取得するために大学に行き、授業をこなしましたが、まったく新しい情報を学びませんでした。それはあまりにも簡単で、掲示板に投稿したり、他の人が苦労しているのを見て、少なくとも 10 年のベテランと同じくらい優れたプログラマーであると自己評価しました。
それで、最初のプログラミングの仕事に就きました。他の人が実際に使用するようなコードの最初の行を作成しようとすると、非常に大きな打撃を受けました。私はコードを書くのが苦手です。
他の人のコードを見て、DLL、バージョン管理、GAC へのアセンブリの配置、デザイン パターン、テスト駆動型開発、大学では誰もあえて言及しなかったこれらの他の外国の概念について話しているのを聞く機会があるだけです。プログラミングについてほとんど何も知らなかったことに気づきました。大学と独学は、私が本当の取引の準備をするのに何の役にも立ちませんでした。やりたいことを何でもできるようにコードをたたき出すことができることがわかりましたが、私は高度な思想家ではありませんでした。
実世界での 6 か月間の経験がそれを修正し、いくつかの悪い習慣を取り除くのに役立ち、コードが実際にどのように見えるべきかについて良い感触を与えてくれました。だから、ここで私は自分自身について気分が良くなりましたが、解決できない問題に遭遇しました: 別のオブジェクト内に 5 レベルの深さでネストされたオブジェクトがあり、その状態が変化したことを最も外側のオブジェクトに通知したいのです。明確な方法が思いつかなかったので、Java 設計パターンに関する本を貸してくれる同僚に相談しました。この本を読んで、自分がどれだけ欠けていたかに気づきました。今まで見たことのないデザイン パターンの世界があり、考えもしなかった問題に対するエレガントな解決策を提案してくれました。
そして、それが再び私を襲いました。私はずっと多くのことを見逃していました.私はまったく高レベルの思想家ではありません.GoFの本に記載されているのと同じ問題を解決するために私が書いたハックはそれを均等にしました.明らか:私はコードを書くのが苦手です。
さらに 6 か月後、私はデザイン パターンの達人になりました。私は抽象的な工場を生き、息を吹き込み、MVC が MVP よりもはるかに優れている理由について長々と怒鳴り、ベッドサイドの隣にあるマーティン ファウラーの黄金の偶像に祈りました。ですから、いずれにせよ、いくつかの追加言語を学習して、履歴書を充実させたいと考えていました。リストに Python、C#、Perl を追加しましたが、構文をわずかに変更するだけで同じことを何度も学習するのは本当に退屈でした。私は奇妙な言語を調べようと決心し、Haskell のスニペットをいくつか見つけました。言語が何であるかを知らなかったので、関数型プログラミングと呼ばれるプログラミング パラダイム全体について読んで発見しました。楽しみのために、私は関数型プログラミング言語を学びました (私は Haskell と Lisp ではなく OCaml を選びました)。それは私のプログラミングに対する考え方を完全に変えました。
その小さな実験を実行した後、再び私を襲った:私はコードを書くのが苦手だ.
この関数型プログラミングの世界は、私が知らないうちにどのように存在していたのでしょうか? なぜ誰もそれについてもっと早く教えてくれなかったのですか?考えてみれば、私は何十ものJavaクラス、文字通り数千行のコードを送り出し、抽象的なファクトリ、具体的なファクトリ、ビジターなどの階層を作成する能力に誇りを持っていました.OCamlに習熟したとき、アプリケーションの行数が 20:1 に減少しました。数十の Java 階層になる予定だったものが、いくつかの OCaml ユニオンに崩壊し、そのすべてが 1 つの画面に収まりました。それ以来、私は関数型プログラミングの列車に乗っています。
ここでの教訓は単純です。自分が最高のプログラマーだと思っているなら、それは最低です。「知っておくべきことはすべて知っている」という考え方は単純であり、真に優れたプログラマーになる能力を制限します。
派手な名前の多くは、少し整えられて形式化された昔ながらのアイデアに付けられた名前にすぎないことがわかります。
クロージャ、ラムダ関数..。
依存性注入と制御の反転。
型推論。Javaの面倒で官僚的な型指定の矛盾に非常に不満を感じた後、SMLを発見し、静的型付けがほとんど簡単にできることを確認したことは、本当に目を見張るものでした(そして、Javaにさらに不満を感じました...)。念のために言っておきますが、私はタイプ推論言語を使用していません(通常、言語を選択できないか、Pythonを選択します)が、何ができるかを確認することは、何が行われるかについての私の態度に大きく影響します...
3GL から 4GL ;)