ニュース

世界のプログラミングマスター、ボブおじさん:「35歳の危機」は幻想であり、私たち「老プログラマー」はまだここにいます

2024-10-03

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ボブは答えますプログラマーの「35 歳の危機」:

考えるプログラミングは若者だけのものだという考えは実は幻想、しかしそれは確かに非常に影響力のある幻想です。このような幻想が存在するのは、プログラマーの需要が過去 70 年間でロケットのように急増したためです。

実際、私たち「昔のプログラマ」はまだ存在しますが、その数はそれほど目立ったものではありません。

著者 | 王啓龍

制作者 |新しいプログラマー》編集部

あなたがこれまでの人生で 50 年以上コードを書き、71 歳になるまでプログラミングを続けていたとしたら、現在の ai プログラミングの爆発的な時代をどう見ますか?

ロバート・c・マーティンは世界的に有名なプログラミングの第一人者として知られています。この男は「」と呼ばれています。ボブおじさんこのおじさん(ボブおじさん)は、アジャイル開発とデザインパターンの先駆者であり、1970 年からソフトウェアの専門的な仕事に従事しており、有名な「solid 5 つの原則」があります。オブジェクト指向プログラミングの分野における設計原則は、彼の手仕事から来ています。ai に対するボブおじさんの態度は非常に曖昧です。実践的な観点から、彼は次のように指摘しました。現在の ai は、脳の半分しか持たないジュニア プログラマーにすぎず、実際に成長することはありません。「なぜなら、ai が実行できるタスクは非常に限られているからです。しかし、彼は 60 歳を超えていますが、依然として将来に大きな期待を抱いています。」将来、人間と同じように考えることができる機械を作る頃には、プログラミングのスキルは時代遅れになるでしょう。

世界的に有名なソフトウェア開発の第一人者であるアンクル ボブの傑作『クリーン コード』は、かつて「クリーン コード」とは何かを定義し、一連の効果的な運用方法を説明しました。

最近、ボブおじさんの最新著書『関数設計: 原理、パターン、実践』の中国語版が出版され、オブジェクト指向プログラミングのリーダーがなぜ「敵陣営」に「裏切った」のか疑問に思う人も多いでしょう。彼の常に率直な性格に対して、直接「反論」した。近年、関数型プログラミングはオブジェクト指向プログラミングに反対し、オブジェクト指向プログラミングは時代遅れであると主張する記事もあります。私はこの意見に同意できず、この本を書くことにしました。

関数型プログラミングは、単なる「関数を使用したプログラミング」ではありません。関数型プログラミングとは、代入文を使用しないプログラミングです。

代入ステートメントを使用しないプログラミングを試してみると、関数型プログラミングの他のすべての機能が適切に配置されます。関数を扱いたい場合は、値を割り当てないと決めた瞬間に、これらすべてのことは自然に行われます。つまり、それが関数型プログラミングのすべてなのです。

——「機能的デザイン」、ロバート・c・マーティン

上記の発言はすべて、csdn「new programmer」によるボブおじさんへのインタビューからのものです。私たちはこの「アジャイル開発の生きた化石」と綿密な交流を持ち、ソフトウェア業界の 17 人のリーダーの 1 人として彼が 23 年前 (2001 年) に「アジャイル宣言」を共同発行した経緯についての個人的な説明を聞きました。歴史的詳細また、50 年以上の開発経験を持つこの上級プログラマーから ai プログラミングに関する最新の見解を学び、ボブおじさんに対する多くの人々の過去の見解を一新しました。歴史的印象。次の記事はボブおじさんの 1970 年の思い出から始まり、world wide web さえまだ誕生していなかった「古代のプログラマーの時代」に読者を連れ戻します。

50年以上のコーディング歴

「新人プログラマー」:インタビューが始まる前に、簡単な自己紹介をお願いできますか?

ボブおじさん:わかりました、私の名前はボブ・マーティンです。私は長い間プログラマーです。50年以上私が初めてプログラミングを始めたとき、コンピューターは大きな部屋を埋めるのに十分な大きさで、数百万ドルにも達する高価なものでした。

私はさまざまなプログラミング言語を使ってきました。アセンブリ言語、cobol、fortran、pl/i、c、c++、pascal、java、c#待って。長年にわたり、私は金融システムから組み込みリアルタイム システムやプロセス制御システムに至るまで、さまざまなシステムの開発に携わってきました。したがって、私はこの業界で豊富な経験を持っていると言えます。

さらに、私は clean code (クリーンなコード)、「建築をきれいにする方法」(クリーンなアーキテクチャ)そして今日取り上げる本は「」という本です。機能的なデザイン》(機能的なデザイン)。

「新人プログラマー」本を書く以外に、余暇には何をしていますか?ところで、私はあなたの twitter をよく読んでいるのですが、あなたのツイートの約 50% は米国選挙とトランプに関するソーシャル ニュースで、残りの 50% は技術的な内容、プログラミング、コードに関するあなたの見解に関するものであることがわかりました。

ボブおじさん確かに。選挙のない年には、私のツイートの約 90% はソフトウェアに関するものです。ただし、今年は選挙の年であるため、他のトピックをカバーするコンテンツが増えています。本を書いたりプログラミングをしたりしていないときは、たくさんのことをしています。私は自転車に乗ってよく旅行するのが好きです。私はパイロットでもあり、自分の飛行機で飛び回るのがとても楽しいです。私には大家族がいます4人の子供と10人の孫。, 普段は可能な限り訪問しているので、時間もしっかりと調整されています。

「新人プログラマー」: プログラミングのキャリアの原点に戻って、1970 年にプログラマーとして働き始めた頃の話を聞かせてください。あなたは当時 18 歳で、最初に学んだ言語はアセンブリと cobol でした。最初に勉強を始めたときの経験について話してもらえますか?

ボブおじさん:そうですね、当時は大学のコースがあまりありませんでした。当時は学校には興味がありませんでした。当時、ベトナム戦争が激化し、キャンパス内では暴動や暴動が多発していました。そして、私はコンピューター プログラミングについて多くのことを学び、cobol と fortran、さらにはいくつかのコンピューター アセンブリ言語も学びました。だから大学に行く必要はないと思う

私のプログラミングのキャリアがどこから始まったかというと、私が 12 歳のときに母親が小さなプラスチックのコンピューターを買ってくれたときに始まりました。そのおもちゃには 3 つのフリップフロップと 6 つの and ゲートがあり、操作するには小さなレバーを回す必要があります。内部の輪ゴムとレバーが部品を動かし、0 から 7 まで数えるなどの簡単な計算を行うことができます。 7から7までカウントします。カウントは0に戻ります。さらに、2 つのビットを追加してサム ビットとキャリー ビットを生成するようにプログラムすることもできます。私はこれに多くの興味深いプログラムを書きました。プログラミング プロセスは、ラッチに挿入された小さなチューブを追加することです。これらのチューブはブロックです。ロッドがスロットに入らないようにすることで、トリガーの状態が変化します。

そこで私は数週間かけてそのおもちゃのコンピューターを動かす方法を学び、その過程を通じてプログラマーになりました。それ以来ずっとプログラマーです

それが私の出発点でした。その後、父はコンピューターやプログラミング言語に関する本をたくさん買って、私にできるだけ多くの情報を与えてくれました。そして 16 歳のとき、ハネウェル 200 用のプログラムを書くプログラミングの仕事に就きました。その仕事は2~3週間続きましたが、まだ、ただの男の子だよ, 夏休みにやったのですが、とても楽しかったです。

約 2 年後、18 歳のときに、ibm 360 用のアセンブリ言語と cobol を書くフルタイムの仕事に就きました。その後すぐに、私はアセンブリ言語で多くのマイクロコンピューターのプログラミングを始めました。これらのコンピューターが varian corporation によって製造されていた当時、多くの企業がマイクロコンピューターを開発していましたが、成功した企業はほとんどなく、この分野を支配していたのは digital equipment corporation (dec) でした。その後、1970 年代初頭に製造されたデバイスである pdp 8 および pdp 11 のプログラミングに非常に熟練しました。

「新人プログラマー」: 1970 年代は、world wide web がまだ発明されておらず、usenet が誕生したばかりの非常に興味深い時代でした。現れる。あなたは世界最初の usenet ユーザーの 1 人で、「ボブおじさん」というあだ名はもともと会社の同僚が付けたものだということも知りました。その後、このニックネームを誤って usenet の署名として使用し、最終的に名前がニックネームから本名に変更されました。話を共有してもらえますか?

ボブおじさん: 私は clear communication というスタートアップで働いており、それが私のキャリアの始まりでした。4番目の停留所、1987年から1989年の間のある時点。そこで、同僚がみんなにニックネームを付けました、私のものは「ボブおじさん」でした。彼はいつも私を「ボブおじさん、これはどうなの?」「ボブおじさん、それはどうなの?」と呼びながら歩き回っていたので、最初は少し迷惑でした。

私はその会社を辞めてコンサルタントになり、もう誰も私のことを「ボブおじさん」と呼ぶことはなくなりました。結局、タイトルをちょっと見逃していたので、電子メールの署名に追加するという間違いを犯してしまいました。

当時、私は usenet に非常に積極的で、comp.object や comp.lang.c++ などのニュースグループに記事を投稿することが多く、人々は私の署名に「uncle bob」があることに気づき始めました。あるとき、おそらく 1990 年頃、私は c++ のカンファレンスに出席していたとき、ホールの向こうから誰かが私を指さして、「ほら、あれはボブおじさんだ!」と言いました。ああ、しまった、間違いを犯した、本当に変更する必要があると思いました。 - でも、「uncle bob」は本当に良いブランドだと気づいたので、そのままにしました。

「新人プログラマー」: usenet は、最初に参加するソーシャル メディアと言えます。多くの伝説的な開発者と同じように、あなたはさまざまなコミュニティやフォーラムに参加するのが好きですが、あなたがハッシュ ノートに「私はロバート マーティンです。質問してください。」と投稿しているのを見たことがあります。当時、多くの開発者があなたに積極的に質問して参加するよう求めていました。会話。現在、そのコミュニケーションは主に twitter 上で行われているようです。

ボブおじさん:右、ツイッター今では私のメインのソーシャルメディアです。私も facebook を使用していますが、主に家族や友人と連絡を取るために使用しています。

「新人プログラマー」:最初はcやc++に惹かれていましたが、snobol、focal、alcom、basicなどの言語も興味があって試したとおっしゃっていましたね。他に「面白い」と言えるプログラミング言語は何だと思いますか?特に近年登場した新しいプログラミング言語の中で、どれが面白いと思いますか?

ボブおじさん: 現時点で私が最も興味深いと思う言語はクロージュア, 私が学習に多くの時間を費やしてきた言語です。 clojure が実際に存在するため、これには驚きました。リスプまさか学ぶとは思わなかったlispの方言。

私のキャリアの最初の 30 年間、私は lisp を学ぼうと考えたことはありませんでした。なぜなら、lisp はひどい言語だと思ったからです。もちろん、まったく理解していませんでした。ある日、「コンピュータプログラムの構造と解釈」という本を読んだのですが、その中で使われている言語が lisp だったので、すぐに惹かれました。突然、私は lisp の大ファンになりました。を見つけたいです日常生活で lisp を使用する方法, そこでclojureと出会いました。

clojure の同等物jvm (java 仮想マシン) 上で実行できる lisp 言語それは私にとって完璧だったので、clojure のコーディングを学び始めました。それは私にとって素晴らしい娯楽でした。

さらに、次のような他の興味深い言語もあります。フォース、後置式に基づいたスタック言語で、これまで使用したどの言語とも異なり、非常に興味深いものです。プロローグこれは非常に興味深い言語でもあります。何が正しいかを直接マシンに伝える必要はなく、マシンがそれを解決することで正しい結果が得られます。全体として、これらは非常にユニークなため、誰もがチェックすべき非常に興味深い言語です。まったく異なる言語を学ぶと、コードに対する見方がまったく変わります

機械が人間と同じように考えるようになると、プログラミングスキルは時代遅れになる

「新人プログラマー」: ai コードに関する以前のコメントのいくつかは理解できます。あなたの意見では、大規模な言語モデルは良い場合もあれば、愚かな場合もあります。 ai のコードの説明は少し役に立ちましたが、それでも盲目的に信頼すべきではないと述べました。

ボブおじさん:はい、プログラマーですcopilot などのツールに過度に依存し、生成されたコードを見たときに無批判に受け入れてしまうのは簡単で、それは危険です。批判的である必要があり、このコードの一部は問題ありませんが、ほとんどの場合、ai が生成したコードには十分な注意が必要です。そこで私の提案は、注意して、ツールのように使用し、ツールは間違って使用すると害を及ぼす可能性があることを常に覚えておいてください。

「新人プログラマー」:では、学び始めたばかりのプログラマーは、aiをどのように活用して成長すればよいのでしょうか?インタビューで私は 2 つのまったく異なる意見を聞きました。1 つは、初心者プログラマーは ai を全面的に受け入れるべきだということです。もう 1 つは、新人プログラマーには ai コードの品質を判断する能力がないため、ai が破壊してしまうというものです。

ボブおじさん: ジュニアパイロットが自動操縦を使用すべきでないのと同じです。まずは飛行機の操縦方法を学び、その後、細部に注意を払う必要がない場合は自動操縦を使用してください。 aiについても同様です。ジュニアプログラマーは、出力コードの品質を判断する方法がまだわかっていないため、最初は ai に頼るべきではありません。多くの場合、そのコードは悪いだけでなく、間違っているだけで、まったく機能しません。

私が本当に心配しているのは、若手プログラマーがタスクを与えられ、それを実装するために ai を使用することを選択した場合です。 ai がコードを与えた後、これらの初心者は常に「まあ、ai が与えたコードだから大丈夫だろう」と考え、職を失います。そこで私の提案は、キャリアの最初の数年間は ai の使用を徐々に減らしていくべきです

「新人プログラマー」: 現在、ai によって生成されたコードがさまざまなプロジェクトで使用されることが増えています。コードの品質と生成効率のバランスをどのように取っていますか?

ボブおじさん: 私のバランスの取り方はai を使用して最初にコードを生成し、その後クリーンアップします。。プロジェクトに悪いコードを詰め込むことは許しません。したがって、ai によって生成されたコードが機能し、テストに合格した場合は、躊躇せずに戻ってリファクタリング、クリーンアップ、改善を行います。ネーミングの変更、一部の機能の抽出、構造の調整など。

aiが素晴らしいコードを生成するとは期待していないからです。そこで、それをクリーンアップして独自のコードに変換します。このように、これは私のプロジェクトであり、私が書いたコードです。

「新人プログラマー」: 5 年ほど前、誰かがあなたに「ソフトウェア エンジニアリングのどのトレンドが過大評価されていますか?」と質問し、マイクロサービスを罵りました。今から 5 年後、他に過大評価されているトレンドはありますか?

ボブおじさん現在過大評価されているトレンドは、もちろん生成 ai です、それに疑いの余地はありません。それは新しいものであり、新しいものはすべて過大評価されます。 5年後、誰もが振り返って「私たちはそれを過大評価していたかもしれない」と言うでしょう。

「新人プログラマー」:aiの波が高まっていた頃、あなたの旧知のケント・ベックがこんなことを言っていました。彼は、しぶしぶ chatgpt を使用したところ、自分のスキルの 90% が無価値になり、残りの 10% の価値が千倍になったことに気づいたと述べました。生成 ai はどの程度役立つでしょうか?

ボブおじさん:正直に言うと、aiはあまり役に立たないと思います。最も単純なケースでは、ある程度役立つ場合があります。たとえば、非常に基本的なコーディング作業を行っているときに、ai がコードを与えてくれるので、それを見て問題ないと判断し、作業を続けます。そして、ai は多くの場合、状況に応じて動作し続けますが、いったん物事が面白くなると、ai の信頼性がますます低くなります—何かが複雑であればあるほど、役に立たなくなります

ai は小さなことは処理できますが、設計をリファクタリングして改善したい場合はまったく処理できません。さらに、テストの作成に関しては、ai はあまり役に立ちません。

「新人プログラマー」: 以前、コーディングスクールが廃れるまでには長い時間がかかるだろうとおっしゃっていましたね。その瞬間を特定する特定の時点はありますか?テクノロジーに終わりはあるのでしょうか?

ボブおじさん: これは興味深い質問ですが、sf の観点から考えてみます。将来、人間と同じように考えることができる機械を作る頃には、プログラミングのスキルは時代遅れになるでしょう。しかし、正直に言うと、その時点ですべてのスキルは時代遅れになります。だから、それが楽しみにできるかどうかはわかりません。もしそれが起こるとしたら、それはかなり遠い将来のことだと思います。ご存知のとおり、人間の脳はインターネット全体よりもはるかに複雑です。

「新人プログラマー」:確かに、皆さんもアシモフの世界に戻るべきだとおっしゃっていましたね。ロボット工学三原則たとえそれが「ロボット奴隷」という種族を生み出すことになるとしても。哲学的な観点から汎用人工知能 (agi) をどのように理解しますか?

ボブおじさん:はい、短期的には達成できないと思いますが、遺伝子技術はすでにあります。もし私たちが生きていくために意識を持った機械を作るとしたら、アシモフの三原則のようなものが絶対に必要になると思います。

「新人プログラマー」:これを踏まえると、aiはこうあるべきです。オープンソースこのようなことが起こらないようにするには?人間に必要なのはオープンaiかクローズドaiか?

ボブおじさん:さまざまな企業が自社の秘密を守りたいと考えているのは間違いありませんし、それ自体は何も悪いことではないと思います。ai の本当の問題はエネルギー消費です。エネルギーを大量に消費し、テクノロジーがより洗練されるにつれて消費量は増加し続けるでしょう。このため、コストがかなり高くなります。したがって、私たちは今日 ai がどこまで発展できるか、そしてこれらの大規模な言語モデルがどの程度うまく機能するかを確認する必要があります。しかし、原子力発電所と同様に多くのエネルギーを消費します。

プログラマーの「職人気質」

「新人プログラマー」: ai から離れて、人間と人間の話題について話しましょう。

かつて誰かが「あなたの人生の師は誰ですか?」と尋ねたとき、あなたは「本が私の師です」と答えました。あなたは本を通してマーティン・ファウラーやケント・ベックなどの著名な人物と出会い、後にこの二人と仕事をすることもありました。それで、その年のようにアジャイルマニフェストを作成した17人のうちの1人、あなたの関係がどのようなものであるかを明らかにできますか?

ボブおじさん:以前はソフトウェア関連の会議が頻繁に行われていましたが、今ではそのような会議はかなり減りました。私は、c 言語カンファレンス、デザインパターンカンファレンス、一般的なソフトウェア開発カンファレンスなど、さまざまな種類のカンファレンスに参加しています。これらの活動を通じて、たくさんの人々と出会いました。

たとえば、デザインパターンカンファレンスで出会ったケント・ベック、初期のエクストリーム プログラミング カンファレンスで出会ったマーティン・ファウラー。私はこれらの人々のほとんどに直接会いましたが、彼らは私のパートナーであり、私の指導者でもありました。彼らは私の仲間でもあり、一緒に学び、進歩していきます。私が学んだことの多くは、donald knuth の『the art of computer programming』など、1960 年代から 1970 年代のプログラミング本から得たもので、その時代の本は私にとって非常に重要な情報源でした。

それで、私がキャリアを始めて 30 年ほど経った頃、カンファレンスに行ったり、人々と直接会ったりするようになりました。そのような環境の中で、私たちは設立しました。アジャイルミーティング。アジャイル カンファレンスに参加した人のほとんどは、通信を通じて、またはカンファレンスで会ったことがあり、以前から知っていました。

「新人プログラマー」:「アジャイル開発は本当に適用できるのか?」という視点がよく見られます。

過去には、多くの開発者が短納期を追求し、ソフトウェアの品質を無視していた時期がありました。これはアジャイルに対する誤解である可能性があります。

ボブおじさん:これは確かにアジャイルに対する誤解です。アジャイルとは、より速くなることではなく、自分がどこにいるのかを理解することです。アジャイル開発を行っているため、どれだけ進んでいるのか、どれくらいの速度で進んでいるのか、期限を守っているかどうかを正確に知ることができます。言い換えれば、アジャイルは、自分がどれほどの問題に直面しているかを理解するのに役立つ優れた方法です。これにより、締め切りが遅れても驚かなくなりますし、思ったほど早くない可能性があるため、進捗状況を全員が明確に把握できるようになります。

多くの人がアジャイルが高速な手法であると誤解しており、アジャイルを高速な手法として宣伝する人もいますが、これは常に誤解です。アジリティは自分を速くする方法ではなく、自分がどれだけ速いかを知らせる方法です。したがって、アジャイルは時代遅れではありません。プロジェクトの実際の進捗状況と完了日を知りたい場合は、アジャイルが最適な方法です。

「新人プログラマー」: あなたのツイートの 1 つが私にとても深く印象に残りました。それは、「アジリティは元々、開発者始めましたが、プロジェクトマネージャーアジャイル運動の初期段階に介入したことで、当初の協力関係は破壊されました。 「その話を教えてもらえますか?」

ボブおじさん: 確かに、アジャイル運動はもともと次のようなグループによって始められました。プログラマー開始されました。 17 人の参加者がスノーバード リゾートに集まり、アジャイル マニフェストを作成しました。私たちは皆プログラマーであるか、少なくとも強力な技術的背景を持っています。この運動はプロジェクト管理の観点から始まったものではありませんでしたが、創設者の 1 人である ken schwaber は認定と呼ばれるコースを開始することを決定しました。スクラムマスター(スクラム マスター)」コース。このコースは、スクラム マスターになりたい人を訓練し、チームがスクラム マスターを使用するのを支援する方法を教えるように設計されています。スクラム方式——これはアジャイル開発のモデルですね。

プロジェクトマネージャーは強い関心を示し、そのようなコースに登録しています。参加者のほとんどはプログラマーではなくプロジェクト マネージャーであったため、結果的にオリジナルの結果が得られました。開発者主導で始まった運動は、徐々にプロジェクトマネージャー主導の運動に変わっていきました。プログラマーたちは、自分たちがこの取り組みから排除されていると感じて不満を感じていました。

この問題を解決するために、私たちのグループが始めましたソフトウェア職人運動(ソフトウェア クラフトマンシップ) を開発し、プロジェクト マネージャーと開発者を再接続する試みとして、クラフトマンシップ マニフェストをリリースしました。しかし、これでは大きな成果は得られませんでした。

最終的に、私たちはプロジェクト管理を中心とした「公式のアジャイル運動」と、実際の開発者主導のアジャイル運動を分離しました。後者は依然として、簡潔かつ秩序ある方法で取り組み、その立場と発展の方向性を明確にすることに取り組んでいます。

「新人プログラマー」:それでは、スクラムマスターの役割の重要性は何でしょうか?この役割はどのような点で重要ですか?優秀なスクラムマスターを育成するにはどうすればよいでしょうか?

ボブおじさん: スクラム マスターは元々、スクラムまたはアジャイル手法を使用するときに行われた約束を他のメンバーに思い出させる責任を負うチームのメンバーとして設計されました。責任には、テストコードが計画どおりに記述されているか、事前に決められた見積もり方法に従っていることを確認するなど、チームの進捗状況を毎週チェックすることが含まれます。この役割はチーム内でローテーションされ、通常は異なるメンバー間でローテーションされます。成熟したチームでは、数週間の練習の後、チームメンバーがすでに確立されたプロセスを意識的に実行できるようになるため、専任のスクラムマスターが監督する必要はありません。しかし、プロジェクト マネージャーの関与により、この役割は徐々にプロジェクト管理機能に進化し、スクラム マスターの本来の意図とは大きく異なりました。その結果、今日のスクラムマスターの役割は大きく変わりました。

「新人プログラマー」: 先ほどソフトウェア職人の話について触れましたが、twitter の署名にも「」と書かれていることを思い出しました。職人技「(職人技)、これは非常に古い言葉ですが、今日では「」と訳されるべきです。職人魂”。

この言葉はどのように理解すべきでしょうか?今日の急速に成長する業界では、品質に重点を置く時間が本当にないのでしょうか? ai の進歩に伴い、ソフトウェアの配信はますます高速になっているようです。 ai が役立つと思いますが、そうですか?

ボブおじさん: これらの大規模な言語モデルは非常に興味深いツールであり、プログラマーにとって役立つと思います。しかし、彼らはプログラマーの代わりにはならないし、すべてのコーディングを行うわけでもない。彼らはコードを書くのが得意ではありませんが、興味深い提案を思いつくことはできます。だから私は思うそれらは便利ですが、プログラマーが不要になるほどで​​はありません。

ものづくりに関して言えば、仕事に対する姿勢、姿勢です。これを説明する最も簡単な方法は次のとおりです。仕事で長い一日を終えて家に帰って鏡を見ると、「今日は素晴らしい仕事ができた。自分の仕事を誇りに思っています。それだけです」と自分に言い聞かせることができます。職人の立ち居振る舞い。職人は自分の仕事の質に満足しています。これがソフトウェアの職人技の核心です。

もちろん、テスト駆動開発 (tdd)、シンプルな設計、solid 原則など、多くのテクノロジーや手法について議論することができます。多くのテクノロジーやコンセプトがあります。しかし、基本的な考え方は、毎日の終わりに「今日はよく頑張った」と自分に言い聞かせることです。残念なことに、多くのプログラマーは家に帰って鏡を見て、シャワーを浴びなければならないと感じています。なぜなら彼らは悪い一日を過ごしたと感じているからです。彼らは締め切りに間に合うために大量の悪いコードを書いたため、その嫌な感情を洗い流す必要があります。それが職人技です。良い仕事をしたと実感し、自分の仕事に誇りを感じて家に帰ることです。

「新人プログラマー」: あなたの著書「コードをきれいにする方法」(クリーンなコード)は職人技の原則も反映しています。クリーン コードのいわゆる「tao」は、システム プログラミングよりもビジネス ロジックの実装に重点を置いていますか?それとも両者に違いはないのでしょうか?

ボブおじさんクリーン コードは、職人のように仕事をして、自分の仕事に誇りを持って帰宅できるようにするための一連の概念とテクニックです。ビジネス ロジックを実装しているのか、システム プログラミングを行っているのかは関係ありません。これは、仕事をうまくこなし、満足感を得るのに役立つ一連のテクニックと概念にすぎません。

「新人プログラマー」: 以前に発見しましたが、中国であれ米国の開発者コミュニティであれ、クリーンなコードには多くの意味があると多くの人が考えています。抽象的な。では、過度に設計された過度に抽象的なコードの作成を避けるにはどうすればよいでしょうか?

ボブおじさん:はい、これは非常に奇妙な現象です。なぜなら、私の本自体は過度の抽象化を推奨していませんし、多くの抽象化を推奨しているわけでもありません。この本が示唆しているのは、抽象化は控えめかつ適切に使用しますが、過剰な設計は推奨されません。どうやら、プログラマーの中には、あらゆる形式の間接的な彼らは、良いコードを書く唯一の方法は、次のことを試みることであると考えています。直接。私はこの見解には同意しません。適度な間接化と抽象化は役立つと思いますが、抽象化にはコストがかかるため、非常に注意する必要があります。したがって、問題の解決に役立つ場合は抽象化を使用しますが、そのコストを認識し、慎重に使用してください。

「新人プログラマー」:おそらくこれが、あなたが少し前に「code cleaniness」の新バージョンをリリースすると言った理由です。これはソースをクリアするという意味で理解できますか?しかし、この本を完全に再設計して書き直すことにしたのですから、新しい名前を付けてみてはいかがでしょうか?

ボブおじさん: 本のタイトルは出版社によって決定されましたが、私は主に「クリーン コード」の核となるコンセプトを繰り返したかったのですが、さまざまな表現を使用し、さまざまな角度からテーマを詳しく説明しました。

原作は16、7年前に当時の読者向けに書かれたものです。そして今、私は今日の読者に向けてこの本を書いています。それは試しますより一般的な問題を今すぐ解決しましょう。私は異なる言語を使用し、異なるアプローチをとり、指示を減らしてより有益なものにし、同じ点を異なる方法で伝えようとしました。メッセージは同じですが、表現が違うだけです。この 2 冊の本は最終的には補完的なものになると思いますので、読者は両方を読むべきです。

ai は脳が半分しかないジュニア プログラマーです

そして実際には成長しない

「新人プログラマー」:あなたの新しい本「functional design」について話しましょう。まず、なぜこの本を書こうと思ったのですか?

ボブおじさん関数型プログラミングは、過去 10 年間で重要性が高まっています。関数型プログラミングに人々が注目し始めたのは 2005 年頃ですが、実際には関数型プログラミングは古い概念で、1936 年から数学言語として存在しており、関数型プログラミング言語は最も初期の言語の 1 つでした。

初期の頃、関数型言語は実行コストが高く、遅く、大量のメモリを必要としていました。しかし現在では、計算能力とメモリ リソースの進歩により、関数型プログラミングのコストはほとんど無視できるほどになりました。これは、特にマルチスレッド プログラミングの場合に、関数型プログラミングの利点をもたらします。関数型プログラミングでは、競合状態や同時更新を気にせずにマルチスレッド コードを作成できます。これは、関数型プログラミングには代入ステートメントがなく、変数の状態が変更されないためです。

clojure を学習しているうちに、clojure がコーディングして問題を解決する楽しい方法であることがわかりました。オブジェクト指向プログラミングや構造化プログラミングなどの他のツールと組み合わせる必要があると思います。しかし、近年、関数型プログラミングはオブジェクト指向プログラミングに対立し、オブジェクト指向プログラミングは時代遅れであると主張する記事もあります。私はこの意見に同意できず、この本を書くことにしました。

『functional design: principles, patterns, and practice』の表紙

この本では、関数型プログラミング、オブジェクト指向プログラミング、構造化プログラミングがどのように連携してより良いシステムを構築するかについて説明します。基本的な概念から始まり、徐々に設計原則とパターンを構築し、最終的にそれらを組み合わせて完全な小さなアプリケーションを作成します。読者の皆様にご理解いただければ幸いです関数型プログラミングは単独では存在しません、過去 50 年間に私たちが学んだすべてが機能します。

「新人プログラマー」: また、csdn 開発者コミュニティからこの新しい本に関する多くの質問を集めましたが、ほとんどの人が最も興味を持っているのは、なぜこの本を選んだのかということです。クロージュア本のコードを書くのにscalaの代わりに? solid の原則が機能設計にも適用されることを証明するために、クラスと継承をサポートしない、より関数型の言語を使用したいからですか?

ボブおじさん: 理由の一部確かに。 clojure は「純粋な」関数型言語ではありませんが、関数型プログラムを作成するのに非常に役立ちます。ただし、私が clojure を選択した理由は、おそらくもっと重要なもう 1 つあります。clojure は非常にシンプルです

この本で私が伝えたいのは関数型プログラミングの考え方であり、複雑な関数型プログラミング言語を教えることではありません。特に複雑な文法を持つ言語を教えたくありません。 clojure の構文は非常にシンプルで、複雑な構文はほとんどありません。 clojure の学習は簡単で、clojure コードを読めばマスターできます。

そのため、本でコードを紹介するときは、clojure がどのように機能するかについては詳しく説明せず、いくつかの基本的な概念を説明し、残りのほとんどは読者に理解してもらいます。興味のある読者が参照できるように、他のドキュメントもいくつかお勧めします。しかし全体として、clojure は非常に理解しやすいので、clojure や関数型プログラミングについてあまり知らない読者は、言語自体に煩わされることなく関数型プログラミングの概念に集中できます。

「新人プログラマー」: 以前、あなたが twitter で、次の本で言及したい人は、最も素晴らしいと思うコードを提出してよい、と発言していたのを覚えています。これはよく起こりますか?通常何人がコードを提出しますか?中国の開発者も応募できますか?

ボブおじさんはい、それをツイートしたところ、かなりの数の反響が得られました。 github リンク経由または直接コード スニペットを送信する人もいます。おそらくこのコードの一部を今後の本で使用することになるでしょう。中国の開発者が非常に優れていると思うコードを提出したい場合は、喜んで検討します。ただし、本の長さには制限があり、全員のコードを掲載することはできないため、全員のコードを使用するという約束はできません。

「新人プログラマー」: デジタル教科書やオンライン学習プラットフォームに関する革新的なアイデアはありますか?最近、人々は紙の本を読む意欲が低下しているようです。これらの新しい形式は、プログラミングの教え方や学習方法にどのような変革をもたらすのでしょうか?次世代にプログラミングをどのように教えていくつもりですか?

ボブおじさん:確かに、私たちは現在デジタル時代を迎えており、集中力の持続時間は 20 分未満に短縮されています。しかし、本当に何かを学びたいのであれば、ペースを落として勉強に集中する必要があります。私の最近の本のいくつかには、ビデオコンテンツでは、読者は書籍内の url を通じてプログラミング セッションのライブ デモンストレーションを視聴できます。このテキストとビデオの組み合わせは非常に効果的です。

さらに、非常に興味深い方法があります。オンライン講義。たとえば、印刷物を読んだ後、特定の url にアクセスして関連する講義を視聴するように求められます。こういった方法はとても便利だと思います。

紙の本の時代は終わったとは思えません。電子書籍、pdf、またはオンラインリーダー版に変換される可能性がありますが、教科書が消えることはありません。テキストは非常に情報密度が高いメディアであり、ビデオや講義よりも密度が高く、学習の進行状況をコントロールするのにも便利です。したがって、テキストと動画を併用して、多様な学習形式を組み合わせたほうが効果的ではないかと考えています。

「新人プログラマー」: あなたの本は、初心者から経験豊富な専門家まで、あらゆるレベルの専門知識を持つ読者を対象としています。これは、コンテンツの深さと広さのバランスに関して、確かにさまざまな課題をもたらします。

ボブおじさん: 私の本は、初心者とプロのプログラマーの両方を含む、多様な人々を対象としています。重要なのは、一方の読者にとって理解しにくくなりすぎたり、他方の読者にとって過度に単純化したりすることなく、両方のタイプの読者に価値を提供することです。

教えたり書いたりするとき、私は聞き手や読者が私と同じくらい賢くて、私の内容を理解できると想定しています。彼らにとっては少し努力が必要かもしれませんが、きっと理解してくれるでしょう。読者の能力を判断して内容を調整することはありません。まるで仲間に話しかけているかのように、メッセージを直接伝えるだけです。

もしかしたら、私はもっと経験を積んでいるかもしれないし、もっと多くのことを経験し、より多くの間違いを犯してきたかもしれない。だから私は私の経験や話を共有することができます。しかし、私はそれを遅らせたり、過度に単純化したりしません。

「新人プログラマー」: ここ数年でプログラミングの教え方をどのように変えてきましたか?進化するテクノロジー環境に対応するために、どのような新しいアプローチや教訓を採用しましたか?

ボブおじさん:初期の頃は普通に使ってました透明フィルム、コースのコンテンツをプロジェクターで表示します。通常は、コンテンツをページごとに表示するために大量のフィルムの束を準備します。時が経ち、今私が使っているのは、ipadプレゼンテーションを行ったり、プロジェクターに接続したり、apple pencil で ipad の画面に描画したりすると、すべてがリアルタイムで大画面に表示され、とても楽しいです。

新型コロナウイルス感染症(covid-19)のパンデミック中、私たちはzoomなどのリモートトレーニングツールを介して授業を始めました。現在、私の授業のほとんどはリモートで行われています。私は今でもスライドプレゼンテーションやスクリーン描画を使用しており、それらの方法は今でも機能しています。唯一の違いは、リモート授業では聴衆の反応を直接見ることができないため、体験が少ないことです。楽しみの半分

「新人プログラマー」:疫病によってもたらされたもう一つの変化は、多くのプログラマーがaiに取って代わられることを懸念していることです。以前、機能設計を学ぶと仕事を続けるのに役立つという記述を見たのですが、それについて詳しく教えていただけますか?

ボブおじさん: 機能設計と機能設計の本の概念は、実際には、より成熟したプログラマーになるのに役立つように設計されています。新しいツールを「ツールボックス」に追加します。関数型プログラミングも優れたツールであり、オブジェクト指向プログラミングも優れたツールであり、構造化プログラミングも優れたツールです。これらはツールボックスに含まれている必要があります。テスト駆動開発は優れたツールなので、手元に置いておくことが最善です。 solid の原則も優れており、ツールボックスに必ず入れておくべきです。したがって、この本の目的は、開発者のツールボックスを拡張することであり、それは間違いなく仕事を続けるのに役立ちます。しかし、ai に取って代わられることについては、あまり心配する必要はないと思います。私が生きている間にそんなことは起こりそうにありませんし、あなたが生きている間にも起こらないかもしれませんし、まったく起こらないかもしれません。人間レベルの知能を備えた機械はもう登場しないのではないかと感じています。

「新人プログラマー」:関数設計とオブジェクト指向プログラミングについて、どちらが良いのかと聞かれたことがある方も多いと思います。でも私が聞きたいのは、どう思いますか?現在のaiはどちらが優れているのでしょうか?たとえば、関数型プログラミングは ai コード生成に適していますか?状態を持たず、使用時に関数を生成することができ、各関数はaiによって自動生成・検証することも可能です。では、もし ai が関数型設計において優れているとしたら、関数型プログラミングしか知らないプログラマーはより大きな危機に直面することになるでしょうか?

ボブおじさんaiは何もできないから関係ない、関数コードの生成に関しては、オブジェクト指向コードや構造化コードと同じです。ai は次のように考えることができます。頭脳が半分しかなく、実際には成長しないジュニアプログラマー。いくつかの提案が表示されますが、そのほとんどはあまり良くなく、そのうちのいくつかは問題ないかもしれませんが、ai によって書かれたコードは常に乱雑であるため、変更する必要があります。

ai はそういうものであり、役に立つこともありますが、ai に合わせてキャリアの方向性を調整すべきではありません。 ai はツールであり、その使い方を学ぶことはできますが、特定の ai ツールのためだけにキャリア プランを変更するべきではありません。

aiプログラミングに直面したときに何をすればよいかわからない場合の対処法

それからオフにしてください

「新人プログラマー」: 新しい人があなたのところに来て、「最初のプログラミング言語としてどの言語を選択すればよいですか?」と尋ねたら、通常はどう答えますか?

ボブおじさん: そうですね、java を選択できます。そうは言っても、c# も非常に優れた言語です。 clojureも良いですね。 c言語も利用可能です。 c++ は少し難しくて複雑ですが、オプションでもあります。 go 言語も非常に優れており、良い言語です...

実際には、どれを選択するかはそれほど重要ではありません。プログラミングはプログラミングなので、どの言語から始めるかは関係ありません。最も重要なことは、次の言語を学ばなければならないということです。 1 つの言語にとどまらないでください。1 つの言語を学び、ある程度熟練するまで数か月かけて、その後別の言語を学び、というように毎年新しい言語を学習します。言語を学ぶのは楽しいことだと考えて、まだ学んでいない言語を見つけてください。仕事では決して使わないかもしれませんし、二度と使わないかもしれませんが、1~2年ごとに新しい言語を学ぶ習慣をつけましょう。どこから始めるかは問題ではありません。重要なのは学び続けることです。

「新人プログラマー」: 若手プログラマーにオープンソース プロジェクトへの参加を勧めますか?あなた自身が関わったオープンソース プロジェクトにはどのような印象的なものがありますか?そのストーリーを共有できますか?

ボブおじさん: 息子と私は 20 年前にプロジェクトを始めましたが、それは今も続いており、素晴らしいプロジェクトです。私はもう関与していませんが、他の多くの人が関与を続けています。

あなたがジュニア プログラマーまたは若手プログラマーで、新しいアイデアを学びたい場合は、オープンソース プロジェクトに参加することをお勧めします。いくつかのプル リクエストを送信して、できる限りの貢献をしてみてください。これは、第一に他の人を助ける素晴らしい方法であり、第二に素晴らしい学習の機会です。とにかく、おっしゃるとおりです。私はオープンソース プロジェクトに参加することを強くお勧めします。これはキャリアを拡大するための素晴らしい方法です。

「新人プログラマー」:「35クライシス」ってご存知ですか?多くのプログラマーは、一定の年齢に達すると、管理職に転職するか退職するかの 2 つの道に直面します。

ボブおじさん:テクノロジー業界が若者を優先していることを考えると、これは深刻な問題です。実際、ある開発者が私に同様の質問をしたのですが、それをはっきりと覚えています。彼の正確な言葉は次のとおりです。「ボブおじさん、なぜ 70 歳でもまだプログラミングをしているのですか?」彼の言う通りです。私は現在 71 歳ですが、まだコードを書いています。

プログラミングは若者だけのものであるという考えは実際には幻想ですが、実際には非常に影響力のある幻想です。このような幻想が存在するのは、プログラマーの需要が過去 70 年間でロケットのように急増したためです。

このように考えてください。5 年ごとに、世界のプログラマの数は 2 倍になります。これは、5 年ごとにプログラマーの数を 2 倍にしなければならないことを意味します。これは、世界中のプログラマーの半数が 5 年未満の経験を持ち、4 分の 3 のプログラマーが 10 年未満の経験を持つことを意味します。言い換えれば、世界のプログラマーの 4 分の 3 は 35 歳未満ということになります。それで周りを見回しても若者ばかりです。古いプログラマーはどこにいるのかと疑問に思うかもしれません。実際、私たちはまだそこにいますが、数がそれほど目立たないだけです。

このため、プログラミングは若者にのみ適しているという幻想が生まれますが、これは実際には完全に間違いです。本当に強いプログラマーになるには、長い時間をかけて積み重ねていく必要があります。上級プログラマの中には、10 年の経験があるのはすごいと思う人もいるかもしれません。それは確かに良いことですが、あと 5 年もあれば、より優れたプログラマになれるでしょう。

したがって、コードを書くのが本当に好きで、これがお気に入りだと思っていて、今後もコードを書き続けたいと思っているのであれば、諦めないでください。マネージャーになる必要はありません。マネジメントが得意な人がいれば、その人にやってもらいましょう。コードを書き続けたい場合は、そのまま書き続けてください。転職したり早期退職する必要はありません。 36歳になったら脳がうまく働かなくなるというわけではありません。実際、今この業界にはたくさんの新しい人材が流入しており、若者だけでなくあらゆる年齢層の人がプログラミングを学んでいます。だからといって、あなたにチャンスがないわけではありません。

「新人プログラマー」: これを見て、多くのプログラマーが今、ai に直面したときに自信を失っていることを思い出しました。しかし実際には、自己不信は何も新しいことではなく、以前の時代にも多くの年老いたプログラマーが同じ問題を抱えていたでしょう。これまでに自分に自信が持てないという感情を抱いたことはありますか?

ボブおじさん: 初めてプログラミングを始めたとき、私はまだ子供でしたが、自分の名前を得ることができると常に感じていました。この時、私は自分に自信を持ったことは一度もありませんでした。

その代わりに、間違いを犯したり、解雇されたり、その他の挫折を経験するようになりました。この時期に自分に自信がなくなるのは、実は良いことなのです。適度な自信喪失は、実際には非常に健康的です。しばらくすると、それに対処する方法を学ぶからです。あなたは、「わかった、これらの間違いを避ける方法は知っている。自分が完璧ではないことはわかっているが、集中して注意し、他の人に相談すれば、ゆっくりとこれらの問題を解決できるはずだ。」と考えています。それらの自己不信を克服します。実際のところ、自信喪失の時期を経験することは必ずしも悪いことではありません。それはあなたを成長させ、より強くすることを可能にします。

「新人プログラマー」:最後に、現在の開発者にアドバイスをお願いします。特に、ai プログラミングに関して混乱している、または途方に暮れているプログラマーです。

ボブおじさんai プログラミングに直面したときに何をすべきかわからない場合は、ai をオフにしてください。無視してください。さらに 1 か月かけて自分でコードを作成し、ai を有効にします。おそらく、コードを見て、何をしたいのかがわかり、より良い提案ができるようになるでしょう。

たとえば、あなたが運転を習っている初心者だと想像してください。ハンドルを触ったことがなく、使い始めたらすぐに自動運転を使いたい。オートパイロットを押すとすぐに車が動き始めます。「まずこれをオフにしなければなりません。運転を覚えるまで、もう一度オートパイロットを試してください。」と考えるかもしれません。 「ああ、これがどのように機能するか理解できた。そうすれば、もっと有効に活用できるだろう」と考えてください。ai も同様で、最初はスムーズではないかもしれませんが、やっていくうちにどんどん熟練していきます。