# CÓDIGO BRAZUCA ACADEMY - POLKADOT JOURNEY
- [Introduction to Coding Logic and Algorithms (24 hours)](#Introduction-to-Coding-Logic-and-Algorithms-24-hours)
- [Basic Data Structures](#Basic-Data-Structures)
- [Classic Algorithms](#Classic-Algorithms)
- [Advanced Algorithms](#Advanced-Algorithms)
- [Problem-solving](#Problem-solving)
- [Java Script (48 Hours)](#Java-Script-48-Hours)
- [Introduction to JavaScript](#Introduction-to-JavaScript)
- [JavaScript Fundamentals](#JavaScript-Fundamentals)
- [Advanced JavaScript Concepts](#Advanced-JavaScript-Concepts)
- [Web Development with JavaScript](#Web-Development-with-JavaScript)
- [Client-Side Web Development Frameworks](#Client-Side-Web-Development-Frameworks)
- [Modern JavaScript Features](#Modern-JavaScript-Features)
- [Advanced Web Development Techniques](#Advanced-Web-Development-Techniques)
- [Final Project](#Final-Project)
- [TypeScript (48 Hours)](#TypeScript-48-Hours)
- [Introduction to TypeScript](#Introduction-to-TypeScript)
- [TypeScript Features](#TypeScript-Features)
- [TypeScript Concepts](#TypeScript-Concepts)
- [TypeScript Techniques](#TypeScript-Techniques)
- [TypeScript and JavaScript Interoperability](#TypeScript-and-JavaScript-Interoperability)
- [Advanced TypeScript Topics](#Advanced-TypeScript-Topics)
- [Advanced TypeScript Projects](#Advanced-TypeScript-Projects)
- [Final Project](#Final-Project)
- [Web3 (48 hours)](#Web3-48-hours)
- [Economics](#Economics)
- [Introduction to Blockchain](#Introduction-to-Blockchain)
- [Blockchain Fundamentals](#Blockchain-Fundamentals)
- [Web3 Development Tools and Libraries](#Web3-Development-Tools-and-Libraries)
- [Drex](#Drex)
- [Final Project](#Final-Project)
- [Introduction To Polkadot Ecosystem (8 Hours)](#Introduction-To-Polkadot-Ecosystem-8-Hours)
- [What is Polkadot?](#What-is-Polkadot)
- [Practical](#Practical)
- [Tech Stack](#Tech-Stack)
- [Polkadot Infrastructure & Tooling (48 Hours)](#Polkadot-Infrastructure-&-Tooling-48-Hours)
- [Linux for Blockchains Setup](#Linux-for-Blockchains-Setup)
- [Building a local Blockchain](#Building-a-local-Blockchain)
- [Tooling](#Tooling)
- [Getting Started with Substrate](#Getting-Started-with-Substrate)
- [Build a Parachain](#Build-a-Parachain)
- [Final project](#Final-project)
- [Rust I (96 hours)](#Rust-I-96-hours)
- [Introduction to Rust and Development Environment](#Introduction-to-Rust-and-Development-Environment)
- [Basic Rust Concepts](#Basic-Rust-Concepts)
- [Ownership and References](#Ownership-and-References)
- [Basic Data Structures](#Basic-Data-Structures)
- [Enums and Pattern Matching](#Enums-and-Pattern-Matching)
- [Error Handling](#Error-Handling)
- [Programming in Rust](#Programming-in-Rust)
- [Basic Concurrency](#Basic-Concurrency)
- [File Handling and Input/Output](#File-Handling-and-Input/Output)
- [Object-Oriented Programming in Rust](#Object-Oriented-Programming-in-Rust)
- [Safe and Efficient Programming](#Safe-and-Efficient-Programming)
- [Rust for Command Line Application (CLI) Development](#Rust-for-Command-Line-Application-(CLI)-Development)
- [Testing and Documentation](#Testing-and-Documentation)
- [Package Publishing and Dependency Management](#Package-Publishing-and-Dependency-Management)
- [Rust and Performance](#Rust-and-Performance)
- [Integration with Other Languages](#Integration-with-Other-Languages)
- [Final Project](#Final-Project)
- [Rust II - Advanced Rust (64 Hours)](#Rust-II---Advanced-Rust-64-Hours)
- [Rust for Parallel and Distributed Computing](#Rust-for-Parallel-and-Distributed-Computing)
- [Advanced Concurrency](#Advanced-Concurrency)
- [Advanced Traits and Generics](#Advanced-Traits-and-Generics)
- [Metaprogramming with Macros](#Metaprogramming-with-Macros)
- [Advanced Error Handling](#Advanced-Error-Handling)
- [Advanced I/O and Asynchronous Programming](#Advanced-IO-and-Asynchronous-Programming)
- [Unsafe Rust](#Unsafe-Rust)
- [Advanced Testing and Benchmarking](#Advanced-Testing-and-Benchmarking)
- [Final Project](#Final-Project)
- [Sustrate/Polkadot SDK I (60 hours)](#Sustrate/Polkadot-SDK-I-60-hours)
- [Introduction to Blockchain Development and Substrate](#Introduction-to-Blockchain-Development-and-Substrate)
- [Substrate Runtime Development](#Substrate-Runtime-Development)
- [Customizing Substrate Chains](#Customizing-Substrate-Chains)
- [Substrate Networking and Consensus](#Substrate-Networking-and-Consensus)
- [Substrate Frontend Development](#Substrate-Frontend-Development)
- [Governance and Upgrades](#Governance-and-Upgrades)
- [Substrate Ecosystem and Community](#Substrate-Ecosystem-and-Community)
- [Substrate/Polkadot SDK II (40 hours)](#Substrate/Polkadot-SDK-II-40-hours)
- [Building and Deploying a Real-World Substrate Project](#Building-and-Deploying-a-Real-World-Substrate-Project)
- [Final Project](#Final-Project)
## Introduction to Coding Logic and Algorithms (24 hours)
- Definition of an algorithm
- Importance of algorithms in computerscience
- Characteristics of good algorithms
### Basic Data Structures
- Arrays and lists
- Stacks and queues
- Trees and graphs
- Hash tables
### Classic Algorithms
- Binary search
- Quicksort
- Insertion sort
- Dijkstra’s algorithm for shortest path
- Kruskal’s algorithm for minimum spanning tree
### Advanced Algorithms
- Backtracking algorithms
- Maximum flow algorithms
- Pattern matching algorithms
- Probabilistic algorithms
### Problem-solving
- Implementation of algorithms in popular programming languages
- Project development using learned algorithms
## Java Script (48 Hours)
### Introduction to JavaScript
- Understanding the basics of JavaScript: history, purpose, and features.
- Setting up the development environment: Nodejs and nvm
- Writing your first JavaScript code:
- Exploring JavaScript in the browser: DOM manipulation and event handling.
### JavaScript Fundamentals
- Control flow and loops: if statements, switch statements, and loops (for, while, do-while).
- Functions in JavaScript: declaration, parameters, return values, and scope.
- Understanding arrays: creating, accessing, and manipulating arrays.
- Working with objects: object literals, properties, methods, and constructors.
### Advanced JavaScript Concepts
- Closures and lexical scope
- Prototypes and inheritance
- Asynchronous JavaScript: callbacks, promises, and async/await for handling asynchronous operations.
- Error handling in JavaScript
- Most common pitfalls in async error handling
### Web Development with JavaScript
- Introduction to HTML and CSS
- Manipulating the DOM
- Event delegation and bubbling
- Introduction to AJAX and Fetch API: making synchronous requests to fetch data from a server.
### Client-Side Web Development Frameworks
- Introduction to popular JavaScript frameworks/libraries: React, Svelte, Angular and Vue.js.
- Setting up a project with React: creating components, state management, and routing.
- Exploring Angular: components, modules, services, and dependency injection.
- Vue.js fundamentals: data binding, directives, and computed properties.
### Modern JavaScript Features
- ES6 and beyond: arrow functions, template literals, destructuring, spread/rest operators, and classes.
- Modules in JavaScript: importing and exporting modules using ES6 module syntax.
- Working with the Document Object Model (DOM) API
- Introduction to Web APIs: Geolocation API, Local Storage API, and Fetch API.
### Advanced Web Development Techniques
- Responsive web design: media queries and flexbox for creating responsive layouts.
- Introduction to CSS preprocessors: Sass and Less for writing efficient CSS code.
- Tailwind and styled components.
- Building interactive web applications: implementing form validation and client-side form submission.
- Optimizing web performance: minimizing render-blocking resources, lazy loading, and code splitting.
### Final Project
Assestment exam
## TypeScript (48 Hours)
### Introduction to TypeScript
- history, features, and benefits.
- Setting up the development environment: tsserver
- TypeScript basics: syntax, variables, data types, and type annotations.
### TypeScript Features
- Functions in TypeScript: parameters, return types, arrow functions, optional and default parameters.
- TypeScript Enums: defining and using enums, string enums, enums with associated values.
- TypeScript Interfaces: defining interfaces, optional properties, readonly properties, index signatures.
### TypeScript Concepts
- Generics in TypeScript: understanding generics, generic functions, generic classes, and constraints.
- Advanced type manipulation: union types, intersection types, type guards, discriminated unions.
- Working with Modules: importing and exporting modules, namespace vs. module, ambient modules.
### TypeScript Techniques
- Type inference and type compatibility: understanding how TypeScript infers types and enforces type compatibility.
- Advanced error handling with TypeScript: nullable types, strict null checks, handling null and undefined.
- Asynchronous programming with TypeScript: async/await syntax, promises with TypeScript, error handling in async functions.
- Functional vs object-oriented programming
### TypeScript and JavaScript Interoperability
- Using JavaScript libraries with TypeScript: typings, declaration files, and type definitions.
- Introduction to TypeScript decorators: class decorators, method decorators, property decorators.
- Migrating existing JavaScript codebases to TypeScript: gradual adoption, refactoring strategies, and best practices.
### Advanced TypeScript Topics
- Advanced TypeScript tooling and ecosystem: frameworks for testing, development, linting, and deploying.
- TypeScript compiler options, tsconfig.json, custom transformers.
- Exploring advanced TypeScript features and experimental proposals: conditional types, template literal types, etc.
### Advanced TypeScript Projects
- Working on advanced TypeScript projects: building real-world applications, implementing complex features.
- Code reviews and feedback sessions: reviewing and providing feedback on peers’ projects.
- Assessing the understanding and proficiency of students in TypeScript concepts and techniques.
### Final Project
- Assestment exam
## Web3 (48 hours)
- Introduction to Web3
- Evolution from Web 1.0 to Web 3.0
- Key concepts: decentralization, blockchain, smart contracts, and decentralized applications (dApps)
### Economics
- The evolution of Money
- 1929 Crisis
- Bretton Woods System
- 1971 Dollar Transition
- 1973 Oil Crises
- 2008 Crisis
- Bitcoin
### Introduction to Blockchain
- Origins
- Key Concepts
- How a Blockchain Works
- Basic concepts
- Centralized Systems x Decentralized Systens
- Types of Blockchain
- Blockchain Trillema
- Blockchain Layers
- Consensus Algorithms (POW, POS, BFT, POA)
- Hash
- Ledger
- Wallet
- Nodes
- Mainnet and Testnets
- Forks
- Blockchain Explorers
- Bitcoin Blockchain
- Introduction to Ethereum blockchain
- Ethereum Virtual Machine (EVM)
- Solidity and smart contracts
- Deploying a Token in a EVM blockchain
### Blockchain Fundamentals
- Understanding transactions, blocks, and the distributed ledger
- Decentralized Applications (dApps)
- Overview of decentralized application architecture
- Most relevant dapps
- Decentralized Finance (DeFi)
- Overview of DeFi protocols and applications
- Decentralized exchanges (DEX), lending, platforms, and yield farming, Non-Fungible Tokens (NFTs)
- Introduction to NFTs and their use cases
- Creating and trading NFTs on Ethereum and other blockchain platforms
- Standards such as ERC-721 and ERC-1155 Decentralized Identity and Governance
- Self-sovereign identity and decentralized identity solutions
- Decentralized autonomous organizations (DAOs) and their governance mechanisms
- Voting mechanisms and decentralized decision-making processes
### Web3 Development Tools and Libraries
- Introduction to Truffle Suite, Remix, and Hardhat
- Web3.js and ethers.js: libraries for interacting with Ethereum and other blockchains
- IPFS (InterPlanetary File System) and its role in decentralized web development
### Drex
- What is it?
- Importance of Drex
- Implementations
- Brazil and Drex
### Final Project
- Assestment exam
## Introduction To Polkadot Ecossystem (8 Hours)
### What is Polkadot?
- Origins
- The DOT token
- Governance (Gov1 and OpenGov)
- Community
- Archicture
- Relay Chains
- Parachains and Parathreads
- Bridges
- XCM
- Validators
- Nominators
- Collators
### Practical
- Wallet
- Creating an account
- Testnets
- Faucets
### Tech Stack
- Dev Tools
- Polkadot API
- Tooling
- Telemetry
- Rust
- Substrate
## Polkadot Infrastructure & Tooling (48 Hours)
### Linux for Blockchains Setup
- Preparing the enviroment
- Good Practices
- Docker x Local Enviroment
### Building a local Blockchain
- Type of Nodes
- Setup a substrate node template
- Starting a Local Network
- Add Trusted Nodes
- Prometheus
- Zombienets
### Tooling
- How to use Polkadot JS Apps
- Querying chain state through the UI
- Signing extrinsics through the UI
- Polkadot API
- Queries using TypeScript
- Decoding results and mapping types
- Signing extrinsics using TypeScript
- Using Chopsticks
### Getting Started with Substrate
- Anatomy of a Substrate blockchain: runtime, consensus, and networking
- Building your first Substrate blockchain using the Substrate Node Template
- Compiling, running, and interacting with a Substrate node
### Build a Parachain
- Setup a relay chain
- Connect a local parachain
- Acquire a testnet slot
- Operations
### Final project
- Assestment exam
- Creating An Archive Node in the wild
## Rust I (96 hours)
### Introduction to Rust and Development Environment
- Introduction to Rust: history, features, and usage.
- Rust installation and development environment setup.
- Hello World in Rust: writing and running the first program.
### Basic Rust Concepts
- Variables, constants, and data types in Rust.
- Operators and expressions.
- Control flow: if, else, loops, match.
- Working with functions: definition, parameters, return, and scope.
### Ownership and References
- Ownership and borrowing.
- References and mutability.
- Slices in Rust.
### Basic Data Structures
- Vectors and slices.
- Strings in Rust.
- Working with tuples and structs.
### Enums and Pattern Matching
- Defining and using enums.
- Pattern matching in Rust.
### Error Handling
- Error handling in Rust: Result and Option.
- Throwing and catching errors with Result and Option.
### Programming in Rust
- Higher-order functions.
- Iterators and functional programming.
- Closures in Rust.
### Basic Concurrency
- Introduction to concurrency in Rust.
- Threads and basic concurrency.
- Communication between threads using channels.
### File Handling and Input/Output
- Reading and writing files in Rust.
- Working with stdin/stdout.
- Handling input/output errors.
### Object-Oriented Programming in Rust
- Basic object-oriented programming concepts in Rust.
- Defining methods in structs.
- Traits in Rust.
### Safe and Efficient Programming
- Basic security in Rust.
- Memory management without garbage collection.
- Safe usage of pointers and references.
### Rust for Command Line Application (CLI) Development
- Developing command line applications in Rust.
- Command line arguments and CLI parsing.
- Useful packages and tools for CLI development in Rust.
- Working with the standard error system.
### Testing and Documentation
- Writing unit tests and integration tests in Rust.
- Documentation in Rust using Rustdoc.
- Best practices for testing and documentation in Rust.
### Package Publishing and Dependency Management
- Preparing a Rust project for publication.
- Using Cargo to manage dependencies.
- Publishing packages on crates.io.
### Rust and Performance
- Code optimization in Rust.
- Profiling tools in Rust.
- Strategies for improving code performance in Rust.
### Integration with Other Languages
- Integrating Rust with other programming languages.
- Rust as a language extension for other languages.
### Final Project
- Practical Project I
- Practical Project II
## Rust II - Advanced Rust (64 Hours)
Rust for Parallel and Distributed Computing
- Parallel and distributed computing in Rust.
- Libraries and tools for parallel and distributed programming in Rust.
### Advanced Concurrency
- Advanced multi-threading with the `std::sync` module
- Concurrent data structures: `Mutex`, `RwLock`, `Atomic`
- Async/await syntax and programming with `async`/`await` in Rust
### Advanced Traits and Generics
- Associated types and default type parameters
- Higher-kinded types and trait objects
- Implementing advanced trait bounds and constraints
### Metaprogramming with Macros
- Procedural macros: `derive`, `attribute`, and
`function-like` macros
- Implementing custom procedural macros
- Advanced macro use cases and best practices
### Advanced Error Handling
- Custom error types and error chaining
- Advanced use of `Result` and `Option`
- Error handling patterns in complex applications
### Advanced I/O and Asynchronous Programming
- Advanced file I/O with `tokio` and `async-std`
- Building network services with asynchronous programming
- Integrating asynchronous programming with existing synchronous code
### Unsafe Rust
- Understanding `unsafe` blocks and operations
- Interfacing with C code using `unsafe`
- Writing safe abstractions around unsafe code
### Advanced Testing and Benchmarking
- Property-based testing with `proptest`
- Benchmarking with `criterion`
- Fuzz testing and improving code robustness
### Final Project
## Sustrate/Polkadot SDK I (60 hours)
### Introduction to Blockchain Development and Substrate
- Understanding blockchain technology and its applications
- Introduction to Substrate: features, benefits, and use cases
- Setting up the development environment for Substrate
### Substrate Runtime Development
- Understanding the Substrate runtime: FRAME, pallets, and storage
- Writing custom pallets for your Substrate runtime
- Testing and debugging custom pallets using Substrate’s development tools
### Customizing Substrate Chains
- Configuring and customizing the Substrate Node Template
- Adding custom features and functionalities to your Substrate chain
- Building and deploying a customized Substrate chain
### Substrate Networking and Consensus
- Understanding Substrate networking: roles, peers, and protocols
- Customizing networking behavior in a Substrate node
- Exploring different consensus mechanisms in Substrate
### Substrate Frontend Development
- Introduction to Substrate Frontend Development using Polkadot.js
- Building a simple frontend application to interact with a Substrate chain
- Integrating custom UI components with a Substrate chain
### Governance and Upgrades
- Understanding Substrate governance: council, voting, and proposals
- Managing chain upgrades and runtime upgrades in Substrate
- Implementing on-chain governance mechanisms in a Substrate chain
### Substrate Ecosystem and Community
- Exploring the Substrate ecosystem: parachains, bridges, and interoperability
- Engaging with the Substrate community: forums, events, and resources
- Contributing to the Substrate ecosystem: projects, libraries, and documentation
## Substrate/Polkadot SDK II (40 hours)
### Building and Deploying a Real-World Substrate Project
- Working on a real-world Substrate project from start to finish
- Collaborative project work, code reviews, and feedback sessions
### Final Project
- Deploying the final project on a testnet
- Assestment exam