同志のエンジニア、 キエフ工科大学で教え始めてから4年目です。 この間、私は膨大な数のコード例と資料、約90の講義を蓄積しました。 私の専門的な活動の全期間(これはほぼ毎日24年間コードを書いています)で、最近のようにプログラミングレベルを上げたことはありません。 以前は簡単に、難しく、堂々と書くことが習熟の高さであると思われた場合、今では学生は最小限の説明の後に私のコードを理解する必要があることに気付きました。そうしないと機能しません。 この能力は、トレーニングコードだけでなく、作業中のコード全体にも拡張可能であり、また拡張する必要があるという結論に達しました。 さらに、トレーニングコードではなく、実際のシステムの作成方法を将来のエンジニアに教えるため、トレーニングコードは動作中のコードと大きく異なることはありません。 そして、多くのリクエストの後、私はすべての講義をスクリーンキャストの形式で記録することにしました。スクリーンキャストは講義の直後にYouTubeに送信されます。 今年度は100件の講義を記録する予定です。そのうち23件は既に公開されており 、さらに67件の講義と10件の新しい講義の資料はまだ準備中です。
コースコンセプト
私たちの業界では、基礎的な工学教育に重大な問題があることをご存知でしょう。
- 大学のコースは多くの場合時代遅れであり、多くの要望が残されています。
- 一般的に受け入れられている用語は形成されていません(紛争では、私たちはしばしば同じことを異なる言葉や異なる言葉と同じ言葉で呼びます)、私たちはこれに混乱します、
- インターネット上の記事やビデオは、自分の資格で十分だと思っている人なら誰でも簡単に発行できます。
- プログラミングでは、経験の蓄積は人々の職業からの急速な脱退によって妨げられ、結局、基本的なアイデアは周期的に繰り返されますが、前のラウンドで経験を積んだ人はもはや練習しておらず、若い同僚に熊手とボトルネックがどこにあるかを伝えることができません。
JavaScriptに基づいてコースを構築することは確かに実験的な取り組みですが、この言語は確かに現代のITの誰にとっても不必要ではありません。 JavaScript開発者自身は、基本的なエンジニアリングトレーニングが不十分であり、データ構造、アルゴリズム、基本的な抽象化、パターン、アーキテクチャ、パラダイム、プログラミング技術に関する基本的な知識が不足していることがよくあります。 業界で記述されているコードのほとんどは、作成後すぐに破棄され、その後、書き直されて再び破棄されます。 一般に、インタビューを除き、品質と知識が必要になることはめったにありません。 低品質のコードを作成してそれを維持するか、コードを破棄して再記述のために時間をかけることが最善です。 さらに、私たちの業界は科学から完全に離婚しており、マーケティング言語の重要なメリットがあります。プログラミング言語や抽象化ではなく、すでにプログラミングしていますが、美しいラッパーに「入り込んだ」フレームワークとライブラリでプログラミングしています。 多くの場合、科学的な理解なしに、キューブからすべてを組み立てますが、なぜそうしないのかという疑問に答えることはめったにありません。 部分的にすべてがすでにかなり前に書かれており、すべてがインターネット上で見つけることができますが、一方が他方と一緒に成形されない、つまり、部分的には成形されますが、一緒に機能しないことが判明しました。 個別のコードをリンクすることは、個別に行うよりもはるかに困難です。 これは、体系的なアプローチの欠如、専門家の用語の分割、概念の非同期化が原因で起こります。 イデオロギー的に互換性のあるものだけが一緒に機能します。これは、一般理論とこの理論から派生した一般標準に基づいています。 このコースで、業界にとって重要なコンセンサスに到達するために、少なくとも小さな一歩を踏み出すことを願っています。
すべてのコース資料はgithubで無料で入手でき、講義は公開されており、無料で参加できます。 毎週4つの講義を記録しています。 さらに多くのセミナーやワークショップを実施していますが、記録されていません。
コース構成
- 基本概念 :ソフトウェアの抽象化、変数、演算子、データ型、配列、構造、スカラーおよび参照型、マッピング。
- 主な概念 :関数、コンテキストとスコープ、クラスとオブジェクト、プロトタイプ、メソッド、ラムダ、純粋な関数、副作用、クロージャー、部分使用、カリー化、合成、高階関数、コールバック、ラッパー、デコレーター、不純物、イベント、インターフェース、シングルトン、イテレーター、機能オブジェクト、ファンクター、モナド、ファイル処理、ストリーム、ソケット、メモ化、継承、ジェネレーター、非同期プログラミング、chining、モジュールと依存関係、エラー処理、ファクトリーとプール、タイマー、正規表現;
- サポート資料 :git、バージョン管理システムおよびパッケージマネージャー、コンソールの操作、テスト、継続的統合、ロギング、リンター、最適化およびパフォーマンス、メモリリークの防止、隠しクラス、単相関数、ジェネリック、ガベージコレクション、メモリ管理;
- データ構造 :コレクション、配列、型付き配列、バッファ、リスト、スタック、キュー、デッキ、バイナリツリーと階層ツリー、多次元ツリー、回転とバランス分岐、セット、ハッシュマップ、グラフ、拡張リスト、非同期キュー、オートマトン、データ構造の反復および検索;
- 拡張コンセプト :シンボル、プロキシ、異なる、未来と約束、レンズ、トランスデューサー、非同期/待機、データコレクター、非同期構成、非同期アダプター、非同期イテレーター、イントロスペクション、リフレクション、足場、制御の反転と依存性の注入、サンドボックス、レイヤードアーキテクチャコンポーネントアプローチ、データアクセスレイヤー、データプロジェクション、ファイルシステムモニタリング、クライアントサーバーおよび3リンクアーキテクチャ、クラスタリングおよびバランシング、プロトコル設計、動的モジュールオーバーロード、メタデータ、din ミカルバインディング、プロセス間相互作用。
- コードとテクノロジーの統合使用例 :ライブスプレッドシート、Webソケットでのチャット、グラフクエリ言語の実装、非同期抽象化メタ同期の代替ライブラリ、異なるパラダイムでの同じタスクの実装の比較、関数型プログラミングスタイルの比較、アプリケーション構造の例、node.jsのハンドラーのルーティングアプリケーション、サンドボックス内のコード分離、トランザクションオブジェクト。
- プログラミングパラダイム :命令型、構造型および非構造型、手続き型、オブジェクト指向、プロトタイプ、機能型、論理型、宣言型、非同期型、反応型、イベント、自動、汎用、データ駆動型プログラミング、マルチパラダイム、メタプログラミング。
参照資料
講義カレンダーは2つのmitapグループで利用できます: HowProgrammingWorks (これらはJavaScriptの例を使用したプログラミングの講義です)およびNodeUA (これらはNode.jsの講義です)。講義に参加したい人は全員直接登録することをお勧めします。 入場は誰でも無料ですが、組織的には学生数を簡単に見積もることができます。 歴史を通じて、私は症例と600人と2人を抱えてきましたが、投票率は予測できません。
録画されたすべてのビデオは、同じ日(講義の10〜20分後) にyoutubeチャンネルに表示されます。
講義は、 プログラミングとJavaScriptおよびNode.jsの 2つのプレイリストにグループ化されます 。
講義と資料へのリンクを、プログラミングとJavaScript、およびNode.jsとその他のより複雑なトピックの 2つのテレグラムチャネルに配置します 。
ディスカッションと質問には、プログラミングとJavaScript、 Node.jsの 2つの電報グループがあります。
私のgithubアカウント、 HowProgrammingWorksのトレーニングリポジトリ、 コミュニティライブラリ。
おわりに
新しいトピックでコースを補足する提案を待っています。他の言語への例の翻訳を含む、コード例の反紹介を期待しています。 フィードバックはコースの改善に役立ちます。