コンテンツにスキップ

以下はマークダウンファイルの翻訳結果です。

DEV-000 コース構造

注意:いくつかのモジュールはまだ利用できません。 利用可能なモジュールはリンクとして表示されますが、 利用できないモジュールは通常のテキストで表示されます。

モジュール 0: 開発者のマインドセット

このモジュールでは、抽象化や階層化など、開発者の世界のすべての側面の基本的な概念について説明します。

トピックには以下が含まれます。

  • 抽象化
  • 階層化
  • 標準

モジュール 1: 抽象コンピュータ

前提モジュール:

  • モジュール 0: 開発者のマインドセット

このモジュールでは、プログラマにとってコンピュータがどのように抽象化されるかを説明します。トピックには以下が含まれます。

  • 命令セットアーキテクチャ(ISA)
  • メモリの使用例、スタック、ヒープ

モジュール 2: プログラミング言語

前提モジュール:

  • モジュール 0: 開発者のマインドセット
  • モジュール 1: 抽象コンピュータ

このモジュールでは、プログラミング言語について全体像をパノラマ的に紹介します。具体的な言語のチュートリアルではなく、一般的なプログラミング言語の動作原理、主要な言語構造の比較などを説明します。

このモジュールでは、コーディングの経験がなくても構いませんが、プログラミングのチュートリアルではありません。このモジュールだけを読んでコーディングを学ぶ代わりに、具体的な言語で実際にコーディングするためにGPTに相談することを想定しています。

このモジュールを学習することで、現代のプログラミング言語の動作原理やなぜ特定の方法で設計されているのかについて理解を深めることができます。GPTの助けを借りて、どの言語でも始めてコーディングすることができるはずです。

このモジュールで扱われる具体的なトピックは以下のとおりです。

プログラミングの基礎

  • 変数と型
  • 制御フローの文
  • 関数
  • クラス
  • モジュール

プログラミング言語の分類

  • コンパイル言語とインタプリタ言語+仮想マシンベース
  • 静的型付けと動的型付け
  • ガベージコレクションとマニュアルでのリソース管理
  • ハイレベルとローレベル

プログラミング言語の共通概念

  • 抽象化
  • インタフェース&ABC&ポリモーフィズム
  • メタプログラミング
  • find-replace-based マクロ
  • ジェネリクス
  • 所有権とライフタイム
  • エラーハンドリング
  • try-catch
  • Result

その他の「異常な」言語

  • LISP

モジュール 3: 適切なコーディング

前提モジュール:

  • モジュール 2: プログラミング言語

このモジュールでは、プログラミングにおける「良い慣慣例」とパラダイム、さらにはそれらの背後にあるロジックについて説明します。

このモジュールを学習することで、数十万行のコードを持つ大規模なプロジェクトの設計とコーディング方法についての良いアイデアを得ることができます。

コーディングの一般的な慣習

  • コードスタイル
  • CODE_OF_CONDUCT
  • 識別子の命名規則
  • コメントとドキュメント文字列
  • テスト(いくつかの概念のみ触れる)

プログラミングの原則

  • 構文と意味論:できること対すべきこと(通常)
  • 同じことを繰り返さない(DRY原則)
  • エレガンスの原則
  • 階層化
  • カップリングと結合度
  • 実装に依存しないでインタフェースを使う
  • コメントを書く
  • プログラムが短い場合は、すべての原則を忘れる

プログラミングパラダイム

  • オブジェクト指向プログラミング
  • 関数型プログラミング

ソフトウェアシステムの設計

  • モジュール&API&インタフェース
  • カップリングと結合度
  • その他の考慮事項
  • 依存関係の抽象化

モジュール 4: ターミナルとスーパーユーザーの基礎

前提モジュール:

  • モジュール 2: プログラミング言語(推奨)

このモジュールでは、ターミナル、オペレーティングシステムの基礎、およびその他の「スーパーユーザースタッフ」を紹介します。

このモジュールにより、ボタンのドラッグ&ドロップやボタンプッシュでコンピュータと対話する「通常のユーザー」から、ターミナルの使用やマルチブートの実行に慣れた「スーパーユーザー」になることができます。

以下に具体的なトピックを示します。

ターミナルとシェルスクリプト

  • ターミナルとは?シェルとは?シェルスクリプトとは?
  • シェルスクリプト言語の分類:テキストベース(bash)とデータ指向(powershell&nushell)
  • シェルスクリプト言語とプログラミング言語の主な違い
  • シェルスクリプトの基礎
  • 基本コマンド
    • cd、pwd、pushd、popd、findなど
  • 変数と制御フローなど
  • コマンド
  • パイプとリダイレクション
  • 環境変数
  • その他
    • &&、;、$!など
  • ターミナルのヒントと一般的な手法
  • 自動補完、履歴など
  • シェルの設定ファイル
  • プロンプトのカスタマイズとテーマ設定
  • シェルプラグイン
  • 一般的なツール&コマンド
    • grep、cut、awk、tmux、sshなど

パッケージ管理

  • ソフトウェアの依存関係
  • ソフトウェアパッケージ
  • パッケージマネージャー

その他

  • 設定ファイル
  • vimとemacs
  • 仮想化とDocker
  • ブート
  • ハードドライブのパーティションと(g)parted
  • ブートローダーとGRUB
  • BIOSとUEFI
  • デュアル(マルチ)ブート
  • Linux雑多な話題
  • カーネルモジュール

モジュール 5: ソフトウェア開発

前提モジュール:

  • モジュール 2: プログラミング言語
  • モジュール 3: 適切なコーディング

このモジュールでは、ソフトウェア開発に関連する一般的な概念とツールについて説明します。

このモジュールを学習することで、大規模なプロジェクトを始め、チームでコーディングし、公開することに自信を持つことができるようになります。

以下に具体的なトピックを示します。

ソフトウェアシステムの共通概念

  • バージョン管理と依存関係
  • セマンティックバージョニング
  • インタフェース&API&ライブラリ
  • リモートプロシージャコール(RPC)
  • シリアライズとデシリアライズ
  • プロセス間通信(IPC)
  • フレームワーク
  • フレームワークとは?フレームワークの利点は?
  • フレームワークとライブラリ
  • 例:Flutter(UI)、PyTorch(深層学習)、Unity(ゲーム開発)
  • 仕様と標準(概念を説明するための例を使用)
  • 標準の必要性
    • CPU命令セットアーキテクチャ(ISA)
    • GPUの仕様(OpenGL&Vulkan)
    • データ表現の標準(JSON、TOML、YAML、XML、HTML)

テスト

  • ユニットテスト

ドキュメンテーション

  • ドキュメント文字列
  • APIドキュメント
  • チュートリアル
  • ドックテスト
  • 一般的なドキュメンテーションフレームワークと言語
  • Sphinxとmkdocs(言及のみ)
  • MarkdownとRST

ビルドとデプロイ(仮)

  • ビルドシステム

バージョン管理

  • バージョン管理とGit

標準化と共同作業

  • 貢献者間の標準化の必要性
  • CODE_OF_CONDUCT

CI/CD

その他

  • PRとIssues
  • README、CONTRIBUTE、LICENSE
  • TODOとFIXME

モジュール 6: 並行プログラミング

前提モジュール:

  • モジュール 2: プログラミング言語
  • モジュール 3: 適切なコーディング(推奨)

これは比較的独立したモジュールで、並行プログラミングに関連する概念について説明します。

以下にトピックを示します。

並行性の紹介

並行性モデル

  • 並行性と並列性

並行性の問題

  • データ競合

低レベルの並行プログラミング

同期プリミティブ

  • ロック(ミューテックス)
  • セマフォ
  • リード・ライトロック

並行プログラミングのパラダイム

  • チャネル
  • 生産者と消費者
  • 非同期プログラミング
  • Futuresとポーリング
  • asyncとawait

モジュール 7: コンピュータアーキテクチャ基礎

前提モジュール:

  • モジュール 1: 抽象コンピュータ
  • モジュール 2: プログラミング言語(強く推奨)

このモジュールでは、コンピュータのハードウェアの基本的な動作原理について紹介します。

このモジュールを学習することで、コンピュータについてより深い理解を持ち、ハードウェアを最適な方法で活用するプログラムをコーディングすることができるようになります。

以下にトピックを示します。

CPU

  • パイプライン
  • メモリ階層
  • 分岐予測と仮想実行
  • 順次処理外し
  • ベクトル命令&SIMD

GPU&アクセラレータ

モジュール 8: 開発者の世界のその他のトピック

前提モジュール:

  • モジュール 2: プログラミング言語(強く推奨)
  • モジュール 3: 適切なコーディング(推奨)

このセクションでは、開発者の世界のさまざまな領域と一般的なツールについて説明します。

以下にトピックを示します。

UI&アプリ開発

  • 宣言型UI対命令型UI

ゲーム開発

  • エンティティコンポーネントシステム(ECS)

GPUプログラミング

  • ハイレベル:OpenGL
  • ローレベル:Vulkan

その他

  • Stackoverflow
  • GitHub
  • IDE
  • LSP
  • Hugging Face

モジュール 9: AIを利用した開発とAIソフトウェア開発

前提モジュール:

  • モジュール 2: プログラミング言語
  • モジュール 3: 適切なコーディング(推奨)

このモジュールでは、AIを活用してより良い開発を行う方法や、AIを活用したアプリケーションの開発方法について説明します。

以下にトピックを示します。

人工知能の基礎

  • ディープラーニングの基礎
  • 開発者向けのディープニューラルネットワークとAIサービスの抽象化

AIを利用した開発

  • コード補完
  • AIコード生成(論理コード、ユニットテスト、ドキュメントなど)
  • 自動国際化
  • AIと補完するGoogle

AIソフトウェア開発

考え方の変化:これは「従来のソフトウェア開発」とどう異なるのか?

  • 決定論→非決定論的な動作
  • 構造化データ→自然言語
  • AIによる制御フロー
  • 短い待ち時間→長時間の処理
  • エラーハンドリングとAIの頑健性の確保方法

現在のパラダイムと一般的な慣習

  • AIエージェント
  • 検索増強生成(RAG)とベクトルデータベース
  • プロンプトエンジニアリング&プロンプトテンプレート

以上が翻訳結果です。