From 611bafa26de1a11f04aab9b90f1643498da9b796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20Bregu=C3=AAz?= Date: Mon, 12 Oct 2026 00:40:02 -0300 Subject: [PATCH 1/4] content: curate mobile, Python and DevOps resources the learning paths need Adds 41 checked entries (all HTTP 200): - mobile: official Android, Apple, SwiftUI, Flutter, React Native, Expo, Firebase, Material 3 and Human Interface Guidelines resources, plus the Kotlin and Swift docs; - Python: the official tutorial, Python for Everybody, Automate the Boring Stuff and PEP 8; - DevOps (mainly pt-BR, which lacked them): Terraform, GitHub Actions, GitLab CI/CD, Docker Get Started and the Kubernetes docs in Portuguese. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../development-environment/learn.yaml | 28 ++++++++++ _data/en-US/development/plataforms/learn.yaml | 49 ++++++++++++++++ .../development/plataforms/publications.yaml | 14 +++++ _data/en-US/development/plataforms/tools.yaml | 7 +++ .../programming-languages/learn.yaml | 42 ++++++++++++++ .../development-environment/learn.yaml | 40 +++++++++++++ _data/pt-BR/development/plataforms/learn.yaml | 56 +++++++++++++++++++ .../development/plataforms/publications.yaml | 16 ++++++ _data/pt-BR/development/plataforms/tools.yaml | 8 +++ .../programming-languages/learn.yaml | 48 ++++++++++++++++ 10 files changed, 308 insertions(+) diff --git a/_data/en-US/development/development-environment/learn.yaml b/_data/en-US/development/development-environment/learn.yaml index 8dc774b..675862b 100644 --- a/_data/en-US/development/development-environment/learn.yaml +++ b/_data/en-US/development/development-environment/learn.yaml @@ -53,3 +53,31 @@ type: "reference" access: "free" organization: "QEMU" + +- name: "Terraform Documentation" + url: "https://developer.hashicorp.com/terraform/docs" + description: "Official documentation for Terraform, covering infrastructure as code, providers, state and modules." + type: "reference" + access: "free" + organization: "HashiCorp" + +- name: "GitHub Actions Documentation" + url: "https://docs.github.com/actions" + description: "Official guide to automating builds, tests and deployments with GitHub Actions workflows." + type: "reference" + access: "free" + organization: "GitHub" + +- name: "GitLab CI/CD Documentation" + url: "https://docs.gitlab.com/ci/" + description: "Official documentation for GitLab CI/CD pipelines, jobs, runners and deployment environments." + type: "reference" + access: "free" + organization: "GitLab" + +- name: "Docker Get Started" + url: "https://docs.docker.com/get-started/" + description: "Official hands-on introduction to containers with Docker, from building images to running multi-container apps." + type: "tutorial" + access: "free" + organization: "Docker" diff --git a/_data/en-US/development/plataforms/learn.yaml b/_data/en-US/development/plataforms/learn.yaml index a467477..5d713bc 100644 --- a/_data/en-US/development/plataforms/learn.yaml +++ b/_data/en-US/development/plataforms/learn.yaml @@ -18,3 +18,52 @@ type: "course" access: "free" organization: "HashiCorp" + +- name: "Android Developers Courses" + url: "https://developer.android.com/courses" + description: "Free official courses for building Android apps with Kotlin and Jetpack Compose, from first app to architecture." + type: "course" + access: "free" + organization: "Google" + +- name: "Android Developer Documentation" + url: "https://developer.android.com/docs" + description: "Official reference and guides for the Android platform, its APIs, tooling and app quality requirements." + type: "reference" + access: "free" + organization: "Google" + +- name: "Apple Developer Documentation" + url: "https://developer.apple.com/documentation/" + description: "Official documentation for building apps on iOS, iPadOS, macOS, watchOS and visionOS with Apple frameworks." + type: "reference" + access: "free" + organization: "Apple" + +- name: "SwiftUI Tutorials" + url: "https://developer.apple.com/tutorials/swiftui" + description: "Step-by-step official tutorials that build complete iOS apps with SwiftUI, covering layout, data and navigation." + type: "tutorial" + access: "free" + organization: "Apple" + +- name: "Flutter Documentation" + url: "https://docs.flutter.dev/" + description: "Official guides and API reference for building cross-platform mobile, web and desktop apps with Flutter and Dart." + type: "reference" + access: "free" + organization: "Google" + +- name: "React Native Documentation" + url: "https://reactnative.dev/docs/getting-started" + description: "Official guide to building native iOS and Android apps with React and JavaScript, from setup to native modules." + type: "reference" + access: "free" + organization: "Meta" + +- name: "Expo Documentation" + url: "https://docs.expo.dev/" + description: "Documentation for Expo, a framework and toolset that simplifies building, testing and publishing React Native apps." + type: "reference" + access: "freemium" + organization: "Expo" diff --git a/_data/en-US/development/plataforms/publications.yaml b/_data/en-US/development/plataforms/publications.yaml index 4a12814..401a8d6 100644 --- a/_data/en-US/development/plataforms/publications.yaml +++ b/_data/en-US/development/plataforms/publications.yaml @@ -18,3 +18,17 @@ type: "journal" access: "paid" organization: "IEEE Computer Society" + +- name: "Human Interface Guidelines" + url: "https://developer.apple.com/design/human-interface-guidelines/" + description: "Apple's design guidance for apps on its platforms, covering layout, navigation, accessibility and platform conventions." + type: "reference" + access: "free" + organization: "Apple" + +- name: "Material Design 3" + url: "https://m3.material.io/" + description: "Google's design system for Android and other platforms, with components, layout, colour and accessibility guidance." + type: "reference" + access: "free" + organization: "Google" diff --git a/_data/en-US/development/plataforms/tools.yaml b/_data/en-US/development/plataforms/tools.yaml index f60d947..c194d27 100644 --- a/_data/en-US/development/plataforms/tools.yaml +++ b/_data/en-US/development/plataforms/tools.yaml @@ -18,3 +18,10 @@ type: "tool" access: "free" organization: "Open Infrastructure Foundation" + +- name: "Firebase" + url: "https://firebase.google.com/docs" + description: "Backend services for mobile and web apps, including authentication, databases, push notifications and analytics." + type: "tool" + access: "freemium" + organization: "Google" diff --git a/_data/en-US/development/programming-languages/learn.yaml b/_data/en-US/development/programming-languages/learn.yaml index cbc9ad9..7696c10 100644 --- a/_data/en-US/development/programming-languages/learn.yaml +++ b/_data/en-US/development/programming-languages/learn.yaml @@ -53,3 +53,45 @@ type: "reference" access: "free" organization: "zenspider.com" + +- name: "Kotlin Documentation" + url: "https://kotlinlang.org/docs/home.html" + description: "Official Kotlin language documentation with a tour, reference and guides for Android, server and multiplatform use." + type: "reference" + access: "free" + organization: "JetBrains" + +- name: "Swift Documentation" + url: "https://www.swift.org/documentation/" + description: "Official documentation of the Swift language, including the language guide, standard library and API design guidelines." + type: "reference" + access: "free" + organization: "Swift.org" + +- name: "The Python Tutorial" + url: "https://docs.python.org/3/tutorial/" + description: "The official introduction to Python, covering syntax, data structures, modules, errors and classes for new programmers." + type: "tutorial" + access: "free" + organization: "Python Software Foundation" + +- name: "Python for Everybody" + url: "https://www.py4e.com/" + description: "Free beginner course and open textbook teaching programming with Python, data structures, web data and databases." + type: "course" + access: "free" + organization: "University of Michigan" + +- name: "Automate the Boring Stuff with Python" + url: "https://automatetheboringstuff.com/" + description: "Free online book that teaches Python through practical automation of files, spreadsheets, web pages and everyday tasks." + type: "textbook" + access: "free" + organization: "No Starch Press" + +- name: "PEP 8: Style Guide for Python Code" + url: "https://peps.python.org/pep-0008/" + description: "The official style guide for Python code, describing naming, layout and conventions that keep code readable." + type: "reference" + access: "free" + organization: "Python Software Foundation" diff --git a/_data/pt-BR/development/development-environment/learn.yaml b/_data/pt-BR/development/development-environment/learn.yaml index d2dee1c..8fbb747 100644 --- a/_data/pt-BR/development/development-environment/learn.yaml +++ b/_data/pt-BR/development/development-environment/learn.yaml @@ -21,3 +21,43 @@ access: "paid" language: "en" organization: "The Pragmatic Bookshelf" + +- name: "Terraform Documentation" + url: "https://developer.hashicorp.com/terraform/docs" + description: "Documentação oficial do Terraform, cobrindo infraestrutura como código, providers, estado e módulos." + type: "reference" + access: "free" + language: "en" + organization: "HashiCorp" + +- name: "GitHub Actions Documentation" + url: "https://docs.github.com/actions" + description: "Guia oficial para automatizar builds, testes e deploys com workflows do GitHub Actions." + type: "reference" + access: "free" + language: "en" + organization: "GitHub" + +- name: "GitLab CI/CD Documentation" + url: "https://docs.gitlab.com/ci/" + description: "Documentação oficial de pipelines GitLab CI/CD, jobs, runners e ambientes de deploy." + type: "reference" + access: "free" + language: "en" + organization: "GitLab" + +- name: "Documentação do Kubernetes" + url: "https://kubernetes.io/pt-br/docs/home/" + description: "Documentação oficial do Kubernetes em português, dos conceitos aos tutoriais de implantação e escala de contêineres." + type: "reference" + access: "free" + language: "pt-BR" + organization: "Cloud Native Computing Foundation" + +- name: "Docker Get Started" + url: "https://docs.docker.com/get-started/" + description: "Introdução prática oficial aos contêineres com Docker, da criação de imagens a apps com vários contêineres." + type: "tutorial" + access: "free" + language: "en" + organization: "Docker" diff --git a/_data/pt-BR/development/plataforms/learn.yaml b/_data/pt-BR/development/plataforms/learn.yaml index e59d167..32678d5 100644 --- a/_data/pt-BR/development/plataforms/learn.yaml +++ b/_data/pt-BR/development/plataforms/learn.yaml @@ -21,3 +21,59 @@ access: "free" language: "pt-BR" organization: "Microsoft" + +- name: "Android Developers Courses" + url: "https://developer.android.com/courses" + description: "Cursos oficiais e gratuitos para criar apps Android com Kotlin e Jetpack Compose, do primeiro app à arquitetura." + type: "course" + access: "free" + language: "en" + organization: "Google" + +- name: "Android Developer Documentation" + url: "https://developer.android.com/docs" + description: "Referência e guias oficiais da plataforma Android, suas APIs, ferramentas e requisitos de qualidade de apps." + type: "reference" + access: "free" + language: "en" + organization: "Google" + +- name: "Apple Developer Documentation" + url: "https://developer.apple.com/documentation/" + description: "Documentação oficial para criar apps para iOS, iPadOS, macOS, watchOS e visionOS com os frameworks da Apple." + type: "reference" + access: "free" + language: "en" + organization: "Apple" + +- name: "SwiftUI Tutorials" + url: "https://developer.apple.com/tutorials/swiftui" + description: "Tutoriais oficiais passo a passo que constroem apps iOS completos com SwiftUI, cobrindo layout, dados e navegação." + type: "tutorial" + access: "free" + language: "en" + organization: "Apple" + +- name: "Flutter Documentation" + url: "https://docs.flutter.dev/" + description: "Guias oficiais e referência de API para criar apps multiplataforma móveis, web e desktop com Flutter e Dart." + type: "reference" + access: "free" + language: "en" + organization: "Google" + +- name: "React Native Documentation" + url: "https://reactnative.dev/docs/getting-started" + description: "Guia oficial para criar apps nativos de iOS e Android com React e JavaScript, da configuração aos módulos nativos." + type: "reference" + access: "free" + language: "en" + organization: "Meta" + +- name: "Expo Documentation" + url: "https://docs.expo.dev/" + description: "Documentação do Expo, framework e conjunto de ferramentas que simplifica criar, testar e publicar apps React Native." + type: "reference" + access: "freemium" + language: "en" + organization: "Expo" diff --git a/_data/pt-BR/development/plataforms/publications.yaml b/_data/pt-BR/development/plataforms/publications.yaml index 7b61f49..4da7215 100644 --- a/_data/pt-BR/development/plataforms/publications.yaml +++ b/_data/pt-BR/development/plataforms/publications.yaml @@ -21,3 +21,19 @@ access: "paid" language: "en" organization: "Manning Publications" + +- name: "Human Interface Guidelines" + url: "https://developer.apple.com/design/human-interface-guidelines/" + description: "Diretrizes de design da Apple para apps em suas plataformas, cobrindo layout, navegação, acessibilidade e convenções." + type: "reference" + access: "free" + language: "en" + organization: "Apple" + +- name: "Material Design 3" + url: "https://m3.material.io/" + description: "Sistema de design do Google para Android e outras plataformas, com componentes, layout, cores e acessibilidade." + type: "reference" + access: "free" + language: "en" + organization: "Google" diff --git a/_data/pt-BR/development/plataforms/tools.yaml b/_data/pt-BR/development/plataforms/tools.yaml index b1ca4c9..7f1ba65 100644 --- a/_data/pt-BR/development/plataforms/tools.yaml +++ b/_data/pt-BR/development/plataforms/tools.yaml @@ -21,3 +21,11 @@ access: "freemium" language: "pt-BR" organization: "Microsoft" + +- name: "Firebase" + url: "https://firebase.google.com/docs" + description: "Serviços de backend para apps móveis e web, com autenticação, bancos de dados, notificações push e análise." + type: "tool" + access: "freemium" + language: "en" + organization: "Google" diff --git a/_data/pt-BR/development/programming-languages/learn.yaml b/_data/pt-BR/development/programming-languages/learn.yaml index b26b37b..a6f6070 100644 --- a/_data/pt-BR/development/programming-languages/learn.yaml +++ b/_data/pt-BR/development/programming-languages/learn.yaml @@ -13,3 +13,51 @@ access: "free" language: "en" organization: "Rust Community" + +- name: "Kotlin Documentation" + url: "https://kotlinlang.org/docs/home.html" + description: "Documentação oficial da linguagem Kotlin, com tour, referência e guias para Android, servidor e multiplataforma." + type: "reference" + access: "free" + language: "en" + organization: "JetBrains" + +- name: "Swift Documentation" + url: "https://www.swift.org/documentation/" + description: "Documentação oficial da linguagem Swift, com o guia da linguagem, a biblioteca padrão e diretrizes de API." + type: "reference" + access: "free" + language: "en" + organization: "Swift.org" + +- name: "The Python Tutorial" + url: "https://docs.python.org/3/tutorial/" + description: "Introdução oficial ao Python, cobrindo sintaxe, estruturas de dados, módulos, erros e classes para quem está começando." + type: "tutorial" + access: "free" + language: "en" + organization: "Python Software Foundation" + +- name: "Python for Everybody" + url: "https://www.py4e.com/" + description: "Curso gratuito para iniciantes, com livro aberto, que ensina programação em Python, estruturas de dados, web e bancos." + type: "course" + access: "free" + language: "en" + organization: "University of Michigan" + +- name: "Automate the Boring Stuff with Python" + url: "https://automatetheboringstuff.com/" + description: "Livro online gratuito que ensina Python automatizando arquivos, planilhas, páginas web e tarefas do dia a dia." + type: "textbook" + access: "free" + language: "en" + organization: "No Starch Press" + +- name: "PEP 8: Style Guide for Python Code" + url: "https://peps.python.org/pep-0008/" + description: "Guia oficial de estilo para código Python, com convenções de nomes, layout e boas práticas de legibilidade." + type: "reference" + access: "free" + language: "en" + organization: "Python Software Foundation" From 4f02dec0062d0725b294b1bf354e968da98779fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20Bregu=C3=AAz?= Date: Mon, 12 Oct 2026 00:40:02 -0300 Subject: [PATCH 2/4] feat: interactive learning paths (spec 006) - _plugins/learning_paths.rb creates //learning-paths// from _data//learning-paths/*.yaml, plus an index per language. It resolves each step's resource URLs to IPL's curated entries; an unknown URL fails the build outside production. - _layouts/learning-path.html: stages and numbered steps as
, so the path reads without JavaScript. javascript/learning-path.js adds per-step checkboxes, a progress bar and a polite status message, with progress kept in localStorage under the path key. - Subcategory pages list their paths, and the footer links the index. - 12 paths per language (frontend, backend, JavaScript, Python, data analysis, machine learning, DevOps, cybersecurity, databases, UX, mobile, computer science), written for IPL from IPL's curated resources; pt-BR is written natively. No external roadmap was used: roadmap.sh roadmaps appear only as credited "see also" links. - test/learning_paths_test.rb: same paths in both languages, schema, source: ipl, and every step resource is a curated IPL URL. Co-Authored-By: Claude Opus 5.5 (1M context) --- _data/en-US/learning-paths/backend.yaml | 86 ++++++++++++++++ .../learning-paths/computer-science.yaml | 80 +++++++++++++++ _data/en-US/learning-paths/cybersecurity.yaml | 93 ++++++++++++++++++ _data/en-US/learning-paths/data-analysis.yaml | 77 +++++++++++++++ _data/en-US/learning-paths/databases.yaml | 82 ++++++++++++++++ _data/en-US/learning-paths/devops.yaml | 93 ++++++++++++++++++ _data/en-US/learning-paths/frontend.yaml | 92 +++++++++++++++++ _data/en-US/learning-paths/javascript.yaml | 81 +++++++++++++++ .../learning-paths/machine-learning.yaml | 83 ++++++++++++++++ _data/en-US/learning-paths/mobile.yaml | 75 ++++++++++++++ _data/en-US/learning-paths/python.yaml | 77 +++++++++++++++ _data/en-US/learning-paths/ux-design.yaml | 87 ++++++++++++++++ _data/pt-BR/learning-paths/backend.yaml | 88 +++++++++++++++++ .../learning-paths/computer-science.yaml | 80 +++++++++++++++ _data/pt-BR/learning-paths/cybersecurity.yaml | 75 ++++++++++++++ _data/pt-BR/learning-paths/data-analysis.yaml | 72 ++++++++++++++ _data/pt-BR/learning-paths/databases.yaml | 82 ++++++++++++++++ _data/pt-BR/learning-paths/devops.yaml | 81 +++++++++++++++ _data/pt-BR/learning-paths/frontend.yaml | 90 +++++++++++++++++ _data/pt-BR/learning-paths/javascript.yaml | 74 ++++++++++++++ .../learning-paths/machine-learning.yaml | 73 ++++++++++++++ _data/pt-BR/learning-paths/mobile.yaml | 74 ++++++++++++++ _data/pt-BR/learning-paths/python.yaml | 73 ++++++++++++++ _data/pt-BR/learning-paths/ux-design.yaml | 85 ++++++++++++++++ _includes/components/organisms/footer.html | 4 +- _layouts/learning-path.html | 98 +++++++++++++++++++ _layouts/learning-paths.html | 31 ++++++ _layouts/topic.html | 15 +++ _plugins/learning_paths.rb | 84 ++++++++++++++++ docs/specs/006-learning-paths/tasks.md | 10 +- javascript/learning-path.js | 43 ++++++++ test/learning_paths_test.rb | 54 ++++++++++ 32 files changed, 2285 insertions(+), 7 deletions(-) create mode 100644 _data/en-US/learning-paths/backend.yaml create mode 100644 _data/en-US/learning-paths/computer-science.yaml create mode 100644 _data/en-US/learning-paths/cybersecurity.yaml create mode 100644 _data/en-US/learning-paths/data-analysis.yaml create mode 100644 _data/en-US/learning-paths/databases.yaml create mode 100644 _data/en-US/learning-paths/devops.yaml create mode 100644 _data/en-US/learning-paths/frontend.yaml create mode 100644 _data/en-US/learning-paths/javascript.yaml create mode 100644 _data/en-US/learning-paths/machine-learning.yaml create mode 100644 _data/en-US/learning-paths/mobile.yaml create mode 100644 _data/en-US/learning-paths/python.yaml create mode 100644 _data/en-US/learning-paths/ux-design.yaml create mode 100644 _data/pt-BR/learning-paths/backend.yaml create mode 100644 _data/pt-BR/learning-paths/computer-science.yaml create mode 100644 _data/pt-BR/learning-paths/cybersecurity.yaml create mode 100644 _data/pt-BR/learning-paths/data-analysis.yaml create mode 100644 _data/pt-BR/learning-paths/databases.yaml create mode 100644 _data/pt-BR/learning-paths/devops.yaml create mode 100644 _data/pt-BR/learning-paths/frontend.yaml create mode 100644 _data/pt-BR/learning-paths/javascript.yaml create mode 100644 _data/pt-BR/learning-paths/machine-learning.yaml create mode 100644 _data/pt-BR/learning-paths/mobile.yaml create mode 100644 _data/pt-BR/learning-paths/python.yaml create mode 100644 _data/pt-BR/learning-paths/ux-design.yaml create mode 100644 _layouts/learning-path.html create mode 100644 _layouts/learning-paths.html create mode 100644 _plugins/learning_paths.rb create mode 100644 javascript/learning-path.js create mode 100644 test/learning_paths_test.rb diff --git a/_data/en-US/learning-paths/backend.yaml b/_data/en-US/learning-paths/backend.yaml new file mode 100644 index 0000000..66a7262 --- /dev/null +++ b/_data/en-US/learning-paths/backend.yaml @@ -0,0 +1,86 @@ +title: "Backend development" +summary: "Build reliable server-side applications by mastering HTTP, a web framework, relational data, API design and the caching, messaging and architecture choices behind scalable systems." +subcategory: "development/backend-development" +level: "intermediate" +source: "ipl" +stages: + - title: "HTTP and the server side" + steps: + - title: "HTTP in depth" + summary: "Study requests, responses, headers, cookies and connection behaviour, since every backend decision ultimately travels over HTTP." + resources: + - "https://hpbn.co" + - "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie" + - title: "A first web framework" + summary: "Build a small application with routing, templates and middleware in one mainstream framework to learn the request lifecycle." + resources: + - "https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs" + - "https://nodejs.org" + - "https://www.djangoproject.com" + - "https://fastapi.tiangolo.com" + - title: "Other server ecosystems" + summary: "Compare how enterprise stacks in Java and .NET structure the same concepts, useful when joining larger organisations." + optional: true + resources: + - "https://spring.io" + - "https://learn.microsoft.com/en-us/aspnet/core/fundamentals/" + - title: "Working with data" + steps: + - title: "Relational databases and SQL" + summary: "Model data in tables, write SQL queries and use transactions, the default storage choice for most backends." + resources: + - "https://www.postgresql.org" + - "https://www.sqlite.org" + - title: "Indexes and query performance" + summary: "Learn how indexes work and how to read query plans, the most common fix for slow endpoints." + resources: + - "https://use-the-index-luke.com" + - title: "Schema migrations" + summary: "Version database changes alongside code so every environment evolves safely and deployments stay repeatable." + resources: + - "https://flywaydb.org" + - "https://www.liquibase.com" + - title: "Document and key-value stores" + summary: "Understand when document databases or in-memory stores fit better than relational tables, and what you give up." + optional: true + resources: + - "https://www.mongodb.com/docs/manual/" + - "https://redis.io" + - title: "Designing APIs" + steps: + - title: "HTTP API design" + summary: "Design consistent resources, validate payloads with schemas and plan versioning so clients can rely on your API." + resources: + - "https://json-schema.org/" + - "https://web.archive.org/web/20170610175619/https://fly.io/articles/pragmatic-api-versioning/" + - "https://www.postman.com" + - title: "RPC with gRPC" + summary: "Explore contract-first remote procedure calls with Protocol Buffers, common for efficient service-to-service communication." + optional: true + resources: + - "https://grpc.io/" + - title: "Configuration and secrets" + summary: "Keep configuration in the environment and out of code, following principles that make services portable and safe to deploy." + resources: + - "https://12factor.net/" + - "https://github.com/motdotla/dotenv" + - title: "Scaling and architecture" + steps: + - title: "Caching and messaging" + summary: "Reduce load with caches and decouple services with event streams, two core tools for handling growth." + resources: + - "https://redis.io" + - "https://kafka.apache.org" + - title: "Data-intensive systems" + summary: "Learn the trade-offs of replication, partitioning and consistency, and study how real companies scaled their backends." + resources: + - "https://dataintensive.net" + - "https://highscalability.com" + - title: "Architecture and maintainability" + summary: "Apply design patterns and architectural thinking so the codebase stays understandable and changeable as it grows." + resources: + - "https://martinfowler.com" + - "https://refactoring.guru" +see_also: + - name: "Backend Developer Roadmap (roadmap.sh)" + url: "https://roadmap.sh/backend" diff --git a/_data/en-US/learning-paths/computer-science.yaml b/_data/en-US/learning-paths/computer-science.yaml new file mode 100644 index 0000000..b12d8af --- /dev/null +++ b/_data/en-US/learning-paths/computer-science.yaml @@ -0,0 +1,80 @@ +title: "Computer science foundations" +summary: "Build a solid base in computer science, from how machines run programs through algorithms, operating systems and networks, up to the limits of what computation can do." +subcategory: "computing/computer-science" +level: "beginner" +source: "ipl" +stages: + - title: "Getting oriented" + steps: + - title: "Map of the field" + summary: "See which core subjects make up computer science and in what order to tackle them, so self-study stays focused instead of scattered." + resources: + - "https://teachyourselfcs.com/" + - title: "Working at the command line" + summary: "Get comfortable with the shell, files and processes, since nearly every later topic is explored by running tools from a terminal." + resources: + - "https://linuxcommand.org/" + - title: "Version control" + summary: "Track your exercises and experiments with Git, a habit that makes every project and course assignment easier to manage." + resources: + - "https://git-scm.com/" + - title: "Where computing came from" + summary: "Learn the history of computing machines and ideas, which explains many design choices that still shape today's systems." + optional: true + resources: + - "https://computerhistory.org/" + - title: "Algorithms and data structures" + steps: + - title: "Core data structures and algorithms" + summary: "Study arrays, lists, trees, hashing, sorting and searching with working code, the toolkit behind efficient programs." + resources: + - "https://www.coursera.org/learn/algorithms-part1" + - "https://jeffe.cs.illinois.edu/teaching/algorithms/" + - title: "Analysing and designing algorithms" + summary: "Learn asymptotic analysis, recursion, greedy methods and dynamic programming so you can reason about cost before writing code." + resources: + - "https://jeffe.cs.illinois.edu/teaching/algorithms/" + - "https://mitpress.mit.edu/algorithms/" + - "https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/" + - title: "How computers run programs" + steps: + - title: "Computer systems" + summary: "Understand data representation, machine code, memory hierarchy and linking to see what really happens when your program executes." + resources: + - "https://csapp.cs.cmu.edu/" + - title: "Operating systems" + summary: "Learn how an operating system virtualises CPU and memory, handles concurrency and stores data persistently on disk." + resources: + - "https://pages.cs.wisc.edu/~remzi/OSTEP/" + - "https://pdos.csail.mit.edu/6.828/" + - title: "Experimenting with emulators" + summary: "Run and inspect systems inside an emulator or virtual machine, a safe way to try what you read about kernels and hardware." + optional: true + resources: + - "https://www.qemu.org/" + - "https://www.virtualbox.org/" + - title: "Networks and databases in practice" + summary: "Capture real network traffic and query a small embedded database to connect protocol and storage theory with observable behaviour." + resources: + - "https://www.wireshark.org/" + - "https://www.sqlite.org/" + - title: "Theory of computation" + steps: + - title: "Automata and formal languages" + summary: "Experiment with finite automata, grammars and Turing machines to understand the formal models behind parsers and computation itself." + resources: + - "https://www.jflap.org/" + - title: "Complexity and its limits" + summary: "Get an introduction to complexity classes such as P and NP, which explain why some problems resist efficient solutions." + optional: true + resources: + - "https://complexityzoo.net/Complexity_Zoo" + - "https://blog.computationalcomplexity.org/" + - title: "Keep up with the field" + summary: "Read accessible summaries of research and the flagship magazine of the profession to see how foundations feed current work." + resources: + - "https://cacm.acm.org/" + - "https://blog.acolyer.org/" +see_also: + - name: "Computer Science Roadmap (roadmap.sh)" + url: "https://roadmap.sh/computer-science" diff --git a/_data/en-US/learning-paths/cybersecurity.yaml b/_data/en-US/learning-paths/cybersecurity.yaml new file mode 100644 index 0000000..f3b43b4 --- /dev/null +++ b/_data/en-US/learning-paths/cybersecurity.yaml @@ -0,0 +1,93 @@ +title: "Cybersecurity" +summary: "Start with networks and security thinking, then learn cryptography, web application flaws, vulnerability catalogs and system hardening through free hands-on labs and official references." +subcategory: "computing/cyber-security" +level: "beginner" +source: "ipl" +stages: + - title: "Security and network basics" + steps: + - title: "Thinking like a defender" + summary: "Learn the core ideas of confidentiality, integrity, availability and risk, and see how real attacks and breaches unfold." + resources: + - "https://www.professormesser.com/" + - "https://www.schneier.com/" + - "https://krebsonsecurity.com/" + - title: "How networks work" + summary: "Understand IP, TCP, ports and DNS, because most attacks and defenses happen on traffic moving across a network." + resources: + - "https://gaia.cs.umass.edu/kurose_ross/" + - "https://www.nslookup.io/learning/dns-record-types/" + - "https://www.iana.org/assignments/service-names-port-numbers/" + - title: "Watching network traffic" + summary: "Capture and read packets yourself to recognise normal traffic and spot what looks suspicious." + resources: + - "https://www.wireshark.org/" + - "https://www.wireshark.org/docs/" + - "https://www.tcpdump.org/" + - title: "Cryptography and secure communication" + steps: + - title: "Encryption and keys" + summary: "Learn symmetric and public-key encryption, signatures and secure tunnels, the tools that protect data in transit and at rest." + resources: + - "https://hashrocket.com/blog/posts/encryption-with-gpg-a-story-really-a-tutorial" + - "https://www.ssh.com/academy/ssh/tunneling-example" + - "https://csrc.nist.gov/publications" + - title: "Email authentication" + summary: "See how SPF, DKIM and DMARC let receivers reject forged senders, a common entry point for phishing." + optional: true + resources: + - "https://datatracker.ietf.org/doc/html/rfc7208" + - "https://datatracker.ietf.org/doc/html/rfc6376" + - "https://dmarc.postmarkapp.com/" + - title: "Web application security" + steps: + - title: "The most common web flaws" + summary: "Study injection, broken access control and the other recurring weaknesses so you can recognise them in your own code." + resources: + - "https://owasp.org/" + - "https://cwe.mitre.org" + - title: "Hands-on web labs" + summary: "Exploit deliberately vulnerable applications in guided labs, the fastest way to understand why each flaw matters." + resources: + - "https://portswigger.net/web-security" + - title: "Browser defenses" + summary: "Learn how cookie attributes and browser policies block cross-site attacks, and when they fail to." + resources: + - "https://web.dev/articles/samesite-cookies-explained" + - title: "Web testing tools" + summary: "Use an intercepting proxy and an automated injection scanner to test applications you are authorised to assess." + resources: + - "https://www.zaproxy.org" + - "https://sqlmap.org" + - title: "Vulnerabilities, threats and defense" + steps: + - title: "Tracking vulnerabilities" + summary: "Read CVE entries and severity scores, and learn which flaws are being exploited right now so you can patch first." + resources: + - "https://www.cve.org/" + - "https://nvd.nist.gov/" + - "https://www.cisa.gov/known-exploited-vulnerabilities-catalog" + - title: "How attackers operate" + summary: "Map attacker tactics and techniques to the detections and controls that stop them." + resources: + - "https://attack.mitre.org/" + - title: "Hardening and scanning your systems" + summary: "Apply secure configuration baselines and scan your own hosts to find exposed services before someone else does." + resources: + - "https://www.cisecurity.org/" + - "https://nmap.org/" + - title: "Staying current" + summary: "Follow daily threat reports and official advisories to keep up with new campaigns and emergency patches." + optional: true + resources: + - "https://isc.sans.edu/" + - "https://www.cisa.gov/news-events/cybersecurity-advisories" + - title: "Security of AI applications" + summary: "Explore how prompt injection and adversarial inputs attack systems built on large language models." + optional: true + resources: + - "https://arxiv.org/abs/2302.12173" + - "https://llm-attacks.org/" +see_also: + - name: "Cyber Security Roadmap (roadmap.sh)" + url: "https://roadmap.sh/cyber-security" diff --git a/_data/en-US/learning-paths/data-analysis.yaml b/_data/en-US/learning-paths/data-analysis.yaml new file mode 100644 index 0000000..a50dbe4 --- /dev/null +++ b/_data/en-US/learning-paths/data-analysis.yaml @@ -0,0 +1,77 @@ +title: "Data analysis" +summary: "Learn to find, clean, summarise and visualise data, from spreadsheets and SQL to statistics and dashboards, using free courses, open textbooks and public datasets." +subcategory: "business/data-and-analytics" +level: "beginner" +source: "ipl" +stages: + - title: "Foundations" + steps: + - title: "Spreadsheet analysis" + summary: "Sort, filter, chart and pivot data in a spreadsheet, the quickest way to start asking questions of a small dataset." + resources: + - "https://open.umn.edu/opentextbooks/textbooks/1687" + - title: "Descriptive statistics" + summary: "Understand averages, spread, distributions and sampling so you can summarise data honestly and spot when a number is misleading." + resources: + - "https://openstax.org/details/books/introductory-business-statistics-2e" + - title: "Querying data with SQL" + summary: "Select, filter, join and aggregate tables with SQL, the common language for pulling data out of almost every database." + resources: + - "https://www.kaggle.com/learn" + - "https://dbeaver.io/" + - title: "Finding and preparing data" + steps: + - title: "Finding datasets" + summary: "Search open government, economic and research portals for data that fits your question, and learn to read their documentation and licences." + resources: + - "https://www.data.gov/" + - "https://data.worldbank.org/" + - "https://datasetsearch.research.google.com/" + - title: "Cleaning data with Python" + summary: "Load tables into Python, fix missing values, types and duplicates, and reshape data so later analysis rests on reliable inputs." + resources: + - "https://www.kaggle.com/learn" + - "https://www.datacamp.com/" + - title: "Visual workflows" + summary: "Build repeatable analysis pipelines by connecting nodes instead of writing code, useful for teams that mix analysts and non-programmers." + optional: true + resources: + - "https://www.knime.com/" + - title: "Analysis and communication" + steps: + - title: "Hypothesis testing and regression" + summary: "Test whether differences are real and model relationships between variables, moving from describing data to drawing defensible conclusions." + resources: + - "https://openstax.org/details/books/introductory-business-statistics-2e" + - "https://www.edx.org/" + - title: "Charts that communicate" + summary: "Choose chart types that match your message and design clear visuals, so findings are understood by people who never see the data." + resources: + - "https://flowingdata.com/" + - "https://public.tableau.com/" + - title: "Dashboards with BI tools" + summary: "Connect a business intelligence tool to a database and publish dashboards that let colleagues explore and monitor metrics themselves." + resources: + - "https://www.metabase.com/" + - "https://superset.apache.org/" + - title: "Going further" + steps: + - title: "Practice on real problems" + summary: "Pick public datasets, ask your own questions and write up the answers, while reading how experienced analysts reason about data." + resources: + - "https://www.kaggle.com/datasets" + - "https://simplystatistics.org/" + - title: "Predictive analysis" + summary: "Take a first step toward forecasting outcomes with simple machine learning models built on the same cleaned data you already analyse." + optional: true + resources: + - "https://scikit-learn.org/" + - "https://towardsdatascience.com/" + - title: "Cloud data warehouses" + summary: "Run SQL over very large tables in a serverless warehouse when your data outgrows a laptop or a single database server." + optional: true + resources: + - "https://docs.cloud.google.com/bigquery/docs" +see_also: + - name: "Data Analyst Roadmap (roadmap.sh)" + url: "https://roadmap.sh/data-analyst" diff --git a/_data/en-US/learning-paths/databases.yaml b/_data/en-US/learning-paths/databases.yaml new file mode 100644 index 0000000..471e737 --- /dev/null +++ b/_data/en-US/learning-paths/databases.yaml @@ -0,0 +1,82 @@ +title: "Databases" +summary: "Learn to store and query data with SQL, design sound schemas and indexes, try document and key-value stores, and manage databases safely as they change." +subcategory: "development/databases" +level: "beginner" +source: "ipl" +stages: + - title: "First steps" + steps: + - title: "What a database is for" + summary: "Survey the main kinds of databases, relational, document, key-value and wide-column, and what problem each one solves." + resources: + - "https://db-engines.com" + - title: "Your first SQL database" + summary: "Create tables and run SELECT, INSERT, UPDATE and DELETE on a zero-setup embedded database to learn SQL by doing." + resources: + - "https://www.sqlite.org" + - title: "PostgreSQL and a client tool" + summary: "Install a full relational server and a graphical client so you can explore schemas, run queries and inspect results." + resources: + - "https://www.postgresql.org/docs/" + - "https://dbeaver.io" + - "https://www.pgadmin.org" + - title: "Designing and querying well" + steps: + - title: "Schema design and constraints" + summary: "Model entities and relationships with keys and constraints so the database itself keeps your data consistent." + resources: + - "https://www.postgresql.org/docs/" + - "https://dataintensive.net" + - title: "Indexes and query performance" + summary: "Learn how indexes work and how to read query plans, the single biggest lever for making slow queries fast." + resources: + - "https://use-the-index-luke.com" + - title: "Transactions and concurrency" + summary: "Understand ACID guarantees and isolation levels to avoid lost updates when many users write at the same time." + resources: + - "https://dataintensive.net" + - "https://db.cs.cmu.edu/" + - title: "Users and privileges" + summary: "Grant each application and person only the access it needs, an essential step before exposing any database." + resources: + - "https://www.postgresql.org/docs/current/ddl-priv.html" + - title: "Beyond relational" + steps: + - title: "Document databases" + summary: "Store flexible JSON-like documents and learn when that model fits better than tables, and when it does not." + resources: + - "https://www.mongodb.com/docs/manual/" + - "https://www.mongodb.com" + - title: "Key-value stores and caching" + summary: "Use an in-memory store for caching, sessions and counters to take load off your main database." + resources: + - "https://redis.io" + - title: "Distributed wide-column databases" + summary: "See how a database spreads data across many machines and what consistency trade-offs that brings." + optional: true + resources: + - "https://cassandra.apache.org/" + - title: "Running databases" + steps: + - title: "Schema migrations" + summary: "Version schema changes as scripts that run in order, so every environment evolves the same way without manual edits." + resources: + - "https://flywaydb.org" + - "https://www.liquibase.com" + - title: "How storage engines work" + summary: "Look inside B-trees, logs and buffer pools to understand why databases behave the way they do under load." + optional: true + resources: + - "https://databass.dev" + - "https://db.cs.cmu.edu/" + - title: "Following database research" + summary: "Read accessible summaries of influential papers to see where database systems are heading." + optional: true + resources: + - "https://blog.acolyer.org/" + - "https://www.vldb.org/" +see_also: + - name: "SQL Roadmap (roadmap.sh)" + url: "https://roadmap.sh/sql" + - name: "PostgreSQL DBA Roadmap (roadmap.sh)" + url: "https://roadmap.sh/postgresql-dba" diff --git a/_data/en-US/learning-paths/devops.yaml b/_data/en-US/learning-paths/devops.yaml new file mode 100644 index 0000000..efff88b --- /dev/null +++ b/_data/en-US/learning-paths/devops.yaml @@ -0,0 +1,93 @@ +title: "DevOps and cloud" +summary: "Go from the Linux shell and Git to containers, automated delivery, infrastructure as code and Kubernetes, building the habits that keep software shipping reliably." +subcategory: "development/development-environment" +level: "intermediate" +source: "ipl" +stages: + - title: "Foundations" + steps: + - title: "Linux and the command line" + summary: "Get comfortable with the shell, files, processes and permissions, since almost every server, container and pipeline runs on Linux." + resources: + - "https://linuxcommand.org/" + - "https://missing.csail.mit.edu/" + - title: "Version control with Git" + summary: "Learn commits, branches, merges and remotes well, because every automated pipeline starts from a change pushed to a repository." + resources: + - "https://git-scm.com/docs" + - "https://nvie.com/posts/a-successful-git-branching-model/" + - title: "How operating systems work" + summary: "Study processes, memory, isolation and virtualization so containers and virtual machines stop feeling like magic." + optional: true + resources: + - "https://pages.cs.wisc.edu/~remzi/OSTEP/" + - "https://www.qemu.org/docs/master/" + - title: "Containers" + steps: + - title: "Running your first containers" + summary: "Package an application with its dependencies into an image and run it the same way on any machine." + resources: + - "https://docs.docker.com/" + - "https://docs.podman.io/en/latest/" + - title: "Images, layers and registries" + summary: "Understand image layers, the open container standards and public registries, so you can build small images and share them safely." + resources: + - "https://opencontainers.org" + - "https://hub.docker.com" + - "https://docker-saigon.github.io/post/Docker-Internals/" + - title: "Build a container runtime yourself" + summary: "Recreate namespaces, cgroups and chroot by hand to see exactly which Linux features a container engine combines." + optional: true + resources: + - "https://github.com/Fewbytes/rubber-docker" + - "https://github.com/opencontainers/runc" + - title: "Automation and delivery" + steps: + - title: "Continuous integration and delivery" + summary: "Automate building, testing and releasing every change, so integration problems surface within minutes instead of at release time." + resources: + - "https://martinfowler.com" + - "https://www.jenkins.io/" + - "https://cd.foundation/" + - title: "Configuration management" + summary: "Describe server setup as repeatable code instead of manual steps, so any machine can be rebuilt to a known state." + resources: + - "https://www.redhat.com/en/ansible-collaborative" + - "https://saltproject.io" + - title: "Infrastructure as code" + summary: "Declare networks, machines and cloud services in versioned files, review them like code and apply them predictably." + resources: + - "https://github.com/hashicorp/terraform" + - "https://docs.cloud.google.com/docs/terraform/best-practices/general-style-structure" + - title: "Reproducible development environments" + summary: "Pin tools and dependencies so every developer and every pipeline runs exactly the same environment." + optional: true + resources: + - "https://nix.dev" + - "https://containers.dev" + - title: "Cloud and orchestration" + steps: + - title: "Kubernetes" + summary: "Learn pods, deployments and services to run many containers across a cluster with scaling, rollouts and self-healing." + resources: + - "https://kubernetes.io/docs/" + - "https://kubernetes.io/blog/" + - title: "Managed cloud platforms" + summary: "Compare serverless containers and reference architectures to decide how much infrastructure you actually want to operate yourself." + resources: + - "https://docs.cloud.google.com/run/docs" + - "https://docs.cloud.google.com/architecture" + - "https://aws.amazon.com/blogs/architecture/" + - title: "Monitoring and error tracking" + summary: "Collect errors and performance data from production so problems are noticed and diagnosed before users report them." + resources: + - "https://sentry.io" + - title: "Distributed systems thinking" + summary: "Study replication, partitioning and failure modes, the ideas underneath every cloud service you deploy to." + optional: true + resources: + - "https://dataintensive.net/" + - "https://www.distributed-systems.net/" +see_also: + - name: "DevOps Roadmap (roadmap.sh)" + url: "https://roadmap.sh/devops" diff --git a/_data/en-US/learning-paths/frontend.yaml b/_data/en-US/learning-paths/frontend.yaml new file mode 100644 index 0000000..356ee78 --- /dev/null +++ b/_data/en-US/learning-paths/frontend.yaml @@ -0,0 +1,92 @@ +title: "Frontend development" +summary: "Build accessible, fast and responsive web interfaces, moving from how browsers render pages through HTML, CSS and JavaScript to modern tooling and frameworks." +subcategory: "development/frontend-development" +level: "beginner" +source: "ipl" +stages: + - title: "How the web works and HTML" + steps: + - title: "How browsers load a page" + summary: "Learn how a browser requests, parses and renders a page, giving every later topic a mental model to attach to." + resources: + - "https://developer.mozilla.org" + - "https://hpbn.co" + - title: "Semantic HTML" + summary: "Write well-structured documents with meaningful elements, because structure drives accessibility, search engines and later styling." + resources: + - "https://web.dev/learn" + - "https://validator.w3.org/nu/" + - "https://whatwg.org" + - title: "Styling with CSS" + steps: + - title: "CSS fundamentals" + summary: "Understand the cascade, specificity, the box model and units so styles behave predictably instead of by trial and error." + resources: + - "https://web.dev/learn" + - "https://css-tricks.com" + - title: "Layout with Flexbox and Grid" + summary: "Practise the two modern layout systems, which replace old float hacks and handle most page and component layouts." + resources: + - "https://css-tricks.com" + - "https://www.freecodecamp.org/learn/2022/responsive-web-design/" + - title: "Responsive design" + summary: "Make pages adapt to any screen with fluid layouts, media queries and responsive images, since most visitors browse on phones." + resources: + - "https://www.freecodecamp.org/learn/2022/responsive-web-design/" + - "https://learningwebdesign.com" + - title: "Experiment and find inspiration" + summary: "See how the same markup can take radically different looks, and try small ideas quickly in an online editor." + optional: true + resources: + - "https://www.csszengarden.com" + - "https://codepen.io" + - "https://tympanus.net/codrops/" + - title: "Interactivity and quality" + steps: + - title: "JavaScript and the DOM" + summary: "Use JavaScript to read and change the page and respond to events, the basis of every interactive interface." + resources: + - "https://developer.mozilla.org" + - "https://www.theodinproject.com" + - title: "Accessibility" + summary: "Apply WCAG principles and inclusive patterns so people using keyboards, screen readers or magnification can use what you build." + resources: + - "https://www.w3.org/WAI/standards-guidelines/wcag/" + - "https://inclusive-components.design" + - "https://wave.webaim.org" + - title: "Browser compatibility" + summary: "Check which features each browser supports before relying on them, and follow how the platform keeps evolving." + resources: + - "https://caniuse.com" + - "https://hacks.mozilla.org/" + - title: "Web performance" + summary: "Measure loading and rendering speed with real tools, then fix the bottlenecks that most affect Core Web Vitals." + resources: + - "https://pagespeed.web.dev" + - "https://www.webpagetest.org" + - "https://web.dev/articles/speed-rendering" + - title: "Tooling and frameworks" + steps: + - title: "Version control with Git" + summary: "Track changes, branch safely and collaborate through Git, a daily tool on every professional frontend team." + resources: + - "https://git-scm.com/docs" + - "https://missing.csail.mit.edu/" + - title: "Packages and build tools" + summary: "Install dependencies from npm and use a fast dev server and bundler to organise larger projects." + resources: + - "https://www.npmjs.com" + - "https://vite.dev" + - title: "A component framework" + summary: "Learn one component-based library to build complex interfaces from small reusable pieces with predictable state." + resources: + - "https://react.dev" + - "https://vuejs.org" + - title: "Utility-first CSS" + summary: "Try composing designs from small utility classes, a popular alternative to writing custom stylesheets for every component." + optional: true + resources: + - "https://tailwindcss.com" +see_also: + - name: "Frontend Developer Roadmap (roadmap.sh)" + url: "https://roadmap.sh/frontend" diff --git a/_data/en-US/learning-paths/javascript.yaml b/_data/en-US/learning-paths/javascript.yaml new file mode 100644 index 0000000..612f857 --- /dev/null +++ b/_data/en-US/learning-paths/javascript.yaml @@ -0,0 +1,81 @@ +title: "JavaScript programming" +summary: "Learn JavaScript from its core syntax and functions through the browser DOM, asynchronous code and Node.js, ending with modules, TypeScript and UI libraries." +subcategory: "development/programming-languages" +level: "beginner" +source: "ipl" +stages: + - title: "Core language" + steps: + - title: "Syntax, values and types" + summary: "Learn variables, primitive types, operators and control flow, the building blocks every JavaScript program is made from." + resources: + - "https://developer.mozilla.org" + - title: "Functions, scope and closures" + summary: "Understand how functions capture variables and how scope works, which explains most surprising behaviour in real code." + resources: + - "https://developer.mozilla.org" + - "https://web.dev/" + - title: "Objects, arrays and JSON" + summary: "Model data with objects and arrays, use their built-in methods and exchange structured data as JSON." + resources: + - "https://web.dev/" + - "https://json-schema.org/" + - title: "JavaScript in the browser" + steps: + - title: "The DOM and events" + summary: "Select, create and update page elements and handle user events, turning static HTML into interactive pages." + resources: + - "https://whatwg.org" + - "https://css-tricks.com" + - title: "Browser support and new features" + summary: "Check where a language or web API feature is supported and follow how browsers ship new capabilities." + resources: + - "https://caniuse.com" + - "https://hacks.mozilla.org/" + - title: "Smooth rendering" + summary: "Learn how scripts interact with the rendering pipeline so animations and updates stay fluid instead of janky." + optional: true + resources: + - "https://web.dev/articles/speed-rendering" + - title: "Asynchronous code and Node.js" + steps: + - title: "The event loop and async code" + summary: "Understand callbacks, promises and async/await on top of the event loop, essential for network requests and I/O." + resources: + - "https://nodejs.org" + - title: "Node.js and npm" + summary: "Run JavaScript outside the browser and manage third-party packages, opening the door to scripts, tools and servers." + resources: + - "https://nodejs.org" + - "https://www.npmjs.com" + - title: "Streams" + summary: "Process large files and network data piece by piece with Node streams instead of loading everything into memory." + optional: true + resources: + - "https://www.freecodecamp.org/news/node-js-streams-everything-you-need-to-know-c9141306be93" + - title: "A small web server" + summary: "Build a simple server with Express and environment-based configuration to see how JavaScript powers the backend." + resources: + - "https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs" + - "https://github.com/motdotla/dotenv" + - title: "Ecosystem and scale" + steps: + - title: "Modules and build tools" + summary: "Split code into ES modules and use a modern dev server and bundler to ship them efficiently to browsers." + resources: + - "https://vite.dev" + - "https://www.npmjs.com" + - title: "TypeScript" + summary: "Add static types to catch mistakes before running code and make larger JavaScript codebases easier to change." + resources: + - "https://www.typescriptlang.org/docs/handbook/" + - "https://www.typescriptlang.org" + - title: "UI libraries" + summary: "Apply your JavaScript skills in a component library to build interfaces from reusable, state-driven pieces." + resources: + - "https://react.dev" + - "https://vuejs.org" + - "https://lit.dev/" +see_also: + - name: "JavaScript Roadmap (roadmap.sh)" + url: "https://roadmap.sh/javascript" diff --git a/_data/en-US/learning-paths/machine-learning.yaml b/_data/en-US/learning-paths/machine-learning.yaml new file mode 100644 index 0000000..f1f139e --- /dev/null +++ b/_data/en-US/learning-paths/machine-learning.yaml @@ -0,0 +1,83 @@ +title: "Machine learning" +summary: "Build models that learn from data, from classical algorithms and honest evaluation to neural networks and transformers, using official documentation and free university courses." +subcategory: "computing/machine-learning" +level: "intermediate" +source: "ipl" +stages: + - title: "Foundations" + steps: + - title: "The theory behind learning" + summary: "Review the linear algebra, probability and optimisation behind supervised learning so later algorithms read as variations on familiar ideas." + resources: + - "https://cs229.stanford.edu/" + - title: "Your first models" + summary: "Fit, predict and score simple models with a consistent API, learning the train and test workflow every project follows." + resources: + - "https://scikit-learn.org/stable/user_guide.html" + - "https://machinelearningmastery.com/" + - title: "Datasets for practice" + summary: "Pick well-documented benchmark datasets to experiment with, so you can compare your results against known baselines." + resources: + - "https://archive.ics.uci.edu/" + - "https://www.openml.org/" + - "https://www.kaggle.com/datasets" + - title: "Classical machine learning" + steps: + - title: "Linear models and regularisation" + summary: "Understand linear and logistic regression, overfitting and regularisation, the ideas that explain why models generalise or fail." + resources: + - "https://scikit-learn.org/stable/user_guide.html" + - "https://cs229.stanford.edu/" + - title: "Evaluation and validation" + summary: "Use cross-validation, suitable metrics and data leakage checks so reported accuracy reflects how a model behaves on new data." + resources: + - "https://scikit-learn.org/" + - "https://machinelearningmastery.com/" + - title: "Trees and gradient boosting" + summary: "Learn decision trees and boosted ensembles, often the strongest choice for tabular data, and train them with dedicated fast libraries." + resources: + - "https://xgboost.readthedocs.io/" + - "https://lightgbm.readthedocs.io/" + - title: "Hyperparameter tuning" + summary: "Search model settings automatically instead of by hand, with pruning to stop unpromising trials early and save compute." + optional: true + resources: + - "https://optuna.org/" + - title: "Deep learning" + steps: + - title: "How neural networks learn" + summary: "Build intuition for layers, gradient descent and backpropagation before writing code, so training behaviour makes sense when it goes wrong." + resources: + - "https://www.3blue1brown.com/topics/neural-networks" + - "https://sebastianraschka.com/blog/2021/dl-course.html" + - title: "Training with PyTorch" + summary: "Write tensors, models and training loops in a deep learning framework, and learn to load data and track losses on a GPU." + resources: + - "https://docs.pytorch.org/tutorials/" + - "https://pytorch.org/" + - title: "Practical deep learning" + summary: "Train image and text models end to end with transfer learning, focusing on what works in practice before diving into theory." + resources: + - "https://course.fast.ai/" + - title: "Transformers" + summary: "Understand attention and the transformer architecture behind modern language models, then fine-tune pretrained models for your own tasks." + optional: true + resources: + - "https://jalammar.github.io/illustrated-transformer/" + - "https://huggingface.co/learn/nlp-course" + - title: "Practice and research" + steps: + - title: "Tracking experiments" + summary: "Log parameters, metrics and model versions for every run so experiments are reproducible and easy to compare later." + resources: + - "https://mlflow.org/" + - title: "Reading research" + summary: "Read clear visual explanations and open peer-reviewed papers to follow how the field evolves beyond tutorials and courses." + optional: true + resources: + - "https://distill.pub/" + - "https://openreview.net/" + - "https://www.jmlr.org/" +see_also: + - name: "Machine Learning Roadmap (roadmap.sh)" + url: "https://roadmap.sh/machine-learning" diff --git a/_data/en-US/learning-paths/mobile.yaml b/_data/en-US/learning-paths/mobile.yaml new file mode 100644 index 0000000..d3ed18a --- /dev/null +++ b/_data/en-US/learning-paths/mobile.yaml @@ -0,0 +1,75 @@ +title: "Mobile app development" +summary: "Build native apps for Android with Kotlin and iOS with SwiftUI, then go cross-platform with Flutter or React Native, add backend services, test them and ship them." +subcategory: "development/plataforms" +level: "intermediate" +source: "ipl" +stages: + - title: "Languages and design" + steps: + - title: "Kotlin for Android" + summary: "Learn Kotlin's syntax, null safety, classes and coroutines, since it is the main language for modern Android apps." + resources: + - "https://kotlinlang.org/docs/home.html" + - title: "Swift for Apple platforms" + summary: "Learn Swift's optionals, structs, protocols and closures, the language foundation for every iPhone and iPad app you will build." + resources: + - "https://www.swift.org/documentation/" + - title: "Platform design guidelines" + summary: "Study how each platform handles navigation, typography, gestures and accessibility, so your apps feel at home on Android and iOS." + resources: + - "https://m3.material.io/" + - "https://developer.apple.com/design/human-interface-guidelines/" + - title: "Native development" + steps: + - title: "Android apps with Jetpack Compose" + summary: "Follow the official courses to build Android screens with Compose, manage state, navigate between screens and store data locally." + resources: + - "https://developer.android.com/courses" + - "https://developer.android.com/docs" + - title: "iOS apps with SwiftUI" + summary: "Build complete iOS apps step by step with SwiftUI views, data flow and lists, then explore the platform frameworks in depth." + resources: + - "https://developer.apple.com/tutorials/swiftui" + - "https://developer.apple.com/documentation/" + - title: "Cross-platform development" + steps: + - title: "Flutter" + summary: "Write one Dart codebase that renders the same widgets on Android and iOS, and compare that model with native development." + resources: + - "https://docs.flutter.dev/" + - title: "React Native with Expo" + summary: "Use React and JavaScript to build native mobile apps, letting Expo handle project setup, device testing and builds." + resources: + - "https://reactnative.dev/docs/getting-started" + - "https://docs.expo.dev/" + - title: "TypeScript for mobile code" + summary: "Add static types to React Native projects to catch mistakes early and keep a growing mobile codebase easy to change." + optional: true + resources: + - "https://www.typescriptlang.org/docs/handbook/" + - title: "Backend, testing and release" + steps: + - title: "Backend services" + summary: "Connect your app to authentication, cloud databases, storage and push notifications without running your own servers." + resources: + - "https://firebase.google.com/docs" + - title: "Testing mobile apps" + summary: "Write fast unit tests for app logic and fewer UI tests on top, following the test pyramid to keep releases reliable." + resources: + - "https://junit.org/" + - "https://martinfowler.com" + - "https://testing.googleblog.com" + - title: "Publishing to the app stores" + summary: "Learn app signing, store listings, review rules and staged rollouts for Google Play and the App Store before your first release." + resources: + - "https://developer.android.com/docs" + - "https://developer.apple.com/documentation/" +see_also: + - name: "Android Developer Roadmap (roadmap.sh)" + url: "https://roadmap.sh/android" + - name: "iOS Developer Roadmap (roadmap.sh)" + url: "https://roadmap.sh/ios" + - name: "Flutter Roadmap (roadmap.sh)" + url: "https://roadmap.sh/flutter" + - name: "React Native Roadmap (roadmap.sh)" + url: "https://roadmap.sh/react-native" diff --git a/_data/en-US/learning-paths/python.yaml b/_data/en-US/learning-paths/python.yaml new file mode 100644 index 0000000..0c6893a --- /dev/null +++ b/_data/en-US/learning-paths/python.yaml @@ -0,0 +1,77 @@ +title: "Python programming" +summary: "Learn Python from your first program to clean, idiomatic code, automate everyday tasks, manage packages and take your first steps into data science." +subcategory: "development/programming-languages" +level: "beginner" +source: "ipl" +stages: + - title: "Getting started" + steps: + - title: "Install and run Python" + summary: "Install Python, run the interactive interpreter and execute your first script so you can experiment with every concept that follows." + resources: + - "https://www.python.org/" + - "https://docs.python.org/3/" + - title: "Variables, types and control flow" + summary: "Learn variables, strings, numbers, conditions and loops, the building blocks every Python program is made of." + resources: + - "https://www.py4e.com/" + - "https://docs.python.org/3/tutorial/" + - title: "Functions, data structures and files" + summary: "Organise code into functions and modules, work with lists and dictionaries, and read and write files on disk." + resources: + - "https://docs.python.org/3/tutorial/" + - "https://www.py4e.com/" + - title: "Writing good Python" + steps: + - title: "Code style with PEP 8" + summary: "Follow the official naming, layout and formatting conventions so your code is easy for others, and yourself, to read later." + resources: + - "https://peps.python.org/pep-0008/" + - title: "The standard library" + summary: "Explore the modules that ship with Python, from dates and paths to JSON and regular expressions, before reaching for extra packages." + resources: + - "https://docs.python.org/3/" + - title: "Shell and version control" + summary: "Get comfortable with the terminal and Git so you can run scripts, track changes and share your projects." + optional: true + resources: + - "https://missing.csail.mit.edu/" + - "https://git-scm.com/docs" + - title: "Practical projects" + steps: + - title: "Automate everyday tasks" + summary: "Write small programs that rename files, fill spreadsheets, scrape web pages and send emails, turning concepts into useful tools." + resources: + - "https://automatetheboringstuff.com/" + - title: "Packages and virtual environments" + summary: "Install third-party libraries with pip inside isolated virtual environments so each project keeps its own dependencies." + resources: + - "https://packaging.python.org/en/latest/" + - "https://pip.pypa.io/en/stable/" + - "https://pypi.org" + - title: "Publish your own package" + summary: "Structure a project, describe its metadata and build a distribution so others can install your code from the package index." + optional: true + resources: + - "https://packaging.python.org/en/latest/" + - "https://pypi.org" + - title: "Into data science" + steps: + - title: "Practise with real datasets" + summary: "Load public datasets and answer simple questions with Python, building the habit of exploring data before modelling it." + resources: + - "https://www.kaggle.com/datasets" + - "https://archive.ics.uci.edu/" + - title: "Machine learning with scikit-learn" + summary: "Train and evaluate classic models such as regression and decision trees with a consistent, well-documented Python library." + resources: + - "https://scikit-learn.org/" + - "https://www.fast.ai/" + - title: "Follow the language" + summary: "Keep up with new Python releases and core development news to learn features as they arrive in the language." + optional: true + resources: + - "https://www.python.org/" +see_also: + - name: "Python Roadmap (roadmap.sh)" + url: "https://roadmap.sh/python" diff --git a/_data/en-US/learning-paths/ux-design.yaml b/_data/en-US/learning-paths/ux-design.yaml new file mode 100644 index 0000000..2c9910d --- /dev/null +++ b/_data/en-US/learning-paths/ux-design.yaml @@ -0,0 +1,87 @@ +title: "UX design" +summary: "Learn how people perceive and use interfaces, then practise research, structure, prototyping and testing until you can design and defend a usable product flow." +subcategory: "design/user-experience" +level: "beginner" +source: "ipl" +stages: + - title: "How people use things" + steps: + - title: "Usability basics" + summary: "Read the classic ideas of affordances, signifiers and mental models, which explain why some interfaces feel obvious and others confuse." + resources: + - "https://jnd.org/books/" + - "https://sensible.com/dont-make-me-think/" + - title: "Psychology behind interfaces" + summary: "Study the cognitive principles and biases that shape attention, memory and decisions, so your design choices rest on how minds actually work." + resources: + - "https://lawsofux.com" + - "https://www.interaction-design.org/literature/book/the-encyclopedia-of-human-computer-interaction-2nd-ed" + - title: "The design process" + summary: "Get an overview of human-centred design and the Double Diamond, learning when to explore problems broadly and when to converge on solutions." + resources: + - "https://www.designcouncil.org.uk/" + - "https://www.designkit.org" + - "https://dschool.stanford.edu" + - title: "Understanding users" + steps: + - title: "User research methods" + summary: "Learn to plan interviews, observation and surveys, and to pick a method that answers the question you actually have about users." + resources: + - "https://www.nngroup.com/articles/" + - "https://www.interaction-design.org/courses" + - title: "Synthesis and journey maps" + summary: "Turn research notes into personas, empathy maps and journey maps that the whole team can use to agree on the real problem." + resources: + - "https://miro.com" + - "https://mural.co" + - title: "Running workshops" + summary: "Practise facilitating ideation and co-creation sessions, because UX work often means guiding stakeholders toward shared decisions." + optional: true + resources: + - "https://gamestorming.com" + - "https://toolbox.hyperisland.com/" + - "https://www.sessionlab.com/" + - title: "Structure and prototypes" + steps: + - title: "Information architecture and flows" + summary: "Organise content, navigation and task flows so users can predict where things are and finish what they came to do." + resources: + - "https://boxesandarrows.com" + - "https://pageflows.com" + - title: "Wireframing" + summary: "Sketch low-fidelity layouts quickly to test structure and priorities before spending time on colour, type and polish." + resources: + - "https://balsamiq.com/" + - "https://penpot.app" + - title: "Interactive prototypes" + summary: "Build clickable prototypes in a design tool so you can test realistic interactions and hand clear specifications to developers." + resources: + - "https://www.figma.com" + - "https://help.figma.com" + - "https://penpot.app" + - title: "Learning from real patterns" + summary: "Browse how shipped products solve common screens like onboarding and checkout, borrowing proven patterns instead of reinventing them." + optional: true + resources: + - "https://mobbin.com" + - "https://uxmovement.com" + - title: "Evaluate and include everyone" + steps: + - title: "Usability testing" + summary: "Run moderated and unmoderated tests on prototypes, watching where people stumble and turning findings into prioritised design changes." + resources: + - "https://maze.co/" + - "https://www.nngroup.com/articles/" + - title: "Accessible design" + summary: "Apply accessibility guidance to layouts, forms and content so your product works for people using assistive technologies." + resources: + - "https://www.w3.org/WAI/tutorials/" + - title: "Portfolio and next steps" + summary: "Document projects as case studies and keep learning through structured courses and the practitioner community writing about UX." + resources: + - "https://www.coursera.org/professional-certificates/google-ux-design" + - "https://uxdesign.cc" + - "https://www.smashingmagazine.com/category/ux-design/" +see_also: + - name: "UX Design Roadmap (roadmap.sh)" + url: "https://roadmap.sh/ux-design" diff --git a/_data/pt-BR/learning-paths/backend.yaml b/_data/pt-BR/learning-paths/backend.yaml new file mode 100644 index 0000000..867bad1 --- /dev/null +++ b/_data/pt-BR/learning-paths/backend.yaml @@ -0,0 +1,88 @@ +title: "Desenvolvimento backend" +summary: "Aprenda a construir aplicações do lado do servidor dominando HTTP, um framework web, bancos de dados, projeto de APIs e as decisões de arquitetura que permitem escalar." +subcategory: "development/backend-development" +level: "intermediate" +source: "ipl" +stages: + - title: "Servidor e HTTP" + steps: + - title: "HTTP e o lado do servidor" + summary: "Entenda requisições, respostas, cabeçalhos e cookies, porque toda decisão de backend acaba passando pelo protocolo HTTP." + resources: + - "https://developer.mozilla.org" + - title: "Escolha um framework" + summary: "Monte uma aplicação pequena com rotas e middlewares em um framework popular para entender o ciclo de uma requisição." + resources: + - "https://nodejs.org" + - "https://www.djangoproject.com" + - "https://fastapi.tiangolo.com" + - "https://spring.io" + - title: "Bancos de dados" + steps: + - title: "SQL e modelagem relacional" + summary: "Modele tabelas, escreva consultas SQL e use transações, a escolha padrão de armazenamento na maioria dos sistemas." + resources: + - "https://www.postgresql.org" + - "https://www.cursoemvideo.com" + - "https://savepoint.blog.br" + - title: "Índices e desempenho de consultas" + summary: "Aprenda como os índices funcionam e como ler planos de execução, a correção mais comum para endpoints lentos." + resources: + - "https://use-the-index-luke.com" + - "https://planet.postgresql.org" + - title: "Migrações de esquema" + summary: "Versione as mudanças do banco junto com o código para que todos os ambientes evoluam com segurança." + resources: + - "https://flywaydb.org" + - "https://www.liquibase.com" + - title: "Bancos NoSQL" + summary: "Saiba quando um banco de documentos ou um armazenamento em memória serve melhor que tabelas relacionais, e o que se perde." + optional: true + resources: + - "https://www.mongodb.com" + - "https://redis.io" + - "https://db-engines.com" + - title: "Ferramentas de administração" + summary: "Use clientes gráficos para explorar esquemas, rodar consultas e administrar bancos sem depender só do terminal." + optional: true + resources: + - "https://dbeaver.io" + - "https://www.pgadmin.org" + - title: "APIs, arquitetura e qualidade" + steps: + - title: "Projetar e testar APIs" + summary: "Defina recursos consistentes, documente contratos e teste requisições para que os clientes possam confiar na sua API." + resources: + - "https://www.postman.com" + - "https://developer.mozilla.org" + - title: "Arquitetura e padrões de projeto" + summary: "Aplique princípios de engenharia de software e padrões de projeto para manter o código compreensível enquanto ele cresce." + resources: + - "https://engsoftmoderna.info" + - "https://refactoring.guru/pt-br" + - title: "Diagramas de arquitetura" + summary: "Documente a arquitetura com diagramas em níveis de detalhe, facilitando conversas com o time sobre o sistema." + optional: true + resources: + - "https://c4model.com" + - "https://plantuml.com" + - title: "Qualidade de código" + summary: "Automatize a análise estática para encontrar bugs, vulnerabilidades e código duplicado antes que cheguem à produção." + resources: + - "https://www.sonarsource.com" + - title: "Escala e sistemas distribuídos" + steps: + - title: "Cache e mensageria" + summary: "Alivie o banco com cache e desacople serviços com filas de eventos, duas ferramentas centrais para lidar com crescimento." + resources: + - "https://redis.io" + - "https://kafka.apache.org" + - title: "Sistemas intensivos em dados" + summary: "Estude replicação, particionamento e consistência, e veja como empresas reais escalaram seus backends na prática." + resources: + - "https://dataintensive.net" + - "https://highscalability.com" + - "https://martinfowler.com" +see_also: + - name: "Roadmap Backend Developer (roadmap.sh)" + url: "https://roadmap.sh/backend" diff --git a/_data/pt-BR/learning-paths/computer-science.yaml b/_data/pt-BR/learning-paths/computer-science.yaml new file mode 100644 index 0000000..d929ad4 --- /dev/null +++ b/_data/pt-BR/learning-paths/computer-science.yaml @@ -0,0 +1,80 @@ +title: "Fundamentos de ciência da computação" +summary: "Construa uma base sólida em ciência da computação, passando por algoritmos, sistemas operacionais, redes e teoria, com materiais abertos e referências da comunidade brasileira." +subcategory: "computing/computer-science" +level: "beginner" +source: "ipl" +stages: + - title: "Primeiros passos" + steps: + - title: "Um roteiro para a área" + summary: "Veja quais disciplinas formam o núcleo da computação e em que ordem estudá-las para não se perder estudando sozinho." + resources: + - "https://teachyourselfcs.com/" + - title: "Linux e linha de comando" + summary: "Ganhe intimidade com o terminal, arquivos e processos, pois quase todo o resto do estudo passa por ferramentas de linha de comando." + resources: + - "https://www.guiafoca.org/" + - "https://linuxcommand.org/" + - title: "Controle de versão" + summary: "Use o Git para guardar exercícios e experimentos, um hábito que facilita qualquer projeto ou trabalho da faculdade." + resources: + - "https://git-scm.com/" + - title: "Algoritmos e estruturas de dados" + steps: + - title: "Estruturas de dados e algoritmos básicos" + summary: "Estude vetores, listas, árvores, ordenação e busca com material didático em português e exemplos de código em C." + resources: + - "https://www.ime.usp.br/~pf/algoritmos/" + - "https://jeffe.cs.illinois.edu/teaching/algorithms/" + - title: "Grafos" + summary: "Aprenda busca em largura e profundidade, caminhos mínimos e árvores geradoras, que modelam redes, mapas e dependências." + resources: + - "https://www.ime.usp.br/~pf/algoritmos_para_grafos/" + - title: "Análise e projeto de algoritmos" + summary: "Domine análise assintótica, recursão e programação dinâmica para estimar o custo de uma solução antes de implementá-la." + resources: + - "https://mitpress.mit.edu/algorithms/" + - "https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/" + - title: "Treino com problemas" + summary: "Resolva desafios em juiz online e conheça as competições brasileiras, ótima forma de fixar algoritmos com prática constante." + optional: true + resources: + - "https://www.beecrowd.com/" + - "https://maratona.sbc.org.br/" + - "https://olimpiada.ic.unicamp.br/" + - title: "Como o computador executa programas" + steps: + - title: "Sistemas computacionais" + summary: "Entenda representação de dados, código de máquina e hierarquia de memória para saber o que acontece quando um programa roda." + resources: + - "https://csapp.cs.cmu.edu/" + - title: "Sistemas operacionais" + summary: "Veja como o sistema operacional virtualiza CPU e memória, lida com concorrência e guarda dados de forma persistente." + resources: + - "https://pages.cs.wisc.edu/~remzi/OSTEP/" + - "https://pdos.csail.mit.edu/6.828/" + - title: "Redes e bancos de dados na prática" + summary: "Capture tráfego de rede real e consulte um banco embutido para ligar a teoria de protocolos e armazenamento ao que se observa." + resources: + - "https://www.wireshark.org/" + - "https://www.sqlite.org/" + - title: "Teoria e comunidade" + steps: + - title: "Autômatos e linguagens formais" + summary: "Experimente autômatos, gramáticas e máquinas de Turing para entender os modelos formais por trás de compiladores e da própria computação." + resources: + - "https://www.jflap.org/" + - title: "Complexidade computacional" + summary: "Conheça as classes P e NP e por que certos problemas parecem não ter solução eficiente, mesmo com computadores melhores." + optional: true + resources: + - "https://complexityzoo.net/Complexity_Zoo" + - title: "Ciência da computação no Brasil" + summary: "Acompanhe a SBC, sua revista de divulgação e os livros abertos para seguir estudando e conhecer a pesquisa feita no país." + resources: + - "https://horizontes.sbc.org.br/" + - "https://sol.sbc.org.br/livros/index.php/sbc" + - "https://www.sbc.org.br/" +see_also: + - name: "Roadmap Computer Science (roadmap.sh)" + url: "https://roadmap.sh/computer-science" diff --git a/_data/pt-BR/learning-paths/cybersecurity.yaml b/_data/pt-BR/learning-paths/cybersecurity.yaml new file mode 100644 index 0000000..3767933 --- /dev/null +++ b/_data/pt-BR/learning-paths/cybersecurity.yaml @@ -0,0 +1,75 @@ +title: "Cibersegurança" +summary: "Comece pela segurança no dia a dia e pelas redes, depois pratique segurança web, acompanhe vulnerabilidades e aprenda a proteger sistemas com ferramentas livres." +subcategory: "computing/cyber-security" +level: "beginner" +source: "ipl" +stages: + - title: "Fundamentos" + steps: + - title: "Segurança no dia a dia" + summary: "Entenda senhas, golpes, códigos maliciosos e cópias de segurança com o guia do CERT.br, ponto de partida para qualquer iniciante." + resources: + - "https://cartilha.cert.br/" + - "https://www.cert.br/" + - title: "Como as redes funcionam" + summary: "Aprenda IP, TCP, portas e DNS, porque a maior parte dos ataques e das defesas acontece no tráfego de rede." + resources: + - "https://gaia.cs.umass.edu/kurose_ross/" + - "https://www.iana.org/assignments/service-names-port-numbers/" + - title: "Análise de tráfego" + summary: "Capture e leia pacotes por conta própria para reconhecer o tráfego normal e identificar o que foge do padrão." + resources: + - "https://www.wireshark.org/" + - "https://www.wireshark.org/docs/" + - "https://www.tcpdump.org/" + - title: "Criptografia e padrões" + summary: "Conheça os padrões de criptografia, hashes e assinaturas digitais que protegem dados armazenados e em trânsito." + resources: + - "https://csrc.nist.gov/publications" + - title: "Segurança de aplicações web" + steps: + - title: "As falhas web mais comuns" + summary: "Estude injeção, controle de acesso quebrado e outras fraquezas recorrentes para reconhecê-las no seu próprio código." + resources: + - "https://owasp.org/" + - "https://cwe.mitre.org" + - title: "Laboratórios práticos" + summary: "Explore aplicações propositalmente vulneráveis em laboratórios guiados e gratuitos, a forma mais rápida de entender cada falha." + resources: + - "https://portswigger.net/web-security" + - title: "Ferramentas de teste web" + summary: "Use proxies de interceptação para inspecionar e alterar requisições em aplicações que você tem autorização para testar." + resources: + - "https://www.zaproxy.org" + - "https://portswigger.net/burp" + - title: "Vulnerabilidades, ameaças e defesa" + steps: + - title: "Catálogos de vulnerabilidades" + summary: "Aprenda a ler identificadores CVE e notas de gravidade para decidir o que precisa ser corrigido primeiro." + resources: + - "https://www.cve.org/" + - "https://nvd.nist.gov/" + - title: "Táticas dos atacantes" + summary: "Relacione as técnicas usadas em ataques reais às detecções e aos controles capazes de interrompê-las." + resources: + - "https://attack.mitre.org/" + - title: "Endurecimento e varredura" + summary: "Aplique configurações seguras de referência e faça varreduras nos seus próprios servidores para achar serviços expostos." + resources: + - "https://www.cisecurity.org/" + - "https://nmap.org/" + - title: "Ambiente de testes de intrusão" + summary: "Monte um laboratório com uma distribuição voltada a testes de segurança para praticar em máquinas que são suas." + optional: true + resources: + - "https://www.kali.org/" + - title: "Acompanhar as ameaças" + summary: "Siga alertas oficiais e notícias diárias para saber de novas campanhas e correções urgentes." + optional: true + resources: + - "https://www.cert.br" + - "https://thehackernews.com" + - "https://www.cisa.gov/news-events/cybersecurity-advisories" +see_also: + - name: "Roadmap Cyber Security (roadmap.sh)" + url: "https://roadmap.sh/cyber-security" diff --git a/_data/pt-BR/learning-paths/data-analysis.yaml b/_data/pt-BR/learning-paths/data-analysis.yaml new file mode 100644 index 0000000..f7979a4 --- /dev/null +++ b/_data/pt-BR/learning-paths/data-analysis.yaml @@ -0,0 +1,72 @@ +title: "Análise de dados" +summary: "Aprenda a buscar, limpar, analisar e apresentar dados usando SQL, Python, estatística e dashboards, com cursos em português e bases públicas brasileiras." +subcategory: "business/data-and-analytics" +level: "beginner" +source: "ipl" +stages: + - title: "Fundamentos" + steps: + - title: "Estatística descritiva" + summary: "Entenda média, mediana, dispersão e distribuições para resumir dados com honestidade e perceber quando um número engana." + resources: + - "https://www.escolavirtual.gov.br" + - "https://www.edx.org/" + - title: "Consultas com SQL" + summary: "Aprenda a selecionar, filtrar, juntar e agregar tabelas em SQL, a linguagem usada para extrair dados de quase todo banco." + resources: + - "https://www.alura.com.br" + - "https://dbeaver.io/" + - title: "Python e notebooks" + summary: "Carregue e explore tabelas em notebooks Jupyter, combinando código, resultados e anotações num único documento fácil de compartilhar." + resources: + - "https://jupyter.org/" + - "https://www.alura.com.br" + - title: "Dados brasileiros" + steps: + - title: "Portais de dados abertos" + summary: "Encontre bases públicas já tratadas sobre o Brasil e aprenda a ler a documentação, as licenças e o dicionário de cada conjunto." + resources: + - "https://dados.gov.br" + - "https://basedosdados.org" + - title: "Séries do IBGE e do Ipea" + summary: "Consulte séries históricas oficiais de população, preços e economia, base de grande parte das análises socioeconômicas feitas no país." + resources: + - "https://sidra.ibge.gov.br" + - "https://www.ipeadata.gov.br" + - title: "Limpeza e preparação" + summary: "Trate valores ausentes, tipos errados e duplicatas, e reorganize as tabelas para que a análise parta de dados confiáveis." + resources: + - "https://www.kaggle.com" + - "https://www.datacamp.com/" + - title: "Análise e comunicação" + steps: + - title: "Testes de hipótese e regressão" + summary: "Verifique se diferenças são reais e modele relações entre variáveis para tirar conclusões que se sustentam diante de questionamentos." + resources: + - "https://www.escolavirtual.gov.br" + - "https://www.datascienceacademy.com.br" + - title: "Dashboards e relatórios" + summary: "Monte painéis interativos ligados às suas bases para que a equipe acompanhe indicadores sem depender de planilhas enviadas por e-mail." + resources: + - "https://lookerstudio.google.com" + - "https://www.metabase.com" + - title: "Ir além" + steps: + - title: "Comunidade e casos práticos" + summary: "Leia artigos e tutoriais da comunidade brasileira de dados e veja como outros analistas resolvem problemas com bases públicas." + resources: + - "https://www.datahackers.com.br/" + - "https://basedosdados.org" + - title: "Modelos preditivos" + summary: "Dê o primeiro passo em previsões com modelos simples de machine learning aplicados aos mesmos dados que você já analisa." + optional: true + resources: + - "https://scikit-learn.org/" + - title: "Estatística aplicada em profundidade" + summary: "Explore artigos teóricos e aplicados de estatística publicados no Brasil para aprofundar métodos e conhecer pesquisas sobre dados nacionais." + optional: true + resources: + - "https://rbesojs.ibge.gov.br/index.php/rbes" +see_also: + - name: "Roadmap Data Analyst (roadmap.sh)" + url: "https://roadmap.sh/data-analyst" diff --git a/_data/pt-BR/learning-paths/databases.yaml b/_data/pt-BR/learning-paths/databases.yaml new file mode 100644 index 0000000..d86605f --- /dev/null +++ b/_data/pt-BR/learning-paths/databases.yaml @@ -0,0 +1,82 @@ +title: "Bancos de dados" +summary: "Aprenda SQL na prática, modele tabelas e índices no PostgreSQL, conheça bancos NoSQL e versione mudanças de esquema com segurança, do primeiro SELECT à produção." +subcategory: "development/databases" +level: "beginner" +source: "ipl" +stages: + - title: "Primeiros passos" + steps: + - title: "SQL do zero" + summary: "Siga um curso gratuito em português para criar tabelas e escrever suas primeiras consultas com calma e muitos exemplos." + resources: + - "https://www.cursoemvideo.com" + - title: "Panorama dos bancos de dados" + summary: "Compare bancos relacionais, de documentos, chave-valor e colunares para saber qual problema cada tipo resolve." + resources: + - "https://db-engines.com" + - title: "Um banco embutido para praticar" + summary: "Use um banco SQL que funciona num único arquivo, sem servidor, para treinar consultas em qualquer computador." + resources: + - "https://www.sqlite.org/" + - title: "PostgreSQL na prática" + steps: + - title: "Instalação e documentação" + summary: "Instale o PostgreSQL e aprenda a navegar pela documentação oficial, com apoio da comunidade brasileira quando surgirem dúvidas." + resources: + - "https://www.postgresql.org/docs/" + - "https://postgresql.org.br/" + - title: "Ferramentas gráficas" + summary: "Use um cliente visual para explorar esquemas, executar consultas e conferir resultados sem depender só do terminal." + resources: + - "https://dbeaver.io" + - "https://www.pgadmin.org" + - title: "Modelagem e transações" + summary: "Modele entidades com chaves e restrições e entenda transações e isolamento para manter os dados consistentes com vários usuários." + resources: + - "https://dataintensive.net" + - "https://www.postgresql.org/docs/" + - title: "Índices e desempenho" + summary: "Entenda como índices funcionam e como ler planos de execução, a forma mais eficaz de acelerar consultas lentas." + resources: + - "https://use-the-index-luke.com" + - "https://savepoint.blog.br" + - title: "Além do relacional" + steps: + - title: "Bancos de documentos" + summary: "Guarde documentos flexíveis no formato JSON e descubra quando esse modelo funciona melhor que tabelas, e quando não." + resources: + - "https://www.mongodb.com" + - title: "Cache e chave-valor" + summary: "Use um armazenamento em memória para cache, sessões e contadores, aliviando a carga do banco principal." + resources: + - "https://redis.io" + - title: "Bancos distribuídos" + summary: "Veja como um banco espalha dados por muitas máquinas e quais concessões de consistência isso exige." + optional: true + resources: + - "https://cassandra.apache.org/" + - title: "Em produção e por dentro" + steps: + - title: "Migrações de esquema" + summary: "Versione alterações de esquema em scripts ordenados para que todos os ambientes evoluam igual, sem ajustes manuais." + resources: + - "https://flywaydb.org" + - "https://www.liquibase.com" + - title: "Como os motores de armazenamento funcionam" + summary: "Conheça árvores B, logs e buffers para entender por que um banco se comporta de certo jeito sob carga." + optional: true + resources: + - "https://databass.dev" + - "https://db.cs.cmu.edu/" + - title: "Comunidade PostgreSQL" + summary: "Acompanhe artigos, boletins e eventos da comunidade para continuar aprendendo depois do básico." + optional: true + resources: + - "https://planet.postgresql.org" + - "https://postgresweekly.com" + - "https://pgconf.com.br" +see_also: + - name: "Roadmap SQL (roadmap.sh)" + url: "https://roadmap.sh/sql" + - name: "Roadmap PostgreSQL DBA (roadmap.sh)" + url: "https://roadmap.sh/postgresql-dba" diff --git a/_data/pt-BR/learning-paths/devops.yaml b/_data/pt-BR/learning-paths/devops.yaml new file mode 100644 index 0000000..a5d94e6 --- /dev/null +++ b/_data/pt-BR/learning-paths/devops.yaml @@ -0,0 +1,81 @@ +title: "DevOps e nuvem" +summary: "Do terminal Linux e do Git até contêineres, pipelines de CI/CD, infraestrutura como código e Kubernetes, com a base de sistemas distribuídos que sustenta a nuvem." +subcategory: "development/development-environment" +level: "intermediate" +source: "ipl" +stages: + - title: "Fundamentos" + steps: + - title: "Linux e linha de comando" + summary: "Domine o shell, arquivos, processos e permissões, porque quase todo servidor, contêiner e pipeline roda em Linux." + resources: + - "https://www.guiafoca.org/" + - "https://linuxcommand.org/" + - "https://missing.csail.mit.edu" + - title: "Controle de versão com Git" + summary: "Pratique commits, branches e merges até virar hábito, já que toda automação de entrega começa num push para o repositório." + resources: + - "https://git-scm.com/book/en/v2" + - "https://learngitbranching.js.org" + - title: "Virtualização na prática" + summary: "Suba máquinas virtuais e entenda como o sistema operacional isola processos e memória, a base conceitual dos contêineres." + optional: true + resources: + - "https://www.virtualbox.org/" + - "https://pages.cs.wisc.edu/~remzi/OSTEP/" + - title: "Contêineres" + steps: + - title: "Primeiros passos com Docker" + summary: "Empacote uma aplicação com suas dependências numa imagem, rode o contêiner e combine serviços com o Compose." + resources: + - "https://docs.docker.com/get-started/" + - "https://docker-curriculum.com" + - title: "Imagens e registros" + summary: "Aprenda a publicar, versionar e reaproveitar imagens e pacotes prontos em registros públicos, com atenção à origem do que você baixa." + resources: + - "https://hub.docker.com" + - "https://artifacthub.io" + - title: "Ambiente de desenvolvimento em contêiner" + summary: "Descreva o ambiente de trabalho em arquivos versionados para que toda a equipe programe com as mesmas ferramentas." + optional: true + resources: + - "https://containers.dev" + - "https://dotfiles.github.io" + - title: "Automação e infraestrutura como código" + steps: + - title: "Integração contínua" + summary: "Monte pipelines que instalam dependências, rodam testes e geram artefatos a cada push, para que erros apareçam em minutos." + resources: + - "https://docs.github.com/actions" + - "https://docs.gitlab.com/ci/" + - title: "Entrega contínua" + summary: "Leve cada versão aprovada até homologação e produção com ambientes, aprovações e segredos configurados no próprio pipeline." + resources: + - "https://docs.github.com/actions" + - "https://docs.gitlab.com/ci/" + - "https://github.blog" + - title: "Infraestrutura como código com Terraform" + summary: "Descreva redes, máquinas e serviços de nuvem em arquivos versionados e aplique mudanças de forma revisável e repetível." + resources: + - "https://developer.hashicorp.com/terraform/docs" + - title: "Orquestração e nuvem" + steps: + - title: "Kubernetes" + summary: "Entenda pods, deployments e services para rodar muitos contêineres num cluster, com escala automática e recuperação de falhas." + resources: + - "https://kubernetes.io/pt-br/docs/home/" + - "https://kubernetes.io/" + - "https://kubernetes.io/blog/" + - title: "Mensageria e streaming de eventos" + summary: "Conheça filas e logs de eventos distribuídos, comuns para desacoplar serviços em arquiteturas de nuvem." + optional: true + resources: + - "https://kafka.apache.org/" + - title: "Fundamentos de sistemas distribuídos" + summary: "Estude replicação, particionamento e tolerância a falhas, as ideias por trás de todo serviço de nuvem que você usa." + resources: + - "https://dataintensive.net/" + - "https://www.distributed-systems.net/" +see_also: + - name: "Roadmap DevOps (roadmap.sh)" + url: "https://roadmap.sh/devops" diff --git a/_data/pt-BR/learning-paths/frontend.yaml b/_data/pt-BR/learning-paths/frontend.yaml new file mode 100644 index 0000000..2393e86 --- /dev/null +++ b/_data/pt-BR/learning-paths/frontend.yaml @@ -0,0 +1,90 @@ +title: "Desenvolvimento frontend" +summary: "Aprenda a criar interfaces web acessíveis, rápidas e responsivas, começando pelo funcionamento do navegador e chegando às ferramentas e frameworks atuais." +subcategory: "development/frontend-development" +level: "beginner" +source: "ipl" +stages: + - title: "Fundamentos da web e HTML" + steps: + - title: "Como o navegador monta uma página" + summary: "Entenda como o navegador busca, interpreta e desenha uma página, base para tudo o que vem depois na trilha." + resources: + - "https://developer.mozilla.org" + - "https://www.ceweb.br/" + - title: "HTML semântico" + summary: "Estruture o conteúdo com as tags certas, porque uma marcação bem feita ajuda acessibilidade, buscadores e estilização." + resources: + - "https://web.dev/learn" + - "https://validator.w3.org/nu/" + - title: "CSS e layout" + steps: + - title: "Base do CSS" + summary: "Domine cascata, especificidade, modelo de caixa e unidades para que os estilos se comportem como você espera." + resources: + - "https://web.dev/learn" + - "https://css-tricks.com" + - title: "Flexbox e Grid" + summary: "Pratique os dois sistemas modernos de layout, que resolvem a maioria das páginas e componentes sem gambiarras." + resources: + - "https://css-tricks.com" + - "https://www.freecodecamp.org/portuguese/learn" + - title: "Design responsivo" + summary: "Faça páginas que se adaptam a qualquer tela com layouts fluidos e media queries, já que a maioria acessa pelo celular." + resources: + - "https://www.freecodecamp.org/portuguese/learn" + - "https://learningwebdesign.com/" + - title: "Experimentos e inspiração" + summary: "Veja como o mesmo HTML ganha visuais muito diferentes e teste ideias rapidamente num editor online." + optional: true + resources: + - "https://www.csszengarden.com/" + - "https://codepen.io/" + - "https://tympanus.net/codrops/" + - title: "Interatividade, acessibilidade e desempenho" + steps: + - title: "JavaScript no navegador" + summary: "Use JavaScript para manipular o DOM e reagir a eventos, o que dá vida a qualquer interface interativa." + resources: + - "https://javascript.info" + - "https://developer.mozilla.org" + - title: "Acessibilidade" + summary: "Aplique as diretrizes WCAG e padrões inclusivos para que pessoas com leitores de tela ou só teclado usem seu site." + resources: + - "https://inclusive-components.design/" + - "https://wave.webaim.org/" + - "https://www.w3.org" + - title: "Compatibilidade entre navegadores" + summary: "Confira o suporte de cada recurso nos navegadores antes de usá-lo em produção e evite surpresas com usuários reais." + resources: + - "https://caniuse.com" + - title: "Desempenho" + summary: "Meça carregamento e renderização com ferramentas reais e corrija os gargalos que mais pesam nas Core Web Vitals." + resources: + - "https://pagespeed.web.dev/" + - "https://web.dev" + - title: "Ferramentas e frameworks" + steps: + - title: "Controle de versão com Git" + summary: "Aprenda a registrar mudanças, criar branches e colaborar com Git, ferramenta presente no dia a dia de toda equipe." + resources: + - "https://learngitbranching.js.org" + - "https://git-scm.com/book/en/v2" + - title: "npm e Vite" + summary: "Instale dependências pelo npm e use um servidor de desenvolvimento rápido para organizar projetos maiores." + resources: + - "https://www.npmjs.com" + - "https://vite.dev" + - title: "React ou Vue" + summary: "Escolha uma biblioteca de componentes para montar interfaces complexas a partir de peças pequenas e reutilizáveis." + resources: + - "https://react.dev" + - "https://vuejs.org" + - title: "Comunidade brasileira de frontend" + summary: "Acompanhe eventos e conteúdos da comunidade nacional para trocar experiências e se manter atualizado em português." + optional: true + resources: + - "https://braziljs.org" + - "https://frontinsampa.com.br" +see_also: + - name: "Roadmap Frontend Developer (roadmap.sh)" + url: "https://roadmap.sh/frontend" diff --git a/_data/pt-BR/learning-paths/javascript.yaml b/_data/pt-BR/learning-paths/javascript.yaml new file mode 100644 index 0000000..4fe09bc --- /dev/null +++ b/_data/pt-BR/learning-paths/javascript.yaml @@ -0,0 +1,74 @@ +title: "Programação em JavaScript" +summary: "Aprenda JavaScript do zero, passando pela sintaxe e funções, pela manipulação do navegador e pelo código assíncrono até chegar ao Node.js e às bibliotecas de interface." +subcategory: "development/programming-languages" +level: "beginner" +source: "ipl" +stages: + - title: "Fundamentos da linguagem" + steps: + - title: "Primeiros passos" + summary: "Comece com exercícios interativos e gratuitos em português para pegar o jeito da lógica de programação com JavaScript." + resources: + - "https://www.freecodecamp.org/portuguese/learn" + - title: "Tipos, variáveis e operadores" + summary: "Conheça os tipos primitivos, as variáveis e as estruturas de controle, peças básicas de qualquer programa em JavaScript." + resources: + - "https://javascript.info" + - "https://developer.mozilla.org" + - title: "Funções, escopo e closures" + summary: "Entenda como funções guardam variáveis e como o escopo funciona, o que explica boa parte dos comportamentos inesperados." + resources: + - "https://javascript.info" + - title: "Objetos, arrays e JSON" + summary: "Modele dados com objetos e arrays, aproveite seus métodos nativos e troque informações estruturadas no formato JSON." + resources: + - "https://developer.mozilla.org" + - "https://www.freecodecamp.org/portuguese/learn" + - title: "JavaScript no navegador" + steps: + - title: "DOM e eventos" + summary: "Selecione, crie e altere elementos da página e trate eventos do usuário para transformar HTML estático em algo interativo." + resources: + - "https://web.dev" + - "https://www.w3.org" + - title: "Compatibilidade entre navegadores" + summary: "Verifique em quais navegadores cada recurso da linguagem funciona antes de usá-lo em um projeto real." + resources: + - "https://caniuse.com" + - title: "Leituras e comunidade" + summary: "Acompanhe artigos e a comunidade brasileira de JavaScript para conhecer boas práticas e novidades do ecossistema." + optional: true + resources: + - "https://braziljs.org" + - "https://css-tricks.com" + - "https://www.smashingmagazine.com" + - title: "Código assíncrono e Node.js" + steps: + - title: "Promises e async/await" + summary: "Domine callbacks, promises e async/await sobre o event loop, essenciais para requisições de rede e leitura de arquivos." + resources: + - "https://web.dev" + - "https://nodejs.org" + - title: "JavaScript no servidor com Node.js" + summary: "Rode JavaScript fora do navegador para criar scripts, ferramentas de linha de comando e servidores web simples." + resources: + - "https://nodejs.org" + - title: "Testando APIs" + summary: "Use um cliente de API para enviar requisições e inspecionar respostas enquanto desenvolve seus primeiros serviços." + optional: true + resources: + - "https://www.postman.com" + - title: "Ecossistema" + steps: + - title: "Módulos e Vite" + summary: "Organize o código em módulos ES e use um servidor de desenvolvimento rápido para empacotar o projeto para o navegador." + resources: + - "https://vite.dev" + - title: "React ou Vue" + summary: "Coloque o JavaScript em prática numa biblioteca de componentes, construindo interfaces com peças reutilizáveis e estado previsível." + resources: + - "https://react.dev" + - "https://vuejs.org" +see_also: + - name: "Roadmap JavaScript (roadmap.sh)" + url: "https://roadmap.sh/javascript" diff --git a/_data/pt-BR/learning-paths/machine-learning.yaml b/_data/pt-BR/learning-paths/machine-learning.yaml new file mode 100644 index 0000000..69e9766 --- /dev/null +++ b/_data/pt-BR/learning-paths/machine-learning.yaml @@ -0,0 +1,73 @@ +title: "Machine learning" +summary: "Aprenda a criar modelos que aprendem com dados, dos algoritmos clássicos e da validação correta até redes neurais, com cursos gratuitos e documentação oficial." +subcategory: "computing/machine-learning" +level: "intermediate" +source: "ipl" +stages: + - title: "Bases" + steps: + - title: "O que é inteligência artificial" + summary: "Entenda o que a IA consegue ou não fazer e onde o aprendizado de máquina entra, antes de partir para fórmulas e código." + resources: + - "https://www.elementsofai.com/" + - title: "Fundamentos matemáticos" + summary: "Revise álgebra linear, probabilidade e otimização aplicadas ao aprendizado supervisionado, a teoria que sustenta todos os algoritmos seguintes." + resources: + - "https://cs229.stanford.edu/" + - title: "Primeiros modelos" + summary: "Treine, faça previsões e avalie modelos simples com uma biblioteca de API uniforme, aprendendo o fluxo de treino e teste." + resources: + - "https://scikit-learn.org/stable/user_guide.html" + - "https://scikit-learn.org/" + - title: "Aprendizado de máquina clássico" + steps: + - title: "Dados para experimentar" + summary: "Escolha conjuntos de dados de referência bem documentados para comparar seus resultados com os de outros pesquisadores e praticantes." + resources: + - "https://archive.ics.uci.edu/" + - "https://www.openml.org/" + - "https://www.kaggle.com/datasets" + - title: "Validação e métricas" + summary: "Use validação cruzada e métricas adequadas ao problema para que o desempenho medido reflita o comportamento do modelo em dados novos." + resources: + - "https://scikit-learn.org/stable/user_guide.html" + - "https://machinelearningmastery.com/" + - title: "Árvores e gradient boosting" + summary: "Domine árvores de decisão e ensembles com boosting, geralmente a melhor escolha para dados tabulares, usando bibliotecas otimizadas." + resources: + - "https://xgboost.readthedocs.io/" + - "https://lightgbm.readthedocs.io/" + - title: "Ajuste de hiperparâmetros" + summary: "Automatize a busca pelas melhores configurações do modelo, interrompendo cedo as tentativas pouco promissoras para economizar processamento." + optional: true + resources: + - "https://optuna.org/" + - title: "Aprendizado profundo" + steps: + - title: "Redes neurais na prática" + summary: "Monte e treine redes neurais com um framework moderno, aprendendo tensores, laços de treino e transferência de aprendizado em projetos reais." + resources: + - "https://pytorch.org/" + - "https://course.fast.ai/" + - title: "Modelos pré-treinados" + summary: "Reaproveite modelos já treinados para texto e imagem e faça ajuste fino para suas tarefas, sem precisar treinar tudo do zero." + optional: true + resources: + - "https://huggingface.co/" + - "https://huggingface.co/learn/nlp-course" + - title: "Prática e pesquisa" + steps: + - title: "Rastreamento de experimentos" + summary: "Registre parâmetros, métricas e versões de cada execução para que os experimentos sejam reprodutíveis e fáceis de comparar depois." + resources: + - "https://mlflow.org/" + - title: "Pesquisa no Brasil e no mundo" + summary: "Acompanhe artigos de eventos brasileiros e explicações visuais de pesquisas internacionais para seguir a evolução da área além dos cursos." + optional: true + resources: + - "https://sol.sbc.org.br/" + - "https://bracis.sbc.org.br/" + - "https://distill.pub/" +see_also: + - name: "Roadmap Machine Learning (roadmap.sh)" + url: "https://roadmap.sh/machine-learning" diff --git a/_data/pt-BR/learning-paths/mobile.yaml b/_data/pt-BR/learning-paths/mobile.yaml new file mode 100644 index 0000000..4f6c771 --- /dev/null +++ b/_data/pt-BR/learning-paths/mobile.yaml @@ -0,0 +1,74 @@ +title: "Desenvolvimento de apps móveis" +summary: "Crie apps nativos para Android com Kotlin e para iOS com SwiftUI, avance para Flutter ou React Native, conecte serviços de backend, teste e publique nas lojas." +subcategory: "development/plataforms" +level: "intermediate" +source: "ipl" +stages: + - title: "Linguagens e design" + steps: + - title: "Kotlin para Android" + summary: "Aprenda a sintaxe do Kotlin, a segurança contra nulos, classes e corrotinas, a linguagem principal dos apps Android atuais." + resources: + - "https://kotlinlang.org/docs/home.html" + - title: "Swift para as plataformas da Apple" + summary: "Domine optionals, structs, protocolos e closures do Swift, a base de qualquer app para iPhone e iPad." + resources: + - "https://www.swift.org/documentation/" + - title: "Diretrizes de design de cada plataforma" + summary: "Entenda como Android e iOS tratam navegação, tipografia, gestos e acessibilidade, para que o app pareça natural em cada sistema." + resources: + - "https://m3.material.io/" + - "https://developer.apple.com/design/human-interface-guidelines/" + - title: "Desenvolvimento nativo" + steps: + - title: "Android com Jetpack Compose" + summary: "Siga os cursos oficiais para montar telas com Compose, controlar estado, navegar entre telas e guardar dados no aparelho." + resources: + - "https://developer.android.com/courses" + - "https://developer.android.com/docs" + - title: "iOS com SwiftUI" + summary: "Construa apps iOS completos passo a passo com views, fluxo de dados e listas do SwiftUI, e depois aprofunde nos frameworks da Apple." + resources: + - "https://developer.apple.com/tutorials/swiftui" + - "https://developer.apple.com/documentation/" + - title: "Multiplataforma" + steps: + - title: "Flutter" + summary: "Escreva um único código em Dart que desenha os mesmos widgets no Android e no iOS, e compare essa abordagem com a nativa." + resources: + - "https://docs.flutter.dev/" + - title: "React Native com Expo" + summary: "Use React e JavaScript para criar apps móveis nativos, deixando o Expo cuidar da configuração, dos testes no aparelho e dos builds." + resources: + - "https://reactnative.dev/docs/getting-started" + - "https://docs.expo.dev/" + - title: "Backend, testes e publicação" + steps: + - title: "Serviços de backend" + summary: "Ligue o app a autenticação, banco de dados na nuvem, armazenamento de arquivos e notificações push sem manter servidores próprios." + resources: + - "https://firebase.google.com/docs" + - title: "Testes de apps" + summary: "Planeje testes unitários para a lógica e testes de interface para os fluxos principais, com vocabulário e técnicas de qualidade de software." + resources: + - "https://juliodelima.com.br" + - "https://bstqb.org.br" + - title: "Comunidade de testes" + summary: "Acompanhe artigos e discussões sobre automação e estratégia de testes para melhorar continuamente a qualidade dos seus apps." + optional: true + resources: + - "https://www.ministryoftesting.com" + - title: "Publicação nas lojas" + summary: "Aprenda assinatura do app, página na loja, regras de revisão e lançamentos graduais no Google Play e na App Store." + resources: + - "https://developer.android.com/docs" + - "https://developer.apple.com/documentation/" +see_also: + - name: "Roadmap Android Developer (roadmap.sh)" + url: "https://roadmap.sh/android" + - name: "Roadmap iOS Developer (roadmap.sh)" + url: "https://roadmap.sh/ios" + - name: "Roadmap Flutter (roadmap.sh)" + url: "https://roadmap.sh/flutter" + - name: "Roadmap React Native (roadmap.sh)" + url: "https://roadmap.sh/react-native" diff --git a/_data/pt-BR/learning-paths/python.yaml b/_data/pt-BR/learning-paths/python.yaml new file mode 100644 index 0000000..dc9518b --- /dev/null +++ b/_data/pt-BR/learning-paths/python.yaml @@ -0,0 +1,73 @@ +title: "Programação em Python" +summary: "Aprenda Python do primeiro programa ao código limpo e idiomático, automatize tarefas do dia a dia, use pacotes e dê os primeiros passos em ciência de dados." +subcategory: "development/programming-languages" +level: "beginner" +source: "ipl" +stages: + - title: "Primeiros passos" + steps: + - title: "Instale e rode o Python" + summary: "Instale o Python, abra o interpretador interativo e rode seu primeiro script para experimentar cada conceito que vem a seguir." + resources: + - "https://www.python.org" + - "https://www.cursoemvideo.com" + - title: "Variáveis, tipos e controle de fluxo" + summary: "Aprenda variáveis, textos, números, condições e laços de repetição, as peças com que todo programa em Python é montado." + resources: + - "https://www.cursoemvideo.com" + - "https://www.py4e.com/" + - "https://docs.python.org/3/tutorial/" + - title: "Funções, estruturas de dados e arquivos" + summary: "Organize o código em funções e módulos, trabalhe com listas e dicionários e leia e grave arquivos no disco." + resources: + - "https://docs.python.org/3/tutorial/" + - "https://www.py4e.com/" + - title: "Código bem escrito" + steps: + - title: "Estilo com a PEP 8" + summary: "Siga as convenções oficiais de nomes, indentação e formatação para que seu código seja fácil de ler por outras pessoas e por você." + resources: + - "https://peps.python.org/pep-0008/" + - title: "Versionamento com Git" + summary: "Use Git para registrar mudanças, voltar atrás com segurança e publicar seus projetos de Python." + optional: true + resources: + - "https://git-scm.com/book/en/v2" + - "https://learngitbranching.js.org" + - title: "Projetos práticos" + steps: + - title: "Automatize tarefas do dia a dia" + summary: "Escreva pequenos programas que renomeiam arquivos, preenchem planilhas, leem páginas web e enviam e-mails, transformando teoria em ferramenta útil." + resources: + - "https://automatetheboringstuff.com/" + - title: "Pacotes de terceiros" + summary: "Encontre bibliotecas no índice oficial de pacotes e instale-as com pip em ambientes virtuais separados para cada projeto." + resources: + - "https://pypi.org" + - title: "Comunidade Python" + summary: "Acompanhe as novidades da linguagem e participe da comunidade brasileira para trocar experiência e conhecer projetos reais." + optional: true + resources: + - "https://pythonbrasil.org.br" + - "https://blog.python.org" + - title: "Rumo à ciência de dados" + steps: + - title: "Notebooks Jupyter" + summary: "Use notebooks para misturar código, resultados e anotações, o ambiente mais comum para explorar dados com Python." + resources: + - "https://jupyter.org/" + - title: "Pratique com dados abertos" + summary: "Carregue bases públicas brasileiras e internacionais e responda perguntas simples com Python, criando o hábito de explorar antes de modelar." + resources: + - "https://dados.gov.br/" + - "https://www.ibge.gov.br/" + - "https://www.kaggle.com/datasets" + - title: "Aprendizado de máquina com scikit-learn" + summary: "Treine e avalie modelos clássicos, como regressão e árvores de decisão, com uma biblioteca consistente e bem documentada." + optional: true + resources: + - "https://scikit-learn.org/" + - "https://www.fast.ai/" +see_also: + - name: "Roadmap Python (roadmap.sh)" + url: "https://roadmap.sh/python" diff --git a/_data/pt-BR/learning-paths/ux-design.yaml b/_data/pt-BR/learning-paths/ux-design.yaml new file mode 100644 index 0000000..b4d8832 --- /dev/null +++ b/_data/pt-BR/learning-paths/ux-design.yaml @@ -0,0 +1,85 @@ +title: "UX design" +summary: "Entenda como as pessoas percebem e usam interfaces e pratique pesquisa, arquitetura, prototipação e testes até conseguir projetar e justificar um fluxo usável." +subcategory: "design/user-experience" +level: "beginner" +source: "ipl" +stages: + - title: "Como as pessoas usam interfaces" + steps: + - title: "Princípios psicológicos" + summary: "Conheça as leis e heurísticas que explicam atenção, memória e tomada de decisão, base de quase toda escolha de interface." + resources: + - "https://lawsofux.com/" + - title: "Usabilidade na prática" + summary: "Leia estudos empíricos sobre usabilidade para entender o que realmente atrapalha as pessoas, em vez de confiar só na intuição." + resources: + - "https://www.nngroup.com/articles/" + - "https://brasil.uxdesign.cc/" + - title: "Processo de design" + summary: "Aprenda o Duplo Diamante e o design thinking para saber quando abrir o problema e quando convergir para uma solução." + resources: + - "https://www.designcouncil.org.uk/" + - "https://www.interaction-design.org/courses/design-thinking-the-beginner-s-guide" + - "https://dschool.stanford.edu/resources" + - title: "Conhecendo quem usa" + steps: + - title: "Métodos de pesquisa" + summary: "Planeje entrevistas, observação e questionários, escolhendo o método que responde à dúvida concreta que você tem sobre o público." + resources: + - "https://www.designkit.org/" + - "https://www.interaction-design.org/" + - title: "Síntese e mapas de jornada" + summary: "Transforme anotações de pesquisa em personas e mapas de jornada que ajudem o time a concordar sobre o problema certo." + resources: + - "https://miro.com/" + - "https://mural.co/" + - title: "Facilitação de workshops" + summary: "Pratique dinâmicas de ideação e cocriação, porque boa parte do trabalho de UX é conduzir decisões em grupo." + optional: true + resources: + - "https://www.sessionlab.com/library" + - "https://echos.cc/" + - title: "Estrutura e protótipos" + steps: + - title: "Arquitetura da informação" + summary: "Organize conteúdo e navegação e valide a estrutura com testes de card sorting e tree testing antes de desenhar telas." + resources: + - "https://www.optimalworkshop.com/" + - title: "Wireframes e protótipos" + summary: "Monte wireframes e protótipos clicáveis numa ferramenta de design para testar interações reais e comunicar bem com quem desenvolve." + resources: + - "https://www.figma.com/" + - "https://penpot.app/" + - title: "Padrões de produtos reais" + summary: "Analise como aplicativos publicados resolvem cadastro, busca e pagamento, aproveitando padrões consolidados em vez de reinventá-los." + optional: true + resources: + - "https://mobbin.com/" + - "https://www.figma.com/community" + - title: "Design systems" + summary: "Estude um design system público para entender componentes, diretrizes e consistência visual em produtos de grande escala." + optional: true + resources: + - "https://www.gov.br/ds/home" + - title: "Avaliar e incluir" + steps: + - title: "Testes de usabilidade" + summary: "Rode testes com protótipos e observe o comportamento real com mapas de calor, transformando os achados em melhorias priorizadas." + resources: + - "https://maze.co/" + - "https://www.hotjar.com/" + - title: "Acessibilidade digital" + summary: "Aplique as diretrizes de acessibilidade web e conheça ferramentas brasileiras, como a tradução para Libras, para incluir mais pessoas." + resources: + - "https://www.w3.org/WAI/tutorials/" + - "https://ceweb.br/" + - "https://vlibras.gov.br/" + - title: "Comunidade e carreira" + summary: "Monte estudos de caso para o portfólio e acompanhe a comunidade brasileira de IHC e UX para continuar aprendendo." + resources: + - "https://www.coursera.org/professional-certificates/google-ux-design" + - "https://www.uxconf.com.br/" + - "https://ceihc.sbc.org.br/" +see_also: + - name: "Roadmap UX Design (roadmap.sh)" + url: "https://roadmap.sh/ux-design" diff --git a/_includes/components/organisms/footer.html b/_includes/components/organisms/footer.html index dd25789..d351bbe 100644 --- a/_includes/components/organisms/footer.html +++ b/_includes/components/organisms/footer.html @@ -36,12 +36,12 @@ {%- if fpt -%} - {%- assign col_explore = "/pt-BR/|Início;/pt-BR/categorias/|Todas as categorias;/pt-BR/busca/|Busca;/pt-BR/random-resource/|Recurso aleatório;/pt-BR/alteracoes-recentes/|Alterações recentes;/pt-BR/portal-comunidade/|Portal da comunidade" | split: ';' -%} + {%- assign col_explore = "/pt-BR/|Início;/pt-BR/categorias/|Todas as categorias;/pt-BR/learning-paths/|Trilhas de aprendizado;/pt-BR/busca/|Busca;/pt-BR/random-resource/|Recurso aleatório;/pt-BR/alteracoes-recentes/|Alterações recentes;/pt-BR/portal-comunidade/|Portal da comunidade" | split: ';' -%} {%- assign col_contribute = "/pt-BR/contribuir/|Como contribuir;/pt-BR/enviar-recurso/|Sugerir um recurso;/pt-BR/reportar-problemas/|Reportar um problema;/pt-BR/traduzir/|Ajudar a traduzir;/pt-BR/adicionar-idioma/|Adicionar um idioma;/pt-BR/politicas-conteudo/|Políticas de conteúdo" | split: ';' -%} {%- assign col_about = "/pt-BR/sobre/|Sobre a IPL;/pt-BR/missao/|Missão;/pt-BR/ajuda/|Central de ajuda;/pt-BR/contato/|Contato;/pt-BR/doar/|Apoie a IPL" | split: ';' -%} {%- assign col_legal = "/pt-BR/licenca/|Licença;/pt-BR/politica-privacidade/|Política de privacidade;/pt-BR/termos-uso/|Termos de uso;/pt-BR/politica-cookies/|Política de cookies" | split: ';' -%} {%- else -%} - {%- assign col_explore = "/en-US/|Home;/en-US/categories/|All categories;/en-US/search/|Search;/en-US/random-resource/|Random resource;/en-US/recent-changes/|Recent changes;/en-US/community-portal/|Community portal" | split: ';' -%} + {%- assign col_explore = "/en-US/|Home;/en-US/categories/|All categories;/en-US/learning-paths/|Learning paths;/en-US/search/|Search;/en-US/random-resource/|Random resource;/en-US/recent-changes/|Recent changes;/en-US/community-portal/|Community portal" | split: ';' -%} {%- assign col_contribute = "/en-US/contribute/|How to contribute;/en-US/submit-resource/|Suggest a resource;/en-US/report-issues/|Report a problem;/en-US/translate/|Help translate;/en-US/add-language/|Add a language;/en-US/content-policies/|Content policies" | split: ';' -%} {%- assign col_about = "/en-US/about/|About IPL;/en-US/mission/|Mission;/en-US/help/|Help center;/en-US/contact/|Contact;/en-US/donate/|Support IPL" | split: ';' -%} {%- assign col_legal = "/en-US/license/|License;/en-US/privacy-policy/|Privacy policy;/en-US/terms-of-use/|Terms of use;/en-US/cookie-policy/|Cookie policy" | split: ';' -%} diff --git a/_layouts/learning-path.html b/_layouts/learning-path.html new file mode 100644 index 0000000..708eb76 --- /dev/null +++ b/_layouts/learning-path.html @@ -0,0 +1,98 @@ +--- +layout: default +--- +{%- comment -%} +Learning path (spec 006): ordered stages and steps backed by IPL's curated resources. Each step is a
, so the +page reads as an ordered list without JavaScript; javascript/learning-path.js adds progress kept in localStorage. +{%- endcomment -%} +{%- assign lang = page.lang | default: 'en-US' -%} +{%- assign pt = false -%}{%- if lang == 'pt-BR' -%}{%- assign pt = true -%}{%- endif -%} +{%- capture levels -%}{% if pt %}beginner:Iniciante;intermediate:Intermediário;advanced:Avançado{% else %}beginner:Beginner;intermediate:Intermediate;advanced:Advanced{% endif %}{%- endcapture -%} +{%- assign level_label = page.level -%} +{%- assign level_pairs = levels | split: ';' -%}{%- for pair in level_pairs -%}{%- assign kv = pair | split: ':' -%}{%- if kv[0] == page.level -%}{%- assign level_label = kv[1] -%}{%- endif -%}{%- endfor -%} +{%- assign step_number = 0 -%} + +
+
+ + +
+

{{ page.title | escape }}

+

{{ page.summary | escape }}

+

+ {{ level_label | escape }} + {{ page.step_count }} {% if pt %}etapas{% else %}steps{% endif %} +

+
+ +
+

{% if pt %}Etapas{% else %}Steps{% endif %}

+ + + {%- for stage in page.stages %} +

{{ stage.title | escape }}

+ {%- if stage.summary %}

{{ stage.summary | escape }}

{% endif %} +
    + {%- for step in stage.steps %}{%- assign step_number = step_number | plus: 1 %} +
  1. +
    + + + + {{ step.title | escape }} + {%- if step.optional %} ({% if pt %}opcional{% else %}optional{% endif %}){% endif %} + {%- if step.summary %}{{ step.summary | escape }}{% endif %} + + +
    + {%- if step.resources.size > 0 %} +
      + {%- for resource in step.resources %} +
    • + {{ resource.name | escape }} + {{ resource.url | split: '//' | last | split: '/' | first | remove_first: 'www.' | escape }} + {%- if resource.access %}{{ resource.access | escape }}{% endif %} + {%- if resource.description %}

      {{ resource.description | escape }}

      {% endif %} +
    • + {%- endfor %} +
    + {%- endif %} + +
    +
    +
  2. + {%- endfor %} +
+ {%- endfor %} +
+ + {%- if page.see_also.size > 0 %} +
+

{% if pt %}Veja também{% else %}See also{% endif %}

+ +

{% if pt %}Links externos, de seus respectivos autores. Esta trilha é conteúdo original da IPL.{% else %}External links, by their respective authors. This path is original IPL content.{% endif %}

+
+ {%- endif %} +
+
diff --git a/_layouts/learning-paths.html b/_layouts/learning-paths.html new file mode 100644 index 0000000..9d6ad2f --- /dev/null +++ b/_layouts/learning-paths.html @@ -0,0 +1,31 @@ +--- +layout: default +--- +{%- comment -%} Learning paths index (spec 006): every path of this language, grouped by level. {%- endcomment -%} +{%- assign lang = page.lang | default: 'en-US' -%} +{%- assign pt = false -%}{%- if lang == 'pt-BR' -%}{%- assign pt = true -%}{%- endif -%} +
+
+ +

{{ page.title | escape }}

+

{{ page.description | escape }}

+ {%- assign levels = 'beginner,intermediate,advanced' | split: ',' -%} + {%- for level in levels -%} + {%- assign group = page.paths | where: 'level', level -%} + {%- if group.size > 0 %} +

{% if level == 'beginner' %}{% if pt %}Iniciante{% else %}Beginner{% endif %}{% elsif level == 'intermediate' %}{% if pt %}Intermediário{% else %}Intermediate{% endif %}{% else %}{% if pt %}Avançado{% else %}Advanced{% endif %}{% endif %}

+
    + {%- for path in group %} +
  • + {{ path.title | escape }} +

    {{ path.summary | escape }}

    +

    {{ path.step_count }} {% if pt %}etapas{% else %}steps{% endif %}

    +
  • + {%- endfor %} +
+ {%- endif -%} + {%- endfor %} +
+
diff --git a/_layouts/topic.html b/_layouts/topic.html index e9e0056..7d0083b 100644 --- a/_layouts/topic.html +++ b/_layouts/topic.html @@ -139,6 +139,21 @@

+

{% if pt %}Trilhas de aprendizado{% else %}Learning paths{% endif %}

+
+ + {%- endif %} +

{{ t.layout.curated_resources | default: 'Curated resources' }}{% if real_resource_total > 0 %} ({{ real_resource_total }}){% endif %}

diff --git a/_plugins/learning_paths.rb b/_plugins/learning_paths.rb new file mode 100644 index 0000000..ae8ebb5 --- /dev/null +++ b/_plugins/learning_paths.rb @@ -0,0 +1,84 @@ +# Interactive learning paths (spec 006). Each _data//learning-paths/.yaml becomes +# //learning-paths//, plus an index per language. Step resources are URLs of IPL's own curated entries; +# they are resolved to those entries here, and an unknown URL fails the build outside production. +module IPL + class LearningPaths < Jekyll::Generator + priority :normal + safe true + + def generate(site) + by_subcategory = {} + site.config.fetch('languages', []).each do |language| + lang = language['code'] + paths = (site.data.dig(lang, 'learning-paths') || {}).sort.map { |slug, path| [slug, path] } + next if paths.empty? + + index = resource_index(site.data[lang]) + missing = [] + listed = paths.map do |slug, path| + stages = Array(path['stages']).map do |stage| + steps = Array(stage['steps']).map do |step| + resources = Array(step['resources']).filter_map do |url| + entry = index[normalize(url)] + missing << "#{lang}/#{slug}: #{url}" unless entry + entry + end + step.merge('resources' => resources) + end + stage.merge('steps' => steps) + end + step_count = stages.sum { |stage| stage['steps'].size } + url = "/#{lang}/learning-paths/#{slug}/" + data = path.merge('layout' => 'learning-path', 'lang' => lang, 'slug' => slug, 'stages' => stages, + 'step_count' => step_count, 'description' => path['summary'], + 'additional_js' => ['/javascript/learning-path.js']) + add_page(site, "#{lang}/learning-paths/#{slug}", data) + summary = { 'title' => path['title'], 'summary' => path['summary'], 'level' => path['level'], + 'url' => url, 'step_count' => step_count, 'subcategory' => path['subcategory'] } + (by_subcategory[lang] ||= {})[path['subcategory']] = (by_subcategory.dig(lang, path['subcategory']) || []) + [summary] + summary + end + + pt = lang == 'pt-BR' + add_page(site, "#{lang}/learning-paths", { + 'layout' => 'learning-paths', 'lang' => lang, 'paths' => listed, + 'title' => pt ? 'Trilhas de aprendizado' : 'Learning paths', + 'description' => pt ? 'Caminhos de estudo em etapas, montados com os recursos curados da IPL.' : 'Step-by-step study paths built from IPL’s curated resources.' + }) + report(site, missing) + end + site.data['learning_paths_by_subcategory'] = by_subcategory + end + + private + + def add_page(site, dir, data) + page = Jekyll::PageWithoutAFile.new(site, site.source, dir, 'index.html') + page.content = '' + page.data = data + site.pages << page + end + + # Curated entries of one language by URL (lists, files and subcategory folders). + def resource_index(node, index = {}) + case node + when Array then node.each { |item| item.is_a?(Hash) && item['url'] && item['name'] ? (index[normalize(item['url'])] ||= item) : resource_index(item, index) } + when Hash then node.each { |key, value| resource_index(value, index) unless %w[menu translations learning-paths].include?(key) } + end + index + end + + def normalize(url) + url.to_s.strip.downcase.sub(%r{\Ahttps?://(www\.)?}, '').sub(%r{/+\z}, '') + end + + def report(site, missing) + return if missing.empty? + + message = "Learning paths cite URLs that are not IPL curated resources:\n #{missing.join("\n ")}" + raise Jekyll::Errors::FatalException, message unless Jekyll.env == 'production' + + Jekyll.logger.warn 'LearningPaths:', message + end + end +end diff --git a/docs/specs/006-learning-paths/tasks.md b/docs/specs/006-learning-paths/tasks.md index d467b3b..1ba5c0d 100644 --- a/docs/specs/006-learning-paths/tasks.md +++ b/docs/specs/006-learning-paths/tasks.md @@ -1,9 +1,9 @@ # 006 — Tasks -- [ ] T1 Data schema and test (`test/learning_paths_test.rb`) -- [ ] T2 Generator, layout and index page (en-US, pt-BR) -- [ ] T3 Interaction script: details, progress, live region; no-JS fallback -- [ ] T4 Subcategory pages list their paths; search indexes paths -- [ ] T5 Author 12 paths per language from IPL data (frontend, backend, Python, JavaScript, data analysis, machine +- [x] T1 Data schema and test (`test/learning_paths_test.rb`) +- [x] T2 Generator, layout and index page (en-US, pt-BR) +- [x] T3 Interaction script: details, progress, live region; no-JS fallback +- [ ] T4 Subcategory pages list their paths (done); search indexes paths (pending) +- [x] T5 Author 12 paths per language from IPL data (frontend, backend, Python, JavaScript, data analysis, machine learning, DevOps, cybersecurity, databases, UX, mobile, computer science), with reviews - [ ] T6 e2e and axe checks diff --git a/javascript/learning-path.js b/javascript/learning-path.js new file mode 100644 index 0000000..cf6de38 --- /dev/null +++ b/javascript/learning-path.js @@ -0,0 +1,43 @@ +// Learning path progress (spec 006): checkboxes per step, kept in localStorage under the path key; no account, +// nothing sent anywhere. Without JavaScript the path stays a readable ordered list. +(function () { + var root = document.querySelector('.learning-path[data-path-key]'); + if (!root) return; + var key = root.getAttribute('data-path-key'); + var pt = document.documentElement.lang === 'pt-BR'; + var steps = Array.prototype.slice.call(root.querySelectorAll('.learning-path-step')); + var done = {}; + try { done = JSON.parse(localStorage.getItem(key) || '{}') || {}; } catch (e) { done = {}; } + + var progress = root.querySelector('.learning-path-progress'); + var bar = root.querySelector('.learning-path-bar'); + var track = root.querySelector('[role="progressbar"]'); + var count = root.querySelector('.learning-path-count'); + var status = root.querySelector('.learning-path-status'); + + function render(announce) { + var finished = steps.filter(function (step) { return done[step.getAttribute('data-step')]; }).length; + var text = finished + ' / ' + steps.length; + count.textContent = text; + bar.style.width = (steps.length ? Math.round((finished / steps.length) * 100) : 0) + '%'; + track.setAttribute('aria-valuenow', String(finished)); + if (announce) status.textContent = (pt ? 'Etapas concluídas: ' : 'Steps finished: ') + text; + } + + steps.forEach(function (step) { + var id = step.getAttribute('data-step'); + var label = step.querySelector('.learning-path-done'); + var box = label.querySelector('input'); + label.classList.remove('hidden'); + box.checked = !!done[id]; + step.classList.toggle('opacity-75', box.checked); + box.addEventListener('change', function () { + if (box.checked) done[id] = true; else delete done[id]; + try { localStorage.setItem(key, JSON.stringify(done)); } catch (e) { /* private mode: progress lasts this visit */ } + step.classList.toggle('opacity-75', box.checked); + render(true); + }); + }); + progress.classList.remove('hidden'); + render(false); +})(); diff --git a/test/learning_paths_test.rb b/test/learning_paths_test.rb new file mode 100644 index 0000000..6450d1d --- /dev/null +++ b/test/learning_paths_test.rb @@ -0,0 +1,54 @@ +require 'minitest/autorun' +require 'yaml' + +# Spec 006: learning paths are IPL's own, cite only IPL curated resources and exist in both languages. +class LearningPathsTest < Minitest::Test + ROOT = File.expand_path('..', __dir__) + LANGS = %w[en-US pt-BR].freeze + LEVELS = %w[beginner intermediate advanced].freeze + + def paths(lang) + Dir[File.join(ROOT, "_data/#{lang}/learning-paths/*.yaml")].to_h { |f| [File.basename(f, '.yaml'), YAML.safe_load(File.read(f))] } + end + + def curated_urls(lang) + Dir[File.join(ROOT, "_data/#{lang}/*/*/*.yaml")].flat_map { |f| Array(YAML.safe_load(File.read(f))) } + .filter_map { |e| e['url'] if e.is_a?(Hash) } + .to_set { |u| normalize(u) } + end + + def normalize(url) = url.to_s.strip.downcase.sub(%r{\Ahttps?://(www\.)?}, '').sub(%r{/+\z}, '') + + def test_both_languages_have_the_same_paths + assert_equal paths('en-US').keys.sort, paths('pt-BR').keys.sort + end + + def test_paths_are_well_formed_and_original + LANGS.each do |lang| + subcategories = Dir[File.join(ROOT, "_data/#{lang}/*/*/")].map { |d| d.delete_prefix(File.join(ROOT, "_data/#{lang}/")).chomp('/') } + paths(lang).each do |slug, path| + where = "#{lang}/#{slug}" + %w[title summary subcategory level stages].each { |key| refute_nil path[key], "#{where}: missing #{key}" } + assert_equal 'ipl', path['source'], "#{where}: source must be ipl" + assert_includes LEVELS, path['level'], where + assert_includes subcategories, path['subcategory'], "#{where}: unknown subcategory" + steps = path['stages'].flat_map { |stage| stage['steps'] } + assert_operator steps.size, :>=, 6, "#{where}: too few steps" + steps.each { |step| assert step['title'] && step['summary'], "#{where}: step without title or summary" } + end + end + end + + def test_step_resources_are_ipl_curated_resources + LANGS.each do |lang| + known = curated_urls(lang) + paths(lang).each do |slug, path| + path['stages'].flat_map { |stage| stage['steps'] }.each do |step| + resources = Array(step['resources']) + assert_operator resources.size, :>=, 1, "#{lang}/#{slug}: step '#{step['title']}' has no resources" + resources.each { |url| assert_includes known, normalize(url), "#{lang}/#{slug}: #{url} is not curated" } + end + end + end + end +end From 4fd04393f93aea2058fbdc18d5c99492f6534888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20Bregu=C3=AAz?= Date: Mon, 12 Oct 2026 00:40:59 -0300 Subject: [PATCH 3/4] fix: only https links and safe slugs reach learning path pages Commit security review: "see also" URLs came from YAML and went into href unchecked, so a javascript: URL would have survived HTML escaping. The generator now accepts only plain https URLs for see_also and for resolved resources, and requires lowercase-hyphen slugs. The progress key attribute is escaped. The data test enforces the same rules. Co-Authored-By: Claude Opus 5.5 (1M context) --- _layouts/learning-path.html | 2 +- _plugins/learning_paths.rb | 17 +++++++++++++++++ test/learning_paths_test.rb | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/_layouts/learning-path.html b/_layouts/learning-path.html index 708eb76..fba05d6 100644 --- a/_layouts/learning-path.html +++ b/_layouts/learning-path.html @@ -31,7 +31,7 @@

{{ page.title

-
+

{% if pt %}Etapas{% else %}Steps{% endif %}