永遠の学生:プログラミングが絶え間ない「研究」であるとき

プログラマーの職業を自分で選択した場合、原則として、勉強するかどうかは、あなたが望むかどうかに関係なく、常にあなたの仲間になります。 この分野では、「何かを完全に学ぶ」ことはまずありません。新しいソリューション、新しいフレームワーク、そして最後に新しい言語が常に登場します。 本日の記事では、開発者が「永遠の学生」であり続けることが重要である理由、Stack Overflowの新しい言語の学習に関する統計、プログラミングが徐々に他の分野の学習方法に変わっている理由を説明します。



写真hackNY.org CC-BY



明らかの領域から



古いものにしがみついて新しいものを無視するという習慣(新しいものがJavaまたはPythonであっても)遅かれ早かれ、開発者にトリックをかけることができます。 たとえば、CTO CloudflareのJohn Graham-Cumming これを確信しています。 彼は長年のプログラミングで教えられたことを語って、次のように述べています。「特定の言語に過度に熱心で、その言語のみで書く人もいます。 これは間違いです。 すべての問題を解決するのに理想的な単一の言語はありません。」



ジョンは、できるだけ多くの異なるソリューション、言語、ライブラリを開発研究に携わる全員に勧めます。 開発者のJosh Braeggerが、コード作成時に迅速かつ効率的にバーンアウトする方法に関する「推奨事項」のコレクションでサポートされています。



新しいことを学ぼうと努力すること-これは明らかなアドバイスですが、それでもなお重要です。 そして、プログラマーが経験を積むほど、それを追うのが難しくなります。ジョン・グラハム・カミングが正しく観察しているように:「私は[開発について]すべてを知るには若くありません」。



誰が何を研究するか:いくつかの統計



Stack Overflowの共同設立者であるJeff AtwoodのCoding Horrorの記事では、さらに劇的な絵が描かれています。「クールな開発者はプログラミングが非常に得意です。 彼らが私にいくらか似ている場合、彼らはほぼ毎秒コンピューターで目を覚ますことに費やします-ほぼ一生。



ただし、そうだとしても、コンピューターでの作業に費やす時間はさまざまな方法で費やすことができます。誰かがビジネスプロジェクトに専念し、誰かがサードパーティのタスクやトレーニング演習に時間を費やしています。 すでによく知られているJosh Braggerによると、最初のオプションは簡単に燃え尽きる可能性があります。「プログラミングが好きだったので、プログラミングを始めました。 興味のある問題を解決するために自由時間を費やしてください。」



美しい言葉だけでなく、統計もこの決定を支持します。 アナリストはStack Overflowポータルのデータを調査し、興味深い結論に達しました。プログラマーは平日と週末(および昼と夜)に異なる言語とテクノロジーを使用しています。



言い換えれば、すべてのテクノロジーの中で、アナリストは、仕事で使用されるグループと、研究に興味があるか、自分のプロジェクトで使用するのに役立つグループの2つのグループに分類できました。



そのため、たとえば、Microsoftテクノロジー(C#、ASP.NET、SQL Server、Excel、VBA)に関連するタグは「ワーキング」グループに分類されました。 そして、「関心グループ」には、比較的新しい言語(Swiftなど)とNode.js、C、C ++がありました。 ところで、ScalaとRuby on Railsは、数年前にこのグループに属していましたが、現在では「動作する」言語のカテゴリに移行し、週末にはあまり使用されなくなりました。 週末に関心が集まるテクノロジーのもう1つの例は、モバイルアプリケーション開発ソリューションとUnity3Dゲームエンジンです。



さらに、アナリストは、4つの言語(C#、C、Java、Python)の中で、C#プログラマーが最も「企業」であり、「ほぼ9から5」で働くことを発見しました。 :遅く起きて、長く働いて、夕方遅くに仕事を辞めることが多い。 JavaとPythonはこれらの両極端のどこかにありました( このアプリケーションでは、呼び出しのダイナミクスを1日以内にStack Overflowの異なるテクノロジーに比較できます)。



研究がどのように行われたかについての詳細な物語はここここで読むことができます



ちなみに、開発者向けの普遍的な「 タスクブック 」(選択した言語に関係なく)は、Googleソフトウェアエンジニアの1人によって編集されました。 このリストには、数字の操作からグラフィックスおよびマルチメディアファイルの操作まで、プログラミングの主要セクションのタスクが含まれています。 また、これはGitHubのプロジェクトであるため、タスク自体だけでなく、 ソリューションオプション (ほとんどの場合JavaとPythonで使用されますが、Swift、Go、Befungeでも使用できます )も含まれています



新しいことを学ぶときは痛みです



ただし、新しいことを学習する過程で、まったく予期しない(さらに衝撃的な)タスクに遭遇する場合があります。 この物語は、「世界で最悪のプログラミング環境」というタイトルのテキストを書いた開発者のジョー・ラフリーによって導かれています 。 1990年に、ジョーはBANCStar言語を使用する会社に参加しました。 したがって、仕事の初日、ジョーは次のようなものを見ました。



8607,,,1

11547,15475,22002,22002

1316,1629,1,1649

3001,1316,3,30078

11528,22052,22002,22002

9301,0,1528,1528

31568,10001,800,107

8560,,,1568

8550,210,,

3001,,,

3100,1316,3,30089

11547,15475,22002,22002

3001,1316,3,30089

3001,1317,3,10000

8400,,,

8550,700,801,

3001,,,

9301,0,522,522

3000,1284,3,10001

8500,,3,

8500,,5,

1547,,1,-2301








ちなみに、Joeがこの言語に慣れて積極的に使用し始めるのに2週間かかりました。 Joeは、BANCStarのお気に入りの開発者ツール(ドットマトリックスプリンター、カラーテキストハイライター、フォルダーフォルダー)を利用して、システムから多数のテーブル値の印刷物を収集しました。 ちなみに、フォルダ内のプリントアウトは「誰かが多少重要なものを変更するとすぐに狂信的に更新されました」-もちろん、これはすべて手動で行われました。



ジョーは1997年に最初に発行されたこの言語に関する記事で述べたように、「[ソースコードの一部を引用]地球上の10人がこのコードを読むことができるため、企業情報の普及についてあまり心配していません。」 実際、90年代初頭、この言語は銀行の構造で実際に使用されていました-難解なプログラミング言語のように見えますが。



ちなみに、この言語で有効な文字は数字、マイナス記号、コンマ(および改行)のみであり、コードへのコメントは厳密に禁止されています。 同時に、BANCStarで記述された作業ファイルの平均長は、ジョーの回想によれば、数百行(まれな場合には数千行)に達しました。



BANCStarと比較して、現在人気のあるほとんどの言語は、明らかに「人道的」であり、学習と使用がはるかに簡単です。 しかし、ジョン・グラハム・カミングが正しく指摘しているように、「[言語戦争]は大部分が敗者の運命である。これは「ビジネス上ではない紛争」だからだ」 たとえば、私がPHPで書いた場合、結果はひどいものになりますが、他の人はこの言語で驚くほど働くことができます。 BANCStarで書かれた1350のファイルの中には、おそらく傑作もあることを知っている人もいますが、今ではそれらを鑑賞できる人はほとんどいません。



思考のスタイルとしてのプログラミング



もちろん、BANCStarの例はルールの例外です。 現代のプログラミング言語の大部分は非常に簡単に習得できます。 さらに、一部の開発者や科学者は、プログラミングを学ぶプロセスそのものが、新しい概念の認識に対するアプローチを変えるとさえ信じています。



この役職は、マサチューセッツ州のオーリン工科大学でコンピューターサイエンスの教授であり、プログラミングに関するいくつかの本の著者であるアレンダウニー(アレンダウニー)が務めています。 彼過去に、「自然言語-数学表記-擬似コード-コード」というリンクがプログラミングの研究によく使用されたことを思い出します。



自然言語は表現力豊かで理解しやすく、擬似コードはより正確で、数学表記は簡潔さを提供し、コード自体は作業で直接使用できます。 一方、現代のプログラミング言語はこれらすべての特性(表現力、正確性、簡潔性、強制力)を備えているため、最終的な目標としてだけでなく、学習ツールとしても使用できます。



アレン・ダウニーは信号処理を例として挙げます-一方では、無線工学のこのセクションは「ボトムアップ」で研究できます-つまり、最初に信号処理の理論(アナログ信号を変換するための数学的な方法)を理解してから、アプリケーションの記述に進みます。 ただし、最新のプログラミング言語を使用すると、プロセス全体を有効にすることができます。最も重要なアルゴリズムを実装するライブラリの使用から始めて、その動作方法を詳細に理解するだけです。



一見、このアプローチは「型にはまらない」ように思われますが、学習プロセスをよりインタラクティブにし、コース全体で学習する意欲を維持するのに役立ちます。



おそらく、この「タスクへの没入」の形式は古典的なトレーニングのようには見えませんが、試してみる価値があります。将来のプログラミング能力は、数学の主要なセクションの読解、作文、知識と同じように新しい分野の研究のための基本的な要件になるでしょう。



しかし、プログラミングはポイントではありません



成功したプログラマーでさえ、仕事中のプログラミングは主なものではありません。 ジェフ・アトウッドビル・ゲイツを例として挙げます。彼はスピーチの1つで、専門職で3-4年経った後、プログラマーはスキルを根本的に向上させることができなくなると言いました。 「その後。



これは私たちをパラドックスに導きます-長年にわたって得た経験と知識は、「強力なミドル農民」から「スーパーエンコーダー」に私たちを変えません。 次に、そのような機会を決定するものは何ですか? 生来の天才を捨てると、アトウッドは次のように述べます:私たちのレベルは、開発に直接関係のないすべてを認識する方法によって大きく決定されます-私たちは、ユーザー、ビジネスプロセス、および開発者が従事している業界の特性を研究することについて話している。



これにより、「学習の範囲」がさらに広がります。「包括的な教育を受けたプログラマー」は、「仕事から休憩しながらコードを作成する」だけでなく、他の学習時に開発者のスキルを使用する準備ができていることがわかります分野(たとえば、物理学や数学のセクション)、「開発周辺」で発生するすべてのプロセスに細心の注意を払う必要があります。 もちろん、この写真は理想的なものですが、BANCStar言語と、自由に使えるテーブルのあるフォルダーがある場合に、これらのヒントを実装するとどうなるか想像してみてください。



生涯学習の経験をコメントで共有してください。現在、どの言語/フレームワークを学習しているのですか、またその理由は何ですか? あなたの意見では、プログラミングとは関係のない「サードパーティの分野」は、コードの記述によりうまく対処するのに役立ちますか?



All Articles