From a81c435500a6bed0bb000af6cc9adfdb9dcea5fe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 14:27:24 +0600 Subject: [PATCH] chore: update roadmap content json (#7813) Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com> --- public/roadmap-content/ai-data-scientist.json | 2 +- public/roadmap-content/backend.json | 10 + public/roadmap-content/devops.json | 2 +- public/roadmap-content/frontend.json | 64 +- public/roadmap-content/postgresql-dba.json | 414 +++++++--- .../roadmap-content/software-architect.json | 775 +++++++++++++----- 6 files changed, 942 insertions(+), 325 deletions(-) diff --git a/public/roadmap-content/ai-data-scientist.json b/public/roadmap-content/ai-data-scientist.json index 6cef610e4..cd8aaab40 100644 --- a/public/roadmap-content/ai-data-scientist.json +++ b/public/roadmap-content/ai-data-scientist.json @@ -170,7 +170,7 @@ }, "Gd2egqKZPnbPW1W2jw4j8": { "title": "Econometrics", - "description": "Ecenometrics is the application of statistical methods to economic data. It is a branch of economics that aims to give empirical content to economic relations. More precisely, it is \"the quantitative analysis of actual economic phenomena based on the concurrent development of theory and observation, related by appropriate methods of inference.\" Econometrics can be described as something that allows economists \"to sift through mountains of data to extract simple relationships.\"", + "description": "Econometrics is the application of statistical methods to economic data. It is a branch of economics that aims to give empirical content to economic relations. More precisely, it is \"the quantitative analysis of actual economic phenomena based on the concurrent development of theory and observation, related by appropriate methods of inference.\" Econometrics can be described as something that allows economists \"to sift through mountains of data to extract simple relationships.\"", "links": [] }, "y6xXsc-uSAmRDnNuyhqH2": { diff --git a/public/roadmap-content/backend.json b/public/roadmap-content/backend.json index 8c7df1fe5..369b370e6 100644 --- a/public/roadmap-content/backend.json +++ b/public/roadmap-content/backend.json @@ -1397,6 +1397,11 @@ "url": "https://www.digitalocean.com/community/tutorials/gangs-of-four-gof-design-patterns", "type": "article" }, + { + "title": "Design Patterns for Humans", + "url": "https://github.com/kamranahmedse/design-patterns-for-humans", + "type": "article" + }, { "title": "Tutorial - Builder Pattern (Gang of Four Design Patterns Series)", "url": "https://www.youtube.com/watch?v=_sa2WlAFWQos", @@ -2353,6 +2358,11 @@ "title": "sCrypt: A Beginner’s Guide", "url": "https://medium.com/@yusufedresmaina/scrypt-a-beginners-guide-cf1aecf8b010", "type": "article" + }, + { + "title": "Wikipedia - scrypt", + "url": "https://en.wikipedia.org/wiki/Scrypt", + "type": "article" } ] }, diff --git a/public/roadmap-content/devops.json b/public/roadmap-content/devops.json index 2873d9d0c..40c997313 100644 --- a/public/roadmap-content/devops.json +++ b/public/roadmap-content/devops.json @@ -3048,7 +3048,7 @@ "type": "course" }, { - "title": "", + "title": "Cloud Design Patterns", "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/", "type": "article" }, diff --git a/public/roadmap-content/frontend.json b/public/roadmap-content/frontend.json index 11fa5ae0b..737802cfe 100644 --- a/public/roadmap-content/frontend.json +++ b/public/roadmap-content/frontend.json @@ -520,15 +520,10 @@ "description": "Repo hosting services provide platforms for storing, managing, and collaborating on software projects using version control systems, primarily Git. These services offer features like issue tracking, pull requests, code review tools, wikis, and continuous integration/continuous deployment (CI/CD) pipelines. Popular platforms include GitHub, GitLab, Bitbucket, and SourceForge, each with unique offerings. GitHub, owned by Microsoft, is the largest and most widely used, known for its open-source community. GitLab offers a complete DevOps platform with built-in CI/CD. Bitbucket, part of Atlassian's suite, integrates well with other Atlassian tools. These services facilitate team collaboration, code sharing, and project management, making them integral to modern software development workflows. They also often provide features like access control, branch protection, and integration with various development tools, enhancing the overall development process.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Git & Github", + "title": "Visit Dedicated Git & Github Roadmap", "url": "https://roadmap.sh/git-github", "type": "article" }, - { - "title": "Codeberg Website", - "url": "https://codeberg.org/", - "type": "article" - }, { "title": "GitHub Website", "url": "https://github.com", @@ -539,6 +534,11 @@ "url": "https://about.gitlab.com", "type": "article" }, + { + "title": "Codeberg Website", + "url": "https://codeberg.org/", + "type": "article" + }, { "title": "BitBucket Website", "url": "https://bitbucket.com", @@ -551,7 +551,7 @@ "description": "Version Control Systems (VCS) are tools that help developers track and manage changes to code over time. They allow multiple people to work on a project simultaneously, maintaining a history of modifications. Git is the most popular VCS, known for its distributed nature and branching model. Other systems include Subversion (SVN) and Mercurial. VCS enables features like branching for parallel development, merging to combine changes, and reverting to previous states. They facilitate collaboration through remote repositories, pull requests, and code reviews. VCS also provides backup and recovery capabilities, conflict resolution, and the ability to tag specific points in history. By maintaining a detailed record of changes and supporting non-linear development, VCS has become an essential tool in modern software development, enhancing productivity, code quality, and team collaboration.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Git & Github", + "title": "Visit Dedicated Git & Github Roadmap", "url": "https://roadmap.sh/git-github", "type": "article" }, @@ -765,7 +765,12 @@ }, { "title": "NPM Website", - "url": "https://www.npmjs.com/https://www.npmjs.com/", + "url": "https://www.npmjs.com/", + "type": "article" + }, + { + "title": "NPM Documentation", + "url": "https://docs.npmjs.com/", "type": "article" }, { @@ -779,7 +784,7 @@ "type": "article" }, { - "title": "NPM tutorial for Beginners", + "title": "NPM Tutorial for Beginners", "url": "https://www.youtube.com/watch?v=2V1UUhBJ62Y", "type": "video" } @@ -812,7 +817,7 @@ }, { "title": "Getting started with Angular", - "url": "https://angular.io/start", + "url": "https://angular.dev/tutorials/learn-angular", "type": "article" }, { @@ -1091,6 +1096,11 @@ "url": "https://sass-lang.com/", "type": "article" }, + { + "title": "Online Sass Playground", + "url": "https://sass-lang.com/playground/", + "type": "article" + }, { "title": "Sass Tutorial for Beginners", "url": "https://www.youtube.com/watch?v=_a5j7KoflTs", @@ -1234,10 +1244,15 @@ "description": "Webpack is a popular open-source JavaScript module bundler that transforms, bundles, or packages resources for the web. It takes modules with dependencies and generates static assets representing those modules. Webpack can handle not just JavaScript, but also other assets like CSS, images, and fonts. It uses loaders to preprocess files and plugins to perform a wider range of tasks like bundle optimization. Webpack's key features include code splitting, lazy loading, and a rich ecosystem of extensions. It supports hot module replacement for faster development and tree shaking to eliminate unused code. While it has a steeper learning curve compared to some alternatives, Webpack's flexibility and powerful features make it a standard tool in many modern JavaScript development workflows, especially for complex applications.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Webpack Website", + "title": "Webpack", "url": "https://webpack.js.org/", "type": "article" }, + { + "title": "Getting Started with Webpack", + "url": "https://webpack.js.org/guides/getting-started/", + "type": "article" + }, { "title": "A Complete Guide to Webpack 5", "url": "https://www.valentinog.com/blog/webpack", @@ -1282,12 +1297,12 @@ "links": [ { "title": "Vite - The Build Tool for the Web", - "url": "https://vitejs.dev", + "url": "https://vite.dev", "type": "article" }, { "title": "Vite Documentation", - "url": "https://vitejs.dev/guide/", + "url": "https://vite.dev/guide/", "type": "article" }, { @@ -1755,7 +1770,7 @@ "description": "TypeScript is a strongly-typed, object-oriented programming language that builds upon JavaScript by adding optional static typing and other features. Developed and maintained by Microsoft, it compiles to plain JavaScript, allowing it to run in any environment that supports JavaScript. TypeScript offers enhanced IDE support with better code completion, refactoring, and error detection during development. It introduces concepts like interfaces, generics, and decorators, enabling more robust software architecture. TypeScript is particularly valuable for large-scale applications, as it improves code maintainability and readability. Its type system helps catch errors early in the development process, reducing runtime errors. With its growing ecosystem and adoption in popular frameworks like Angular, TypeScript has become a standard tool in modern web development.\n\nVisit the following resources to learn more:", "links": [ { - "title": "TypeScript Roadmap", + "title": "Visit Dedicated TypeScript Roadmap", "url": "https://roadmap.sh/typescript", "type": "article" }, @@ -1874,19 +1889,24 @@ "description": "Angular is a popular open-source web application framework developed and maintained by Google. It uses TypeScript, a statically typed superset of JavaScript, to build scalable and efficient single-page applications (SPAs). Angular follows a component-based architecture, where the user interface is composed of reusable, self-contained components. The framework provides features like two-way data binding, dependency injection, and a powerful template syntax, which simplify the development of complex web applications. Angular also includes a comprehensive set of tools for testing, routing, and state management, making it a full-fledged solution for front-end development. Its modular structure and emphasis on best practices make it particularly suitable for large-scale enterprise applications.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Angular Roadmap", + "title": "Visit Dedicated Angular Roadmap", "url": "https://roadmap.sh/angular", "type": "article" }, { - "title": "Angular Website", - "url": "https://angular.dev", + "title": "Getting started with Angular", + "url": "https://angular.dev/tutorials/learn-angular", "type": "article" }, { "title": "Explore top posts about Angular", "url": "https://app.daily.dev/tags/angular?ref=roadmapsh", "type": "article" + }, + { + "title": "Angular for Beginners Course", + "url": "https://www.youtube.com/watch?v=3qBXWUpoPHo", + "type": "video" } ] }, @@ -1989,12 +2009,12 @@ "description": "SvelteKit is a framework for building web applications using Svelte, a component-based JavaScript framework. It provides a full-stack development experience, handling both server-side and client-side rendering. SvelteKit offers features like file-based routing, code-splitting, and server-side rendering out of the box. It supports both static site generation and server-side rendering, allowing developers to choose the most appropriate approach for each page. SvelteKit emphasizes simplicity and performance, leveraging Svelte's compile-time approach to generate highly optimized JavaScript. It includes built-in development tools, easy deployment options, and integrates well with various backend services. SvelteKit's efficient development experience and flexibility make it an attractive option for building modern, performant web applications.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Svelte Kit Website", + "title": "Svelte Kit", "url": "https://kit.svelte.dev/", "type": "article" }, { - "title": "Official Svelte Kit Docs", + "title": "Svelte Kit Docs", "url": "https://kit.svelte.dev/docs/introduction", "type": "article" }, @@ -2124,7 +2144,7 @@ "description": "VuePress is a static site generator powered by Vue.js, primarily designed for creating documentation websites. It generates pre-rendered static HTML for each page, resulting in fast loading times and SEO-friendly content. VuePress features a Vue-powered theming system, automatic code syntax highlighting, and a default theme optimized for technical documentation. It supports markdown content with Vue components, allowing for dynamic and interactive documentation. VuePress offers built-in search functionality, responsive layouts, and easy customization through plugins and themes. While primarily used for documentation, it's versatile enough for blogs and simple websites. VuePress's combination of simplicity, performance, and Vue.js integration makes it popular for creating modern, fast-loading documentation sites and technical blogs.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Vuepress", "url": "https://vuepress.vuejs.org/", "type": "article" }, @@ -2134,7 +2154,7 @@ "type": "article" }, { - "title": "Whats VuePress?", + "title": "What is VuePress?", "url": "https://www.youtube.com/watch?v=iRhRdY7SQJg", "type": "video" } @@ -2197,7 +2217,7 @@ "description": "Eleventy (11ty) is a simple to use, easy to customize, highly performant and powerful static site generator with a helpful set of plugins (e.g. navigation, build-time image transformations, cache assets). Pages can be built and written with a variety of template languages (HTML, Markdown, JavaScript, Liquid, Nunjucks, Handlebars, Mustache, EJS, Haml, Pug or JS template literals). But it also offers the possibility to dynamically create pages from local data or external sources that are compiled at build time. It has zero client-side JavaScript dependencies.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Eleventy", "url": "https://www.11ty.dev/", "type": "article" }, diff --git a/public/roadmap-content/postgresql-dba.json b/public/roadmap-content/postgresql-dba.json index 19135f54f..4279d8fa1 100644 --- a/public/roadmap-content/postgresql-dba.json +++ b/public/roadmap-content/postgresql-dba.json @@ -1,8 +1,18 @@ { "lDIy56RyC1XM7IfORsSLD": { "title": "Introduction", - "description": "PostgreSQL is a powerful, open-source Object-Relational Database Management System (ORDBMS) that is known for its robustness, extensibility, and SQL compliance. It was initially developed at the University of California, Berkeley, in the 1980s and has since become one of the most popular open-source databases in the world.", + "description": "PostgreSQL is a powerful, open-source Object-Relational Database Management System (ORDBMS) that is known for its robustness, extensibility, and SQL compliance. It was initially developed at the University of California, Berkeley, in the 1980s and has since become one of the most popular open-source databases in the world.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "PostgreSQL", + "url": "https://www.postgresql.org/", + "type": "article" + }, + { + "title": "PostgreSQL Documentation", + "url": "https://www.postgresql.org/docs/", + "type": "article" + }, { "title": "History of POSTGRES to PostgreSQL", "url": "https://www.postgresql.org/docs/current/history.html", @@ -15,7 +25,22 @@ "description": "Relational databases are a type of database management system (DBMS) that stores and organizes data in a structured format called tables. These tables are made up of rows, also known as records or tuples, and columns, which are also called attributes or fields. The term \"relational\" comes from the fact that these tables can be related to one another through keys and relationships.\n\nLearn more from the following resources:", "links": [ { - "title": "Relational Databases: concept and history", + "title": "Databases and SQL", + "url": "https://www.edx.org/course/databases-5-sql", + "type": "course" + }, + { + "title": "Relational Databases", + "url": "https://www.ibm.com/cloud/learn/relational-databases", + "type": "article" + }, + { + "title": "Intro To Relational Databases", + "url": "https://www.udacity.com/course/intro-to-relational-databases--ud197", + "type": "article" + }, + { + "title": "Relational Databases: Concept and History", "url": "https://www.ibm.com/topics/relational-databases", "type": "article" }, @@ -81,13 +106,35 @@ }, "-M9EFgiDSSAzj9ISk-aeh": { "title": "Basic RDBMS Concepts", - "description": "Relational Database Management Systems (RDBMS) are a type of database management system which stores and organizes data in tables, making it easy to manipulate, query, and manage the information. They follow the relational model defined by E.F. Codd in 1970, which means that data is represented as tables with rows and columns.", - "links": [] + "description": "Relational Database Management Systems (RDBMS) are a type of database management system which stores and organizes data in tables, making it easy to manipulate, query, and manage the information. They follow the relational model defined by E.F. Codd in 1970, which means that data is represented as tables with rows and columns.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Understanding Relational Database Management Systems", + "url": "https://www.essentialsql.com/understanding-relational-databases-a-beginners-guide/", + "type": "article" + } + ] }, "RoYP1tYw5dvhmkVTo1HS-": { "title": "Object Model", - "description": "PostgreSQL is an object-relational database management system (ORDBMS). That means it combines features of both relational (RDBMS) and object-oriented databases (OODBMS). The object model in PostgreSQL provides features like user-defined data types, inheritance, and polymorphism, which enhances its capabilities beyond a typical SQL-based RDBMS.", - "links": [] + "description": "PostgreSQL is an object-relational database management system (ORDBMS). That means it combines features of both relational (RDBMS) and object-oriented databases (OODBMS). The object model in PostgreSQL provides features like user-defined data types, inheritance, and polymorphism, which enhances its capabilities beyond a typical SQL-based RDBMS.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Object Model", + "url": "https://www.postgresql.org/docs/current/tutorial-concepts.html", + "type": "article" + }, + { + "title": "Understanding PostgreSQL: The Power of an Object-Relational", + "url": "https://medium.com/@asadbukhari886/understanding-of-postgresql-the-power-of-an-object-relational-database-b6ae349c3f40", + "type": "article" + }, + { + "title": "PostgreSQL Server and Database Objects", + "url": "https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-server-and-database-objects/", + "type": "article" + } + ] }, "xVocG4LuFdtphwoOxiJTa": { "title": "Queries", @@ -102,7 +149,7 @@ }, "4Pw7udOMIsiaKr7w9CRxc": { "title": "Data Types", - "description": "PostgreSQL offers a rich and diverse set of data types, catering to a wide range of applications and ensuring data integrity and performance. These include standard numeric types such as integers, floating-point numbers, and serial types for auto-incrementing fields. Character types like VARCHAR and TEXT handle varying lengths of text, while DATE, TIME, and TIMESTAMP support a variety of temporal data requirements. PostgreSQL also supports a comprehensive set of Boolean, enumerated (ENUM), and composite types, enabling more complex data structures. Additionally, it excels with its support for JSON and JSONB data types, allowing for efficient storage and querying of semi-structured data. The inclusion of array types, geometric data types, and the PostGIS extension for geographic data further extends PostgreSQL's versatility, making it a powerful tool for a broad spectrum of data management needs.\n\nLearn more from the following resources:", + "description": "PostgreSQL offers a rich and diverse set of data types, catering to a wide range of applications and ensuring data integrity and performance. These include standard numeric types such as integers, floating-point numbers, and serial types for auto-incrementing fields. Character types like `VARCHAR` and `TEXT` handle varying lengths of text, while DATE, TIME, and TIMESTAMP support a variety of temporal data requirements. PostgreSQL also supports a comprehensive set of Boolean, enumerated (ENUM), and composite types, enabling more complex data structures. Additionally, it excels with its support for JSON and JSONB data types, allowing for efficient storage and querying of semi-structured data. The inclusion of array types, geometric data types, and the PostGIS extension for geographic data further extends PostgreSQL's versatility, making it a powerful tool for a broad spectrum of data management needs.\n\nLearn more from the following resources:", "links": [ { "title": "Data Types", @@ -110,7 +157,7 @@ "type": "article" }, { - "title": "An introduction to PostgreSQL data types", + "title": "Introduction to PostgreSQL DataTypes", "url": "https://www.prisma.io/dataguide/postgresql/introduction-to-data-types", "type": "article" }, @@ -129,6 +176,11 @@ "title": "Concepts", "url": "https://www.postgresql.org/docs/7.1/query-concepts.html", "type": "article" + }, + { + "title": "PostgreSQL - Rows", + "url": "https://www.postgresql.org/docs/current/functions-comparisons.html", + "type": "article" } ] }, @@ -164,13 +216,13 @@ "description": "Schemas are an essential part of PostgreSQL's object model, and they help provide structure, organization, and namespacing for your database objects. A schema is a collection of database objects, such as tables, views, indexes, and functions, that are organized within a specific namespace.\n\nLearn more from the following resources:", "links": [ { - "title": "What is a schema in PostgreSQL", - "url": "https://hasura.io/learn/database/postgresql/core-concepts/1-postgresql-schema/", + "title": "Schemas", + "url": "https://www.postgresql.org/docs/current/ddl-schemas.html", "type": "article" }, { - "title": "Schemas", - "url": "https://www.postgresql.org/docs/current/ddl-schemas.html", + "title": "Schema in PostgreSQL", + "url": "https://hasura.io/learn/database/postgresql/core-concepts/1-postgresql-schema/", "type": "article" } ] @@ -193,8 +245,19 @@ }, "mDVbjdVN0spY7dI_8k1YW": { "title": "Relational Model", - "description": "The relational model is an approach to organizing and structuring data using tables, also referred to as \"relations\". It was first introduced by Edgar F. Codd in 1970 and has since become the foundation for most database management systems (DBMS), including PostgreSQL. This model organizes data into tables with rows and columns, where each row represents a single record and each column represents an attribute or field of the record.\n\nThe core concepts of the relational model include:\n\n* **Attributes:** An attribute is a column within a table that represents a specific characteristic or property of an entity, such as \"name\", \"age\", \"email\", etc.\n \n* **Tuples:** A tuple is a single row within a table that represents a specific instance of an entity with its corresponding attribute values.\n \n* **Relations:** A relation is a table that consists of a set of tuples with the same attributes. It represents the relationship between entities and their attributes.\n \n* **Primary Key:** A primary key is a unique identifier for each tuple within a table. It enforces the uniqueness of records and is used to establish relationships between tables.\n \n* **Foreign Key:** A foreign key is an attribute within a table that references the primary key of another table. It is used to establish and enforce connections between relations.\n \n* **Normalization:** Normalization is a process of organizing data in a way to minimize redundancy and improve data integrity. It involves decomposing complex tables into simpler tables, ensuring unique records, and properly defining foreign keys.\n \n* **Data Manipulation Language (DML):** DML is a subset of SQL used to perform operations on data stored within the relational database, such as INSERT, UPDATE, DELETE, and SELECT.\n \n* **Data Definition Language (DDL):** DDL is another subset of SQL used to define, modify, or delete database structures, such as CREATE, ALTER, and DROP.\n \n\nBy understanding and implementing the relational model, databases can achieve high-level data integrity, reduce data redundancy, and simplify the process of querying and manipulating data. PostgreSQL, as an RDBMS (Relational Database Management System), fully supports the relational model, enabling users to efficiently and effectively manage their data in a well-structured and organized manner.", - "links": [] + "description": "The relational model is an approach to organizing and structuring data using tables, also referred to as \"relations\". It was first introduced by Edgar F. Codd in 1970 and has since become the foundation for most database management systems (DBMS), including PostgreSQL. This model organizes data into tables with rows and columns, where each row represents a single record and each column represents an attribute or field of the record.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What is the Relational Model?", + "url": "https://www.postgresql.org/docs/7.1/relmodel-oper.html", + "type": "article" + }, + { + "title": "The Relational Model", + "url": "https://www.geeksforgeeks.org/relational-model-in-dbms/", + "type": "article" + } + ] }, "-LuxJvI5IaOx6NqzK0d8S": { "title": "Domains", @@ -217,7 +280,7 @@ "description": "Attributes in the relational model are the columns of a table, representing the properties or characteristics of the entity described by the table. Each attribute has a domain, defining the possible values it can take, such as integer, text, or date. Attributes play a crucial role in defining the schema of a relation (table) and are used to store and manipulate data. They are fundamental in maintaining data integrity, enforcing constraints, and enabling the relational operations that form the basis of SQL queries.\n\nLearn more from the following resources:", "links": [ { - "title": "What is a relational Model?", + "title": "What is a Relational Model?", "url": "https://www.guru99.com/relational-data-model-dbms.html", "type": "article" }, @@ -230,32 +293,32 @@ }, "vJhvgGwNV3JB-wWn_0gMb": { "title": "Tuples", - "description": "In the relational model, a **tuple** is a fundamental concept that represents a single record or row in a table. In PostgreSQL, a tuple is composed of a set of attribute values, each corresponding to a specific column or field in the table. A tuple is defined as an ordered set of attribute values, meaning that each value in a tuple corresponds to a specific attribute or column in the table. The values can be of different data types, such as integers, strings, or dates, depending on the schema of the table.\n\nFor example, consider a `users` table with columns `id`, `name`, and `email`. A sample tuple in this table could be `(1, 'John Smith', 'john.smith@example.com')`, where each value corresponds to its respective column. PostgreSQL provides a variety of operations that can be performed on tuples, which can be classified into three main categories:\n\n* **Projection**: This operation involves selecting one or more attributes from a tuple and creating a new tuple with only the selected attributes. For example, projecting the `name` and `email` attributes from the previously mentioned tuple would result in `('John Smith', 'john.smith@example.com')`.\n \n* **Selection**: Selection involves filtering tuples based on a specific condition. For example, you may want to select all tuples from the `users` table where the `email` attribute ends with \"@example.com\".\n \n* **Join**: The join operation combines tuples from two or more tables based on a common attribute or condition. For example, if we have another table called `orders` with a `user_id` column, we could use a join operation to retrieve all records from both tables where the `users.id` attribute matches the `orders.user_id`.\n \n\nLearn more from the following resources:", + "description": "In the relational model, a **tuple** is a fundamental concept that represents a single record or row in a table. In PostgreSQL, a tuple is composed of a set of attribute values, each corresponding to a specific column or field in the table. A tuple is defined as an ordered set of attribute values, meaning that each value in a tuple corresponds to a specific attribute or column in the table. The values can be of different data types, such as integers, strings, or dates, depending on the schema of the table.\n\nFor example, consider a `users` table with columns `id`, `name`, and `email`. A sample tuple in this table could be `(1, 'John Smith', 'john.smith@example.com')`, where each value corresponds to its respective column. PostgreSQL provides a variety of operations that can be performed on tuples.\n\nLearn more from the following resources:", "links": [ { - "title": "Whats the difference between and tuple and a row?", - "url": "https://stackoverflow.com/questions/19799282/whats-the-difference-between-a-tuple-and-a-row-in-postgres", + "title": "How PostgreSQL Freezes Tuples", + "url": "https://medium.com/@hnasr/how-postgres-freezes-tuples-4a9931261fc", "type": "article" }, { - "title": "How PostgreSQL freezes tuples", - "url": "https://medium.com/@hnasr/how-postgres-freezes-tuples-4a9931261fc", + "title": "Whats the difference between and tuple and a row?", + "url": "https://stackoverflow.com/questions/19799282/whats-the-difference-between-a-tuple-and-a-row-in-postgres", "type": "article" } ] }, "2hM2IPAnNYq-LlEbcFp2Z": { "title": "Relations", - "description": "In the relational model, a relation is essentially a table composed of rows and columns, where each row represents a unique record (or tuple) and each column represents an attribute of the data. The structure of a relation is defined by its schema, which specifies the relation's name and the names and data types of its attributes. Relations are governed by integrity constraints, such as domain constraints, key constraints, and referential integrity constraints, to ensure data accuracy and consistency. Operations like selection, projection, join, and others can be performed on relations to retrieve and manipulate data efficiently.", + "description": "In the relational model, a relation is essentially a table composed of rows and columns, where each row represents a unique record (or tuple) and each column represents an attribute of the data. The structure of a relation is defined by its schema, which specifies the relation's name and the names and data types of its attributes. Relations are governed by integrity constraints, such as domain constraints, key constraints, and referential integrity constraints, to ensure data accuracy and consistency. Operations like selection, projection, join, and others can be performed on relations to retrieve and manipulate data efficiently.\n\nLearn more from the following resources:", "links": [ { - "title": "Relationships", - "url": "https://hasura.io/learn/database/postgresql/core-concepts/6-postgresql-relationships/", + "title": "Domain Constraints", + "url": "https://www.postgresql.org/docs/current/infoschema-domain-constraints.html", "type": "article" }, { - "title": "domain_contraints", - "url": "https://www.postgresql.org/docs/current/infoschema-domain-constraints.html", + "title": "Relationships", + "url": "https://hasura.io/learn/database/postgresql/core-concepts/6-postgresql-relationships/", "type": "article" } ] @@ -265,12 +328,12 @@ "description": "Constraints are an essential part of the relational model, as they define rules that the data within the database must follow. They ensure that the data is consistent, accurate, and reliable.\n\n**Primary Key** - A primary key constraint is a column or a set of columns that uniquely identifies each row in a table. There can only be one primary key per table, and its value must be unique and non-null for each row.\n\n**Foreign Key** - A foreign key constraint ensures that a column or columns in a table refer to an existing row in another table. It helps maintain referential integrity between tables.\n\n**Unique** - A unique constraint ensures that the values in a column or set of columns are unique across all rows in a table. In other words, it prevents duplicate entries in the specified column(s).\n\n**Check** - A check constraint verifies that the values entered into a column meet a specific condition. It helps to maintain data integrity by restricting the values that can be inserted into a column.\n\n**Not Null** - A NOT NULL constraint enforces that a column cannot contain a NULL value. This ensures that a value must be provided for the specified column when inserting or updating data in the table.\n\n**Exclusion** - An exclusion constraint is a more advanced form of constraint that allows you to specify conditions that should not exist when comparing multiple rows in a table. It helps maintain data integrity by preventing conflicts in data.\n\nLearn more from the following resources:", "links": [ { - "title": "Contraints", + "title": "Constraints", "url": "https://www.postgresql.org/docs/current/ddl-constraints.html", "type": "article" }, { - "title": "PostgreSQL - Contraints", + "title": "PostgreSQL - Constraints", "url": "https://www.tutorialspoint.com/postgresql/postgresql_constraints.htm", "type": "article" } @@ -278,13 +341,30 @@ }, "91eOGK8mtJulWRlhKyv0F": { "title": "NULL", - "description": "In the relational model used by PostgreSQL, null values represent missing or unknown information within a database. Unlike zero, empty strings, or other default values, null signifies the absence of a value and is treated uniquely in operations and queries. For example, any arithmetic operation involving a null results in a null, and comparisons with null using standard operators return unknown rather than true or false. To handle null values, PostgreSQL provides specific functions and constructs such as `IS NULL`, `IS NOT NULL`, and the `COALESCE` function, which returns the first non-null value in its arguments. Understanding and correctly handling null values is crucial for accurate data retrieval and integrity in relational databases.", - "links": [] + "description": "In the relational model used by PostgreSQL, null values represent missing or unknown information within a database. Unlike zero, empty strings, or other default values, null signifies the absence of a value and is treated uniquely in operations and queries. For example, any arithmetic operation involving a null results in a null, and comparisons with null using standard operators return unknown rather than true or false. To handle null values, PostgreSQL provides specific functions and constructs such as `IS NULL`, `IS NOT NULL`, and the `COALESCE` function, which returns the first non-null value in its arguments. Understanding and correctly handling null values is crucial for accurate data retrieval and integrity in relational databases.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PostgreSQL - NULL", + "url": "https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-NULL", + "type": "article" + }, + { + "title": "PostgreSQL - NULL Values", + "url": "https://www.relationaldbdesign.com/database-analysis/module2/relational-database-null-values.php", + "type": "article" + } + ] }, "_BSR2mo1lyXEFXbKYb1ZG": { "title": "High Level Database Concepts", - "description": "High-level database concepts encompass fundamental principles that underpin the design, implementation, and management of database systems. These concepts form the foundation of effective database management, enabling the design of robust, efficient, and scalable systems.", - "links": [] + "description": "High-level database concepts encompass fundamental principles that underpin the design, implementation, and management of database systems. These concepts form the foundation of effective database management, enabling the design of robust, efficient, and scalable systems.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Demystifying PostgreSQL: 10 Crucial Concepts and Files", + "url": "https://medium.com/@RohitAjaygupta/demystifying-postgresql-10-crucial-concepts-and-files-explained-with-practical-examples-a5a70cd2b848", + "type": "article" + } + ] }, "9u7DPbfybqmldisiePq0m": { "title": "ACID", @@ -309,7 +389,7 @@ }, "-_ADJsTVGAgXq7_-8bdIO": { "title": "MVCC", - "description": "Multi-Version Concurrency Control (MVCC) is a technique used by PostgreSQL to allow multiple transactions to access the same data concurrently without conflicts or delays. It ensures that each transaction has a consistent snapshot of the database and can operate on its own version of the data.\n\nLearn more from the following resources:", + "description": "Multi-Version Concurrency Control (MVCC) is a technique used by PostgreSQL to allow multiple transactions to access the same data concurrently without conflicts or delays. It ensures that each transaction has a consistent snapshot of the database and can operate on its own version of the data.\n\nVisit the following resources to learn more:", "links": [ { "title": "Intro to MVCC", @@ -317,7 +397,7 @@ "type": "article" }, { - "title": "Multiversion concurrency control - Wikipedia", + "title": "Multi-Version Concurrency Control - Wikipedia", "url": "https://en.wikipedia.org/wiki/Multiversion_concurrency_control", "type": "article" }, @@ -367,10 +447,10 @@ }, "Qk14b9WyeCp9RV9WAwojt": { "title": "Query Processing", - "description": "In this section, we will discuss the concept of query processing in PostgreSQL. Query processing is an important aspect of a database system, as it is responsible for managing data retrieval and modification using Structured Query Language (SQL) queries. Efficient query processing is crucial for ensuring optimal database performance.\n\nLearn more from the following resources:", + "description": "Query processing is an important aspect of a database system, as it is responsible for managing data retrieval and modification using Structured Query Language (SQL) queries. Efficient query processing is crucial for ensuring optimal database performance.\n\nLearn more from the following resources:", "links": [ { - "title": "Understand PostgreSQL query processing - Microsoft", + "title": "Understand PostgreSQL Query Processing - Microsoft", "url": "https://learn.microsoft.com/en-us/training/modules/understand-postgresql-query-process/", "type": "course" }, @@ -385,6 +465,11 @@ "title": "Using Docker", "description": "Docker is an excellent tool for simplifying the installation and management of applications, including PostgreSQL. By using Docker, you can effectively isolate PostgreSQL from your system and avoid potential conflicts with other installations or configurations.\n\nLearn more from the following resources:", "links": [ + { + "title": "Official PostgresSQL Docker Image", + "url": "https://hub.docker.com/_/postgres", + "type": "article" + }, { "title": "How to Use the Postgres Docker Official Image", "url": "https://www.docker.com/blog/how-to-use-the-postgres-docker-official-image/", @@ -399,7 +484,7 @@ }, "pEtQy1nuW98YUwrbfs7Np": { "title": "Package Managers", - "description": "Package managers are essential tools that help you install, update, and manage software packages on your system. They keep track of dependencies, handle configuration files and ensure that the installation process is seamless for the end-user.\n\nLearn more from the following resources:", + "description": "Package managers are essential tools that help you install, update, and manage software packages on your system. They keep track of dependencies, handle configuration files and ensure that the installation process is seamless for the end-user.\n\nVisit the following resources to learn more:", "links": [ { "title": "Install PostgreSQL with APT", @@ -438,6 +523,11 @@ "title": "Deployment in Cloud", "description": "In this section, we will discuss deploying PostgreSQL in the cloud. Deploying your PostgreSQL database in the cloud offers significant advantages such as scalability, flexibility, high availability, and cost reduction. There are several cloud providers that offer PostgreSQL as a service, which means you can quickly set up and manage your databases without having to worry about underlying infrastructure, backups, and security measures.\n\nLearn more from the following resources:", "links": [ + { + "title": "5 Ways to Host PostgreSQL Databases", + "url": "https://www.prisma.io/dataguide/postgresql/5-ways-to-host-postgresql", + "type": "article" + }, { "title": "Postgres On Kubernetes", "url": "https://cloudnative-pg.io/", @@ -492,7 +582,7 @@ "description": "`pg_ctlcluster` is a command-line utility provided by PostgreSQL to manage database clusters. It is especially helpful for users who have multiple PostgreSQL clusters running on the same system.\n\nLearn more from the following resources:", "links": [ { - "title": "PostgreSQL documentation", + "title": "pg_ctlcluster", "url": "https://www.postgresql.org/docs/current/pgctlcluster.html", "type": "article" } @@ -500,8 +590,19 @@ }, "FtPiBWMFhjakyXsmSL_CI": { "title": "Installation and Setup", - "description": "", - "links": [] + "description": "To install and set up PostgreSQL, begin by downloading the installer from the official PostgreSQL website for your operating system (Windows, macOS, or Linux). For Windows, run the installer and follow the prompts to configure components, set a password for the superuser (postgres), and choose the installation directory and port (default is 5432). On macOS, using Homebrew is the recommended method; simply run brew install postgresql in the terminal, then initialize the database with brew services start postgresql. For Linux, use the package manager (APT for Debian/Ubuntu or YUM for CentOS/RHEL) to install PostgreSQL, followed by initializing the database and starting the service. After installation, you can access PostgreSQL using the psql command-line tool to create databases and manage your data effectively.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Installing PostgreSQL", + "url": "https://www.postgresql.org/download/", + "type": "article" + }, + { + "title": "PostgreSQL - Installation", + "url": "https://www.postgresql.org/docs/current/tutorial-install.html", + "type": "article" + } + ] }, "ANUgfkADLI_du7iRvnUdi": { "title": "Learn SQL", @@ -511,21 +612,26 @@ "title": "Visit Dedicated SQL Roadmap", "url": "https://roadmap.sh/sql", "type": "article" + }, + { + "title": "SQL Tutorial - Essential SQL For The Beginners", + "url": "https://www.sqltutorial.org/", + "type": "article" } ] }, "KMdF9efNGULualk5o1W0_": { "title": "For Schemas", - "description": "A schema is a logical collection of database objects within a PostgreSQL database. It behaves like a namespace that allows you to group and isolate your database objects separately from other schemas. The primary goal of a schema is to organize your database structure, making it easier to manage and maintain.\n\nBy default, every PostgreSQL database has a `public` schema, which is the default search path for any unqualified table or other database object.\n\nLearn more from the following resources:", + "description": "A schema is a logical collection of database objects within a PostgreSQL database. It behaves like a namespace that allows you to group and isolate your database objects separately from other schemas. The primary goal of a schema is to organize your database structure, making it easier to manage and maintain. By default, every PostgreSQL database has a `public` schema, which is the default search path for any unqualified table or other database object.\n\nLearn more from the following resources:", "links": [ { - "title": "PostgreSQL Schema", - "url": "https://hasura.io/learn/database/postgresql/core-concepts/1-postgresql-schema/", + "title": "Schemas", + "url": "https://www.postgresql.org/docs/current/ddl-schemas.html", "type": "article" }, { - "title": "Schemas", - "url": "https://www.postgresql.org/docs/current/ddl-schemas.html", + "title": "PostgreSQL Schema", + "url": "https://hasura.io/learn/database/postgresql/core-concepts/1-postgresql-schema/", "type": "article" } ] @@ -598,7 +704,7 @@ "description": "Filtering data is an essential feature in any database management system, and PostgreSQL is no exception. When we refer to filtering data, we're talking about selecting a particular subset of data that fulfills specific criteria or conditions. In PostgreSQL, we use the **WHERE** clause to filter data in a query based on specific conditions.\n\nLearn more from the following resources:", "links": [ { - "title": "How to filter query results in PostgreSQL", + "title": "How to Filter Query Results in PostgreSQL", "url": "https://www.prisma.io/dataguide/postgresql/reading-and-querying-data/filtering-data", "type": "article" }, @@ -640,7 +746,7 @@ "description": "Joining tables is a fundamental operation in the world of databases. It allows you to combine information from multiple tables based on common columns. PostgreSQL provides various types of joins, such as Inner Join, Left Join, Right Join, and Full Outer Join.\n\nLearn more from the following resources:", "links": [ { - "title": "Joins between tables", + "title": "Joins Between Tables", "url": "https://www.postgresql.org/docs/current/tutorial-join.html", "type": "article" }, @@ -661,7 +767,7 @@ "type": "article" }, { - "title": "Copying data between tables in PostgreSQL", + "title": "Copying Data Between Tables in PostgreSQL", "url": "https://www.atlassian.com/data/sql/copying-data-between-tables", "type": "article" } @@ -795,8 +901,19 @@ }, "T819BZ-CZgUX_BY7Gna0J": { "title": "Configuring", - "description": "Configuring PostgreSQL involves modifying several key configuration files to optimize performance, security, and functionality. The primary configuration files are postgresql.conf, pg\\_hba.conf, and pg\\_ident.conf, typically located in the PostgreSQL data directory. By properly configuring these files, you can tailor PostgreSQL to better fit your specific needs and environment.", - "links": [] + "description": "Configuring PostgreSQL involves modifying several key configuration files to optimize performance, security, and functionality. The primary configuration files are postgresql.conf, pg\\_hba.conf, and pg\\_ident.conf, typically located in the PostgreSQL data directory. By properly configuring these files, you can tailor PostgreSQL to better fit your specific needs and environment.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Configuring PostgreSQL", + "url": "https://www.postgresql.org/docs/current/runtime-config.html", + "type": "article" + }, + { + "title": "Install and Configure PostgreSQL", + "url": "https://ubuntu.com/server/docs/install-and-configure-postgresql", + "type": "article" + } + ] }, "yl3gxfQs4nOE0N7uGqR0d": { "title": "Resource Usage", @@ -890,7 +1007,7 @@ }, "3pLn1mhRnekG537ejHUYA": { "title": "Checkpoints / Background Writer", - "description": "In PostgreSQL, checkpoints and the background writer are essential for maintaining data integrity and optimizing performance. Checkpoints periodically write all modified data (dirty pages) from the shared buffers to the disk, ensuring that the database can recover to a consistent state after a crash. This process is controlled by settings such as `checkpoint_timeout`, `checkpoint_completion_target`, and `max_wal_size`, balancing between write performance and recovery time. The background writer continuously flushes dirty pages to disk in the background, smoothing out the I/O workload and reducing the amount of work needed during checkpoints. This helps to maintain steady performance and avoid spikes in disk activity. Proper configuration of these mechanisms is crucial for ensuring efficient disk I/O management and overall database stability.\n\nCheckpoints periodically write all modified data (dirty pages) from the shared buffer cache to the disk, ensuring that the database can recover to a consistent state after a crash. The frequency of checkpoints is controlled by parameters like `checkpoint_timeout`, `checkpoint_completion_target`, and `checkpoint_segments`, balancing the trade-off between I/O load and recovery time.\n\nThe background writer, on the other hand, continuously flushes dirty pages to disk, smoothing out the I/O workload and reducing the amount of work needed during a checkpoint. Parameters such as `bgwriter_delay`, `bgwriter_lru_maxpages`, and `bgwriter_lru_multiplier` control its behavior, optimizing the balance between database performance and the frequency of disk writes. Proper configuration of both components ensures efficient disk I/O management, minimizes performance bottlenecks, and enhances overall system stability.\n\nLearn more from the following resources:", + "description": "In PostgreSQL, checkpoints and the background writer are essential for maintaining data integrity and optimizing performance. Checkpoints periodically write all modified data (dirty pages) from the shared buffers to the disk, ensuring that the database can recover to a consistent state after a crash. This process is controlled by settings such as `checkpoint_timeout`, `checkpoint_completion_target`, and `max_wal_size`, balancing between write performance and recovery time. The background writer continuously flushes dirty pages to disk in the background, smoothing out the I/O workload and reducing the amount of work needed during checkpoints. This helps to maintain steady performance and avoid spikes in disk activity. Proper configuration of these mechanisms is crucial for ensuring efficient disk I/O management and overall database stability.\n\nLearn more from the following resources:", "links": [ { "title": "Checkpoints", @@ -914,7 +1031,7 @@ "description": "When working with PostgreSQL, it is often useful to analyze the performance of your queries and system as a whole. This can help you optimize your database and spot potential bottlenecks. One way to achieve this is by reporting logging statistics. PostgreSQL provides configuration settings for generating essential logging statistics on query and system performance.\n\nLearn more from the following resources:", "links": [ { - "title": "Error reporting and logging", + "title": "Error Reporting and Logging", "url": "https://www.postgresql.org/docs/current/runtime-config-logging.html", "type": "article" }, @@ -930,7 +1047,7 @@ "description": "PostgreSQL provides various extensions to enhance its features and functionalities. Extensions are optional packages that can be loaded into your PostgreSQL database to provide additional functionality like new data types or functions. Using extensions can be a powerful way to add new features to your PostgreSQL database and customize your database's functionality according to your needs.\n\nLearn more from the following resources:", "links": [ { - "title": "PostgreSQL extensions", + "title": "PostgreSQL Extensions", "url": "https://www.postgresql.org/download/products/6-postgresql-extensions/", "type": "article" }, @@ -943,20 +1060,31 @@ }, "2Zg8R5gs9LMQOcOMZtoPk": { "title": "Security", - "description": "Securing PostgreSQL involves multiple layers of considerations to protect data and ensure only authorized access.", - "links": [] + "description": "Securing PostgreSQL involves multiple layers of considerations to protect data and ensure only authorized access.\n\nLearn more from the following resources:", + "links": [ + { + "title": "PostgreSQL Database Security Best Practices", + "url": "https://www.percona.com/blog/postgresql-database-security-best-practices/", + "type": "article" + }, + { + "title": "Security - Azure Database for PostgreSQL", + "url": "https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-security", + "type": "article" + } + ] }, "S20aJB-VuSpXYyd0-0S8c": { "title": "Object Priviliges", "description": "Object privileges in PostgreSQL are the permissions given to different user roles to access or modify database objects like tables, views, sequences, and functions. Ensuring proper object privileges is crucial for maintaining a secure and well-functioning database.\n\nLearn more from the following resources:", "links": [ { - "title": "PostgreSQL roles and privileges explained", + "title": "PostgreSQL Roles and Privileges Explained", "url": "https://www.aviator.co/blog/postgresql-roles-and-privileges-explained/", "type": "article" }, { - "title": "What are object privileges?", + "title": "What are Object Privileges?", "url": "https://www.prisma.io/dataguide/postgresql/authentication-and-authorization/managing-privileges#what-are-postgresql-object-privileges", "type": "article" } @@ -1006,8 +1134,19 @@ }, "09QX_zjCUajxUqcNZKy0x": { "title": "Advanced Topics", - "description": "In addition to basic PostgreSQL security concepts, such as user authentication, privilege management, and encryption, there are several advanced topics that you should be aware of to enhance the security of your PostgreSQL databases.", - "links": [] + "description": "In addition to basic PostgreSQL security concepts, such as user authentication, privilege management, and encryption, there are several advanced topics that you should be aware of to enhance the security of your PostgreSQL databases.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Best Practices for Postgres Security", + "url": "https://www.timescale.com/learn/postgres-security-best-practices", + "type": "article" + }, + { + "title": "PostgreSQL - Encryption and Monitoring", + "url": "https://www.enterprisedb.com/postgresql-best-practices-encryption-monitoring", + "type": "article" + } + ] }, "bokFf6VNrLcilI9Hid386": { "title": "Row-Level Security", @@ -1046,12 +1185,12 @@ "description": "PostgreSQL supports various authentication models to control access, including trust (no password, for secure environments), password-based (md5 and scram-sha-256 for hashed passwords), GSSAPI and SSPI (Kerberos for secure single sign-on), LDAP (centralized user management), certificate-based (SSL certificates for strong authentication), PAM (leveraging OS-managed authentication), Ident (verifying OS user names), and RADIUS (centralized authentication via RADIUS servers). These methods are configured in the `pg_hba.conf` file, specifying the appropriate authentication method for different combinations of databases, users, and client addresses, ensuring flexible and secure access control.\n\nLearn more from the following resources:", "links": [ { - "title": "Authentication methods", + "title": "Authentication Methods", "url": "https://www.postgresql.org/docs/current/auth-methods.html", "type": "article" }, { - "title": "An introduction to authorization and authentication in PostgreSQL", + "title": "An Introduction to Authorization and Authentication in PostgreSQL", "url": "https://www.prisma.io/dataguide/postgresql/authentication-and-authorization/intro-to-authn-and-authz", "type": "article" } @@ -1189,12 +1328,12 @@ "description": "Operators in Kubernetes are software extensions that use custom resources to manage applications and their components. They encapsulate operational knowledge and automate complex tasks such as deployments, backups, and scaling. Using Custom Resource Definitions (CRDs) and custom controllers, Operators continuously monitor the state of the application and reconcile it with the desired state, ensuring the system is self-healing and resilient. Popular frameworks for building Operators include the Operator SDK, Kubebuilder, and Metacontroller, which simplify the process and enhance Kubernetes' capability to manage stateful and complex applications efficiently.", "links": [ { - "title": "Kubernetes Roadmap", + "title": "Visit Dedicated Kubernetes Roadmap", "url": "https://roadmap.sh/kubernetes", "type": "article" }, { - "title": "Kubernetes Website", + "title": "Kubernetes", "url": "https://kubernetes.io/", "type": "article" }, @@ -1260,7 +1399,7 @@ }, "xk2G-HUS-dviNW3BAMmJv": { "title": "KeepAlived", - "description": "Keepalived is a robust and widely-used open-source solution for load balancing and high availability. It helps to maintain a stable and perfect working environment even in the presence of failures such as server crashes or connectivity issues.\n\nKeepalived achieves this by utilizing the Linux Virtual Server (LVS) module and the Virtual Router Redundancy Protocol (VRRP).\n\nFor PostgreSQL database systems, Keepalived can be an advantageous addition to your infrastructure by offering fault tolerance and load balancing. With minimal configuration, it distributes read-only queries among multiple replicated PostgreSQL servers or divides transaction processing across various nodes – ensuring an efficient and resilient system.\n\nLearn more from the following resources:", + "description": "Keepalived is a robust and widely-used open-source solution for load balancing and high availability. It helps to maintain a stable and perfect working environment even in the presence of failures such as server crashes or connectivity issues.\n\nKeepalived achieves this by utilizing the Linux Virtual Server (LVS) module and the Virtual Router Redundancy Protocol (VRRP). For PostgreSQL database systems, Keepalived can be an advantageous addition to your infrastructure by offering fault tolerance and load balancing. With minimal configuration, it distributes read-only queries among multiple replicated PostgreSQL servers or divides transaction processing across various nodes – ensuring an efficient and resilient system.\n\nLearn more from the following resources:", "links": [ { "title": "acassen/keepalived", @@ -1268,9 +1407,14 @@ "type": "opensource" }, { - "title": "Keepalived Website", + "title": "Keepalived", "url": "https://www.keepalived.org/", "type": "article" + }, + { + "title": "Keepalived: High Availability for Self-hosted Services", + "url": "https://www.virtualizationhowto.com/2023/09/keepalived-high-availability-for-self-hosted-services/", + "type": "article" } ] }, @@ -1278,6 +1422,11 @@ "title": "Etcd", "description": "Etcd is a distributed key-value store that provides an efficient and reliable means for storing crucial data across clustered environments. It has become popular as a fundamental component for storing configuration data and service discovery in distributed systems.\n\nEtcd can be utilized in conjunction with _connection poolers_ such as PgBouncer or HAProxy to improve PostgreSQL load balancing. By maintaining a list of active PostgreSQL servers' IP addresses and ports as keys in the store, connection poolers can fetch this information periodically to route client connections to the right servers. Additionally, transactional operations on the store can simplify the process of adding or removing nodes from the load balancer configuration while maintaining consistency.\n\nLearn more from the following resources:", "links": [ + { + "title": "PostgreSQL High Availability with Etcd", + "url": "https://github.com/patroni/patroni", + "type": "opensource" + }, { "title": "etcd vs PostgreSQL", "url": "https://api7.ai/blog/etcd-vs-postgresql", @@ -1316,12 +1465,12 @@ "type": "opensource" }, { - "title": "Zabbix Website", + "title": "Zabbix", "url": "https://www.zabbix.com/", "type": "article" }, { - "title": "Using Zabbix to monitor your home network", + "title": "Using Zabbix to Monitor your Home Network", "url": "https://jswheeler.medium.com/using-zabbix-to-monitor-your-home-network-71ed2b1181ae", "type": "article" } @@ -1527,7 +1676,7 @@ }, "3V1PPIeB0i9qNUsT8-4O-": { "title": "PgBouncer Alternatives", - "description": "Pgpool-II\n---------\n\nPgpool-II is another widely-used connection pooler for PostgreSQL. It provides several advanced features, such as load balancing, replication, and limiting connections.\n\n* **Load Balancing** - Pgpool-II can distribute read queries among multiple PostgreSQL servers to balance the read load, helping to improve overall performance.\n* **Replication** - In addition to connection pooling, Pgpool-II can act as a replication tool for creating real-time data backups.\n* **Limiting Connections** - You can set connection limits for clients to control the maximum number of allowed connections for specific users or databases.\n\nHAProxy\n-------\n\nHAProxy is a high-performance and highly-available load balancer for TCP and HTTP-based applications, including PostgreSQL. It is particularly well-suited for distributing connections across multiple PostgreSQL servers for high availability and load balancing.\n\n* **Connection Distribution** - HAProxy uses load balancing algorithms to ensure connections are evenly distributed across the available servers, which can help prevent connection overloading.\n* **Health Checking** - HAProxy can perform periodic health checks on your PostgreSQL servers, which can help to ensure that client connections are redirected to healthy servers.\n* **SSL Support** - HAProxy provides SSL/TLS support, enabling secure connections between clients and PostgreSQL servers.\n\nOdyssey\n-------\n\nOdyssey is an open-source, multithreaded connection pooler for PostgreSQL developed by Yandex. It is designed for high-performance and large-scale deployments and supports features like transparent SSL, load balancing, and advanced routing.\n\n* **High Performance** - Odyssey uses a multithreaded architecture to process its connections, which can help significantly increase its performance compared to single-threaded connection poolers.\n* **Advanced Routing** - Odyssey allows you to configure routing rules and load balancing based on client, server, user, and even specific SQL queries.\n* **Transparent SSL** - Odyssey supports transparent SSL connections between clients and PostgreSQL servers, ensuring secure communication.\n\nLearn more from the following resources:", + "description": "Pgpool-II, HAProxy, and Odyssey are prominent tools for enhancing PostgreSQL performance and availability. **Pgpool-II** is a versatile connection pooler offering load balancing, replication, and connection limits to optimize performance. **HAProxy** excels as a load balancer for distributing connections across PostgreSQL servers, featuring health checks and SSL/TLS support for secure, high-availability setups. **Odyssey**, developed by Yandex, is a multithreaded connection pooler designed for high-performance deployments, providing advanced routing, transparent SSL, and load balancing capabilities tailored for large-scale systems.\n\nLearn more from the following resources:", "links": [ { "title": "yandex/odyssey", @@ -1596,7 +1745,7 @@ }, "TZvZ_jNjWnM535ZktyhQN": { "title": "Patroni Alternatives", - "description": "While Patroni is a popular choice for managing PostgreSQL clusters, there are several other tools and frameworks available that you might consider as alternatives to Patroni. Each of these has its unique set of features and benefits, and some may be better suited to your specific requirements or use-cases.\n\nStolon - Stolon is a cloud-native PostgreSQL manager that automatically ensures high availability and, if required, can seamlessly scale instances. It was developed by the team at Sorint.lab and is written in Go. Some of the main features that differentiate Stolon from other solutions are:\n\nPgpool-II - Pgpool-II is an advanced and powerful PostgreSQL management and load balancing solution, developed by the Pgpool Global Development Group. Pgpool-II not only provides high availability and connection pooling, but also offers a myriad of other features, such as:\n\nRepmgr - Repmgr is an open-source replication management tool for PostgreSQL that has been fully integrated and supported by 2ndQuadrant. It simplifies administration and daily management, providing a robust and easy-to-use solution. The main features of Repmgr include:\n\nPAF (PostgreSQL Automatic Failover) - PAF is an HA (high-availability) resource agent for the Pacemaker and Corosync cluster manager, designed for the PostgreSQL's built-in streaming replication. It was developed by the team at Dalibo and is quite lightweight compared to other alternatives. Key features of PAF include:\n\nLearn more from the following resources:", + "description": "While Patroni is a popular choice for managing PostgreSQL clusters, there are several other tools and frameworks available that you might consider as alternatives to Patroni. Each of these has its unique set of features and benefits, and some may be better suited to your specific requirements or use-cases.\n\nSeveral alternatives to Patroni exist for PostgreSQL cluster management, each with unique features catering to specific needs. **Stolon**, a cloud-native manager by Sorint.lab, ensures high availability and seamless scaling. **Pgpool-II**, by the Pgpool Global Development Group, offers load balancing, connection pooling, and high availability. **Repmgr**, developed by 2ndQuadrant, simplifies replication and cluster administration. **PAF (PostgreSQL Automatic Failover)**, created by Dalibo, provides lightweight failover management using Pacemaker and Corosync. These tools present diverse options for managing PostgreSQL clusters effectively.\n\nVisit the following resources to learn more:", "links": [ { "title": "dalibo/PAF", @@ -1609,13 +1758,13 @@ "type": "article" }, { - "title": "pgPool Website", - "url": "https://www.pgpool.net/mediawiki/index.php/Main_Page", + "title": "RepMgr", + "url": "https://repmgr.org/", "type": "article" }, { - "title": "RepMgr Website", - "url": "https://repmgr.org/", + "title": "pgPool", + "url": "https://www.pgpool.net/mediawiki/index.php/Main_Page", "type": "article" } ] @@ -1638,15 +1787,31 @@ }, "e5s7-JRqNy-OhfnjTScZI": { "title": "Learn to Automate", - "description": "When working with PostgreSQL, automating repetitive and time-consuming tasks is crucial for increasing efficiency and reliability in your database operations.", - "links": [] + "description": "When working with PostgreSQL, automating repetitive and time-consuming tasks is crucial for increasing efficiency and reliability in your database operations.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PostgreSQL - Automation", + "url": "https://www.postgresql.org/docs/current/maintenance.html", + "type": "article" + }, + { + "title": "Autoscaling Azure PostgreSQL Server with Automation Tasks", + "url": "https://techcommunity.microsoft.com/blog/adforpostgresql/autoscaling-azure-postgresql-server-with-automation-tasks/3911718", + "type": "article" + } + ] }, "-clI2RmfhK8F8beHULaIB": { "title": "Shell Scripts", "description": "Shell scripts are a powerful tool used to automate repetitive tasks and perform complex operations. They are essentially text files containing a sequence of commands to be executed by the shell (such as Bash or Zsh). By leveraging shell scripts with tools such as `cron`, you can efficiently automate tasks related to PostgreSQL and streamline your database administration processes.\n\nLearn more from the following resources:", "links": [ { - "title": "Shell scripting tutorial", + "title": "Shell Script Cheatsheet", + "url": "https://cheatsheets.zip/bash", + "type": "article" + }, + { + "title": "Shell Scripting Tutorial", "url": "https://www.tutorialspoint.com/unix/shell_scripting.htm", "type": "article" }, @@ -1678,7 +1843,7 @@ "type": "opensource" }, { - "title": "Ansible Website", + "title": "Ansible", "url": "https://www.ansible.com/", "type": "article" }, @@ -1726,12 +1891,12 @@ "description": "Puppet is an open-source software configuration management tool that enables system administrators to automate the provisioning, configuration, and management of a server infrastructure. It helps minimize human errors, ensures consistency across multiple systems, and simplifies the process of managing PostgreSQL installations.\n\nLearn more from the following resources:", "links": [ { - "title": "Puppet documentation", + "title": "Puppet Documentation", "url": "https://puppet.com/docs/puppet/latest/index.html", "type": "article" }, { - "title": "Puppet PostgreSQL module documentation", + "title": "Puppet PostgreSQL Module Documentation", "url": "https://forge.puppet.com/modules/puppetlabs/postgresql/", "type": "article" } @@ -1779,13 +1944,13 @@ "description": "Bulk load process data involves transferring large volumes of data from external files into the PostgreSQL database. This is an efficient way to insert massive amounts of data into your tables quickly, and it's ideal for initial data population or data migration tasks. Leveraging the `COPY` command or `pg_bulkload` utility in combination with best practices should help you load large datasets swiftly and securely.\n\nLearn more from the following resources:", "links": [ { - "title": "7 Best Practice Tips for PostgreSQL Bulk Data Loading", - "url": "https://www.enterprisedb.com/blog/7-best-practice-tips-postgresql-bulk-data-loading", + "title": "Populating a Database", + "url": "https://www.postgresql.org/docs/current/populate.html", "type": "article" }, { - "title": "Populating a Database", - "url": "https://www.postgresql.org/docs/current/populate.html", + "title": "7 Best Practice Tips for PostgreSQL Bulk Data Loading", + "url": "https://www.enterprisedb.com/blog/7-best-practice-tips-postgresql-bulk-data-loading", "type": "article" } ] @@ -1800,7 +1965,7 @@ "type": "article" }, { - "title": "How to use table partitioning to scale PostgreSQL", + "title": "How to use Table Partitioning to Scale PostgreSQL", "url": "https://www.enterprisedb.com/postgres-tutorials/how-use-table-partitioning-scale-postgresql", "type": "article" } @@ -2129,12 +2294,12 @@ "description": "Recursive CTEs are a powerful feature in SQL that allow you to build complex hierarchical queries, retrieve data stored in hierarchical structures or even perform graph traversal. In simple terms, a recursive CTE is a CTE that refers to itself in its own definition, creating a loop that iterates through the data until a termination condition is met.\n\nNote that recursive CTEs can be complex, and it's important to ensure a proper termination condition to avoid infinite recursion. Also, be careful with the use of `UNION ALL` or `UNION`, as it may impact the results and the performance of your query.\n\nLearn more from the following resources:", "links": [ { - "title": "PostgreSQL Recursive Query", + "title": "PostgreSQL - Recursive Query", "url": "https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-recursive-query/", "type": "article" }, { - "title": "PostgreSQL recursive query explained", + "title": "PostgreSQL Recursive Query Explained", "url": "https://elvisciotti.medium.com/postgresql-recursive-query-the-simplest-example-explained-f9b85e0a371b", "type": "article" } @@ -2161,7 +2326,7 @@ "description": "`top` is a command-line utility that comes pre-installed on most Unix-based operating systems such as Linux, macOS, and BSD. It provides a dynamic, real-time view of the processes running on a system, displaying valuable information like process ID, user, CPU usage, memory usage, and more.\n\nLearn more from the following resources:", "links": [ { - "title": "How to use the top command in Linux", + "title": "How to Use the top Command in Linux", "url": "https://phoenixnap.com/kb/top-command-in-linux", "type": "article" }, @@ -2336,7 +2501,7 @@ "type": "article" }, { - "title": "Awk command in Linux/Unix", + "title": "Awk Command in Linux/Unix", "url": "https://www.digitalocean.com/community/tutorials/awk-command-linux-unix", "type": "article" }, @@ -2478,7 +2643,7 @@ }, "UZ1vRFRjiQAVu6BygqwEL": { "title": "explain.dalibo.com", - "description": "[explain.dalibo.com](http://explain.dalibo.com) is a free service that allows you to analyze the execution plan of your queries. It is based on the [explain.depesz.com](explain.depesz.com) service.\n\nLearn more from the following resources:", + "description": "[explain.dalibo.com](http://explain.dalibo.com) is a free service that allows you to analyze the execution plan of your queries. It is based on the [explain.depesz.com](http://explain.depesz.com) service.\n\nLearn more from the following resources:", "links": [ { "title": "explain.dalibo.com", @@ -2558,8 +2723,14 @@ }, "G9DB1ZQjgXaHxJ4Lm6xGx": { "title": "SQL Query Patterns / Anti-patterns", - "description": "Schema query patterns in PostgreSQL optimize data retrieval and manipulation by using indexes on frequently queried columns to speed up SELECT queries, optimizing joins with indexed foreign keys and appropriate join types, and leveraging table partitioning to limit data scans. Common Table Expressions (CTEs) break down complex queries for better readability and maintainability, while window functions allow advanced analytics within queries. Query caching and prepared statements reduce access times and execution overhead, respectively, and materialized views precompute and store complex query results for faster access. These patterns collectively enhance the efficiency, performance, and reliability of PostgreSQL queries.", - "links": [] + "description": "Schema query patterns in PostgreSQL optimize data retrieval and manipulation by using indexes on frequently queried columns to speed up SELECT queries, optimizing joins with indexed foreign keys and appropriate join types, and leveraging table partitioning to limit data scans. Common Table Expressions (CTEs) break down complex queries for better readability and maintainability, while window functions allow advanced analytics within queries. Query caching and prepared statements reduce access times and execution overhead, respectively, and materialized views precompute and store complex query results for faster access. These patterns collectively enhance the efficiency, performance, and reliability of PostgreSQL queries.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PostgreSQL - Query Patterns", + "url": "https://www.postgresql.org/docs/current/functions-matching.html", + "type": "article" + } + ] }, "Dhhyg23dBMyAKCFwZmu71": { "title": "Indexes and their Usecases", @@ -2635,13 +2806,13 @@ "description": "Generalized Inverted Index (GIN) is a powerful indexing method in PostgreSQL that can be used for complex data types such as arrays, text search, and more. GIN provides better search capabilities for non-traditional data types, while also offering efficient and flexible querying.\n\nLearn more from the following resources:", "links": [ { - "title": "Generalized Inverted Indexes", - "url": "https://www.cockroachlabs.com/docs/stable/inverted-indexes", + "title": "GIN Introduction", + "url": "https://www.postgresql.org/docs/current/gin-intro.html", "type": "article" }, { - "title": "GIN Introduction", - "url": "https://www.postgresql.org/docs/current/gin-intro.html", + "title": "Generalized Inverted Indexes", + "url": "https://www.cockroachlabs.com/docs/stable/inverted-indexes", "type": "article" } ] @@ -2669,13 +2840,60 @@ }, "8H7hJhGKxr1nrjkHv9Xao": { "title": "Mailing Lists", - "description": "Mailing lists are an essential part of PostgreSQL's development community. They provide a platform for collaboration, discussion, and problem-solving. By participating in these lists, you can contribute to the development of PostgreSQL, share your knowledge with others, and stay informed about the latest updates, improvements, and conferences.\n\nHere are some prominent mailing lists in PostgreSQL's development community:\n\n* **pgsql-hackers**: This is the primary mailing list for PostgreSQL's core development. It is intended for discussions around new features, patches, performance improvements, and bug fixes. To subscribe, visit [pgsql-hackers Subscription](https://www.postgresql.org/list/pgsql-hackers/).\n \n* **pgsql-announce**: This mailing list is for official announcements regarding new PostgreSQL releases, security updates, and other important events. To stay updated, you can subscribe at [pgsql-announce Subscription](https://www.postgresql.org/list/pgsql-announce/).\n \n* **pgsql-general**: The pgsql-general mailing list is for general discussions related to PostgreSQL, including usage, administration, configuration, and SQL queries. Subscribe at [pgsql-general Subscription](https://www.postgresql.org/list/pgsql-general/).\n \n* **pgsql-novice**: This mailing list is specifically designed for PostgreSQL beginners who need help or advice. If you're new to PostgreSQL, consider joining this community by subscribing at [pgsql-novice Subscription](https://www.postgresql.org/list/pgsql-novice/).\n \n* **pgsql-docs**: If you're interested in contributing to PostgreSQL's documentation or want to discuss its content, subscribe to the pgsql-docs mailing list at [pgsql-docs Subscription](https://www.postgresql.org/list/pgsql-docs/).\n \n* **Regional and language-specific mailing lists**: PostgreSQL also offers several regional and language-specific mailing lists to help users communicate in their native languages. Find a suitable mailing list on the [PostgreSQL Mailing Lists page](https://www.postgresql.org/list/).\n \n\nHow to Contribute\n-----------------\n\nTo get started with mailing lists, follow these steps:\n\n* **Subscribe**: Choose a mailing list that suits your interests and click on the respective subscription link to sign up.\n \n* **Introduce yourself**: It's a good idea to send a brief introduction email to the mailing list, describing your skills and interests related to PostgreSQL.\n \n* **Read the archives**: Familiarize yourself with previous discussions by reading the mailing list archives. You can find them on the [PostgreSQL Mailing Lists page](https://www.postgresql.org/list/).\n \n* **Participate**: Once you're comfortable with the mailing list's topics and etiquette, start participating in ongoing discussions or initiate new threads.\n \n\nRemember to follow the [mailing list's etiquette](https://www.postgresql.org/community/lists/etiquette/) to ensure a positive and productive experience for all community members.", - "links": [] + "description": "Mailing lists are an essential part of PostgreSQL's development community. They provide a platform for collaboration, discussion, and problem-solving. By participating in these lists, you can contribute to the development of PostgreSQL, share your knowledge with others, and stay informed about the latest updates, improvements, and conferences.\n\nPostgreSQL's development community offers a variety of mailing lists for discussions, announcements, and contributions. Key lists include **pgsql-hackers** for core development and feature discussions, **pgsql-announce** for official announcements, **pgsql-general** for general usage and administration queries, **pgsql-novice** for beginners seeking advice, and **pgsql-docs** for documentation-related contributions. Regional and language-specific lists are also available. To engage, subscribe to a mailing list that matches your interests, introduce yourself, read the archives for context, and participate in discussions. For guidelines, follow the Mailing List Etiquette.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Mailing List Etiquette", + "url": "https://www.postgresql.org/community/lists/etiquette/", + "type": "article" + }, + { + "title": "pgsql-hackers Subscription", + "url": "https://www.postgresql.org/list/pgsql-hackers/", + "type": "article" + }, + { + "title": "pgsql-announce Subscription", + "url": "https://www.postgresql.org/list/pgsql-announce/", + "type": "article" + }, + { + "title": "pgsql-general Subscription", + "url": "https://www.postgresql.org/list/pgsql-general/", + "type": "article" + }, + { + "title": "pgsql-novice Subscription", + "url": "https://www.postgresql.org/list/pgsql-novice/", + "type": "article" + }, + { + "title": "pgsql-docs Subscription", + "url": "https://www.postgresql.org/list/pgsql-docs/", + "type": "article" + }, + { + "title": "PostgreSQL Mailing Lists page", + "url": "https://www.postgresql.org/list/", + "type": "article" + } + ] }, "Jy0G0ZnHPOM8hba_PbwuA": { "title": "Reviewing Patches", - "description": "One of the most valuable contributions to PostgreSQL is reviewing and testing patches submitted by other developers. This process ensures that every proposed change undergoes quality control, helps new contributors get involved and learn about PostgreSQL, and maintains the overall stability and reliability of the project.\n\n### Why is reviewing patches important?\n\n* Improves code quality by identifying bugs, security issues, and performance problems\n* Helps maintain consistency and adherence to project standards and best practices\n* Provides valuable feedback for developers working on new features and enhancements\n* Helps new contributors learn about PostgreSQL internals and progressively grow their expertise\n\n### How can I participate in reviewing patches?\n\n* Subscribe to the [pgsql-hackers mailing list](https://www.postgresql.org/list/pgsql-hackers/) where patch discussions and reviews take place.\n* Browse the [commitfest schedule](https://commitfest.postgresql.org/) to stay informed about upcoming events and deadlines.\n* Choose a patch from the commitfest that interests you or that you feel confident to review.\n* Analyze the patch to ensure:\n * Correctness: Does the patch work as intended and solve the problem it addresses?\n * Performance: Does the patch avoid introducing performance regressions or trade-offs?\n * Code quality: Is the code clean, modular, and maintainable? Does it adhere to PostgreSQL coding conventions?\n * Documentation: Are the changes properly documented, and do they provide the necessary context for other developers?\n * Test coverage: Are there appropriate tests covering the new code or changes?\n* Provide feedback on the patch, either by replying to the relevant mailing list thread or by commenting directly on the patch submission in the commitfest app. Be constructive and specific in your comments, and offer suggestions for improvement when possible.\n* Follow up on any discussion around your review and participate in ongoing improvements and iterations of the patch.\n\nRemember, reviewing patches is a collaborative process that relies on the input of many individuals. Your contributions are essential in maintaining the high quality and stability of the PostgreSQL project.", - "links": [] + "description": "Reviewing patches is a vital contribution to PostgreSQL, ensuring quality control, maintaining project standards, and helping new contributors understand the system's internals. By identifying bugs, improving performance, and ensuring proper documentation and test coverage, reviewers uphold PostgreSQL's reliability and stability. To participate, subscribe to the _pgsql-hackers mailing list_, explore patches in the _commitfest schedule_, and provide constructive feedback on correctness, performance, and code quality. Engaging in this collaborative process is an impactful way to support the PostgreSQL community.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "pgsql-hackers Mailing List", + "url": "https://www.postgresql.org/list/pgsql-hackers/", + "type": "article" + }, + { + "title": "Commitfest Schedule", + "url": "https://commitfest.postgresql.org/", + "type": "article" + } + ] }, "eQzMU_KyQmHJQ6gzyk0-1": { "title": "Writing Patches", diff --git a/public/roadmap-content/software-architect.json b/public/roadmap-content/software-architect.json index 44bb1b3c5..cb6dae9ff 100644 --- a/public/roadmap-content/software-architect.json +++ b/public/roadmap-content/software-architect.json @@ -38,22 +38,40 @@ }, "2sR4KULvAUUoOtopvsEBs": { "title": "Levels of Architecture", - "description": "Architecture can be done on several “levels” of abstractions. The level influences the importance of necessary skills. As there are many categorizations possible my favorite segmentation includes these 3 levels:\n\n* **Application Level:** The lowest level of architecture. Focus on one single application. Very detailed, low level design. Communication is usually within one development team.\n* **Solution Level:** The mid-level of architecture. Focus on one or more applications which fulfill a business need (business solution). Some high, but mainly low-level design. Communication is between multiple development teams.\n* **Enterprise Level:** The highest level of architecture. Focus on multiple solutions. High level, abstract design, which needs to be detailed out by solution or application architects. Communication is across the organization.", - "links": [] + "description": "Architecture can be done on several “levels” of abstractions. The level influences the importance of necessary skills. As there are many categorizations possible my favorite segmentation includes these 3 levels:\n\n* **Application Level:** The lowest level of architecture. Focus on one single application. Very detailed, low level design. Communication is usually within one development team.\n* **Solution Level:** The mid-level of architecture. Focus on one or more applications which fulfill a business need (business solution). Some high, but mainly low-level design. Communication is between multiple development teams.\n* **Enterprise Level:** The highest level of architecture. Focus on multiple solutions. High level, abstract design, which needs to be detailed out by solution or application architects. Communication is across the organization.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Software Engineering Architecture", + "url": "https://www.geeksforgeeks.org/software-engineering-architectural-design/", + "type": "article" + } + ] }, "Lqe47l4j-C4OwkbkwPYry": { "title": "Application Architecture", - "description": "The lowest level of architecture. Focus on one single application. Very detailed, low level design. Communication is usually within one development team.", - "links": [] + "description": "The lowest level of architecture. Focus on one single application. Very detailed, low level design. Communication is usually within one development team.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Application Architecture", + "url": "https://www.codesee.io/learning-center/application-architecture", + "type": "article" + } + ] }, "uGs-9xE3DMJxKhenltbFK": { "title": "Solution Architecture", - "description": "The mid-level of architecture. Focus on one or more applications which fulfill a business need (business solution). Some high, but mainly low-level design. Communication is between multiple development teams.", - "links": [] + "description": "The mid-level of architecture. Focus on one or more applications which fulfill a business need (business solution). Some high, but mainly low-level design. Communication is between multiple development teams.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Solution Architecture", + "url": "https://www.leanix.net/en/wiki/it-architecture/solution-architecture", + "type": "article" + } + ] }, "vlW07sc-FQnxPMjDMn8_F": { "title": "Enterprise Architecture", - "description": "The highest level of architecture. Focus on multiple solutions. High level, abstract design, which needs to be detailed out by solution or application architects. Communication is across the organization. Visit the following resources to learn more:", + "description": "The highest level of architecture. Focus on multiple solutions. High level, abstract design, which needs to be detailed out by solution or application architects. Communication is across the organization.\n\nVisit the following resources to learn more:", "links": [ { "title": "Enterprise Software Architecture", @@ -74,63 +92,155 @@ }, "rUxbG2S2nJuA1YVY6sjiX": { "title": "Responsibilities", - "description": "To understand the necessary skills an architect needs, we first need to understand typical activities. The following list contains from my perspective the most important activities:\n\n* Define and decide development technology and platform\n* Define development standards, e.g., coding standards, tools, review processes, test approach, etc.\n* Support identifying and understanding business requirements\n* Design systems and take decisions based on requirements\n* Document and communicate architectural definitions, design and decisions\n* Check and review architecture and code, e.g., check if defined patterns and coding standards are implemented properly\n* Collaborate with other architects and stakeholders\n* Coach and consult developers\n* Make sure that as implementation takes place, the architecture is being adhered to\n* Play a key part in reviewing code\n* Detail out and refine higher level design into lower level design\n\n_Note: Architecture is a continuous activity, especially when it is applied in agile software development. Therefore, these activities are done over and over again._", - "links": [] + "description": "To understand the necessary skills an architect needs, we first need to understand typical activities. The following list contains from my perspective the most important activities:\n\n* Define and decide development technology and platform\n* Define development standards, e.g., coding standards, tools, review processes, test approach, etc.\n* Support identifying and understanding business requirements\n* Design systems and take decisions based on requirements\n* Document and communicate architectural definitions, design and decisions\n* Check and review architecture and code, e.g., check if defined patterns and coding standards are implemented properly\n* Collaborate with other architects and stakeholders\n* Coach and consult developers\n* Make sure that as implementation takes place, the architecture is being adhered to\n* Play a key part in reviewing code\n* Detail out and refine higher level design into lower level design\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Software Architect", + "url": "https://en.wikipedia.org/wiki/Software_architect", + "type": "article" + } + ] }, "lBtlDFPEQvQ_xtLtehU0S": { "title": "Important Skills to Learn", - "description": "To support the laid-out activities specific skills are required. From my experience, read books and discussions we can boil this down to these ten skills every software architect should have:\n\n* Design\n* Decide\n* Simplify\n* Code\n* Document\n* Communicate\n* Estimate\n* Balance\n* Consult\n* Market", - "links": [] + "description": "To support the laid-out activities specific skills are required. From my experience, read books and discussions we can boil this down to these ten skills every software architect should have:\n\n* Design\n* Decide\n* Simplify\n* Code\n* Document\n* Communicate\n* Estimate\n* Balance\n* Consult\n* Market\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Software Architect Skills", + "url": "https://www.geeksforgeeks.org/software-architects-skills/", + "type": "article" + } + ] }, "fBd2m8tMJmhuNSaakrpg4": { "title": "Design & Architecture", - "description": "What makes a good design? This is probably the most important and challenging question. I will make a distinction between theory and practice. To my experience, having a mix of both is most valuable. Let’s start with theory:\n\n* **Know the basic design patterns**: Patterns are one of the most important tools an architect needs to have to develop maintainable systems. With patterns you can reuse designs to solve common problems with proven solutions. The book “Design Patterns: Elements of Reusable Object-Oriented Software” written by John Vlissides, Ralph Johnson, Richard Helm, Erich Gamma is a must-read to everyone who is in software development. Although the patterns were published more than 20 years ago they are still the basis of modern software architecture. For example, the Model-View-Controller (MVC) pattern was described in this book, which is applied in many areas or is the basis for newer pattern, e.g. Model-View-ViewModel (MVVM).\n* **Dig deeper into patterns and anti-patterns**: If you already know all basic Gang-of-Four patterns, then extend your knowledge with more software design patterns or dig deeper into your area of interest. One of my favorite books about application integration is “Enterprise Integration Patterns” written by Gregor Hohpe. This book is applicable in various areas whenever two applications need to exchange data, whether it is an old-school file exchange from some legacy systems or a modern microservice architecture.\n* **Know quality measures**: Defining architecture is not the end. There are reasons why guidelines and coding standards are defined, applied and controlled. You do this because of quality and non-functional requirements. You want to have a system which is maintainable, reliable, adaptable, secure, testable, scalable, usable, etc. And one piece to achieving all of these quality attributes is applying good architecture work. You can start to learn more about quality measures on Wikipedia. Theory is important. Practice is equally—or even more—important if you do not want to become an Ivory Tower Architect.\n* **Try out and understand different technology stacks**: I think this is the most important activity if you want to become a better architect. Try out (new) technology stacks and learn their ups and downs. Different or new technology comes with different design aspects and patterns. You most likely do not learn anything from just flipping through abstract slides but by trying it out by yourself and feeling the pain or the relief. An architect should not only have broad, but—also in some areas—deep knowledge. It is not important to master all technology stacks but to have a solid understanding of the most important in your area. Also, try out technology which is not in your area, e.g., if you are deep into SAP R/3 you should also try JavaScript and vice versa. Still, both parties will be surprised about the latest advances in SAP S/4 Hana. For example, you can try it by yourself and take a course at openSAP for free. Be curious and try out new things. Also try out stuff which you did not like some years ago.\n* **Analyze and understand applied patterns**: Have a look at any current framework, e.g., Angular. You can study a lot of patterns in practice, e.g., Observables. Try to understand how it is applied in the framework, why it was done. And if you are really dedicated, have a deeper look into the code and understand how it was implemented.\n* **Be curious and attend User Groups**. [Meetup](https://www.meetup.com/)", - "links": [] + "description": "Good design in software architecture blends theoretical knowledge with practical experience. Theoretically, architects should master fundamental design patterns, such as those detailed in _\"Design Patterns: Elements of Reusable Object-Oriented Software\"_, which remain foundational for modern architecture. Advanced knowledge of patterns and anti-patterns, like those in _\"Enterprise Integration Patterns\"_, extends this understanding. Architects must also focus on quality measures, ensuring designs meet non-functional requirements like scalability, security, and adaptability.\n\nPractically, architects improve by experimenting with various technology stacks, gaining insights into their strengths and limitations. Exploring frameworks like Angular reveals real-world pattern applications, such as Observables, and fosters deeper understanding through hands-on coding. Attending user groups and engaging in communities, like those on Meetup, broadens perspectives and encourages curiosity, enabling architects to stay updated and continuously refine their craft.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Design Patterns for Humans", + "url": "https://github.com/kamranahmedse/design-patterns-for-humans", + "type": "opensource" + }, + { + "title": "Visit Dedicated Software Design Roadmap", + "url": "https://roadmap.sh/software-design-architecture", + "type": "article" + } + ] }, "MSDo0nPk_ghRYkZS4MAQ_": { "title": "Decision Making", - "description": "An architect needs to be able to take decisions and guide projects or the entire organization into the right direction.\n\n* **Know what is important**: Do not waste time with unimportant decisions or activities. Learn what is important. To my knowledge there is not a book which has these information. My personal favorites are these 2 characteristics which I usually consider when evaluating if something is important or not:\n 1. Conceptional Integrity: If you decide to do it in one way, stick to it, even if it is sometimes better to do it differently. Usually, this leads to a more straightforward overall concept, eases comprehensibility and eases maintenance.\n 2. Uniformity: If you for example define and apply naming conventions it is not about upper- or lowercase, but to have it applied everywhere in the same way.\n* **Prioritize**: Some decisions are highly critical. If they are not taken early enough workarounds are build up which are often unlikely to be removed later and are a nightmare for maintenance, or worse, developers simply stop working until a decision is taken. In such situations it is sometimes even better to go with a “bad” decision instead of having no decision. But before it comes to this situation, consider prioritizing upcoming decisions. There are different ways to do so. I suggest having a look at the Weighted Shortest Job First (WSJF) model which is widely used within agile software development. Especially the measures time criticality and risk reduction are critical to estimate the priority of architecture decisions.\n* **Know your competence**: Do not decide things which are not in your competence. This is critical as it may ruin your position as architect significantly if not considered. To avoid this, clarify with your peers which responsibilities you have and what is part of your role. If there are more than one architect, then you should respect the level of architecture in which you are currently deployed. As an lower level architect you better come up with suggestions for higher level architecture instead of decisions. Further, I recommend checking critical decisions always with a peer.\n* **Evaluate multiple options**: Always lay out more than one option if it comes to decisions. In the majority of the cases I was involved in, there was more than one possible (good) option. Going with only one option is bad in two respects: First, it seems that you did not do your job properly and secondly it impedes making proper decisions. By defining measures, options can be compared based on facts instead of gut feelings, e.g. license costs or maturity. This usually leads to better and more sustainable decisions. Further, it eases to sell the decision to different stakeholders. Besides, if you do not have evaluated options properly you may miss arguments when it comes to discussions.", - "links": [] + "description": "Effective decision-making is crucial for architects to guide projects and organizations in the right direction. Focus on what’s important by emphasizing **conceptual integrity** (sticking to consistent decisions for simplicity and maintainability) and **uniformity** (ensuring standards like naming conventions are applied consistently). Prioritize critical decisions early to avoid costly workarounds or project delays, using tools like the Weighted Shortest Job First (WSJF) model for prioritization. Stay within your scope of competence to maintain credibility, collaborate with peers, and clarify responsibilities within the architectural hierarchy.\n\nWhen making decisions, evaluate multiple options to ensure thorough analysis and foster stakeholder confidence. Comparing options based on measurable criteria, such as cost or feasibility, leads to better, fact-driven decisions. This process not only supports sustainable outcomes but also prepares you with strong arguments during discussions, ensuring alignment across teams and stakeholders.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Decision Making - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Decision-making", + "type": "article" + } + ] }, "lrtgF1RTaS4TCKww0aY6C": { "title": "Simplifying Things", - "description": "Keep in mind the problem-solving principle Occam’s Razor which states to prefer simplicity. I interpret the principle as following: If you have too many assumptions about the problem to solve your solution will probably be wrong or lead to an unnecessary complex solution. Assumptions should be reduced (simplified) to come to a good solution.\n\n* **Shake the solution**: To get solutions simplified, it often helps to “shake” the solution and look at them from different positions. Try to shape the solution by thinking top-down and again bottom-up. If you have a data flow or process, then first think left to right and again right to left. Ask questions such as: “What happens to your solution in a perfect world?” Or: “What would company / person X do?” (Where X is probably not your competitor, but one of the GAFA (Google, Apple, Facebook, & Amazon) companies.) Both questions force you to reduce assumptions as suggested by Occam’s Razor.\n* **Take a step back**: After intense and long discussions, highly complex scribbles are often the results. You should never ever see these as the final results. Take a step back: Have a look at the big picture again (abstract level). Does it still make sense? Then go through it on the abstract level again and refactor. Sometimes it helps to stop a discussion and continue the next day. At least my brain needs some time to process and to come up with better, more elegant and simpler solutions.\n* **Divide and Conquer**: Simplify the problem by dividing it into smaller pieces. Then solve them independently. Afterwards validate if the small pieces match together. Take the step back to have a look at the overall picture for this.\n* **Refactoring is not evil**: It is totally ok to start with a more complex solution if no better idea can be found. If the solution is making troubles you can later rethink the solution and apply your learning. Refactoring is not evil. But before you start refactoring, keep in mind to have (1) enough automated tests in place which can ensure the proper functionality of the system and (2) the buy-in from your stakeholders. To learn more about refactoring I suggest reading “Refactoring. Improving the Design of Existing Code” by Martin Fowler.", - "links": [] + "description": "Simplifying solutions is critical for effective problem-solving, aligning with Occam’s Razor, which favors simplicity by reducing unnecessary assumptions. To achieve this, “shake” your solution by analyzing it from different perspectives and questioning its assumptions. After complex discussions, take a step back to review the big picture and refactor if needed, giving your brain time to process ideas. Apply the _divide and conquer_ method to break problems into smaller parts and validate their integration afterward. Finally, remember that refactoring is a valuable process to improve overly complex solutions, provided there’s adequate test coverage and stakeholder support.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Simplifying Things", + "url": "https://www.infoq.com/articles/driving-architectural-simplicity/", + "type": "article" + } + ] }, "77KvWCA1oHSGgDKBTwjv7": { "title": "How to Code", - "description": "Even as an Enterprise Architect, the most abstract level of architecture, you should still know what developers are doing on their daily basis. And if you do not understand how this is done, you may face two major problems:\n\n* Developers won’t accept your sayings.\n* You do not understand challenges and needs of developers.\n* **Have a side project**: The purpose of this is to try out new technologies and tools to find out how development is done today and in the future. Experience is the combination of observations, emotions and hypothesis (“Experience and Knowledge Management in Software Engineering” by Kurt Schneider). Reading a tutorial or some pros and cons is good. But this is just “book knowledge”. Only if you try out things by yourself you can experience emotions and can built up hypothesis about why something is good or bad. And the longer you work with a technology the better your hypothesis will get. This will help you to take better decisions in your day to day work. As I started programming I had no code completion and only some utility libraries to speed up development. Obviously, with this background I would make wrong decisions today. Today, we have tons of programming languages, frameworks, tools, processes and practices. Only if you have some experience and a rough overview in the major trends you are able to take part of the conversation and to steer development into the right direction.\n* **Find the right things to try out**: You cannot try out everything. This is simply impossible. You need a more structured approach. One source I recently discovered is the [Technology Radar](https://www.thoughtworks.com/radar) from ThoughtWorks. They categorize technologies, tools, platforms, languages and frameworks into four categories:\n * Adopt: “strong feeling to be ready for enterprise usage”.\n * Trial: “enterprise should try it in one project that can handle the risk”.\n * Assess: “explore how it affects your enterprise”\n * Hold: “process with caution”.\n\nWith this categorization it is easier to get an overview of new things and their readiness to better evaluate which trend to explore next.", - "links": [] + "description": "Even as an Enterprise Architect, staying connected to coding practices is essential to understand developers’ challenges and earn their trust. Maintaining a **side project** allows you to explore new technologies, tools, and methodologies hands-on, building practical experience beyond theoretical knowledge. This helps in forming informed decisions and keeping pace with evolving trends in development.\n\nTo prioritize what to explore, structured resources like ThoughtWorks’ Technology Radar can guide you. It categorizes technologies into **Adopt**, **Trial**, **Assess**, and **Hold**, helping architects focus on impactful and enterprise-ready innovations. Staying informed and involved ensures better collaboration and alignment with developers.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "How to Code", + "url": "https://www.thoughtworks.com/insights/blog/how-to-code", + "type": "article" + }, + { + "title": "Technology Radar", + "url": "https://www.thoughtworks.com/radar", + "type": "article" + } + ] }, "5D-kbQ520k1D3fCtD01T7": { "title": "Documentation", - "description": "Architectural documentation is sometimes more and sometimes less important. Important documents are for example architectural decisions or code guidelines. Initial documentation is often required before coding starts and need to be refined continuously. Other documentation can be automatically generated as code can also be documentation, e.g. UML class diagrams.\n\n* **Clean Code**: Code is the best documentation if done right. A good architect should be capable to distinguish between good and bad code. A really great resource to learn more about good and bad code is the book “Clean Code” by Robert C. Martin.\n* **Generate documentation where possible**: Systems are changing quickly and it is hard to update the documentation. Whether it is about APIs or system landscapes in form of CMDBs (Configuration management database): The underlying information often changes too fast to keep the corresponding documentation up to date by hand. Example: For APIs you could auto generate documentation based on the definition file if you are model driven, or directly from the source code. A lot of tools exist for that, I think Swagger and RAML are a good starting point to learn more.\n* **As much as necessary, as little as possible**: Whatever you need to document, e.g., decision papers, try to focus on only one thing at a time and include only the necessary information for this one thing. Extensive documentation is hard to read and to understand. Additional information should be stored in the appendix. Especially for decision papers it is more important to tell a convincing story instead of just throwing tons of arguments. Further, this saves you and your co-workers, who have to read it, a lot of time. Have a look at some documentation you have done in the past (source code, models, decision papers, etc.) and ask yourself the following questions: “Are all necessary information included to understand it?”, “Which information are really required and which could be omitted?” and “Does the documentation has a red line?”.\n* **Learn more about architecture frameworks**: This point could be applied to all other “technical” points as well. I put it here, as frameworks like TOGAF or Zachmann are providing “tools” which feel heavy on the documentation side, although their added value is not limited to documentation. Getting certified in such a framework teaches you to tackle architecture more systematically.", - "links": [] + "description": "Architectural documentation is sometimes more and sometimes less important. Important documents are for example architectural decisions or code guidelines. Initial documentation is often required before coding starts and need to be refined continuously. Other documentation can be automatically generated as code can also be documentation, e.g. UML class diagrams.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Documentation", + "type": "article" + }, + { + "title": "The Ultimate Guide To Software Architecture Documentation", + "url": "https://www.workingsoftware.dev/software-architecture-documentation-the-ultimate-guide/", + "type": "article" + } + ] }, "Ac49sOlQKblYK4FZuFHDR": { "title": "Communication", - "description": "From my observations this is one of the most underestimated skill. If you are brilliant in design but cannot communicate your ideas, your thoughts are likely to have less impact or even fail to succeed.\n\n* **Learn how to communicate your ideas**: When collaborating on a board or flip chart, it is essential to know how to use it properly in order to structure you and your peers’ thoughts. I found the book “UZMO — Thinking With Your Pen” to be a good resource to enhance my skills in this area. As an architect you usually do not only participating in a meeting, usually you need to drive the meeting and to moderate it.\n* **Give talks to large groups**: Presenting your ideas to a small or large group should be doable for you. If you feel uncomfortable with this, start presenting to your best friend. Enlarge the group slowly. This is something which you can only learn by doing and by leaving your personal comfort zone. Be patient with yourself, this process may take some time.\n* **Find the right level of communication**: Different stakeholders have different interests and views. They need to be addressed individually on their level. Before you communicate, step back and check if the information you want to share have the right level, regarding abstractness, content, goals, motivations, etc. Example: A developer is usually interested in the very little detail of the solution, whereas a manager prefers to know which option saves most money.\n* **Communicate often**: A brilliant architecture is worthless if nobody knows about it. Distribute the target architecture and the thoughts behind it, regularly and on every organizational level. Schedule meetings with developers, architects and managers to show them the desired or defined way.\n* **Be transparent**: Regular communication mitigates missing transparency only partially. You need to make the reason behind decisions transparent. Especially, if people are not involved in the decision-making process it is hard to understand and to follow the decision and rationale behind it.\n* **Be always prepared to give a presentation**: There is always someone with questions and you want to give the right answers immediately. Try to always have the most important slides in a consolidated set which you can show and explain. It saves you a lot of time and it gives security to yourself.", - "links": [] + "description": "From my observations this is one of the most underestimated skill. If you are brilliant in design but cannot communicate your ideas, your thoughts are likely to have less impact or even fail to succeed.\n\nCommunication is a critical yet often underestimated skill, especially for architects. It involves clearly conveying ideas, structuring discussions effectively, and driving meetings. Tools like “UZMO — Thinking With Your Pen” can enhance visual communication skills. Public speaking, whether to small or large groups, requires practice and stepping out of one’s comfort zone. Tailoring communication to the audience is essential—developers focus on details, while managers prioritize cost and outcomes. Regular, transparent communication ensures alignment across all levels, making the rationale behind decisions clear. Always being prepared with key slides and answers can boost confidence and efficiency during interactions.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Communication Skills", + "url": "https://en.wikipedia.org/wiki/Communication", + "type": "article" + } + ] }, "m0ZYdqPFDoHOPo18wKyvV": { "title": "Estimate and Evaluate", - "description": "* **Know basic project management principles**: As architect or lead developer you are often asked for estimates to realize your ideas: How long, how much, how many people, which skills, etc.? Of course, if you plan to introduce new tools or frameworks you need to have an answer for these kind of “management” questions. Initially, you should be able to give a rough estimate, like days, months or years. And do not forget that it is not only about implementing, there are more activities to consider, like requirements engineering, testing and fixing bugs. Therefore, you should know the activities the used software development process. One thing you can apply to get better estimates, is to use past data and derive your prediction from that. If you do not have past data, you can also try approaches such as COCOMO by Barry W. Boehm. If you are deployed in an agile project, learn how to estimate and to plan properly: The book “Agile Estimating and Planning” by Mike Cohn provides a solid overview in this area.\n* **Evaluate “unknown” architecture**: As architect you should also be able to evaluate the suitability of architectures for the current or future context(s). This is not an easy task but you can prepare for it by having a set of questions at hand which are common for every architecture. And it’s not only about architecture but also about how the system is managed, as this also gives you insights about the quality. I suggest to always have some questions prepared and ready to use. Some ideas for general questions:\n * Design practices: Which patterns does the architecture follow? Are they consequently and correctly used? Does the design follow a red line or is there an uncontrolled growth? Is there a clear structure and separation of concerns?\n * Development practices: Code guidelines in place and followed? How is the code versioned? Deployment practices?\n * Quality assurance: Test automation coverage? Static code analysis in place and good results? Peer reviews in place?\n * Security: Which security concepts are in place? Built-in security? Penetration tests or automated security analysis tools in place and regularly used?", - "links": [] + "description": "Estimation and evaluation are critical skills for architects and lead developers. Architects must understand basic project management principles to provide estimates for timelines, resources, and costs, considering all project phases like requirements, testing, and debugging. Using past data or models like COCOMO helps refine estimates. For agile projects, resources like _\"Agile Estimating and Planning\"_ by Mike Cohn can offer valuable guidance.\n\nEvaluating \"unknown\" architectures involves assessing their suitability for current and future contexts through prepared questions. These should cover design practices (e.g., patterns and structure), development practices (e.g., code guidelines and deployment), quality assurance (e.g., test automation and peer reviews), and security measures (e.g., built-in security and penetration tests). This structured approach ensures informed decisions and promotes robust, maintainable solutions.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Evaluating Software Architectures", + "url": "https://medium.com/oolooroo/evaluating-digital-architectures-a-deep-dive-into-modern-software-systems-analysis-dff3b0d2da8f", + "type": "article" + }, + { + "title": "How to Evaluate Software Architecture: Methods and Tools", + "url": "https://www.linkedin.com/advice/0/what-most-common-software-architecture-evaluation", + "type": "article" + } + ] }, "otHQ6ye1xgkI1qb4tEHVF": { "title": "Balance", - "description": "* **Quality comes at a price**: Earlier I talked about quality and non-functional requirements. If you overdo architecture it will increase costs and probably lower speed of development. You need to balance architectural and functional requirements. Over engineering should be avoided.\n* **Solve contradicting goals**: A classic example of contradicting goals are short- and long-term goals. Projects often tend to build the simplest solution whereas an architect has the long-term vision in mind. Often, the simple solution does not fit into the long-term solution and is at risk to be thrown away later (sunk costs). To avoid implementation into the wrong direction, two things need to be considered:\n 1. Developers and business need to understand the long term vision and their benefits in order to adapt their solution and\n 2. managers who are responsible for budget need to be involved to understand the financial impact. It is not necessary to have 100% of the long term vision in place directly, but the developed piece should fit into it.\n* **Conflict management**: Architects are often the glue between multiple groups with different backgrounds. This may lead to conflicts on different levels of communication. To find a balanced solution which also reflect long-term, strategic goals, it is often the role of architects to help overcome the conflict. My starting point regarding communication theory was the “Four-Ears Model” of Schulze von Thun. Based on this model a lot can be shown and deducted. But this theory needs some practice, which should be experienced during communication seminars.", - "links": [] + "description": "Achieving balance in architecture requires managing trade-offs between quality, cost, and development speed, avoiding over-engineering while aligning functional and non-functional requirements. Architects must navigate conflicting goals, like balancing short-term simplicity with long-term vision, ensuring solutions fit future needs while involving developers, businesses, and managers in understanding the financial and strategic impact. Additionally, architects often mediate between diverse groups, resolving conflicts and aligning strategies through effective communication, such as the “Four-Ears Model” by Schulze von Thun, which aids in fostering collaboration and achieving balanced, strategic outcomes.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Balance_(architecture)", + "type": "article" + } + ] }, "LSWlk9A3b6hco9Il_elao": { "title": "Consult & Coach", - "description": "Being pro-active is probably the best you can do when it comes to consulting and coaching. If you are asked, it is often too late. And cleaning up on the architecture site is something which you want to avoid. You need to somehow foresee the next weeks, months or even years and prepare yourself and the organization for the next steps.\n\n* **Have a vision**: If you are deployed in a project, whether it is a traditional waterfall like approach or agile, you always need to have a vision of your mid- and long-term goals you want to achieve. This is not a detailed concept, but more a road-map towards everyone can work. As you cannot achieve everything at once (it is a journey) I prefer to use maturity models. They give a clear structure which can be easily consumed and give the current status of progress at every time. For different aspects I use different models, e.g. development practices or continuous delivery. Every level in the maturity model has clear requirements which follow the SMART criteria in order to ease measuring if you have achieved it or not. One nice example I found is for continues delivery.\n* **Build a community of practice (CoP)**: Exchanging experience and knowledge among a common interest group helps distributing ideas and standardizing approaches. For example you could gather all JavaScript developer and architects in one room, every three months or so, and discuss past and current challenges and how they were tackled or new methodologies and approaches. Architects can share, discuss and align their visions, developers can share experience and learn from their peers. Such a round can be highly beneficial for the enterprise but also for the individual itself, as it helps building a stronger network and distributes ideas. Also check out the article Communities of Practice from the SAFe Framework which explains the CoP concept in an agile setting.\n* **Conduct open door sessions**: One source of misconceptions or ambiguity is lack of communication. Block a fixed time slot, e.g. 30 min every week, for exchanging hot topics with your peers. This session has no agenda everything can be discussed. Try to solve minor things on the spot. Schedule follow-ups on the more complex topics.", - "links": [] + "description": "Proactive consulting and coaching are essential to prevent architectural issues from escalating. Architects must anticipate future needs and prepare the organization by setting a clear vision of mid- and long-term goals, often using maturity models to provide structure and measure progress against SMART criteria. Building a **Community of Practice (CoP)** fosters collaboration, standardization, and knowledge sharing among professionals with shared interests, such as developers and architects, enhancing individual and organizational growth. Open-door sessions, held regularly without a strict agenda, encourage open communication, resolve minor issues promptly, and address complex topics through follow-ups, reducing misconceptions and ambiguity.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Consulting", + "type": "article" + } + ] }, "YW6j3Sg511dXToTcwSnOS": { "title": "Marketing Skills", - "description": "Your ideas are great and you have communicated them well but still nobody wants to follow? Then you probably lack marketing skills.\n\n* **Motivate and convince**: How do companies convince you of buying a product? They demonstrate its value and benefits. But not just with 5 bullet points. They wrap it nicely and make it as easy as possible to digest.\n * Prototypes: Show a prototype of your idea. There are plenty of tools for creating prototypes. In the context of enterprises who love SAP check out [build.me](http://build.me) in which you can create nice looking and clickable UI5 apps fast and easy.\n * Show a video: Instead of “boring slides” you can also show a video which demonstrates your idea or at least the direction. But please, don’t overdo marketing: In the long term, content is king. If your words do not come true, this will damage your reputation in the long term.\n* **Fight for your ideas and be persistent**: People sometime do not like your ideas or they are just too lazy to follow them. If you are really convinced by your ideas, you should continuously go after them and “fight”. This is sometimes necessary. Architecture decisions with long term goals are often not the easiest one’s: Developers do not like them, as they are more complex to develop. Managers do not like them, as they are more expensive in the short term. This is your job to be persistent and to negotiate.\n* **Find allies**: Establishing or enforcing your ideas on your own can be hard or even impossible. Try to find allies who can support and help convincing others. Use your network. If you do not have one yet, start building it now. You could start by talking to your (open-minded) peers about your ideas. If they like it, or at least parts of it, it is likely that they support your idea if asked by others (“The idea by X was interesting.”). If they don’t like it, ask for the why: Maybe you have missed something? Or your story is not convincing enough? Next step is to find allies with decision power. Ask for an open-minded discussion. If you fear the discussion, remember that sometimes you need to leave your comfort zone.\n* **Repeat It, Believe It**: “\\[…\\] studies show that repeated exposure to an opinion makes people believe the opinion is more prevalent, even if the source of that opinion is only a single person.” (Source: The Financial Brand) If you publish few messages often enough, it can help to convince people more easily. But be aware: From my perspective such a strategy should be used wisely as it could backfire as a lousy marketing trick.", - "links": [] + "description": "Marketing skills are essential for promoting your ideas effectively, especially when others may not immediately embrace them. To convince others, it's crucial to motivate them by demonstrating the value and benefits of your ideas in an easily digestible format, such as through prototypes or videos. Persistence is key; if you're convinced of your idea’s worth, you need to fight for it, even if it's met with resistance. Establishing allies who support your ideas can also make it easier to gain traction, so start building a network. Repeating your message regularly can help, but be cautious not to overdo it, as credibility is essential for long-term success.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Marketing Skills for Architects", + "url": "https://openasset.com/blog/marketing-for-architects/", + "type": "article" + } + ] }, "hFx3mLqh5omNxqI9lfaAQ": { "title": "Technical Skills", @@ -139,12 +249,18 @@ }, "uoDtVFThaV6OMK2wXGfP5": { "title": "Programming Languages", - "description": "", - "links": [] + "description": "A programming language is a system of notation for writing computer programs. Programming languages are described in terms of their syntax and semantics, usually defined by a formal language. Languages usually provide features such as a type system, variables, and mechanisms for error handling.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Programming Language", + "url": "https://en.wikipedia.org/wiki/Programming_language", + "type": "article" + } + ] }, "a5DB_hsD4bAf8BtHNFNPo": { "title": "Java / Kotlin / Scala", - "description": "Visit the following resources to learn more:", + "description": "* **Java**: Java is a widely-used, object-oriented programming language known for its platform independence, reliability, and scalability. It’s commonly used for building large-scale enterprise applications, Android development, and web services. Java’s extensive libraries, frameworks, and strong community support make it a popular choice for developers.\n \n* **Scala**: Scala is a statically-typed programming language that combines object-oriented and functional programming paradigms. It runs on the Java Virtual Machine (JVM) and is known for its concise syntax, expressive power, and compatibility with Java. Scala is often used in data engineering, backend services, and applications requiring high concurrency.\n \n* **Kotlin**: Kotlin is a modern, statically-typed programming language designed to be fully interoperable with Java while offering more concise and expressive syntax. It is particularly popular for Android development due to its simplicity and safety features, such as null safety, and is gaining traction in backend development as well.\n \n\nVisit the following resources to learn more:", "links": [ { "title": "Visit Dedicated Java Roadmap", @@ -152,23 +268,28 @@ "type": "article" }, { - "title": "Java Basics", - "url": "https://www.w3schools.com/java/", + "title": "Scala", + "url": "https://www.scala-lang.org/", + "type": "article" + }, + { + "title": "Scala Documentation", + "url": "https://docs.scala-lang.org/", "type": "article" }, { - "title": "Learn the basics of Kotlin", - "url": "https://blog.teamtreehouse.com/absolute-beginners-guide-kotlin", + "title": "Kotlin", + "url": "https://kotlinlang.org/", "type": "article" }, { - "title": "Kotlin Docs", - "url": "https://kotlinlang.org/docs/reference/basic-syntax.html", + "title": "Kotlin Documentation", + "url": "https://kotlinlang.org/docs/home.html", "type": "article" }, { - "title": "Scala Tutorial", - "url": "https://docs.scala-lang.org/tour/basics.html", + "title": "Java", + "url": "https://www.java.com/", "type": "article" }, { @@ -224,7 +345,7 @@ "description": "Ruby is a high-level, interpreted programming language that blends Perl, Smalltalk, Eiffel, Ada, and Lisp. Ruby focuses on simplicity and productivity along with a syntax that reads and writes naturally. Ruby supports procedural, object-oriented and functional programming and is dynamically typed.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Ruby Website", + "title": "Ruby", "url": "https://www.ruby-lang.org/en/", "type": "article" }, @@ -278,7 +399,7 @@ }, "bhP5gMpRVebSFpCeHVXBj": { "title": "JavaScript / TypeScript", - "description": "JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on. Apart from being used on the frontend in browsers, there is Node.js which is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a web browser.\n\nVisit the following resources to learn more:", + "description": "JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on. Apart from being used on the frontend in browsers, there is Node.js which is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a web browser. TypeScript adds optional types to JavaScript that support tools for large-scale JavaScript applications for any browser, for any host, on any OS. TypeScript compiles to readable, standards-based JavaScript.\n\nVisit the following resources to learn more:", "links": [ { "title": "Visit Dedicated JavaScript Roadmap", @@ -286,33 +407,23 @@ "type": "article" }, { - "title": "W3Schools – JavaScript Tutorial", - "url": "https://www.w3schools.com/js/", - "type": "article" - }, - { - "title": "The Modern JavaScript Tutorial", - "url": "https://javascript.info/", + "title": "Visit Dedicated TypedScript Roadmap", + "url": "https://roadmap.sh/typescript", "type": "article" }, { - "title": "Official Website", + "title": "TypeScript", "url": "https://www.typescriptlang.org/", "type": "article" }, { - "title": "Official Docs for Deep Dives", + "title": "TypeScript Docs for Deep Dives", "url": "https://www.typescriptlang.org/docs/", "type": "article" }, { - "title": "The TypeScript Handbook", - "url": "https://www.typescriptlang.org/docs/handbook/intro.html", - "type": "article" - }, - { - "title": "TypeScript Tutorial", - "url": "https://www.tutorialspoint.com/typescript/index.htm", + "title": "The Modern JavaScript Tutorial", + "url": "https://javascript.info/", "type": "article" }, { @@ -393,12 +504,17 @@ "description": "Object-oriented programming (OOP) is a computer programming model that organizes software design around data, or objects, rather than functions and logic. An object can be defined as a data field that has unique attributes and behavior.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Basic concepts of object-oriented programming", + "title": "OOP - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Object-oriented_programming", + "type": "article" + }, + { + "title": "Basic Concepts of Object-Oriented Programming", "url": "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_programming", "type": "article" }, { - "title": "w3schools - OOP Concepts", + "title": "W3schools - OOP Concepts", "url": "https://www.w3schools.com/java/java_oop.asp", "type": "article" }, @@ -563,11 +679,11 @@ }, "ZEzYb-i55hBe9kK3bla94": { "title": "Git", - "description": "Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.\n\nVisit the following resources to learn more:", + "description": "Git is a distributed version control system designed to handle projects of any size with speed and efficiency. Created by Linus Torvalds in 2005, Git tracks changes in source code during software development, allowing multiple developers to work together on non-linear development. It provides strong support for branching, merging, and distributed development workflows. Git maintains a complete history of all changes, enabling easy rollbacks and comparisons between versions. Its distributed nature means each developer has a full copy of the repository, allowing for offline work and backup. Git's speed, flexibility, and robust branching and merging capabilities have made it the most widely used version control system in software development, particularly for open-source projects.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Git with Tutorials, News and Tips - Atlassian", - "url": "https://www.atlassian.com/git", + "title": "Visit Dedicated Git & Github Roadmap", + "url": "https://roadmap.sh/git-github", "type": "article" }, { @@ -575,6 +691,11 @@ "url": "https://cs.fyi/guide/git-cheatsheet", "type": "article" }, + { + "title": "Tutorial: Git for Absolutely Everyone", + "url": "https://thenewstack.io/tutorial-git-for-absolutely-everyone/", + "type": "article" + }, { "title": "Explore top posts about Git", "url": "https://app.daily.dev/tags/git?ref=roadmapsh", @@ -597,7 +718,7 @@ "type": "article" }, { - "title": "Getting Started", + "title": "Getting Started with Slack", "url": "https://slack.com/intl/en-in/help/categories/360000049043", "type": "article" }, @@ -636,7 +757,7 @@ }, "3bpd0iZTd3G-H8A7yrExY": { "title": "Atlassian Tools", - "description": "The Jira platform is, at its core, our workflow engine that allows you to track issues or tasks through a predefined and customizable workflow. These tasks can be organized by project, allowing for the entirety of your organization to track their issues at a project level with complete transparency using granular user permissions.\n\n### Jira Service Desk\n\nJira Service Desk is for teams who receive incoming issues/requests from other teams/customers. Jira Service Desk is designed specifically for end-users to submit tickets to a help desk team.\n\n### Jira Core\n\nJira Core takes this workflow engine and caters it for business teams to develop organized, easy to use, task-oriented projects. Whether the tasks are a simple to-do list or a robust 7 step workflow with complex transitions, Jira Core is built to accommodate all of your requirements. Jira Core is an excellent solution for business teams, legal teams, HR teams, non-technical teams, marketing teams, financial teams, operation teams, and more.\n\n### Confluence\n\nConfluence is a collaboration wiki used to help teams collaborate and share knowledge efficiently. It acts as your document collaboration and repository as it keeps full tracking of what changed in each document, when, and by whom to keep an 'audit' trail. Team members can create, share, and collaborate on content.\n\n### Bitbucket\n\nBitbucket Server is the on-premises Git repository management solution for enterprise teams. It allows everyone in your organization to easily collaborate on your Git repositories.\n\n### Statuspage\n\nStatuspage helps teams inform customers and end-users about outages and scheduled maintenance. Statuspage is the communication piece of your incident management process. Keep users in the loop from 'investigating' through 'resolved'.\n\n### Opsgenie\n\nOpsgenie is a modern incident management solution for operating always-on services that enable dev and ops teams to stay aware and in control of alerts and incidents.\n\n### Advanced Roadmaps for Jira\n\nAdvanced Roadmaps is a Jira Software Cloud Premium feature that's designed to help multiple teams collaborate together, track the big picture, identify dependencies across large pieces of work, and plan for team capacity.\n\nAdvanced Roadmaps is available as a standalone app for Jira Software Server and Data Center.\n\n### Jira Align\n\nJira Align is an Enterprise Agile Planning platform that helps improve visibility, strategic alignment, and enterprise adaptability in order to accelerate your digital transformation.\n\nVisit the following resources to learn more:", + "description": "Atlassian tools offer a suite of solutions designed to streamline collaboration, project management, and incident handling for various teams. Jira serves as the core workflow engine, allowing organizations to track tasks through customizable workflows with granular permissions. Specialized tools like Jira Service Desk cater to help desk teams for managing incoming requests, while Jira Core enables business teams to organize and execute task-oriented projects across departments like marketing, HR, and operations. For enhanced collaboration, Confluence acts as a knowledge-sharing wiki, allowing teams to create, share, and audit content changes seamlessly. Bitbucket provides Git repository management for enterprise teams, fostering efficient collaboration on codebases.\n\nOther tools cater to more specific needs. **Statuspage** focuses on communication during outages or maintenance, keeping users informed from investigation to resolution. **Opsgenie** ensures smooth incident management for always-on services, helping dev and ops teams stay in control of alerts. **Advanced Roadmaps** for Jira assists multiple teams in capacity planning and dependency tracking, while **Jira Align** supports enterprise-level agile planning to align strategy with execution and drive digital transformation. Together, these tools empower teams to improve efficiency, transparency, and adaptability across various workflows.\n\nVisit the following resources to learn more:", "links": [ { "title": "Jira Service Desk", @@ -687,12 +808,22 @@ }, "PyTuVs08_z4EhLwhTYzFu": { "title": "GitHub", - "description": "GitHub is a provider of Internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features.\n\nVisit the following resources to learn more:", + "description": "GitHub has become a central hub for open-source projects and is widely used by developers, companies, and organizations for both private and public repositories. It was acquired by Microsoft in 2018 but continues to operate as a relatively independent entity. GitHub's popularity has made it an essential tool in modern software development workflows and a key platform for showcasing coding projects and contributing to open-source software.\n\nVisit the following resources to learn more:", "links": [ { - "title": "GitHub Website", + "title": "Visit Dedicated Git & Github Roadmap", + "url": "https://roadmap.sh/git-github", + "type": "article" + }, + { + "title": "GitHub", "url": "https://github.com", - "type": "opensource" + "type": "article" + }, + { + "title": "GitHub: Quickstart", + "url": "https://docs.github.com/en/get-started/quickstart/hello-world", + "type": "article" }, { "title": "GitHub Documentation", @@ -700,8 +831,8 @@ "type": "article" }, { - "title": "How to Use Git in a Professional Dev Team", - "url": "https://ooloo.io/project/github-flow", + "title": "Learn GitHub by doing", + "url": "https://skills.github.com/", "type": "article" }, { @@ -713,32 +844,23 @@ "title": "What is GitHub?", "url": "https://www.youtube.com/watch?v=w3jLJU7DT5E", "type": "video" - }, - { - "title": "Git vs. GitHub: Whats the difference?", - "url": "https://www.youtube.com/watch?v=wpISo9TNjfU", - "type": "video" - }, - { - "title": "Git and GitHub for Beginners", - "url": "https://www.youtube.com/watch?v=RGOj5yH7evk", - "type": "video" - }, - { - "title": "Git and GitHub - CS50 Beyond 2019", - "url": "https://www.youtube.com/watch?v=eulnSXkhE7I", - "type": "video" } ] }, "SuMhTyaBS9vwASxAt39DH": { "title": "Tools", - "description": "", - "links": [] + "description": "Architect tools are software tools that help architects to design, document, and manage software architectures. These tools can be used to create architecture diagrams, generate code, and automate the software development process.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Top 10 Software Architecture Tools in 2024", + "url": "https://www.geeksforgeeks.org/software-architecture-tools/", + "type": "article" + } + ] }, "OaLmlfkZid7hKqJ9G8oNV": { "title": "Architecture", - "description": "", + "description": "Architecture refers to the approach of designing and implementing software architecture with a focus on the tools and technologies that will be used during the development process. This perspective emphasizes that the selection of tools can significantly influence architectural decisions and the overall design of the system.", "links": [] }, "FAXKxl3fWUFShYmoCsInZ": { @@ -764,7 +886,7 @@ }, "mka_DwiboH5sGFhXhk6ez": { "title": "Client / Server", - "description": "Visit the following resources to learn more:", + "description": "Client-server architecture is a computing model that separates tasks or workloads between service providers (servers) and service requesters (clients). This architecture is widely used in networked applications, including web applications, where clients interact with servers to access resources, services, and data.\n\nVisit the following resources to learn more:", "links": [ { "title": "What is Client-Server Architecture", @@ -780,18 +902,29 @@ }, "05hLO2_A8Tr6cLJGFRhOh": { "title": "Layered", - "description": "Layered architecture is a software design pattern in which an application is composed of several layers or tiers. Each layer has a specific responsibility and communicates with the other layers through well-defined interfaces. This modular approach to software design allows for easier maintenance and testing, and also makes it possible to reuse components in different applications.\n\nThe most common type of layered architecture is the three-tier architecture, which is typically composed of a presentation layer, a business logic layer, and a data access layer. The presentation layer is responsible for displaying data to the user and receiving user input. The business logic layer contains the core business logic and rules of the application, and the data access layer is responsible for accessing and manipulating data in the database.\n\nLayered architecture is a common approach to designing scalable and maintainable software systems, and it is often used in enterprise-level applications.\n\nWhile layered architecture has many benefits, it also has some drawbacks that should be considered. These include the following:\n\n* Complexity: Layered architecture can add complexity to an application, especially if it is not implemented carefully. This can make the application more difficult to understand and maintain.\n \n* Performance: Layered architecture can potentially impact the performance of an application, because data has to be passed between the different layers. This can be especially problematic if the application has a large number of layers or if the layers are not optimized for performance.\n \n* Tight coupling: If the layers in a layered architecture are not well-defined and loosely coupled, changes to one layer can potentially affect other layers, which can lead to maintainability issues.\n \n* Overhead: Layered architecture can add overhead to an application, because data has to be passed between the different layers. This can potentially impact the performance and scalability of the application.\n \n\nOverall, while layered architecture has many benefits, it is important to carefully consider the potential drawbacks and make sure that the benefits outweigh the costs in your specific application.", - "links": [] + "description": "Layered architecture is a software design pattern where an application is divided into distinct layers, each with a specific responsibility, such as presentation, business logic, and data access. This approach promotes modularity, easier maintenance, testing, and component reusability. The most common implementation is the three-tier architecture, which separates concerns between the user interface, business rules, and data handling. However, it can introduce complexity, performance issues, tight coupling, and overhead if not carefully implemented. Despite these challenges, layered architecture is widely used in scalable and maintainable systems, particularly in enterprise applications.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Layered_architecture", + "type": "article" + } + ] }, "j7OP6RD_IAU6HsyiGaynx": { "title": "Distributed Systems", - "description": "Visit the following resources to learn more:", + "description": "Distributed systems are a type of computing architecture where components located on networked computers communicate and coordinate their actions by passing messages. These systems are designed to work together to achieve a common goal, often providing services or processing data in a collaborative manner.\n\nVisit the following resources to learn more:", "links": [ { "title": "Free Distributed Systems book from Maarten van Steen", "url": "https://www.distributed-systems.net/index.php/books/ds3/", "type": "article" }, + { + "title": "Distributed Architectures", + "url": "https://estuary.dev/distributed-architecture/", + "type": "article" + }, { "title": "Explore top posts about Architecture", "url": "https://app.daily.dev/tags/architecture?ref=roadmapsh", @@ -812,13 +945,29 @@ }, "IzFTn5-tQuF_Z0cG_w6CW": { "title": "Security", - "description": "", - "links": [] + "description": "Security is a broad field that encompasses various measures and practices designed to protect information, systems, and networks from unauthorized access, damage, or theft. It is essential in safeguarding sensitive data and maintaining the integrity and availability of resources.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Security - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Security", + "type": "article" + }, + { + "title": "Architect Security", + "url": "https://aws.amazon.com/blogs/architecture/lets-architect-security-in-software-architectures/", + "type": "article" + } + ] }, "7tBAD0ox9hTK4D483GTRo": { "title": "Hashing Algorithms", "description": "Hashing algorithms are used to generate a unique value for a given input. This value is called a hash. Hashing algorithms are used to verify the integrity of data, to store passwords, and to generate unique identifiers for data.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "What is Hashing?", + "url": "https://www.codecademy.com/resources/blog/what-is-hashing/", + "type": "article" + }, { "title": "Explore top posts about Algorithms", "url": "https://app.daily.dev/tags/algorithms?ref=roadmapsh", @@ -843,8 +992,19 @@ }, "OpL2EqvHbUmFgnpuhtZPr": { "title": "PKI", - "description": "A public key infrastructure (PKI) is a set of roles, policies, hardware, software, and procedures to create, manage, distribute, use, store and revoke digital certificates and public-key encryption. The purpose of a PKI is to facilitate the secure electronic transfer of information for a range of network activities such as e-commerce, internet banking, and confidential email. It is required for activities where simple passwords are an inadequate authentication method, and the more rigorous proof is required to confirm the identity of the parties involved in the communication and to validate the information being transferred.\n\n### Components of PKI\n\n* **Digital certificates:** digital \"identities\" issued by trusted third parties, that identify users and machines. They may be securely stored in wallets or in directories.\n* **Public and private keys:** form the basis of a PKI for secure communications, based on a secret private key and a mathematically related public key\n* **Secure sockets layer (SSL):** An Internet-standard secure protocol\n* **Certificate Authority (CA):** acts as a trusted, independent provider of digital certificates\n\n### What is PKI used for?\n\n* Providing a recovery key for an encrypted hard drive\n* Securing internal communications with database servers\n* Signing documents\n* Securing local networks: PKI capacities are built into Microsoft's Active Directory, for instance, and can work with physical keycards that store digital certificates to ensure that users are who they say they are.\n* Secure messaging: the Signal protocol uses PKI, for instance\n* Email Encryption\n* Securing access to internet of things (IoT) devices\n\n### Advantages of the PKI Approach\n\n* PKI is a standards-based technology.\n* It allows the choice of trust provider.\n* It is highly scalable. Users maintain their own certificates, and certificate authentication only involves the data exchange between the client and server. This means that no third-party authentication server needs to be online. There is, thus, no limit to the number of users who can be supported using PKI.\n* PKI allows delegated trust. A user who has obtained a certificate from a recognized and trusted certificate authority can authenticate himself to a server the first time he connects to that server without having previously been registered with the system.\n* Although PKI is not notably a single sign-on service, it can be implemented in such a way as to enable single sign-on.", - "links": [] + "description": "A public key infrastructure (PKI) is a set of roles, policies, hardware, software, and procedures to create, manage, distribute, use, store and revoke digital certificates and public-key encryption. The purpose of a PKI is to facilitate the secure electronic transfer of information for a range of network activities such as e-commerce, internet banking, and confidential email. It is required for activities where simple passwords are an inadequate authentication method, and the more rigorous proof is required to confirm the identity of the parties involved in the communication and to validate the information being transferred.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "PKI - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Public_key_infrastructure", + "type": "article" + }, + { + "title": "PKI - DoD Cyber Exchange", + "url": "https://public.cyber.mil/pki-pke/", + "type": "article" + } + ] }, "KhqUK-7jdClu9M2Pq7x--": { "title": "OWASP", @@ -874,7 +1034,7 @@ }, "KiwFXB6yd0go30zAFMTJt": { "title": "Auth Strategies", - "description": "Visit the following resources to learn more:", + "description": "Authentication strategies are essential for ensuring secure access to applications and systems. They define how users are verified before being granted access to resources. Here are some common authentication strategies:\n\nPassword-Based Authentication\n\nMulti-Factor Authentication (MFA)\n\nOAuth and OpenID Connect\n\nToken-Based Authentication:\n\nBiometric Authentication\n\nCertificate-Based Authentication\n\nVisit the following resources to learn more:", "links": [ { "title": "JSON Web Token - Handbook", @@ -892,7 +1052,7 @@ "type": "video" }, { - "title": "A Devlopers Guide to SAML", + "title": "A Developers Guide to SAML", "url": "https://www.youtube.com/watch?v=l-6QSEqDJPo", "type": "video" }, @@ -915,13 +1075,24 @@ }, "YCJYRA3b-YSm8vKmGUFk5": { "title": "Working with Data", - "description": "", - "links": [] + "description": "Working with databases involves storing, managing, and retrieving data efficiently to support applications and business processes. Databases can be relational, like MySQL and PostgreSQL, which use structured tables and SQL for querying, or non-relational (NoSQL), like MongoDB and Cassandra, which handle unstructured or semi-structured data. Effective database management requires designing normalized schemas for relational databases, ensuring data integrity, and optimizing queries for performance. For NoSQL databases, it's important to choose the right type (e.g., document, key-value, columnar) based on application needs. Additionally, managing transactions, indexing, backups, and security are crucial for maintaining reliable and scalable database systems.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Introduction to Databases", + "url": "https://www.digitalocean.com/community/conceptual-articles/an-introduction-to-databases", + "type": "article" + } + ] }, "92GG4IRZ3FijumC94aL-T": { "title": "Hadoop, Spark, MapReduce", - "description": "[Apache Spark](https://spark.apache.org/) is a data processing framework that can quickly perform processing tasks on very large data sets, and can also distribute data processing tasks across multiple computers, either on its own or in tandem with other distributed computing tools.\n\nHadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.\n\nVisit the following resources to learn more:", + "description": "Spark is a data processing framework that can quickly perform processing tasks on very large data sets, and can also distribute data processing tasks across multiple computers, either on its own or in tandem with other distributed computing tools.\n\nHadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Apache Spark", + "url": "https://spark.apache.org/", + "type": "article" + }, { "title": "Spark vs Hadoop MapReduce", "url": "https://www.integrate.io/blog/apache-spark-vs-hadoop-mapreduce", @@ -941,7 +1112,7 @@ }, "JUFE4OQhnXOt1J_MG-Sjf": { "title": "ETL, Datawarehouses", - "description": "In the world of data warehousing, if you need to bring data from multiple different data sources into one, centralized database, you must first:\n\n* **EXTRACT** data from its original source\n* **TRANSFORM** data by deduplicating it, combining it, and ensuring quality, to then\n* **LOAD** data into the target database\n\nETL tools enable data integration strategies by allowing companies to gather data from multiple data sources and consolidate it into a single, centralized location. ETL tools also make it possible for different types of data to work together.\n\nVisit the following resources to learn more:", + "description": "ETL (Extract, Transform, Load) is a key process in data warehousing, enabling the integration of data from multiple sources into a centralized database. The process begins by **extracting** data from original sources, followed by **transforming** it to ensure quality, deduplication, and combination, and finally **loading** it into the target database. ETL tools streamline this process, allowing companies to consolidate diverse data types and ensure seamless integration for effective data analysis and decision-making.\n\nVisit the following resources to learn more:", "links": [ { "title": "What is ETL?", @@ -954,7 +1125,7 @@ "type": "article" }, { - "title": "ETL explained", + "title": "ETL Explained", "url": "https://www.youtube.com/watch?v=OW5OgsLpDCQ", "type": "video" } @@ -962,8 +1133,18 @@ }, "n5AcBt_u8qtTe3PP9svPZ": { "title": "SQL Databases", - "description": "SQL stands for Structured Query Language. It's used for relational databases. A SQL database is a collection of tables that stores a specific set of structured data.\n\nExamples of SQL Databases\n\n* MariaDB and MySQL\n* PostgreSQL\n\nVisit the following resources to learn more:", + "description": "SQL stands for Structured Query Language. It's used for relational databases. A SQL database is a collection of tables that stores a specific set of structured data. Examples of SQL Databases includes MariaDB, MySQL and PostgreSQL.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Visit Dedicated SQL Roadmap", + "url": "https://roadmap.sh/sql", + "type": "article" + }, + { + "title": "What is SQL? - AWS", + "url": "https://aws.amazon.com/what-is/sql/", + "type": "article" + }, { "title": "SQL Databases", "url": "https://www.openlogic.com/blog/what-sql-database", @@ -980,9 +1161,14 @@ "title": "NoSQL Databases", "description": "NoSQL databases (aka \"not only SQL\") are non-tabular databases and store data differently than relational tables. NoSQL databases come in a variety of types based on their data model. The main types are document, key-value, wide-column, and graph. They provide flexible schemas and scale easily with large amounts of data and high user loads.\n\nTypes of NoSQL databases\n\n* Document databases Ex. MongoDB\n* Key-value databases Ex. Redis\n* Wide-column databases Ex. Cassandra\n* Graph databases Ex. Neo4J\n\nVisit the following resources to learn more:", "links": [ + { + "title": "NoSQL Database - AWS", + "url": "https://aws.amazon.com/nosql/", + "type": "article" + }, { "title": "NoSQL Databases", - "url": "https://www.mongodb.com/nosql-explained", + "url": "https://www.mongodb.com/resources/basics/databases/nosql-explained", "type": "article" }, { @@ -997,7 +1183,7 @@ "description": "Apache Spark is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Apache Spark", "url": "https://spark.apache.org/", "type": "article" }, @@ -1013,10 +1199,15 @@ "description": "The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Apache Hadoop", "url": "https://hadoop.apache.org/", "type": "article" }, + { + "title": "Apache Hadoop - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Apache_Hadoop", + "type": "article" + }, { "title": "Explore top posts about Apache Hadoop", "url": "https://app.daily.dev/tags/apache-hadoop?ref=roadmapsh", @@ -1037,12 +1228,28 @@ }, "Ocn7-ctpnl71ZCZ_uV-uD": { "title": "APIs & Integrations", - "description": "", - "links": [] + "description": "APIs (Application Programming Interfaces) are essential for enabling communication between different software applications, allowing them to share data and functionality seamlessly. They serve as the bridge that connects disparate systems, making it possible for applications to interact without needing to know the internal workings of one another. Integration, on the other hand, refers to the process of connecting these systems to work together effectively, often utilizing APIs to facilitate data exchange and process automation. By leveraging APIs in integrations, organizations can enhance operational efficiency, reduce data silos, and improve user experiences through seamless data flow between applications.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is API Integration", + "url": "https://www.ibm.com/topics/api-integration", + "type": "article" + }, + { + "title": "API Integration - Postman", + "url": "https://www.postman.com/api-platform/api-integration/", + "type": "article" + }, + { + "title": "API First Integration", + "url": "https://www.infoq.com/articles/api-first-integration/", + "type": "article" + } + ] }, "priDGksAvJ05YzakkTFtM": { "title": "gRPC", - "description": "gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first.\n\nIt's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#.\n\ngRPC uses the protocol buffer language to define the structure of the data that is\n\nVisit the following resources to learn more:", + "description": "gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first.\n\nIt's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#. gRPC uses the protocol buffer language to define the structure of the data that is\n\nVisit the following resources to learn more:", "links": [ { "title": "gRPC Website", @@ -1073,22 +1280,58 @@ }, "fELnBA0eOoE-d9rSmDJ8l": { "title": "ESB, SOAP", - "description": "", - "links": [] + "description": "ESB (Enterprise Service Bus) and SOAP (Simple Object Access Protocol) are two technologies that enable communication between different systems. ESB is a software architecture that allows for the integration of various systems, such as databases, web services, and mobile applications. SOAP is a messaging protocol that enables the exchange of structured data between systems over the internet.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Understanding SOAP: The Old Guard of Web Services", + "url": "https://mariomthree.medium.com/understanding-soap-the-old-guard-of-web-services-6ca89d8ec312", + "type": "article" + }, + { + "title": "Enterprise Service Bus", + "url": "https://en.wikipedia.org/wiki/Enterprise_service_bus", + "type": "article" + }, + { + "title": "ESB - IBM", + "url": "https://www.ibm.com/topics/esb", + "type": "article" + } + ] }, "Sp3FdPT4F9YnTGvlE_vyq": { "title": "GraphQL", - "description": "GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.\n\nVisit the following resources to learn more:", + "description": "GraphQL is a query language and runtime for APIs, developed by Facebook. GraphQL's flexibility and efficiency make it popular for building complex applications, especially those with diverse client requirements. It's particularly useful for mobile applications where bandwidth efficiency is crucial. While it requires a paradigm shift from REST, many developers and organizations find GraphQL's benefits outweigh the learning curve, especially for large-scale or rapidly evolving APIs.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Apollo GraphQL Tutorials", - "url": "https://www.apollographql.com/tutorials/", + "title": "visit Dedicated GraphQL Roadmap", + "url": "https://roadmap.sh/graphql", + "type": "article" + }, + { + "title": "Introduction to GraphQL", + "url": "https://graphql.org/learn/", + "type": "article" + }, + { + "title": "Introduction to GraphQL", + "url": "https://thenewstack.io/introduction-to-graphql/", + "type": "article" + }, + { + "title": "How to Execute a Simple GraphQL Query", + "url": "https://thenewstack.io/how-to-execute-a-simple-graphql-query/", "type": "article" }, { "title": "Explore top posts about GraphQL", "url": "https://app.daily.dev/tags/graphql?ref=roadmapsh", "type": "article" + }, + { + "title": "GraphQL Course for Beginners", + "url": "https://www.youtube.com/watch?v=ed8SzALpx1Q", + "type": "video" } ] }, @@ -1157,13 +1400,24 @@ }, "j9Y2YbBKi3clO_sZ2L_hQ": { "title": "Web, Mobile", - "description": "", - "links": [] + "description": "Web apps and mobile apps are two distinct types of software applications designed to run on different platforms. Web apps are accessed through web browsers and run on various devices using internet connectivity. They are platform-independent, making them easy to update and maintain, but often require an active internet connection. Mobile apps, on the other hand, are specifically developed for mobile operating systems like Android and iOS, providing enhanced performance, offline functionality, and seamless access to device features such as GPS, cameras, and sensors. While web apps prioritize accessibility and cost-effectiveness, mobile apps focus on delivering a tailored and optimized user experience.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Web vs Mobile", + "url": "https://buildfire.com/difference-between-web-app-and-mobile-app/", + "type": "article" + } + ] }, "6FDGecsHbqY-cm32yTZJa": { "title": "Functional Programming", "description": "Functional programming is a programming paradigm designed to handle pure mathematical functions. This paradigm is totally focused on writing more compounded and pure functions.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Functional Programming", + "url": "https://en.wikipedia.org/wiki/Functional_programming", + "type": "article" + }, { "title": "Functional Programming with JavaScript", "url": "https://www.telerik.com/blogs/functional-programming-javascript", @@ -1178,7 +1432,7 @@ }, "mCiYCbKIOVU34qil_q7Hg": { "title": "React, Vue, Angular", - "description": "React is the most popular front-end JavaScript library for building user interfaces. React can also render on the server using Node and power mobile apps using React Native.\n\nVisit the following resources to learn more:", + "description": "React is the most popular front-end JavaScript library for building user interfaces. React can also render on the server using Node and power mobile apps using React Native.\n\nVue.js is a progressive JavaScript framework designed for building user interfaces and single-page applications.\n\nAngular is a TypeScript-based open-source front-end web application framework led by the Angular Team at Google.\n\nVisit the following resources to learn more:", "links": [ { "title": "Visit Dedicated React Roadmap", @@ -1186,28 +1440,28 @@ "type": "article" }, { - "title": "React Website", - "url": "https://react.dev/", + "title": "Visit Dedicated Vue Roadmap", + "url": "https://roadmap.sh/vue", "type": "article" }, { - "title": "Official Getting Started", - "url": "https://react.dev/learn/tutorial-tic-tac-toe", + "title": "Visit Dedicated Angular Roadmap", + "url": "https://roadmap.sh/angular", "type": "article" }, { - "title": "Vue.js Website", - "url": "https://vuejs.org/", + "title": "React", + "url": "https://react.dev/", "type": "article" }, { - "title": "Official Getting Started", - "url": "https://vuejs.org/v2/guide/", + "title": "Vue.js", + "url": "https://vuejs.org/", "type": "article" }, { - "title": "Official - Getting started with Angular", - "url": "https://angular.io/start", + "title": "Angular", + "url": "https://angular.dev/", "type": "article" }, { @@ -1220,24 +1474,14 @@ "url": "https://www.youtube.com/watch?v=nTeuhbP7wdE", "type": "video" }, - { - "title": "React Course - Beginners Tutorial for React JavaScript Library [2022]", - "url": "https://www.youtube.com/watch?v=bMknfKXIFA8", - "type": "video" - }, - { - "title": "Understanding Reacts UI Rendering Process", - "url": "https://www.youtube.com/watch?v=i793Qm6kv3U", - "type": "video" - }, { "title": "Vue.js Course for Beginners", "url": "https://www.youtube.com/watch?v=FXpIoQ_rT_c", "type": "video" }, { - "title": "Vue.js Crash Course", - "url": "https://www.youtube.com/watch?v=qZXt1Aom3Cs", + "title": "Angular Course for Beginners", + "url": "https://www.youtube.com/watch?v=3qBXWUpoPHo", "type": "video" } ] @@ -1247,7 +1491,7 @@ "description": "* **SPA**: A single page application loads only a single web document from the server and then updates the content of that document on demand via `Javascript APIs` without reloading the entire document. React, Vue, Angular are the top frameworks used to create single page applications.\n* **SSR**: This technique uses a server like `Node.js` to fully render the web document upon the receival of a request and then send it back to the client. This way the user get an interactive document with all the necessary information without having to wait for any JavaScript or CSS files to load.\n* **SSG**: Static site generation renders the web document in the server(like SSR), however the page is rendered at **build time**. So, instead of rendering the page on the server upon the receival of a request, the page is already rendered in the server, waiting to be served to the client.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Web design patterns — SSR, SSG, and SPA", + "title": "Web Design Patterns — SSR, SSG, and SPA", "url": "https://medium.com/codex/web-design-patterns-ssr-ssg-and-spa-fadad7673dfe", "type": "article" }, @@ -1313,15 +1557,26 @@ }, "hjlkxYZS7Zf9En3IUS-Wm": { "title": "Frameworks", - "description": "", - "links": [] + "description": "Architect frameworks are tools that provide a structured approach to software architecture. They help architects organize their work, manage dependencies, and ensure consistency across projects. Some popular frameworks include:\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Architect Frameworks", + "url": "https://www.techtarget.com/searchapparchitecture/definition/enterprise-architecture-framework", + "type": "article" + }, + { + "title": "Common Software Architecture Frameworks", + "url": "https://medium.com/@publicapplicationcenter/tutorial-notes-common-software-architecture-frameworks-1a9915e1d806", + "type": "article" + } + ] }, "LQlzVxUxM3haWRwbhYHKY": { "title": "BABOK", "description": "The guide to the Business Analysis Body of Knowledge (BABOK Guide) is a book from the International Institute of Business Analysis (IIBA) that provides business analysts (BAs) with strategies for using data to improve an organization's workflow processes, technology, products and services.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Babok", "url": "https://www.iiba.org/career-resources/a-business-analysis-professionals-foundation-for-success/babok/", "type": "article" }, @@ -1337,13 +1592,13 @@ "description": "The Integrated Architecture Framework (IAF) is an enterprise architecture framework that covers business, information, information system and technology infrastructure.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official PDF", - "url": "https://www.capgemini.com/wp-content/uploads/2018/03/architecture-for-the-information-age.pdf", + "title": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Integrated_Architecture_Framework", "type": "article" }, { - "title": "Wikipedia", - "url": "https://en.wikipedia.org/wiki/Integrated_Architecture_Framework", + "title": "IAF PDF", + "url": "https://www.capgemini.com/wp-content/uploads/2018/03/architecture-for-the-information-age.pdf", "type": "article" } ] @@ -1358,13 +1613,13 @@ "type": "article" }, { - "title": "The Unified Modeling Language Reference Manual (Second Edition)", - "url": "https://personal.utdallas.edu/~chung/Fujitsu/UML_2.0/Rumbaugh--UML_2.0_Reference_CD.pdf", + "title": "UML Pattern - IBM", + "url": "https://www.ibm.com/docs/en/rational-soft-arch/9.6.1?topic=files-uml-pattern-frameworks", "type": "article" }, { - "title": "IBM Docs", - "url": "https://www.ibm.com/docs/en/rational-soft-arch/9.6.1?topic=files-uml-pattern-frameworks", + "title": "The Unified Modeling Language Reference Manual (Second Edition)", + "url": "https://personal.utdallas.edu/~chung/Fujitsu/UML_2.0/Rumbaugh--UML_2.0_Reference_CD.pdf", "type": "article" }, { @@ -1379,7 +1634,7 @@ "description": "The TOGAF content framework provides a detailed model of architectural work products, including deliverables, artifacts within deliverables, and the architectural building blocks that artifacts represent.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Togaf", "url": "https://www.opengroup.org/togaf", "type": "article" }, @@ -1392,15 +1647,21 @@ }, "UyIwiIiKaa6LTQaqzbCam": { "title": "Management", - "description": "", - "links": [] + "description": "Management in software architects encompasses various responsibilities and practices that ensure the successful design, development, and implementation of software systems. Software architects play a critical role in bridging the gap between business requirements and technical implementation.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Management", + "type": "article" + } + ] }, "hRug9yJKYacB9X_2cUalR": { "title": "PMI", "description": "The PMI certification (Project Management Institute) is an internationally recognized credential in project management. The most well-known is the PMP® (Project Management Professional), which validates the skills and knowledge of professionals to manage projects effectively by applying best practices and standards defined in the PMBOK® (Project Management Body of Knowledge) guide.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Project Managment Institute", + "title": "Project Management Institute", "url": "https://www.pmi.org/", "type": "article" } @@ -1411,7 +1672,7 @@ "description": "**ITIL (Information Technology Infrastructure Library)** is a set of best practices for IT service management, designed to align IT services with business needs. Its primary focus is the efficient and effective delivery of value through managing the IT service lifecycle, which includes five phases: `Strategy`, `Design`, `Transition`, `Operation`, and `Continual Service Improvement`. ITIL includes key processes such as incident management, problem management, change management, configuration management, and service level agreements (SLAs). These practices aim to optimize performance, service quality, and customer satisfaction. Adopting ITIL helps organizations improve operational efficiency, reduce risks, and maintain clear control over IT services over time.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Documentation", + "title": "ITIL Documentation", "url": "https://www.axelos.com/certifications/itil-service-management/itil-4-foundation", "type": "article" }, @@ -1424,15 +1685,26 @@ }, "SJ5lrlvyXgtAwOx4wvT2W": { "title": "Prince2", - "description": "", - "links": [] + "description": "Prince2 is a structured project management method and practitioner certification programme. Prince2 emphasizes dividing projects into manageable and controllable stages. It is adopted in many countries worldwide, including the UK, Western European countries, and Australia.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Prince2 Project Management Course", + "url": "https://www.simplilearn.com/project-management/prince2-foundation-and-practitioner-certification-training", + "type": "course" + }, + { + "title": "Prince2 Certification", + "url": "https://www.axelos.com/certifications/propath/prince2-project-management", + "type": "article" + } + ] }, "7rudOREGG-TTkCosU0hNw": { "title": "RUP", "description": "The RUP (**Rational Unified Process**) is not a widely recognized certification like PMP or Scrum, but rather a software development framework created by Rational Software (now IBM). It follows an iterative and incremental approach to project development, based on best practices for delivering high-quality software on time and within budget.\n\nVisit the following resources to learn more:", "links": [ { - "title": "IBM certified solution designer RUP", + "title": "IBM Certified Solution Designer RUP", "url": "https://www.ibm.com/training/certification/ibm-certified-solution-designer-ibm-rational-unified-process-v70-38008003", "type": "article" } @@ -1448,7 +1720,7 @@ "type": "article" }, { - "title": "Introductio to LeSS", + "title": "Introduction to LeSS", "url": "https://www.youtube.com/watch?v=1BZf_Oa7W94", "type": "video" } @@ -1496,7 +1768,7 @@ "description": "`Scrum` is a popular agile framework used for project management, particularly in software development. It emphasizes iterative development, collaboration, and flexibility to deliver high-quality products.\n\nKey elements of Scrum:\n\n* **Sprints**: Time-boxed iterations (usually 2-4 weeks) where teams work on specific goals.\n* **Product Backlog**: Prioritized list of features or requirements for the product.\n* **Sprint Backlog**: Selected items from the Product Backlog to be completed during a Sprint.\n* **Daily Scrum (Stand-up)**: Brief daily meeting where team members share progress, challenges, and plans for the day.\n* **Sprint Review**: Meeting at the end of a Sprint to demonstrate completed work and gather feedback.\n* **Sprint Retrospective**: Meeting to reflect on the Sprint, identify improvements, and adjust processes for the next Sprint.\n\nVisit the following resources to learn more:", "links": [ { - "title": "What is scrum and how to get started", + "title": "What is Scrum and How to Get Started", "url": "https://www.atlassian.com/agile/scrum.", "type": "article" }, @@ -1540,8 +1812,24 @@ }, "cBWJ6Duw99tSKr7U6OW3A": { "title": "Networks", - "description": "", - "links": [] + "description": "A computer network is a set of computers sharing resources located on or provided by network nodes. Computers use common communication protocols over digital interconnections to communicate with each other. These interconnections are made up of telecommunication network technologies based on physically wired, optical, and wireless radio-frequency methods that may be arranged in a variety of network topologies.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Networking - IBM", + "url": "https://www.ibm.com/topics/networking", + "type": "article" + }, + { + "title": "Networking - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Networking", + "type": "article" + }, + { + "title": "Networking Basics", + "url": "https://www.cisco.com/c/en/us/solutions/small-business/resource-center/networking/networking-basics.html", + "type": "article" + } + ] }, "Mt5W1IvuHevNXVRlh7z26": { "title": "OSI", @@ -1577,11 +1865,11 @@ }, "Nq6o6Ty8VyNRsvg-UWp7D": { "title": "HTTP, HTTPS", - "description": "HTTP is the `TCP/IP` based application layer communication protocol which standardizes how the client and server communicate with each other. It defines how the content is requested and transmitted across the internet.\n\nHTTPS (**H**ypertext **T**ransfer **P**rotocol **S**ecure) is the secure version of HTTP, which is the primary protocol used to send data between a web browser and a website.\n\n`HTTPS = HTTP + SSL/TLS`\n\nVisit the following resources to learn more:", + "description": "HTTP is the `TCP/IP` based application layer communication protocol which standardizes how the client and server communicate with each other. It defines how the content is requested and transmitted across the internet.\n\nHTTPS (Hypertext Transfer Protocol Secure) is the secure version of HTTP, which is the primary protocol used to send data between a web browser and a website.\n\n`HTTPS = HTTP + SSL/TLS`\n\nVisit the following resources to learn more:", "links": [ { - "title": "Everything you need to know about HTTP", - "url": "https://cs.fyi/guide/http-in-depth", + "title": "What is HTTPS?", + "url": "https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/", "type": "article" }, { @@ -1590,18 +1878,18 @@ "type": "article" }, { - "title": "An overview of HTTP", + "title": "Overview of HTTP", "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview", "type": "article" }, { - "title": "HTTP/3 From A To Z: Core Concepts", - "url": "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", + "title": "Everything you need to know about HTTP", + "url": "https://cs.fyi/guide/http-in-depth", "type": "article" }, { - "title": "What is HTTPS?", - "url": "https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/", + "title": "HTTP/3 From A To Z: Core Concepts", + "url": "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", "type": "article" }, { @@ -1623,17 +1911,34 @@ }, "6_EOmU5GYGDGzmNoLY8cB": { "title": "Proxies", - "description": "In computer networking, a proxy server is a server application that acts as an intermediary between a client requesting a resource and the server providing that resource.", - "links": [] + "description": "In computer networking, a proxy server is a server application that acts as an intermediary between a client requesting a resource and the server providing that resource.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Proxy Server", + "url": "https://en.wikipedia.org/wiki/Proxy_server", + "type": "article" + } + ] }, "Hqk_GGsFi14SI5fgPSoGV": { "title": "Firewalls", - "description": "A Firewall is a network security device that monitors and filters incoming and outgoing network traffic based on an organization's previously established security policies.", - "links": [] + "description": "A Firewall is a network security device that monitors and filters incoming and outgoing network traffic based on an organization's previously established security policies. Firewalls usually sit between a trusted network and an untrusted network; oftentimes the untrusted network is the Internet. For example, office networks often use a firewall to protect their network from online threats.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is a Firewall? - Cloudflare", + "url": "https://www.cloudflare.com/learning/security/what-is-a-firewall/", + "type": "article" + }, + { + "title": "Firewall - Cisco", + "url": "https://www.cisco.com/site/us/en/learn/topics/security/what-is-a-firewall.html", + "type": "article" + } + ] }, "EdJhuNhMSWjeVxGW-RZtL": { "title": "Operations Knowledge", - "description": "", + "description": "Operational knowledge refers to the understanding and insights that software architects need to effectively design, implement, and manage software systems throughout their lifecycle. This knowledge encompasses various aspects of software development, deployment, and maintenance, and it is crucial for ensuring that systems operate efficiently, reliably, and securely.", "links": [] }, "igf9yp1lRdAlN5gyQ8HHC": { @@ -1641,13 +1946,13 @@ "description": "Sometimes referred to as IaC, this section refers to the techniques and tools used to define infrastructure, typically in a markup language like YAML or JSON. Infrastructure as code allows DevOps Engineers to use the same workflows used by software developers to version, roll back, and otherwise manage changes.\n\nThe term Infrastructure as Code encompasses everything from bootstrapping to configuration to orchestration, and it is considered a best practice in the industry to manage all infrastructure as code. This technique precipitated the explosion in system complexity seen in modern DevOps organizations.\n\nVisit the following resources to learn more:", "links": [ { - "title": "GUIs, CLI, APIs: Learn Basic Terms of Infrastructure-as-Code", - "url": "https://thenewstack.io/guis-cli-apis-learn-basic-terms-of-infrastructure-as-code/", + "title": "What is Infrastructure as Code", + "url": "https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac", "type": "article" }, { - "title": "What is infrastructure as code", - "url": "https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac", + "title": "GUIs, CLI, APIs: Learn Basic Terms of Infrastructure-as-Code", + "url": "https://thenewstack.io/guis-cli-apis-learn-basic-terms-of-infrastructure-as-code/", "type": "article" }, { @@ -1666,7 +1971,7 @@ "type": "video" }, { - "title": "Video introduction to infrastructure as code", + "title": "Introduction to Infrastructure as Code", "url": "https://www.youtube.com/watch?v=zWw2wuiKd5o", "type": "video" } @@ -1674,20 +1979,36 @@ }, "C0rKd5Rr27Z1_GleoEZxF": { "title": "Cloud Providers", - "description": "", - "links": [] + "description": "Cloud providers provide a layer of APIs to abstract infrastructure and provision it based on security and billing boundaries. The cloud runs on servers in data centers, but the abstractions cleverly give the appearance of interacting with a single “platform” or large application. The ability to quickly provision, configure, and secure resources with cloud providers has been key to both the tremendous success and complexity of modern DevOps.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Cloud Service Provider", + "url": "https://www.techtarget.com/searchitchannel/definition/cloud-service-provider-cloud-provider", + "type": "article" + }, + { + "title": "What are Cloud Providers?", + "url": "https://www.redhat.com/en/topics/cloud-computing/what-are-cloud-providers", + "type": "article" + }, + { + "title": "Explore top posts about Cloud", + "url": "https://app.daily.dev/tags/cloud?ref=roadmapsh", + "type": "article" + } + ] }, "WoXoVwkSqXTP5U8HtyJOL": { "title": "Serverless Concepts", - "description": "Serverless is a cloud-native development model that allows developers to build and run applications without having to manage servers.\n\nThere are still servers in serverless, but they are abstracted away from app development. A cloud provider handles the routine work of provisioning, maintaining, and scaling the server infrastructure. Developers can simply package their code in containers for deployment.\n\nVisit the following resources to learn more:", + "description": "Serverless is a cloud-native development model that allows developers to build and run applications without having to manage servers. There are still servers in serverless, but they are abstracted away from app development. A cloud provider handles the routine work of provisioning, maintaining, and scaling the server infrastructure. Developers can simply package their code in containers for deployment.\n\nVisit the following resources to learn more:", "links": [ { - "title": "What is serverless?", + "title": "What is Serverless?", "url": "https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverless", "type": "article" }, { - "title": "What is serverless computing?", + "title": "What is Serverless Computing?", "url": "https://www.cloudflare.com/learning/serverless/what-is-serverless/", "type": "article" }, @@ -1713,15 +2034,20 @@ "type": "course" }, { - "title": "Linux Basics ", - "url": "https://dev.to/rudrakshi99/linux-basics-2onj", + "title": "Visit Dedicated Linux Roadmap", + "url": "https://roadmap.sh/linux", "type": "article" }, { - "title": "Unix / Linux Tutorial", + "title": "Unix & Linux Tutorial", "url": "https://www.tutorialspoint.com/unix/index.htm", "type": "article" }, + { + "title": "Linux Basics ", + "url": "https://dev.to/rudrakshi99/linux-basics-2onj", + "type": "article" + }, { "title": "Explore top posts about Linux", "url": "https://app.daily.dev/tags/linux?ref=roadmapsh", @@ -1765,12 +2091,17 @@ "description": "CI/CD is a method to frequently deliver apps to customers by introducing automation into the stages of app development. The main concepts attributed to CI/CD are continuous integration, continuous delivery, and continuous deployment. CI/CD is a solution to the problems integrating new code can cause for development and operations teams (AKA \"integration hell\").\n\nVisit the following resources to learn more:", "links": [ { - "title": "What is CI/CD?", + "title": "CI/CID - Github", + "url": "https://github.com/resources/articles/devops/ci-cd", + "type": "article" + }, + { + "title": "What is CI/CD? - Redhat", "url": "https://www.redhat.com/en/topics/devops/what-is-ci-cd", "type": "article" }, { - "title": "What is CI/CD? Continuous integration and continuous delivery explained", + "title": "Continuous Integration and Continuous Delivery Explained", "url": "https://www.infoworld.com/article/3271126/what-is-cicd-continuous-integration-and-continuous-delivery-explained.html", "type": "article" }, @@ -1783,8 +2114,23 @@ }, "l3oeo65FyV5HHvw5n_1wa": { "title": "Containers", - "description": "Containers are a construct in which [cgroups](https://en.wikipedia.org/wiki/Cgroups), [namespaces](https://en.wikipedia.org/wiki/Linux_namespaces), and [chroot](https://en.wikipedia.org/wiki/Chroot) are used to fully encapsulate and isolate a process. This encapsulated process, called a container image, shares the kernel of the host with other containers, allowing containers to be significantly smaller and faster than virtual machines.\n\nThese images are designed for portability, allowing for full local testing of a static image, and easy deployment to a container management platform.\n\nVisit the following resources to learn more:", + "description": "Containers are a construct in which cgroups, namespaces, and chroot are used to fully encapsulate and isolate a process. This encapsulated process, called a container image, shares the kernel of the host with other containers, allowing containers to be significantly smaller and faster than virtual machines. These images are designed for portability, allowing for full local testing of a static image, and easy deployment to a container management platform.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "cgroups", + "url": "https://en.wikipedia.org/wiki/Cgroups", + "type": "article" + }, + { + "title": "namespaces", + "url": "https://en.wikipedia.org/wiki/Linux_namespaces", + "type": "article" + }, + { + "title": "chroot", + "url": "https://en.wikipedia.org/wiki/Chroot", + "type": "article" + }, { "title": "What are Containers?", "url": "https://cloud.google.com/learn/what-are-containers", @@ -1814,7 +2160,7 @@ }, "CxceVdaNCyKDhs0huDtcL": { "title": "Cloud Design Patterns", - "description": "These design patterns are useful for building reliable, scalable, secure applications in the cloud.\n\nThe link below has cloud design patterns where each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. Most patterns include code samples or snippets that show how to implement the pattern on Azure. However, most patterns are relevant to any distributed system, whether hosted on Azure or other cloud platforms.\n\nVisit the following resources to learn more:", + "description": "These design patterns are useful for building reliable, scalable, secure applications in the cloud. The cloud design patterns where each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. Most patterns include code samples or snippets that show how to implement the pattern on Azure. However, most patterns are relevant to any distributed system, whether hosted on Azure or other cloud platforms.\n\nVisit the following resources to learn more:", "links": [ { "title": "Cloud Design Patterns", @@ -1830,8 +2176,14 @@ }, "8yALyPVUZPtd7LX3GrO1e": { "title": "Enterprise Software", - "description": "", - "links": [] + "description": "Enterprise software refers to software applications that are designed to meet the needs of large organizations or enterprises. These applications are typically complex, scalable, and capable of integrating with other systems to support a wide range of business functions. Enterprise software is used to improve efficiency, streamline processes, and enhance productivity across various departments within an organization.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Enterprise Softwares", + "url": "https://en.wikipedia.org/wiki/Enterprise_software", + "type": "article" + } + ] }, "gdtI0H_PzzTj_aFQn_NeA": { "title": "MS Dynamics", @@ -1851,20 +2203,37 @@ }, "TxWAznp1tUtZ1MvThf9M1": { "title": "SAP ERP, HANA, Business Objects", - "description": "", - "links": [] + "description": "SAP (Systems, Applications, and Products in Data Processing) is a leading enterprise resource planning (ERP) software provider that helps organizations manage their business operations and customer relations effectively. SAP ERP integrates various business processes, such as finance, sales, procurement, and human resources, into a unified system, enabling real-time data access and improved decision-making. SAP HANA (High-Performance Analytic Appliance) is an in-memory database and application development platform that allows businesses to process large volumes of data quickly and efficiently, supporting advanced analytics and real-time reporting. BusinessObjects, part of the SAP Business Intelligence suite, provides powerful tools for data visualization, reporting, and analysis, enabling users to transform raw data into actionable insights. Together, these solutions empower organizations to streamline operations, enhance productivity, and drive strategic decision-making through data-driven insights.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "SAP", + "url": "https://www.sap.com/", + "type": "article" + } + ] }, "YfYviOXqGVp9C6DuhqBrn": { "title": "EMC DMS", - "description": "", - "links": [] + "description": "EMC (Enterprise Metadata Catalog) and DMS (Document Management System) are two distinct concepts in the realm of data management and information systems. Below is an overview of each:\n\nAn Enterprise Metadata Catalog (EMC) is a centralized repository that stores metadata about data assets within an organization. This metadata provides context, meaning, and structure to the data, enabling better data management and utilization.\n\nA Document Management System (DMS) is a software solution that helps organizations capture, store, manage, and track electronic documents and images of paper-based information. DMS solutions are essential for organizing and securing documents in a digital format.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "DMS", + "url": "https://www.opentext.com/products/documentum-content-management", + "type": "article" + }, + { + "title": "EMC Softwares", + "url": "https://www.spiceworks.com/collaboration/content-collaboration/articles/top-10-enterprise-content-management-software-systems/", + "type": "article" + } + ] }, "5EVecZmvor09LjD7WR_Y9": { "title": "IBM BPM", "description": "IBM BPM is a comprehensive business process management platform. It provides a robust set of tools to author, test, and deploy business processes, as well as full visibility and insight to managing those business processes.\n\nVisit the following resources to learn more:", "links": [ { - "title": "BPM overview", + "title": "Overview BPM", "url": "https://www.ibm.com/docs/en/bpm/8.5.5?topic=manager-business-process-overview", "type": "article" },