From 362588cf1b3e91919a3df8c31e45d820c66a089e Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Sat, 31 Dec 2022 20:14:48 +0400 Subject: [PATCH] Add all roadmaps and their content --- src/roadmaps/android/android.md | 128 ++++++++++ src/roadmaps/angular/angular.md | 42 ++++ .../100-what-is-typescript.md | 10 + .../101-why-use-typescript.md | 8 + .../102-structural-typing.md | 12 + .../103-type-inference.md | 8 + .../100-typescript-basics/104-union-types.md | 8 + .../105-builtin-types.md | 8 + .../100-typescript-basics/106-type-guard.md | 11 + .../content/100-typescript-basics/index.md | 8 + .../101-rxjs-basics/100-observable-pattern.md | 9 + .../101-observable-lifecycle.md | 13 + .../101-rxjs-basics/102-marble-diagrams.md | 1 + .../101-rxjs-basics/103-rxjs-vs-promises.md | 1 + .../104-operators/100-filtering.md | 1 + .../104-operators/101-rate-limiting.md | 1 + .../104-operators/102-transformation.md | 1 + .../104-operators/103-combination.md | 1 + .../101-rxjs-basics/104-operators/index.md | 38 +++ .../angular/content/101-rxjs-basics/index.md | 5 + .../100-angularjs-vs-angular.md | 8 + .../101-angular-components.md | 13 + .../102-angular-templates.md | 8 + .../102-angular-basics/103-angular-modules.md | 7 + .../104-dependency-injection.md | 8 + .../102-angular-basics/105-services.md | 10 + .../content/102-angular-basics/106-routing.md | 8 + .../content/102-angular-basics/index.md | 5 + .../content/103-angular-cli/100-ng-build.md | 8 + .../content/103-angular-cli/101-ng-serve.md | 8 + .../103-angular-cli/102-ng-generate.md | 9 + .../content/103-angular-cli/103-ng-test.md | 11 + .../content/103-angular-cli/104-ng-e2e.md | 8 + .../content/103-angular-cli/105-ng-new.md | 12 + .../content/103-angular-cli/106-schematics.md | 8 + .../angular/content/103-angular-cli/index.md | 10 + .../104-templates/100-interpolation.md | 7 + .../104-templates/101-property-binding.md | 7 + .../104-templates/102-template-statements.md | 7 + .../103-binding-data-props-attrs-events.md | 12 + .../104-templates/104-reference-vars.md | 7 + .../content/104-templates/105-input-output.md | 7 + .../angular/content/104-templates/index.md | 7 + .../100-builtin-directives.md | 11 + .../105-rendering-topics/101-builtin-pipes.md | 11 + .../102-change-detection.md | 8 + .../content/105-rendering-topics/index.md | 1 + .../content/106-forms/100-reactive-forms.md | 10 + .../106-forms/101-template-driven-forms.md | 12 + .../angular/content/106-forms/index.md | 12 + .../content/107-routing/100-configuration.md | 1 + .../content/107-routing/101-router-outlets.md | 9 + .../content/107-routing/102-router-links.md | 1 + .../content/107-routing/103-router-events.md | 1 + .../angular/content/107-routing/104-guards.md | 14 ++ .../content/107-routing/105-lazy-loading.md | 8 + .../angular/content/107-routing/index.md | 9 + .../100-dependency-injection.md | 9 + .../content/108-services-remote-data/index.md | 8 + .../angular/content/109-lifecycle-hooks.md | 14 ++ .../content/110-state-management/100-ngxs.md | 10 + .../content/110-state-management/101-ngrx.md | 9 + .../content/110-state-management/index.md | 9 + src/roadmaps/angular/content/111-zones.md | 1 + .../112-creating-a-custom-x/100-directive.md | 10 + .../112-creating-a-custom-x/101-pipe.md | 8 + .../112-creating-a-custom-x/102-library.md | 7 + .../content/112-creating-a-custom-x/index.md | 3 + .../113-angular-ssr/100-angular-universal.md | 8 + .../angular/content/113-angular-ssr/index.md | 8 + .../content/114-angular-ssg/100-scully.md | 8 + .../angular/content/114-angular-ssg/index.md | 3 + .../100-testing-pipes.md | 8 + .../101-testing-services.md | 8 + .../102-testing-component-bindings.md | 7 + .../103-testing-directives.md | 8 + .../104-testing-component-templates.md | 7 + .../content/115-testing-angular-apps/index.md | 3 + src/roadmaps/aspnet-core/aspnet-core.md | 56 +++++ .../100-basics-of-csharp/100-csharp.md | 8 + .../100-basics-of-csharp/101-dotnet.md | 1 + .../100-basics-of-csharp/102-dotnet-cli.md | 1 + .../content/100-basics-of-csharp/index.md | 1 + .../101-general-development-skills/100-git.md | 10 + .../101-azure-devops-services.md | 1 + .../102-vcs-hosting-services.md | 9 + .../103-http-https.md | 21 ++ .../104-datastructures-and-algorithms.md | 11 + .../101-general-development-skills/index.md | 1 + .../100-database-design-basics.md | 1 + .../101-sql-basics.md | 1 + .../102-stored-procedures.md | 1 + .../103-constraints.md | 1 + .../102-database-fundamentals/104-triggers.md | 1 + .../102-database-fundamentals/index.md | 1 + .../103-basics-of-aspnet-core/100-mvc.md | 1 + .../103-basics-of-aspnet-core/101-rest.md | 1 + .../102-razor-pages.md | 1 + .../103-razor-components.md | 1 + .../104-middlewares.md | 1 + .../105-filters-and-attributes.md | 1 + .../106-app-settings-and-configurations.md | 1 + .../103-basics-of-aspnet-core/index.md | 1 + .../100-framework-basics.md | 1 + .../101-codefirst-migrations.md | 1 + .../102-change-tracker-api.md | 1 + .../103-lazy-eager-explicit-loading.md | 1 + .../100-entity-framework-core/index.md | 1 + .../aspnet-core/content/104-orm/101-dapper.md | 1 + .../aspnet-core/content/104-orm/102-repodb.md | 1 + .../content/104-orm/103-nhibernate.md | 1 + .../aspnet-core/content/104-orm/index.md | 1 + .../105-dependency-injection/100-scrutor.md | 1 + ...crosoft-extensions-dependency-injection.md | 1 + .../101-di-containers/101-auto-fac.md | 1 + .../101-di-containers/102-ninject.md | 1 + .../101-di-containers/103-castle-windsor.md | 1 + .../101-di-containers/104-simple-injector.md | 1 + .../101-di-containers/index.md | 1 + .../102-life-cycles/100-scoped.md | 1 + .../102-life-cycles/101-transient.md | 1 + .../102-life-cycles/102-singleton.md | 1 + .../102-life-cycles/index.md | 1 + .../content/105-dependency-injection/index.md | 1 + .../content/106-caching/100-memory-cache.md | 1 + .../106-caching/101-entity-framework-cache.md | 1 + .../102-distributed-cache/100-memcached.md | 1 + .../101-redis/easy-caching.md | 1 + .../102-distributed-cache/101-redis/index.md | 1 + .../101-redis/stackexchange-redis.md | 1 + .../102-distributed-cache/index.md | 1 + .../aspnet-core/content/106-caching/index.md | 1 + .../100-search-engines/100-elasticsearch.md | 1 + .../100-search-engines/101-solr.md | 1 + .../100-search-engines/102-sphinx.md | 1 + .../107-databases/100-search-engines/index.md | 1 + .../107-databases/101-cloud/100-dynamodb.md | 1 + .../107-databases/101-cloud/101-cosmosdb.md | 1 + .../content/107-databases/101-cloud/index.md | 1 + .../102-relational/100-sql-server.md | 1 + .../102-relational/101-postgresql.md | 1 + .../102-relational/102-mariadb.md | 1 + .../107-databases/102-relational/103-mysql.md | 1 + .../107-databases/102-relational/index.md | 1 + .../107-databases/103-nosql/100-redis.md | 1 + .../107-databases/103-nosql/101-mongodb.md | 1 + .../107-databases/103-nosql/102-litedb.md | 1 + .../107-databases/103-nosql/103-cassandra.md | 1 + .../107-databases/103-nosql/104-ravendb.md | 1 + .../107-databases/103-nosql/105-couchdb.md | 1 + .../content/107-databases/103-nosql/index.md | 1 + .../content/107-databases/index.md | 1 + .../content/108-log-frameworks/100-serilog.md | 1 + .../content/108-log-frameworks/101-nlog.md | 1 + .../100-elk-stack.md | 1 + .../102-log-management-system/101-sentry.md | 1 + .../102-log-management-system/102-datadog.md | 1 + .../102-log-management-system/103-loggly.md | 1 + .../102-log-management-system/104-elmah.md | 1 + .../102-log-management-system/index.md | 1 + .../content/108-log-frameworks/index.md | 1 + .../109-api-clients/100-rest/101-odata.md | 1 + .../109-api-clients/100-rest/102-sieve.md | 1 + .../content/109-api-clients/100-rest/index.md | 1 + .../content/109-api-clients/101-grpc.md | 1 + .../102-graphql/100-graphql-dotnet.md | 1 + .../102-graphql/101-hot-chocolate.md | 1 + .../109-api-clients/102-graphql/index.md | 1 + .../content/109-api-clients/index.md | 1 + .../100-web-sockets.md | 1 + .../101-singlar-core.md | 1 + .../110-real-time-communication/index.md | 1 + .../111-object-mapping/100-atuo-mapper.md | 1 + .../111-object-mapping/101-express-mapper.md | 1 + .../111-object-mapping/102-agile-mapper.md | 1 + .../content/111-object-mapping/103-mapster.md | 1 + .../content/111-object-mapping/index.md | 1 + .../112-task-scheduling/100-hangfire.md | 1 + .../101-native-background-service.md | 1 + .../content/112-task-scheduling/102-quartz.md | 1 + .../112-task-scheduling/103-coravel.md | 1 + .../content/112-task-scheduling/index.md | 1 + .../100-e2e-testing/100-selenium.md | 1 + .../100-e2e-testing/101-playwright.md | 1 + .../100-e2e-testing/102-puppeteer.md | 1 + .../100-e2e-testing/103-cypress.md | 1 + .../113-testing/100-e2e-testing/index.md | 1 + .../101-unit-testing/100-fluent-assertions.md | 1 + .../101-unit-testing/101-shouldly.md | 1 + .../101-unit-testing/102-mstest.md | 1 + .../113-testing/101-unit-testing/103-xunit.md | 1 + .../113-testing/101-unit-testing/104-nunit.md | 1 + .../101-unit-testing/105-nsubstitute.md | 1 + .../113-testing/101-unit-testing/106-moq.md | 1 + .../101-unit-testing/107-fake-it-easy.md | 1 + .../113-testing/101-unit-testing/index.md | 1 + .../100-web-application-factory.md | 1 + .../101-test-server.md | 1 + .../102-integration-testing/index.md | 1 + .../103-behavior-testing/100-spec-flow.md | 1 + .../103-behavior-testing/101-bddfy.md | 1 + .../103-behavior-testing/102-light-bdd.md | 1 + .../113-testing/103-behavior-testing/index.md | 1 + .../aspnet-core/content/113-testing/index.md | 1 + .../100-message-brokers/100-active-mq.md | 1 + .../100-message-brokers/101-apache-kafka.md | 1 + .../100-message-brokers/102-rabbit-mq.md | 1 + .../100-message-brokers/103-net-mq.md | 1 + .../104-azure-service-bus.md | 1 + .../100-message-brokers/index.md | 1 + .../101-message-bus/100-mass-transit.md | 1 + .../101-message-bus/101-nservice-bus.md | 1 + .../101-message-bus/102-easy-net-q.md | 1 + .../101-message-bus/index.md | 1 + .../114-microservices/102-kubernetes.md | 1 + .../114-microservices/103-docker-swarm.md | 1 + .../content/114-microservices/104-ocelot.md | 1 + .../content/114-microservices/105-docker.md | 1 + .../content/114-microservices/106-yarp.md | 1 + .../content/114-microservices/107-orleans.md | 1 + .../114-microservices/108-steel-toe.md | 1 + .../content/114-microservices/109-dapr.md | 1 + .../content/114-microservices/110-tye.md | 1 + .../content/114-microservices/index.md | 1 + .../content/115-ci-cd/100-github-actions.md | 1 + .../content/115-ci-cd/101-azure-pipelines.md | 1 + .../content/115-ci-cd/102-travis-ci.md | 1 + .../content/115-ci-cd/103-jenkins.md | 1 + .../content/115-ci-cd/104-circle-ci.md | 1 + .../content/115-ci-cd/105-team-city.md | 1 + .../aspnet-core/content/115-ci-cd/index.md | 1 + .../116-client-side-libraries/100-blazor.md | 1 + .../116-client-side-libraries/index.md | 1 + .../content/117-template-engines/100-razor.md | 1 + .../117-template-engines/101-dot-liquid.md | 1 + .../117-template-engines/102-scriban.md | 1 + .../content/117-template-engines/103-fluid.md | 1 + .../content/117-template-engines/index.md | 1 + .../118-good-to-know-libraries/100-mediatr.md | 1 + .../101-fluent-validation.md | 1 + .../118-good-to-know-libraries/102-polly.md | 1 + .../118-good-to-know-libraries/103-nuke.md | 1 + .../104-benchmark-net.md | 1 + .../105-noda-time.md | 1 + .../118-good-to-know-libraries/106-gen-fu.md | 1 + .../107-swash-buckle.md | 1 + .../118-good-to-know-libraries/index.md | 1 + src/roadmaps/backend/backend.md | 58 +++++ .../100-how-does-the-internet-work.md | 12 + .../content/100-internet/101-what-is-http.md | 12 + .../102-browsers-and-how-they-work.md | 9 + .../100-internet/103-dns-and-how-it-works.md | 11 + .../100-internet/104-what-is-domain-name.md | 9 + .../100-internet/105-what-is-hosting.md | 9 + .../backend/content/100-internet/index.md | 11 + .../content/101-basic-frontend/100-html.md | 11 + .../content/101-basic-frontend/101-css.md | 16 ++ .../101-basic-frontend/102-javascript.md | 13 + .../content/101-basic-frontend/index.md | 10 + .../100-terminal-usage.md | 8 + .../101-how-oss-work-in-general.md | 10 + .../102-process-management.md | 8 + .../103-threads-and-concurrency.md | 13 + .../104-basic-terminal-commands.md | 17 ++ .../105-memory-management.md | 10 + .../106-interprocess-communication.md | 8 + .../107-io-management.md | 9 + .../108-posix-basics.md | 15 ++ .../109-basic-networking-concepts.md | 7 + .../content/102-os-general-knowledge/index.md | 9 + .../content/103-learn-a-language/100-go.md | 16 ++ .../content/103-learn-a-language/101-rust.md | 10 + .../content/103-learn-a-language/102-java.md | 13 + .../103-learn-a-language/103-csharp.md | 9 + .../content/103-learn-a-language/103-php.md | 12 + .../103-learn-a-language/105-javascript.md | 17 ++ .../103-learn-a-language/106-python.md | 18 ++ .../content/103-learn-a-language/107-ruby.md | 10 + .../content/103-learn-a-language/108-cpp.md | 8 + .../content/103-learn-a-language/index.md | 5 + .../100-basic-usage-of-git.md | 10 + .../104-version-control-systems/index.md | 10 + .../105-repo-hosting-services/100-github.md | 13 + .../105-repo-hosting-services/101-gitlab.md | 8 + .../102-bitbucket.md | 14 ++ .../105-repo-hosting-services/index.md | 10 + .../100-postgresql.md | 13 + .../106-relational-databases/101-mysql.md | 9 + .../106-relational-databases/102-mariadb.md | 10 + .../106-relational-databases/103-mssql.md | 9 + .../106-relational-databases/104-oracle.md | 9 + .../content/106-relational-databases/index.md | 11 + .../100-document-databases.md | 14 ++ .../101-column-databases.md | 10 + .../102-timeseries-databases.md | 10 + .../103-realtime-databases.md | 3 + .../content/107-nosql-databases/index.md | 10 + .../108-more-about-databases/100-orms.md | 8 + .../108-more-about-databases/101-acid.md | 9 + .../102-transactions.md | 7 + .../103-n-plus-one-problem.md | 7 + .../104-database-normalization.md | 11 + .../105-database-indexes.md | 8 + .../106-data-replication.md | 7 + .../107-sharding-strategies.md | 9 + .../108-cap-theorem.md | 11 + .../content/108-more-about-databases/index.md | 8 + .../backend/content/109-apis/100-rest.md | 10 + .../backend/content/109-apis/101-json-apis.md | 9 + .../backend/content/109-apis/102-soap.md | 7 + .../backend/content/109-apis/103-grpc.md | 10 + .../backend/content/109-apis/104-hateoas.md | 7 + .../content/109-apis/105-open-api-spec.md | 12 + .../106-authentication/100-cookie-based.md | 8 + .../109-apis/106-authentication/101-oauth.md | 14 ++ .../102-basic-authentication.md | 10 + .../103-token-authentication.md | 14 ++ .../109-apis/106-authentication/104-jwt.md | 11 + .../109-apis/106-authentication/105-openid.md | 11 + .../109-apis/106-authentication/105-saml.md | 1 + .../109-apis/106-authentication/index.md | 23 ++ .../backend/content/109-apis/index.md | 8 + .../backend/content/110-caching/100-cdn.md | 13 + .../110-caching/101-server-side/100-redis.md | 8 + .../101-server-side/101-memcached.md | 13 + .../110-caching/101-server-side/index.md | 13 + .../content/110-caching/102-client-side.md | 7 + .../backend/content/110-caching/index.md | 3 + .../111-web-security-knowledge/100-md5.md | 9 + .../101-sha-family.md | 13 + .../111-web-security-knowledge/102-bcrypt.md | 9 + .../111-web-security-knowledge/104-scrypt.md | 7 + .../105-content-security-policy.md | 8 + .../111-web-security-knowledge/105-https.md | 12 + .../111-web-security-knowledge/106-cors.md | 8 + .../111-web-security-knowledge/107-ssl-tls.md | 8 + .../111-web-security-knowledge/108-owasp.md | 10 + .../111-web-security-knowledge/index.md | 12 + .../112-testing/100-integration-testing.md | 9 + .../content/112-testing/101-unit-testing.md | 8 + .../112-testing/102-functional-testing.md | 9 + .../backend/content/112-testing/index.md | 8 + src/roadmaps/backend/content/113-ci-cd.md | 12 + .../100-gof-design-patterns.md | 13 + .../101-domain-driven-design.md | 15 ++ .../102-test-driven-development.md | 9 + .../103-solid.md | 14 ++ .../104-kiss.md | 8 + .../105-yagni.md | 8 + .../106-dry.md | 8 + .../index.md | 1 + .../100-monolithic-apps.md | 8 + .../101-microservices.md | 11 + .../115-architectural-patterns/102-soa.md | 7 + .../115-architectural-patterns/103-cqrs.md | 7 + .../104-serverless.md | 9 + .../115-architectural-patterns/index.md | 7 + .../116-search-engines/100-elasticsearch.md | 10 + .../content/116-search-engines/101-solr.md | 8 + .../content/116-search-engines/index.md | 1 + .../117-message-brokers/100-rabbitmq.md | 8 + .../content/117-message-brokers/101-kafka.md | 8 + .../content/117-message-brokers/index.md | 7 + .../118-containerization/100-docker.md | 10 + .../content/118-containerization/101-rkt.md | 14 ++ .../content/118-containerization/102-lxc.md | 10 + .../content/118-containerization/index.md | 8 + .../backend/content/119-graphql/100-apollo.md | 10 + .../content/119-graphql/101-relay-modern.md | 8 + .../backend/content/119-graphql/index.md | 10 + .../content/120-graph-databases/100-neo4j.md | 9 + .../content/120-graph-databases/index.md | 8 + .../backend/content/121-web-sockets.md | 9 + .../content/122-web-servers/100-nginx.md | 8 + .../content/122-web-servers/101-apache.md | 8 + .../content/122-web-servers/102-caddy.md | 8 + .../content/122-web-servers/103-ms-iis.md | 8 + .../backend/content/122-web-servers/index.md | 18 ++ .../100-mitigation-strategies.md | 3 + ...01-instrumentation-monitoring-telemetry.md | 13 + .../102-migration-strategies.md | 7 + .../103-horizontal-vertical-scaling.md | 10 + .../123-scalability/104-observability.md | 15 ++ .../backend/content/123-scalability/index.md | 20 ++ src/roadmaps/blockchain/blockchain.md | 61 +++++ .../100-what-is-blockchain.md | 10 + .../101-decentralization.md | 8 + .../102-why-blockchain-matters.md | 12 + .../103-blockchain-structure.md | 12 + .../104-basic-blockchain-operations.md | 10 + .../105-applications-and-uses.md | 10 + .../content/100-blockchain-basics/index.md | 10 + .../100-storage.md | 9 + .../101-mining-and-incentive-models.md | 11 + .../102-decentralization-vs-trust.md | 9 + .../103-blockchain-forking.md | 9 + .../104-cryptocurrencies.md | 9 + .../105-cryptowallets.md | 8 + .../106-cryptography.md | 11 + .../107-consensus-protocols.md | 9 + .../108-blockchain-interoperability.md | 9 + .../109-blockchains/100-solana.md | 11 + .../102-evm-based/avalanche.md | 8 + .../102-evm-based/binance-smart-chain.md | 8 + .../109-blockchains/102-evm-based/ethereum.md | 11 + .../109-blockchains/102-evm-based/fantom.md | 8 + .../102-evm-based/gnosis-chain.md | 8 + .../102-evm-based/huobi-eco-chain.md | 8 + .../109-blockchains/102-evm-based/index.md | 9 + .../102-evm-based/moonbeam-moonriver.md | 10 + .../109-blockchains/102-evm-based/polygon.md | 8 + .../103-l2-blockchains/arbitrum.md | 8 + .../103-l2-blockchains/index.md | 10 + .../103-l2-blockchains/moonbeam-moonriver.md | 10 + .../109-blockchains/index.md | 8 + .../101-blockchain-general-knowledge/index.md | 6 + .../100-hybrid-smart-contracts.md | 8 + .../102-blockchain-oracles/101-chainlink.md | 8 + .../102-oracle-networks.md | 9 + .../content/102-blockchain-oracles/index.md | 8 + .../100-programming-languages/100-solidity.md | 16 ++ .../100-programming-languages/101-vyper.md | 8 + .../100-programming-languages/102-rust.md | 8 + .../100-programming-languages/index.md | 7 + .../101-testing/100-unit-tests.md | 8 + .../101-testing/101-integration-tests.md | 7 + .../101-testing/102-code-coverage.md | 8 + .../103-smart-contracts/101-testing/index.md | 9 + .../103-smart-contracts/102-deployment.md | 8 + .../103-smart-contracts/103-monitoring.md | 7 + .../103-smart-contracts/104-upgrades.md | 10 + .../103-smart-contracts/105-erc-tokens.md | 12 + .../103-smart-contracts/106-crypto-wallets.md | 8 + .../content/103-smart-contracts/107-ides.md | 8 + .../103-smart-contracts/108-crypto-faucets.md | 10 + .../109-decentralized-storage.md | 8 + .../content/103-smart-contracts/index.md | 9 + .../100-hardhat.md | 8 + .../101-brownie.md | 8 + .../102-truffle.md | 8 + .../103-foundry.md | 9 + .../104-smart-contract-frameworks/index.md | 9 + .../100-fuzz-testing-and-static-analysis.md | 11 + .../101-common-threat-vectors.md | 9 + .../102-source-of-randomness-attacks.md | 7 + .../100-practices/index.md | 8 + .../101-tools/100-slither.md | 7 + .../101-tools/101-manticore.md | 7 + .../101-tools/102-mythx.md | 8 + .../101-tools/103-echidna.md | 7 + .../101-tools/index.md | 3 + .../content/105-blockchain-security/index.md | 8 + .../100-open-zeppelin.md | 7 + .../content/106-management-platforms/index.md | 3 + .../107-version-control-systems/100-git.md | 10 + .../107-version-control-systems/index.md | 9 + .../108-repo-hosting-services/100-github.md | 13 + .../108-repo-hosting-services/101-gitlab.md | 8 + .../102-bitbucket.md | 14 ++ .../108-repo-hosting-services/index.md | 10 + .../100-frontend-frameworks/100-react.md | 14 ++ .../100-frontend-frameworks/101-angular.md | 9 + .../100-frontend-frameworks/102-vue.md | 12 + .../100-frontend-frameworks/index.md | 9 + .../content/109-dapps/100-testing.md | 11 + .../content/109-dapps/101-deployment.md | 8 + .../content/109-dapps/102-maintenance.md | 3 + .../content/109-dapps/103-architecture.md | 9 + .../content/109-dapps/104-security.md | 9 + .../109-dapps/105-applicability/100-defi.md | 9 + .../109-dapps/105-applicability/101-daos.md | 8 + .../109-dapps/105-applicability/102-nfts.md | 9 + .../105-applicability/103-payments.md | 8 + .../105-applicability/104-insurance.md | 8 + .../109-dapps/105-applicability/index.md | 9 + .../106-node-as-a-service/100-alchemy.md | 7 + .../106-node-as-a-service/101-infura.md | 7 + .../106-node-as-a-service/102-moralis.md | 7 + .../106-node-as-a-service/103-quicknode.md | 7 + .../109-dapps/106-node-as-a-service/index.md | 8 + .../100-javascript.md | 14 ++ .../107-supporting-languages/101-python.md | 14 ++ .../107-supporting-languages/102-go.md | 14 ++ .../107-supporting-languages/index.md | 4 + .../108-client-libraries/100-ethers-js.md | 7 + .../108-client-libraries/101-web3-js.md | 7 + .../108-client-libraries/102-moralis.md | 7 + .../109-dapps/108-client-libraries/index.md | 3 + .../109-dapps/109-client-nodes/100-geth.md | 7 + .../109-dapps/109-client-nodes/101-besu.md | 7 + .../109-client-nodes/102-nethermind.md | 7 + .../109-client-nodes/103-substrate.md | 7 + .../109-dapps/109-client-nodes/index.md | 4 + .../blockchain/content/109-dapps/index.md | 8 + .../100-state-and-payment-channels.md | 8 + ...101-optimistic-rollups-and-fraud-proofs.md | 9 + ...wledge-rollups-and-zero-knowledge-proof.md | 7 + .../110-building-for-scale/103-validium.md | 7 + .../110-building-for-scale/104-plasma.md | 7 + .../110-building-for-scale/105-sidechains.md | 8 + .../110-building-for-scale/106-ethereum-2.md | 8 + .../107-on-chain-scaling.md | 7 + .../content/110-building-for-scale/index.md | 3 + .../computer-science/computer-science.md | 47 ++++ .../content/100-roadmap-note.md | 8 + .../101-pick-a-language/100-c-plus-plus.md | 8 + .../content/101-pick-a-language/101-c.md | 10 + .../content/101-pick-a-language/102-java.md | 13 + .../content/101-pick-a-language/103-python.md | 18 ++ .../content/101-pick-a-language/104-go.md | 16 ++ .../101-pick-a-language/105-c-sharp.md | 10 + .../content/101-pick-a-language/106-rust.md | 10 + .../content/101-pick-a-language/index.md | 19 ++ .../content/102-data-structures/100-array.md | 11 + .../102-data-structures/101-linked-list.md | 15 ++ .../content/102-data-structures/102-stack.md | 12 + .../content/102-data-structures/103-queue.md | 12 + .../102-data-structures/104-hash-table.md | 15 ++ .../105-tree/100-binary-tree.md | 8 + .../105-tree/101-binary-search-tree.md | 15 ++ .../105-tree/102-full-binary-tree.md | 8 + .../105-tree/103-complete-binary-tree.md | 8 + .../105-tree/104-balanced-tree.md | 7 + .../105-tree/105-unbalanced-tree.md | 7 + .../102-data-structures/105-tree/index.md | 8 + .../106-graph/100-directed-graph.md | 7 + .../106-graph/101-undirected-graph.md | 7 + .../106-graph/102-spanning-tree.md | 10 + .../106-graph/103-graph-representation.md | 12 + .../102-data-structures/106-graph/index.md | 16 ++ .../content/102-data-structures/107-heap.md | 10 + .../content/102-data-structures/index.md | 9 + .../100-big-o-notation.md | 11 + .../101-big-theta-notation.md | 8 + .../102-big-omega-notation.md | 8 + .../103-common-runtimes/100-constant.md | 8 + .../103-common-runtimes/101-logarithmic.md | 8 + .../103-common-runtimes/102-linear.md | 8 + .../103-common-runtimes/103-polynomial.md | 15 ++ .../103-common-runtimes/104-exponential.md | 17 ++ .../103-common-runtimes/105-factorial.md | 11 + .../103-common-runtimes/index.md | 18 ++ .../content/103-asymptotic-notation/index.md | 16 ++ .../100-sorting-algorithms/100-bubble-sort.md | 9 + .../101-selection-sort.md | 8 + .../102-insertion-sort.md | 9 + .../100-sorting-algorithms/103-heap-sort.md | 17 ++ .../100-sorting-algorithms/104-quick-sort.md | 11 + .../100-sorting-algorithms/105-merge-sort.md | 10 + .../100-sorting-algorithms/index.md | 12 + .../100-pre-order-traversal.md | 8 + .../101-in-order-traversal.md | 8 + .../102-post-order-traversal.md | 8 + .../103-breadth-first-search.md | 9 + .../104-depth-first-search.md | 9 + .../101-tree-algorithms/index.md | 12 + .../100-breadth-first-search.md | 9 + .../101-depth-first-search.md | 7 + .../102-bellman-fords-algorithm.md | 8 + .../103-dijkstras-algorithm.md | 8 + .../104-a-star-algorithm.md | 8 + .../102-graph-algorithms/index.md | 14 ++ .../100-dijkstras-algorithm.md | 9 + .../101-huffman-coding.md | 9 + .../102-kruskas-algorithm.md | 8 + .../103-ford-fulkerson-algorithm.md | 9 + .../104-prims-algorithm.md | 9 + .../104-greedy-algorithms/index.md | 11 + .../100-finding-hamiltonian-paths.md | 10 + .../101-solving-n-queen-problem.md | 9 + .../102-maze-solving-problem.md | 10 + .../103-knights-tour-problem.md | 10 + .../105-back-tracking-algorithms/index.md | 8 + .../106-robin-karp-algorithm.md | 11 + .../107-recursion/100-tail-recursion.md | 8 + .../107-recursion/101-non-tail-recursion.md | 12 + .../107-recursion/index.md | 12 + .../100-binary-search.md | 10 + .../101-linear-search.md | 7 + .../108-search-algorithms/index.md | 8 + .../109-cache-algorithms/100-lru-cache.md | 9 + .../109-cache-algorithms/101-lfu-cache.md | 8 + .../109-cache-algorithms/102-mfu-cache.md | 8 + .../109-cache-algorithms/index.md | 8 + .../content/104-common-algorithms/index.md | 15 ++ .../100-suffix-arrays.md | 11 + .../101-search-pattern-in-text.md | 7 + .../100-brute-force-search.md | 9 + .../101-knuth-morris-pratt.md | 15 ++ .../102-substring-search/102-boyer-moore.md | 9 + .../102-substring-search/103-rabin-karp.md | 11 + .../102-substring-search/index.md | 12 + .../index.md | 9 + .../content/106-bitwise-operators.md | 9 + .../content/107-floating-point-numbers.md | 8 + .../content/108-endianess/100-big-endian.md | 8 + .../108-endianess/101-little-endian.md | 9 + .../content/108-endianess/index.md | 9 + .../109-character-encodings/100-unicode.md | 8 + .../109-character-encodings/101-ascii.md | 8 + .../content/109-character-encodings/index.md | 8 + .../100-class-diagrams.md | 9 + .../102-usecase-diagrams.md | 15 ++ .../103-activity-diagrams.md | 8 + .../104-statemachine-diagrams.md | 9 + .../105-sequence-diagrams.md | 8 + .../content/110-common-uml-diagrams/index.md | 7 + .../100-gof-design-patterns.md | 7 + .../101-architectural-patterns.md | 8 + .../102-dependency-injection.md | 8 + .../103-null-object-pattern.md | 8 + .../104-type-object-pattern.md | 7 + .../content/111-design-patterns/index.md | 7 + .../112-basic-math-skills/100-probability.md | 14 ++ .../101-combinatorics.md | 10 + .../content/112-basic-math-skills/index.md | 20 ++ .../content/113-complexity-classes/100-p.md | 20 ++ .../content/113-complexity-classes/101-np.md | 20 ++ .../113-complexity-classes/102-co-np.md | 20 ++ .../113-complexity-classes/103-np-hard.md | 20 ++ .../100-travelling-salesman-problem.md | 10 + .../104-np-complete/101-knapsack-problem.md | 9 + .../102-longest-path-problem.md | 9 + .../104-np-complete/index.md | 20 ++ .../113-complexity-classes/105-p-equals-np.md | 7 + .../content/113-complexity-classes/index.md | 27 +++ .../computer-science/content/114-tries.md | 15 ++ .../100-avl-trees.md | 12 + .../101-red-black-trees.md | 15 ++ .../102-the-2-3-search-trees.md | 11 + .../103-the-2-3-4-trees.md | 9 + .../104-n-ary-trees.md | 11 + .../115-balanced-search-trees/105-b-tree.md | 15 ++ .../115-balanced-search-trees/index.md | 10 + .../100-horizontal-vs-vertical-scaling.md | 9 + .../116-system-design/101-clustering.md | 7 + .../116-system-design/101-load-balancing.md | 8 + .../content/116-system-design/102-caching.md | 9 + .../content/116-system-design/103-cdn.md | 8 + .../content/116-system-design/104-proxy.md | 8 + .../116-system-design/105-cap-theorem.md | 8 + .../content/116-system-design/106-queues.md | 9 + .../107-architectural-styles.md | 7 + .../content/116-system-design/108-rest.md | 10 + .../content/116-system-design/109-graphql.md | 7 + .../content/116-system-design/110-grpc.md | 14 ++ .../111-cloud-design-patterns.md | 9 + .../116-system-design/112-long-polling.md | 8 + .../116-system-design/113-short-polling.md | 7 + .../116-system-design/114-web-sockets.md | 7 + .../content/116-system-design/115-sse.md | 8 + .../content/116-system-design/index.md | 11 + .../100-sql-vs-nosql-databases.md | 11 + .../101-normalization-denormalization.md | 10 + .../102-entity-relationship-model.md | 8 + .../content/117-databases/103-ddl.md | 7 + .../content/117-databases/104-dml.md | 7 + .../content/117-databases/105-dql.md | 7 + .../content/117-databases/106-dcl.md | 7 + .../content/117-databases/107-locking.md | 9 + .../content/117-databases/109-acid-model.md | 9 + .../content/117-databases/110-base-model.md | 11 + .../content/117-databases/111-cap-theorem.md | 11 + .../117-databases/112-pacelc-theorem.md | 8 + .../content/117-databases/113-indexes.md | 8 + .../content/117-databases/114-views.md | 9 + .../content/117-databases/115-transactions.md | 7 + .../117-databases/116-stored-procedures.md | 8 + .../117-databases/117-database-federation.md | 7 + .../content/117-databases/118-replication.md | 8 + .../content/117-databases/119-sharding.md | 10 + .../content/117-databases/index.md | 9 + .../content/118-networking/100-sockets.md | 8 + .../content/118-networking/101-tls-https.md | 8 + .../content/118-networking/102-http.md | 12 + .../content/118-networking/103-dns.md | 11 + .../118-networking/104-tcp-ip-model.md | 10 + .../content/118-networking/105-osi-model.md | 10 + .../content/118-networking/index.md | 11 + .../100-public-key-cryptography.md | 9 + .../101-hashing-encryption-encoding.md | 11 + .../119-security/102-hashing-algorithms.md | 9 + .../content/119-security/103-owasp-top-10.md | 10 + .../content/119-security/index.md | 13 + .../100-how-cpu-executes-programs.md | 5 + .../101-how-computers-calculate.md | 5 + .../102-registers-and-ram.md | 5 + .../103-instructions-and-programs.md | 5 + .../120-how-computers-work/104-cpu-cache.md | 6 + .../content/120-how-computers-work/index.md | 11 + .../100-process-forking.md | 9 + .../101-memory-management.md | 8 + .../102-lock-mutex-semaphore.md | 13 + .../103-concurrency-in-multiple-cores.md | 6 + .../103-scheduling-algorithms.md | 15 ++ .../104-cpu-interrupts.md | 7 + .../105-processes-vs-threads.md | 8 + .../121-processes-and-threads/index.md | 8 + .../computer-science/content/122-kd-trees.md | 8 + .../content/123-skip-lists.md | 8 + src/roadmaps/cyber-security/cyber-security.md | 45 ++++ .../100-what-is-design-system.md | 10 + .../101-need-of-design-system.md | 11 + .../102-design-system-vs-component-library.md | 11 + .../103-atomic-design.md | 10 + .../105-stakeholders-involved.md | 17 ++ .../106-design-system-examples.md | 11 + .../content/100-design-system-basics/index.md | 13 + .../100-component.md | 5 + .../101-component-library.md | 9 + .../102-design-language.md | 14 ++ .../103-governance.md | 14 ++ .../104-guidelines.md | 7 + .../105-pattern.md | 3 + .../106-pilot.md | 7 + .../107-token.md | 8 + .../108-ui-kit.md | 9 + .../101-design-system-terminology/index.md | 8 + .../100-from-scratch.md | 8 + .../101-from-existing-design.md | 7 + .../102-making-a-design-system/index.md | 11 + .../100-existing-design-process.md | 8 + .../101-visual-audit.md | 5 + .../102-identify-design-elements.md | 3 + .../103-identify-components.md | 3 + .../104-ab-tests-and-experiments.md | 3 + .../105-regional-requirements.md | 3 + .../106-documentation.md | 3 + .../103-existing-design-analysis/index.md | 11 + .../100-brand/100-vision.md | 3 + .../100-brand/101-design-principles.md | 3 + .../100-brand/102-terminology.md | 3 + .../100-brand/103-tone-of-voice.md | 3 + .../100-brand/104-writing-guidelines.md | 3 + .../104-design-language/100-brand/index.md | 3 + .../101-guidelines/100-accessibility.md | 11 + .../101-guidelines/101-user-onboarding.md | 3 + .../102-microcopy-guidelines.md | 3 + .../101-guidelines/index.md | 3 + .../102-logo/100-monochrome-version.md | 3 + .../102-logo/101-small-use-guidance.md | 3 + .../102-placement-and-clearance-guidance.md | 3 + .../102-logo/103-usage-guidance.md | 3 + .../102-logo/104-different-file-formats.md | 3 + .../104-design-language/102-logo/index.md | 3 + .../content/104-design-language/index.md | 10 + .../100-layout/100-spacing.md | 3 + .../100-layout/101-breakpoints.md | 3 + .../105-design-tokens/100-layout/102-grid.md | 3 + .../105-design-tokens/100-layout/103-units.md | 3 + .../105-design-tokens/100-layout/index.md | 3 + .../101-color/100-guidelines.md | 3 + .../101-color/101-dark-mode.md | 3 + .../101-color/102-functional-colors.md | 3 + .../101-color/103-accessibility.md | 3 + .../105-design-tokens/101-color/index.md | 3 + .../102-iconography/100-accessibility.md | 3 + .../102-iconography/101-style.md | 3 + .../102-iconography/102-naming.md | 3 + .../102-iconography/103-grid-relation.md | 3 + .../102-iconography/104-sizes.md | 3 + .../102-iconography/105-keywords.md | 3 + .../102-iconography/106-reserved-icons.md | 3 + .../102-iconography/107-guidelines.md | 3 + .../102-iconography/index.md | 3 + .../103-typography/100-responsiveness.md | 3 + .../103-typography/101-grid-relation.md | 3 + .../103-typography/102-readability.md | 3 + .../103-typography/103-performance.md | 3 + .../103-typography/104-guidelines.md | 3 + .../105-design-tokens/103-typography/index.md | 3 + .../content/105-design-tokens/index.md | 7 + .../content/106-core-components/100-avatar.md | 10 + .../content/106-core-components/101-banner.md | 10 + .../content/106-core-components/102-badge.md | 6 + .../content/106-core-components/103-button.md | 13 + .../content/106-core-components/104-card.md | 9 + .../106-core-components/105-carousel.md | 10 + .../106-core-components/106-dropdown.md | 11 + .../content/106-core-components/107-icon.md | 6 + .../106-core-components/108-input-checkbox.md | 11 + .../106-core-components/109-input-radio.md | 10 + .../106-core-components/110-input-text.md | 11 + .../106-core-components/111-input-switch.md | 8 + .../content/106-core-components/112-select.md | 11 + .../106-core-components/113-textarea.md | 9 + .../content/106-core-components/114-list.md | 8 + .../115-loading-indicator.md | 8 + .../content/106-core-components/116-modal.md | 10 + .../content/106-core-components/117-tabs.md | 9 + .../content/106-core-components/118-toast.md | 9 + .../106-core-components/119-tooltip.md | 9 + .../content/106-core-components/index.md | 3 + .../100-development/100-component-catalog.md | 3 + .../100-development/101-documentation.md | 3 + .../100-development/102-code-style.md | 3 + .../100-development/103-unit-testing.md | 3 + .../104-accessibility-testing.md | 3 + .../105-semantic-versioning.md | 3 + .../100-development/106-release-strategy.md | 3 + .../100-development/107-commit-guidelines.md | 3 + .../100-development/108-pr-templates.md | 3 + .../109-contribution-guidelines.md | 3 + .../107-tooling/100-development/index.md | 3 + .../101-design/100-design-editor.md | 3 + .../107-tooling/101-design/101-plugins.md | 3 + .../101-design/102-version-control.md | 3 + .../101-design/103-contribution-guidelines.md | 3 + .../content/107-tooling/101-design/index.md | 4 + .../content/107-tooling/index.md | 4 + .../100-task-management/100-ticketing.md | 3 + .../100-task-management/101-milestones.md | 3 + .../100-task-management/102-roadmap.md | 3 + .../100-task-management/index.md | 3 + .../100-community-meetings.md | 3 + .../101-communication-channel.md | 3 + .../101-communications/102-open-hours.md | 3 + .../101-communications/103-faqs.md | 3 + .../101-communications/index.md | 3 + .../102-analytics/100-component-analytics.md | 3 + .../102-analytics/101-error-logging.md | 3 + .../102-analytics/102-tooling-analytics.md | 3 + .../103-service-and-health-metrics.md | 3 + .../102-analytics/index.md | 3 + .../content/108-project-management/index.md | 3 + src/roadmaps/design-system/design-system.md | 52 ++++ .../devops/content/100-language/100-python.md | 14 ++ .../devops/content/100-language/101-ruby.md | 9 + .../content/100-language/102-javascript.md | 17 ++ .../devops/content/100-language/103-go.md | 14 ++ .../devops/content/100-language/104-rust.md | 8 + .../devops/content/100-language/105-c.md | 8 + .../devops/content/100-language/106-cpp.md | 8 + .../devops/content/100-language/index.md | 3 + .../content/101-os-concepts/100-networking.md | 11 + .../101-os-concepts/101-io-management.md | 9 + .../101-os-concepts/102-virtualization.md | 10 + .../101-os-concepts/103-memory-storage.md | 10 + .../101-os-concepts/104-file-system.md | 7 + .../content/101-os-concepts/105-sockets.md | 12 + .../content/101-os-concepts/106-posix.md | 15 ++ .../content/101-os-concepts/107-processes.md | 14 ++ .../101-os-concepts/108-startup-management.md | 11 + .../101-os-concepts/109-service-management.md | 11 + .../110-threads-concurrency.md | 18 ++ .../devops/content/101-os-concepts/index.md | 9 + .../100-operating-system/100-windows.md | 8 + .../100-operating-system/101-centos.md | 9 + .../100-operating-system/102-ubuntu.md | 10 + .../100-operating-system/103-suse-linux.md | 9 + .../100-operating-system/104-rhel.md | 9 + .../100-operating-system/105-fedora.md | 9 + .../100-operating-system/106-debian.md | 9 + .../100-operating-system/107-free-bsd.md | 10 + .../100-operating-system/108-open-bsd.md | 10 + .../100-operating-system/109-net-bsd.md | 9 + .../100-operating-system/index.md | 12 + .../100-screen-multiplexer.md | 10 + .../100-terminal-multiplexers.md | 8 + .../101-tmux-multiplexer.md | 12 + .../101-live-in-terminal/102-ps.md | 12 + .../101-live-in-terminal/102-top.md | 10 + .../101-live-in-terminal/103-htop.md | 8 + .../101-live-in-terminal/104-atop.md | 8 + .../104-bash-scripting.md | 19 ++ .../101-live-in-terminal/105-editors.md | 21 ++ .../101-live-in-terminal/105-lsof.md | 10 + .../106-compiling-apps.md | 23 ++ .../101-live-in-terminal/106-nmon.md | 8 + .../101-live-in-terminal/107-iostat.md | 8 + .../101-live-in-terminal/108-sar.md | 10 + .../101-live-in-terminal/109-vmstat.md | 10 + .../101-live-in-terminal/110-traceroute.md | 10 + .../101-live-in-terminal/111-mtr.md | 11 + .../101-live-in-terminal/112-ping.md | 10 + .../101-live-in-terminal/113-nmap.md | 8 + .../101-live-in-terminal/114-netstat.md | 11 + .../101-live-in-terminal/115-airmon.md | 1 + .../101-live-in-terminal/116-tcpdump.md | 10 + .../101-live-in-terminal/117-airodump.md | 10 + .../101-live-in-terminal/118-iptables.md | 8 + .../101-live-in-terminal/119-dig.md | 13 + .../101-live-in-terminal/120-awk.md | 13 + .../101-live-in-terminal/121-sed.md | 14 ++ .../101-live-in-terminal/122-grep.md | 13 + .../101-live-in-terminal/123-sort.md | 14 ++ .../101-live-in-terminal/124-cut.md | 10 + .../101-live-in-terminal/125-uniq.md | 10 + .../101-live-in-terminal/126-cat.md | 18 ++ .../101-live-in-terminal/127-echo.md | 10 + .../101-live-in-terminal/128-fmt.md | 9 + .../101-live-in-terminal/129-tr.md | 10 + .../101-live-in-terminal/130-nl.md | 10 + .../101-live-in-terminal/131-wc.md | 10 + .../101-live-in-terminal/132-egrep.md | 13 + .../101-live-in-terminal/133-fgrep.md | 14 ++ .../101-live-in-terminal/134-strace.md | 8 + .../101-live-in-terminal/135-dtrace.md | 8 + .../101-live-in-terminal/136-systemtap.md | 1 + .../101-live-in-terminal/137-uname.md | 9 + .../101-live-in-terminal/138-df.md | 9 + .../101-live-in-terminal/139-history.md | 9 + .../101-live-in-terminal/140-du.md | 9 + .../101-live-in-terminal/141-scp.md | 10 + .../101-live-in-terminal/142-ufw.md | 9 + .../101-live-in-terminal/index.md | 7 + .../content/102-managing-servers/index.md | 7 + .../103-networking-protocols/100-osi-model.md | 10 + .../103-networking-protocols/101-dns.md | 10 + .../103-networking-protocols/102-http.md | 11 + .../103-emails/100-white-grey-listing.md | 10 + .../103-emails/101-smtp.md | 9 + .../103-emails/102-imaps.md | 9 + .../103-emails/103-pop3s.md | 10 + .../103-emails/104-dmarc.md | 7 + .../103-emails/105-spf.md | 8 + .../103-emails/106-domain-keys.md | 7 + .../103-emails/index.md | 7 + .../103-networking-protocols/103-https.md | 12 + .../103-networking-protocols/104-ftp.md | 8 + .../103-networking-protocols/105-ssl-tls.md | 10 + .../103-networking-protocols/106-ssh.md | 11 + .../107-port-forwarding.md | 8 + .../content/103-networking-protocols/index.md | 7 + .../104-setting-up-x/100-reverse-proxy.md | 14 ++ .../104-setting-up-x/101-caching-server.md | 9 + .../104-setting-up-x/102-forward-proxy.md | 14 ++ .../104-setting-up-x/103-load-balancer.md | 8 + .../content/104-setting-up-x/104-firewall.md | 12 + .../content/104-setting-up-x/105-nginx.md | 8 + .../content/104-setting-up-x/106-apache.md | 8 + .../content/104-setting-up-x/106-caddy.md | 8 + .../content/104-setting-up-x/107-tomcat.md | 9 + .../content/104-setting-up-x/108-iis.md | 8 + .../devops/content/104-setting-up-x/index.md | 1 + .../105-infrastructure-as-code/100-docker.md | 10 + .../100-service-mesh/100-consul.md | 7 + .../100-service-mesh/101-istio.md | 7 + .../100-service-mesh/102-envoy.md | 9 + .../100-service-mesh/103-linkerd.md | 9 + .../100-service-mesh/index.md | 8 + .../101-containers.md | 12 + .../105-infrastructure-as-code/101-lxc.md | 9 + .../100-ansible.md | 11 + .../102-configuration-management/101-chef.md | 12 + .../102-configuration-management/102-salt.md | 10 + .../103-puppet.md | 9 + .../102-configuration-management/index.md | 9 + .../100-terraform.md | 15 ++ .../101-aws-cdk.md | 11 + .../102-cloudformation.md | 10 + .../103-pulumi.md | 9 + .../103-infrastructure-provisioning/index.md | 3 + .../104-docker-swarm.md | 11 + .../104-kubernetes.md | 13 + .../105-infrastructure-as-code/104-mesos.md | 9 + .../105-infrastructure-as-code/104-nomad.md | 9 + .../105-infrastructure-as-code/index.md | 12 + .../devops/content/106-ci-cd/100-gitlab-ci.md | 12 + .../devops/content/106-ci-cd/101-jenkins.md | 9 + .../content/106-ci-cd/102-github-actions.md | 10 + .../devops/content/106-ci-cd/103-travis-ci.md | 9 + .../devops/content/106-ci-cd/104-bamboo.md | 9 + .../devops/content/106-ci-cd/105-teamcity.md | 10 + .../106-ci-cd/106-azure-devops-services.md | 9 + .../devops/content/106-ci-cd/107-circle-ci.md | 9 + .../devops/content/106-ci-cd/108-drone.md | 9 + .../devops/content/106-ci-cd/index.md | 12 + .../100-prometheus.md | 9 + .../101-nagios.md | 9 + .../102-datadog.md | 8 + .../102-grafana.md | 10 + .../102-monit.md | 13 + .../102-zabbix.md | 9 + .../100-infrastructure-monitoring/index.md | 10 + .../101-application-monitoring/100-jaeger.md | 8 + .../101-new-relic.md | 9 + .../102-app-dynamics.md | 8 + .../101-application-monitoring/103-instana.md | 8 + .../104-open-telemetry.md | 8 + .../101-application-monitoring/index.md | 8 + .../102-logs-management/100-elastic-stack.md | 14 ++ .../102-logs-management/101-graylog.md | 9 + .../102-logs-management/102-papertrail.md | 9 + .../102-logs-management/102-splunk.md | 9 + .../102-logs-management/103-loki.md | 8 + .../102-logs-management/index.md | 9 + .../devops/content/107-monitoring/index.md | 8 + .../content/108-cloud-providers/100-aws.md | 17 ++ .../108-cloud-providers/101-google-cloud.md | 12 + .../content/108-cloud-providers/102-azure.md | 10 + .../content/108-cloud-providers/103-heroku.md | 9 + .../108-cloud-providers/104-albaba-cloud.md | 9 + .../108-cloud-providers/104-digital-ocean.md | 9 + .../content/108-cloud-providers/105-linode.md | 9 + .../content/108-cloud-providers/106-vultr.md | 8 + .../108-cloud-providers/108-IBM-Cloud.md | 14 ++ .../content/108-cloud-providers/index.md | 8 + .../devops/content/109-availability.md | 10 + .../devops/content/110-data-management.md | 9 + .../content/111-design-and-implementation.md | 8 + .../content/112-management-and-monitoring.md | 7 + src/roadmaps/devops/devops.md | 55 +++++ .../content/100-dart-basics/100-dart-pad.md | 7 + .../content/100-dart-basics/101-variables.md | 5 + .../100-dart-basics/102-built-in-types.md | 5 + .../content/100-dart-basics/103-functions.md | 5 + .../content/100-dart-basics/104-operators.md | 5 + .../105-control-flow-statements.md | 5 + .../flutter/content/100-dart-basics/index.md | 1 + .../100-flutter-cli.md | 7 + .../101-ides/100-vs-code.md | 1 + .../101-ides/101-android-studio.md | 1 + .../101-ides/102-intellij-idea.md | 1 + .../101-ides/index.md | 1 + .../index.md | 1 + .../102-widgets/100-stateless-widgets.md | 7 + .../102-widgets/101-stateful-widgets.md | 7 + .../100-material-widgets.md | 7 + .../101-cupertino-widgets.md | 7 + .../102-widgets/102-styled-widgets/index.md | 1 + .../flutter/content/102-widgets/index.md | 1 + .../103-working-with-assets/100-fonts.md | 7 + .../103-working-with-assets/101-images.md | 7 + .../102-other-file-types.md | 1 + .../content/103-working-with-assets/index.md | 1 + .../104-version-control-systems/100-git.md | 1 + .../104-version-control-systems/index.md | 1 + .../105-repo-hosting-services/100-github.md | 1 + .../105-repo-hosting-services/index.md | 1 + .../100-dependency-injection.md | 1 + .../101-design-patterns.md | 1 + .../102-solid-principles.md | 1 + .../content/106-design-principles/103-oop.md | 1 + .../content/106-design-principles/index.md | 1 + .../107-package-manager/100-pub-dev.md | 8 + .../101-flutter-pub-dart-pub.md | 1 + .../content/107-package-manager/index.md | 1 + .../content/108-working-with-apis/100-json.md | 7 + .../108-working-with-apis/101-web-sockets.md | 7 + .../108-working-with-apis/102-graphql.md | 1 + .../108-working-with-apis/103-restful-apis.md | 10 + .../content/108-working-with-apis/index.md | 1 + .../flutter/content/109-storage/100-sqlite.md | 1 + .../109-storage/101-shared-preferences.md | 1 + .../102-firebase/100-authentication.md | 1 + .../109-storage/102-firebase/101-storage.md | 1 + .../109-storage/102-firebase/102-firestore.md | 1 + .../102-firebase/103-push-notifications.md | 1 + .../102-firebase/104-remote-config.md | 1 + .../content/109-storage/102-firebase/index.md | 7 + .../flutter/content/109-storage/index.md | 1 + .../110-advanced-dart/100-core-libraries.md | 7 + .../content/110-advanced-dart/101-lists.md | 1 + .../110-advanced-dart/102-collections.md | 1 + .../content/110-advanced-dart/103-lambdas.md | 1 + .../104-functional-programming.md | 1 + .../content/110-advanced-dart/105-isolates.md | 1 + .../110-advanced-dart/106-async-await.md | 1 + .../content/110-advanced-dart/107-streams.md | 1 + .../content/110-advanced-dart/108-futures.md | 1 + .../content/110-advanced-dart/index.md | 1 + .../111-state-management/100-provider.md | 8 + .../content/111-state-management/101-bloc.md | 1 + .../111-state-management/102-flutter-bloc.md | 8 + .../111-state-management/103-velocity-x.md | 1 + .../content/111-state-management/104-get-x.md | 1 + .../content/111-state-management/105-redux.md | 7 + .../content/111-state-management/index.md | 1 + .../112-animations/100-curved-animations.md | 1 + .../101-animation-controller.md | 1 + .../112-animations/102-animated-builder.md | 1 + .../112-animations/103-animated-widget.md | 1 + .../content/112-animations/104-hero.md | 7 + .../content/112-animations/105-opacity.md | 7 + .../flutter/content/112-animations/index.md | 7 + .../content/113-testing/100-unit-testing.md | 7 + .../content/113-testing/101-widget-testing.md | 7 + .../113-testing/102-integration-testing.md | 7 + .../flutter/content/113-testing/103-tdd.md | 1 + .../flutter/content/113-testing/104-bdd.md | 1 + .../flutter/content/113-testing/index.md | 1 + .../114-reactive-programming/100-rxdart.md | 1 + .../content/114-reactive-programming/index.md | 1 + .../115-dev-tools/100-flutter-inspector.md | 7 + .../115-dev-tools/101-flutter-outline.md | 1 + .../115-dev-tools/102-memory-allocation.md | 1 + .../flutter/content/115-dev-tools/index.md | 1 + .../100-render-objects.md | 1 + .../116-flutter-internals/102-immutability.md | 1 + .../content/116-flutter-internals/3-trees.md | 1 + .../content/116-flutter-internals/index.md | 1 + .../content/117-ci-cd/100-fast-lane.md | 1 + .../content/117-ci-cd/101-codemagic.md | 1 + .../flutter/content/117-ci-cd/102-bitrise.md | 1 + .../content/117-ci-cd/103-github-actions.md | 1 + .../104-firebase-app-distribution.md | 1 + .../flutter/content/117-ci-cd/index.md | 1 + .../content/118-analytics/100-segment.md | 1 + .../content/118-analytics/101-mix-panel.md | 1 + .../118-analytics/102-firebase-analytics.md | 1 + .../118-analytics/103-google-analytics.md | 1 + .../flutter/content/118-analytics/index.md | 1 + .../content/119-deployment/100-appstore.md | 1 + .../101-guidelines-and-protocols.md | 1 + .../content/119-deployment/101-playstore.md | 1 + .../flutter/content/119-deployment/index.md | 1 + src/roadmaps/flutter/flutter.md | 52 ++++ .../content/100-go-basics/100-basic-syntax.md | 9 + .../content/100-go-basics/101-variables.md | 9 + .../content/100-go-basics/102-data-types.md | 11 + .../content/100-go-basics/103-for-loop.md | 14 ++ .../golang/content/100-go-basics/104-range.md | 9 + .../100-go-basics/106-errors-panic-recover.md | 13 + .../content/100-go-basics/107-conditionals.md | 14 ++ .../content/100-go-basics/108-functions.md | 13 + .../content/100-go-basics/109-packages.md | 12 + .../content/100-go-basics/110-type-casting.md | 9 + .../100-go-basics/111-type-inference.md | 8 + .../content/100-go-basics/112-arrays.md | 9 + .../content/100-go-basics/113-slices.md | 10 + .../golang/content/100-go-basics/114-maps.md | 10 + .../golang/content/100-go-basics/115-make.md | 10 + .../content/100-go-basics/116-structs.md | 9 + .../golang/content/100-go-basics/index.md | 7 + .../content/101-go-advanced/100-go-modules.md | 15 ++ .../101-go-advanced/101-working-with-json.md | 9 + .../102-types-and-type-assertions.md | 9 + .../content/101-go-advanced/103-interfaces.md | 12 + .../content/101-go-advanced/104-context.md | 11 + .../content/101-go-advanced/105-goroutines.md | 15 ++ .../content/101-go-advanced/106-channels.md | 15 ++ .../content/101-go-advanced/107-buffer.md | 9 + .../content/101-go-advanced/108-select.md | 12 + .../content/101-go-advanced/109-mutext.md | 7 + .../golang/content/101-go-advanced/index.md | 1 + .../content/102-go-building-clis/100-cobra.md | 9 + .../102-go-building-clis/101-urfave-cli.md | 10 + .../content/102-go-building-clis/index.md | 9 + .../golang/content/103-go-orms/100-gorm.md | 8 + .../golang/content/103-go-orms/index.md | 5 + .../104-go-web-frameworks/100-beego.md | 8 + .../content/104-go-web-frameworks/101-gin.md | 8 + .../104-go-web-frameworks/102-revel.md | 8 + .../content/104-go-web-frameworks/103-echo.md | 8 + .../104-go-web-frameworks/104-gorilla.md | 8 + .../104-go-web-frameworks/105-gofiber.md | 8 + .../104-go-web-frameworks/106-buffalo.md | 8 + .../content/104-go-web-frameworks/index.md | 12 + .../content/105-go-logging/100-zerolog.md | 9 + .../golang/content/105-go-logging/101-zap.md | 7 + .../golang/content/105-go-logging/102-apex.md | 7 + .../golang/content/105-go-logging/index.md | 8 + .../100-melody.md | 7 + .../101-centrifugo.md | 8 + .../106-go-realtime-communication/index.md | 1 + .../100-rest/100-heimdall.md | 14 ++ .../100-rest/101-grequests.md | 14 ++ .../107-go-api-clients/100-rest/index.md | 9 + .../101-graphql/100-graphql-go.md | 10 + .../101-graphql/101-gqlgen.md | 9 + .../107-go-api-clients/101-graphql/index.md | 16 ++ .../content/107-go-api-clients/index.md | 7 + .../content/108-go-testing-your-apps.md | 10 + .../109-go-microservices/100-watermill.md | 8 + .../content/109-go-microservices/101-rpcx.md | 13 + .../109-go-microservices/102-go-kit.md | 9 + .../content/109-go-microservices/103-micro.md | 8 + .../109-go-microservices/104-go-zero.md | 9 + .../105-protocol-buffers.md | 15 ++ .../109-go-microservices/106-grpc-go.md | 9 + .../109-go-microservices/107-grpc-gateway.md | 8 + .../content/109-go-microservices/108-twirp.md | 10 + .../content/109-go-microservices/index.md | 10 + src/roadmaps/golang/golang.md | 53 +++++ .../100-java-fundamentals/100-basic-syntax.md | 12 + .../101-data-types-variables.md | 13 + .../100-java-fundamentals/102-conditionals.md | 16 ++ .../100-java-fundamentals/103-functions.md | 14 ++ .../104-datastructures.md | 15 ++ .../content/100-java-fundamentals/105-oop.md | 18 ++ .../106-files-and-apis.md | 14 ++ .../100-java-fundamentals/106-packages.md | 11 + .../100-java-fundamentals/107-loops.md | 12 + .../108-exception-handling.md | 13 + .../content/100-java-fundamentals/index.md | 16 ++ .../101-java-advanced-topics/100-generics.md | 10 + .../101-memory-management.md | 8 + .../102-collection-framework.md | 8 + .../103-serialization.md | 9 + .../104-networking-sockets.md | 12 + .../101-java-advanced-topics/105-streams.md | 11 + .../106-how-jvm-works.md | 12 + .../107-garbage-collection.md | 9 + .../108-basics-of-threads.md | 12 + .../content/101-java-advanced-topics/index.md | 1 + .../102-java-build-tools/100-gradle.md | 11 + .../content/102-java-build-tools/101-maven.md | 8 + .../content/102-java-build-tools/102-ant.md | 10 + .../content/102-java-build-tools/index.md | 5 + .../103-java-web-frameworks/100-spring.md | 11 + .../101-spring-boot.md | 12 + .../102-play-framework.md | 10 + .../103-java-web-frameworks/103-spark.md | 9 + .../content/103-java-web-frameworks/index.md | 3 + .../java/content/104-java-orm/100-jpa.md | 20 ++ .../104-java-orm/101-spring-data-jpa.md | 12 + .../content/104-java-orm/102-hibernate.md | 8 + .../java/content/104-java-orm/103-ebean.md | 9 + .../java/content/104-java-orm/index.md | 11 + .../105-java-logging-frameworks/100-log4j2.md | 10 + .../101-logback.md | 7 + .../105-java-logging-frameworks/102-slf4j.md | 7 + .../103-tinylog.md | 7 + .../105-java-logging-frameworks/index.md | 9 + .../java/content/106-java-jdbc/100-jdbi3.md | 8 + .../106-java-jdbc/101-jdbc-template.md | 7 + .../java/content/106-java-jdbc/index.md | 8 + .../107-testing-java-apps/100-mocking.md | 13 + .../107-testing-java-apps/101-cucumber-jvm.md | 10 + .../107-testing-java-apps/102-cukes.md | 8 + .../107-testing-java-apps/103-jbehave.md | 8 + .../107-testing-java-apps/104-junit.md | 11 + .../107-testing-java-apps/105-testng.md | 9 + .../107-testing-java-apps/106-rest-assured.md | 8 + .../107-testing-java-apps/107-jmeter.md | 7 + .../content/107-testing-java-apps/index.md | 8 + src/roadmaps/java/java.md | 52 ++++ .../100-what-is-javascript.md | 13 + .../101-history-of-javascript.md | 8 + .../102-javascript-versions.md | 8 + .../103-how-to-run-javascript.md | 9 + .../100-javascript-introduction/index.md | 14 ++ .../100-variable-declarations/100-var.md | 11 + .../100-variable-declarations/101-let.md | 9 + .../100-variable-declarations/102-const.md | 10 + .../100-variable-declarations/index.md | 8 + .../101-javascript-variables/101-hoisting.md | 9 + .../102-naming-rules.md | 11 + .../103-scopes/100-block.md | 8 + .../103-scopes/101-function.md | 9 + .../103-scopes/102-global.md | 9 + .../103-scopes/index.md | 16 ++ .../content/101-javascript-variables/index.md | 8 + .../100-primitive-types.md | 17 ++ .../101-object/100-prototype.md | 9 + .../101-object/101-prototypal-inheritance.md | 10 + .../101-object/102-builtin-objects.md | 18 ++ .../101-object/index.md | 10 + .../102-typeof-operator.md | 8 + .../content/102-javascript-datatypes/index.md | 10 + .../100-type-conversion-coercion.md | 9 + .../101-explicit-type-casting.md | 11 + .../102-implicit-type-casting.md | 10 + .../103-javascript-type-casting/index.md | 11 + .../100-indexed-collections/100-arrays.md | 9 + .../101-typed-arrays.md | 8 + .../100-indexed-collections/index.md | 10 + .../101-keyed-collections/100-map.md | 8 + .../101-keyed-collections/101-weak-map.md | 8 + .../101-keyed-collections/102-set.md | 8 + .../101-keyed-collections/103-weak-set.md | 8 + .../101-keyed-collections/index.md | 10 + .../102-structured-data/100-json.md | 8 + .../102-structured-data/index.md | 9 + .../104-javascript-data-structures/index.md | 7 + .../100-is-loosely-equal.md | 8 + .../101-is-strictly-equal.md | 8 + .../102-same-value-zero.md | 7 + .../100-equality-algorithms/103-same-value.md | 7 + .../100-equality-algorithms/index.md | 7 + .../101-value-comparison-operators.md | 12 + .../index.md | 8 + .../100-for-in-statement.md | 8 + .../101-for-of-statement.md | 7 + .../100-labeled-statements.md | 10 + .../102-break-continue/index.md | 11 + .../103-for-statement.md | 8 + .../104-do-while-statement.md | 8 + .../105-while-statement.md | 8 + .../106-javascript-loops-iterations/index.md | 16 ++ .../100-throw-statement.md | 6 + .../101-try-catch-finally.md | 8 + .../102-utilizing-error-objects.md | 35 +++ .../100-exception-handling/index.md | 7 + .../101-conditional-statements/100-if-else.md | 17 ++ .../101-conditional-statements/101-switch.md | 27 +++ .../101-conditional-statements/index.md | 8 + .../107-javascript-control-flow/index.md | 13 + .../100-assignment-operators.md | 8 + .../101-omparison-operators.md | 9 + .../102-arithmetic-operators.md | 19 ++ .../103-bitwise-operators.md | 19 ++ .../104-logical-operators.md | 8 + .../105-bigint-operators.md | 7 + .../106-string-operators.md | 10 + .../107-conditional-operators.md | 14 ++ .../108-comma-operators.md | 7 + .../109-unary-operators.md | 8 + .../110-relational-operators.md | 7 + .../index.md | 7 + .../100-defining-calling-functions.md | 18 ++ .../100-default-params.md | 7 + .../101-rest-params.md | 7 + .../101-function-parameters/index.md | 7 + .../102-arrow-functions.md | 8 + .../109-javascript-functions/103-iifes.md | 8 + .../104-arguments-object.md | 7 + .../100-recursion.md | 9 + .../101-lexical-scoping.md | 9 + .../102-closures.md | 7 + .../105-scope-and-function-stack/index.md | 18 ++ .../106-built-in-functions.md | 11 + .../content/109-javascript-functions/index.md | 9 + .../content/110-javascript-strict-mode.md | 14 ++ .../100-function-borrowing.md | 7 + .../101-this-in-a-method.md | 8 + .../102-this-in-a-function.md | 9 + .../103-using-this-alone.md | 9 + .../104-this-in-event-handlers.md | 7 + .../105-this-in-arrow-functions.md | 7 + .../106-explicit-binding.md | 8 + .../107-call-method.md | 7 + .../108-apply-method.md | 7 + .../109-bind-method.md | 7 + .../111-javascript-this-keyword/index.md | 15 ++ .../100-event-loop.md | 9 + .../101-set-timeout.md | 10 + .../102-set-interval.md | 10 + .../103-callbacks/100-callback-hell.md | 7 + .../103-callbacks/index.md | 8 + .../104-promises/100-async-await.md | 11 + .../104-promises/index.md | 10 + .../index.md | 14 ++ .../content/113-javascript-classes.md | 8 + ...114-javascript-iterators-and-generators.md | 9 + .../115-javascript-modules/100-commonjs.md | 9 + .../content/115-javascript-modules/101-esm.md | 11 + .../content/115-javascript-modules/index.md | 9 + .../100-memory-lifecycle.md | 14 ++ .../101-garbage-collection.md | 8 + .../116-javascript-memory-management/index.md | 8 + .../100-debugging-issues.md | 9 + .../101-debugging-memory-leaks.md | 10 + .../102-debugging-performance.md | 3 + .../117-javascript-chrome-dev-tools/index.md | 12 + .../100-xml-http-request.md | 9 + .../118-working-with-apis/101-fetch.md | 10 + .../content/118-working-with-apis/index.md | 11 + src/roadmaps/javascript/javascript.md | 50 ++++ .../100-what-is-nodejs.md | 11 + .../100-nodejs-introduction/101-why-nodejs.md | 10 + .../102-history-of-nodejs.md | 7 + .../103-nodejs-vs-browser.md | 7 + .../104-running-nodejs-code.md | 7 + .../content/100-nodejs-introduction/index.md | 10 + .../101-nodejs-modules/100-commonjs-vs-esm.md | 11 + .../101-nodejs-modules/101-custom-modules.md | 10 + .../101-nodejs-modules/102-global-keyword.md | 9 + .../content/101-nodejs-modules/index.md | 11 + .../nodejs/content/102-nodejs-npm/100-npx.md | 9 + .../101-global-install-vs-local-install.md | 10 + .../102-nodejs-npm/102-updating-packages.md | 9 + .../102-nodejs-npm/103-using-packages.md | 7 + .../102-nodejs-npm/104-running-scripts.md | 9 + .../102-nodejs-npm/105-npm-workspaces.md | 8 + .../102-nodejs-npm/106-creating-packages.md | 8 + .../nodejs/content/102-nodejs-npm/index.md | 13 + .../100-stack-trace.md | 9 + .../101-using-debugger.md | 10 + .../102-uncaught-exceptions.md | 11 + .../103-error-types/100-javascript-errors.md | 18 ++ .../103-error-types/101-system-errors.md | 25 ++ .../102-user-specified-errors.md | 7 + .../103-error-types/103-assertion-errors.md | 1 + .../103-error-types/index.md | 1 + .../104-async-errors.md | 7 + .../103-nodejs-error-handling/index.md | 8 + .../100-event-loop.md | 11 + .../101-event-emitter.md | 8 + .../102-promises.md | 18 ++ .../103-async-await.md | 11 + .../104-callbacks.md | 8 + .../105-set-timeout.md | 10 + .../106-set-interval.md | 10 + .../107-set-immediate.md | 8 + .../108-process-next-tick.md | 9 + .../104-nodejs-async-programming/index.md | 8 + .../100-fs-module.md | 9 + .../101-path-module.md | 9 + .../102-process-cwd.md | 8 + .../105-nodejs-working-with-files/103-glob.md | 7 + .../104-globby.md | 1 + .../105-fs-extra.md | 7 + .../106-chokidar.md | 7 + .../107-dirname.md | 8 + .../108-filename.md | 7 + .../105-nodejs-working-with-files/index.md | 7 + .../100-exitting-and-exit-codes.md | 8 + .../101-printing-output/100-process-stdout.md | 6 + .../101-printing-output/101-process-stderr.md | 7 + .../101-printing-output/102-chalk.md | 8 + .../101-printing-output/103-figlet.md | 7 + .../101-printing-output/104-cli-progress.md | 7 + .../101-printing-output/index.md | 1 + .../102-taking-input/100-process-stdin.md | 8 + .../102-taking-input/101-prompts.md | 7 + .../102-taking-input/102-inquirer.md | 13 + .../102-taking-input/index.md | 3 + .../103-command-line-args/100-process-argv.md | 8 + .../103-command-line-args/101-commander-js.md | 7 + .../103-command-line-args/index.md | 1 + .../104-environment-variables/100-dotenv.md | 10 + .../101-process-env.md | 8 + .../104-environment-variables/index.md | 5 + .../106-nodejs-command-line-apps/index.md | 9 + .../107-nodejs-apis/100-http-module.md | 9 + .../content/107-nodejs-apis/101-express-js.md | 11 + .../content/107-nodejs-apis/102-nest-js.md | 9 + .../content/107-nodejs-apis/103-fastify.md | 9 + .../nodejs/content/107-nodejs-apis/104-got.md | 8 + .../content/107-nodejs-apis/105-unfetch.md | 7 + .../content/107-nodejs-apis/106-axios.md | 8 + .../107-nodejs-apis/107-api-calls-http.md | 1 + .../107-nodejs-apis/108-jsonwebtoken.md | 9 + .../107-nodejs-apis/109-passport-js.md | 9 + .../nodejs/content/107-nodejs-apis/index.md | 7 + .../100-nodemon.md | 9 + .../108-nodejs-keep-app-running/index.md | 6 + .../109-nodejs-template-engines/100-marko.md | 7 + .../109-nodejs-template-engines/101-pug.md | 12 + .../109-nodejs-template-engines/102-ejs.md | 13 + .../109-nodejs-template-engines/index.md | 12 + .../100-relational/100-knex.md | 7 + .../100-relational/101-type-orm.md | 10 + .../100-relational/102-sequelize.md | 14 ++ .../100-relational/103-prisma.md | 8 + .../100-relational/104-native-drivers.md | 16 ++ .../100-relational/index.md | 5 + .../101-document/100-mongoose.md | 9 + .../101-document/101-prisma.md | 9 + .../101-document/102-native-drivers.md | 3 + .../101-document/index.md | 7 + .../content/110-nodejs-databases/index.md | 3 + .../content/111-nodejs-testing/100-jest.md | 9 + .../content/111-nodejs-testing/101-mocha.md | 9 + .../content/111-nodejs-testing/102-cypress.md | 8 + .../content/111-nodejs-testing/index.md | 9 + .../content/112-nodejs-logging/100-morgan.md | 8 + .../content/112-nodejs-logging/101-winston.md | 8 + .../content/112-nodejs-logging/index.md | 8 + .../100-pm2.md | 8 + .../101-forever.md | 8 + .../102-nohup.md | 9 + .../113-nodejs-keep-app-running-prod/index.md | 7 + .../114-nodejs-threads/100-child-process.md | 12 + .../content/114-nodejs-threads/101-cluster.md | 7 + .../114-nodejs-threads/102-worker-threads.md | 9 + .../content/114-nodejs-threads/index.md | 8 + .../nodejs/content/115-nodejs-streams.md | 16 ++ .../100-garbage-collection.md | 8 + .../100-memory-leaks/index.md | 9 + .../101-node-inspect.md | 7 + .../102-using-apm.md | 11 + .../116-nodejs-more-debugging/index.md | 10 + .../100-builtin-modules.md | 32 +++ .../117-nodejs-common-modules/index.md | 3 + src/roadmaps/nodejs/nodejs.md | 79 +++++++ src/roadmaps/postgresql-dba/postgresql-dba.md | 223 ++++++++++++++++++ .../100-python-basics/100-basic-syntax.md | 12 + .../101-variables-and-datatypes.md | 17 ++ .../100-python-basics/102-conditionals.md | 11 + .../103-typecasting-exceptions.md | 14 ++ .../100-python-basics/104-functions.md | 12 + .../105-lists-tuples-sets-dictionaries.md | 19 ++ .../100-python-basics/106-string-methods.md | 11 + .../python/content/100-python-basics/index.md | 11 + .../100-arrays-linked-lists.md | 17 ++ .../101-heaps-stacks-queues.md | 19 ++ .../102-hash-tables.md | 10 + .../103-binary-search-trees.md | 11 + .../104-recursion.md | 9 + .../105-sorting-algorithms.md | 10 + .../index.md | 8 + .../100-oop/100-methods-dunder.md | 15 ++ .../100-oop/101-inheritance.md | 9 + .../100-oop/102-classes.md | 10 + .../100-oop/index.md | 10 + .../101-regular-expressions.md | 10 + .../102-decorators.md | 9 + .../102-python-advanced-topics/103-lambdas.md | 9 + .../104-iterators.md | 8 + .../105-modules/100-builtin-modules.md | 9 + .../105-modules/101-custom-modules.md | 9 + .../105-modules/index.md | 9 + .../102-python-advanced-topics/index.md | 3 + .../100-basic-git-usage.md | 9 + .../103-version-control-systems/index.md | 9 + .../104-repo-hosting-services/100-github.md | 11 + .../104-repo-hosting-services/101-gitlab.md | 8 + .../102-bitbucket.md | 8 + .../104-repo-hosting-services/index.md | 9 + .../105-python-package-managers/100-pypi.md | 10 + .../105-python-package-managers/101-pip.md | 9 + .../105-python-package-managers/index.md | 8 + .../100-synchronous/100-django.md | 10 + .../100-synchronous/101-flask.md | 8 + .../100-synchronous/102-pyramid.md | 10 + .../100-synchronous/index.md | 7 + .../101-asynchronous/100-gevent.md | 10 + .../101-asynchronous/101-aiohttp.md | 12 + .../101-asynchronous/102-tornado.md | 11 + .../101-asynchronous/103-sanic.md | 9 + .../101-asynchronous/index.md | 7 + .../content/106-python-frameworks/index.md | 5 + .../107-python-testing/100-unittest-pyunit.md | 9 + .../content/107-python-testing/101-pytest.md | 10 + .../content/107-python-testing/102-doctest.md | 8 + .../content/107-python-testing/102-nose.md | 8 + .../content/107-python-testing/index.md | 8 + src/roadmaps/python/python.md | 43 ++++ .../content/100-qa-basics/100-what-is-qa.md | 16 ++ .../100-qa-basics/101-tester-mindset.md | 15 ++ .../100-white-box-testing.md | 7 + .../101-gray-box-testing.md | 7 + .../102-black-box-testing.md | 7 + .../102-testing-approaches/index.md | 14 ++ .../content/100-qa-basics/103-test-oracles.md | 7 + .../100-qa-basics/104-test-prioritization.md | 10 + .../105-manage-your-testing/100-qtest.md | 8 + .../105-manage-your-testing/101-test-rail.md | 8 + .../105-manage-your-testing/102-test-link.md | 8 + .../105-manage-your-testing/103-zephyr.md | 10 + .../105-manage-your-testing/index.md | 7 + .../106-project-management/100-atlassian.md | 8 + .../106-project-management/101-assembla.md | 8 + .../106-project-management/102-youtrack.md | 8 + .../106-project-management/103-trello.md | 12 + .../106-project-management/index.md | 11 + .../exploratory-testing.md | 9 + .../100-functional-testing/index.md | 8 + .../integration-testing.md | 7 + .../regression-testing.md | 8 + .../100-functional-testing/sanity-testing.md | 7 + .../100-functional-testing/smoke-testing.md | 6 + .../100-functional-testing/uat.md | 8 + .../100-functional-testing/unit-testing.md | 8 + .../accessibility-testing.md | 10 + .../101-non-functional-testing/index.md | 8 + .../load-testing.md | 8 + .../performance-testing.md | 21 ++ .../security-testing.md | 8 + .../stress-testing.md | 9 + .../107-testing-techniques/index.md | 7 + .../qa/content/100-qa-basics/index.md | 3 + .../101-qa-sdlc/100-waterfall-model.md | 7 + .../qa/content/101-qa-sdlc/101-v-model.md | 8 + .../101-qa-sdlc/102-agile-model/100-kanban.md | 10 + .../101-qa-sdlc/102-agile-model/101-scrum.md | 8 + .../101-qa-sdlc/102-agile-model/102-safe.md | 7 + .../101-qa-sdlc/102-agile-model/103-xp.md | 8 + .../101-qa-sdlc/102-agile-model/index.md | 11 + src/roadmaps/qa/content/101-qa-sdlc/index.md | 8 + .../content/102-qa-manual-testing/100-tdd.md | 8 + .../101-test-planning.md | 7 + .../102-test-cases-and-scenarios.md | 10 + .../102-qa-manual-testing/103-reporting.md | 9 + .../104-compatibility.md | 7 + .../105-verification-and-validation.md | 10 + .../qa/content/102-qa-manual-testing/index.md | 8 + .../100-basic-introduction/ajax.md | 9 + .../browser-devtools.md | 8 + .../100-basic-introduction/caching.md | 7 + .../100-basic-introduction/csr-vs-ssr.md | 8 + .../html-css-javascript.md | 13 + .../100-basic-introduction/index.md | 7 + .../responsive-vs-adaptive.md | 18 ++ .../swas-pwas-jamstack.md | 19 ++ .../100-selenium-ide.md | 10 + .../101-browser-addons.md | 10 + .../101-ghost-inspector.md | 8 + .../102-automation-frameworks/cypress.md | 10 + .../102-automation-frameworks/index.md | 8 + .../102-automation-frameworks/jasmine.md | 9 + .../102-automation-frameworks/jest.md | 10 + .../102-automation-frameworks/nightwatch.md | 8 + .../102-automation-frameworks/playwright.md | 8 + .../102-automation-frameworks/puppeteer.md | 8 + .../102-automation-frameworks/qa-wolf.md | 10 + .../robot-framework.md | 12 + .../102-automation-frameworks/selenium.md | 8 + .../102-automation-frameworks/webdriver-io.md | 14 ++ .../102-bug-management.md | 8 + .../103-check-my-links.md | 7 + .../100-frontend-automation/index.md | 7 + .../101-mobile-automation/100-appium.md | 10 + .../101-mobile-automation/101-xcuitest.md | 8 + .../101-mobile-automation/102-espresso.md | 9 + .../101-mobile-automation/103-detox.md | 9 + .../101-mobile-automation/index.md | 7 + .../100-karate-framework.md | 12 + .../102-backend-automation/101-cypress.md | 11 + .../102-backend-automation/102-soap-ui.md | 8 + .../103-postman-newman.md | 12 + .../104-rest-assured.md | 8 + .../102-backend-automation/index.md | 8 + .../content/103-qa-automated-testing/index.md | 10 + .../100-vegeta.md | 7 + .../101-jmeter.md | 8 + .../102-locust.md | 14 ++ .../103-gatling.md | 12 + .../104-k6.md | 10 + .../105-artillery.md | 20 ++ .../106-lighthouse.md | 7 + .../107-webpage-test.md | 9 + .../100-load-and-performance-testing/index.md | 15 ++ .../100-chrome-devtools.md | 12 + .../101-accessibility-testing/101-wave.md | 8 + .../101-accessibility-testing/102-axe.md | 8 + .../101-accessibility-testing/index.md | 8 + .../100-authentication-authorization.md | 11 + .../101-vulnerability-scanning.md | 20 ++ .../102-security-testing/102-owasp-10.md | 10 + .../103-attack-vectors.md | 7 + .../104-secrets-management.md | 10 + .../102-security-testing/index.md | 9 + .../104-qa-non-functional-testing/index.md | 3 + .../105-qa-email-testing/100-mailinator.md | 8 + .../105-qa-email-testing/101-gmail-tester.md | 9 + .../qa/content/105-qa-email-testing/index.md | 8 + .../qa/content/106-qa-reporting/100-junit.md | 7 + .../qa/content/106-qa-reporting/101-allure.md | 8 + .../content/106-qa-reporting/102-test-rail.md | 9 + .../qa/content/106-qa-reporting/index.md | 11 + .../107-qa-monitoring-logs/100-grafana.md | 10 + .../107-qa-monitoring-logs/101-new-relic.md | 8 + .../107-qa-monitoring-logs/102-run-scope.md | 10 + .../107-qa-monitoring-logs/103-sentry.md | 7 + .../107-qa-monitoring-logs/104-kibana.md | 8 + .../107-qa-monitoring-logs/105-data-dog.md | 8 + .../107-qa-monitoring-logs/106-pager-duty.md | 8 + .../content/107-qa-monitoring-logs/index.md | 3 + src/roadmaps/qa/content/108-qa-vcs/100-git.md | 10 + src/roadmaps/qa/content/108-qa-vcs/index.md | 10 + .../100-gitlab.md | 8 + .../101-bitbucket.md | 14 ++ .../102-github.md | 13 + .../109-qa-repo-hosting-services/index.md | 9 + .../qa/content/110-qa-ci-cd/100-jenkins.md | 9 + .../qa/content/110-qa-ci-cd/101-travis-ci.md | 9 + .../qa/content/110-qa-ci-cd/102-circle-ci.md | 9 + .../qa/content/110-qa-ci-cd/103-drone.md | 9 + .../qa/content/110-qa-ci-cd/104-gitlab-ci.md | 11 + .../qa/content/110-qa-ci-cd/105-bamboo.md | 9 + .../qa/content/110-qa-ci-cd/106-team-city.md | 10 + .../110-qa-ci-cd/107-azure-devops-services.md | 9 + src/roadmaps/qa/content/110-qa-ci-cd/index.md | 11 + .../111-qa-headless-testing/100-zombie-js.md | 8 + .../111-qa-headless-testing/101-playwright.md | 8 + .../111-qa-headless-testing/102-puppeteer.md | 8 + .../111-qa-headless-testing/103-cypress.md | 9 + .../104-headless-chrome.md | 7 + .../105-headless-fox.md | 7 + .../111-qa-headless-testing/106-html-unit.md | 10 + .../content/111-qa-headless-testing/index.md | 13 + src/roadmaps/qa/qa.md | 44 ++++ src/roadmaps/react-native/react-native.md | 45 ++++ .../100-cli-tools/100-create-react-app.md | 10 + .../100-cli-tools/101-vite.md | 9 + .../100-cli-tools/index.md | 6 + .../100-create-react-app.md | 10 + .../100-react-fundamental-topics/101-jsx.md | 9 + .../100-functional-components.md | 9 + .../102-components/101-class-components.md | 12 + .../102-components/index.md | 10 + .../103-props-vs-state.md | 9 + .../104-conditional-rendering.md | 10 + .../105-component-life-cycle.md | 10 + .../106-lists-and-keys.md | 9 + .../107-composition-vs-inheritance.md | 8 + .../108-basic-hooks/100-use-state.md | 8 + .../108-basic-hooks/101-use-effect.md | 8 + .../108-basic-hooks/102-use-context.md | 9 + .../108-basic-hooks/index.md | 9 + .../109-events.md | 12 + .../100-react-fundamental-topics/index.md | 8 + .../100-hooks/101-writing-your-own-hooks.md | 9 + .../100-hooks/102-common-hooks.md | 13 + .../100-hooks/index.md | 9 + .../101-react-advanced-topics/101-context.md | 10 + .../101-react-advanced-topics/102-refs.md | 10 + .../103-render-props.md | 10 + .../104-high-order-components.md | 10 + .../101-react-advanced-topics/105-portals.md | 7 + .../106-error-boundaries.md | 9 + .../107-fiber-architecture.md | 10 + .../101-react-advanced-topics/index.md | 3 + .../100-routers/100-react-router.md | 10 + .../100-routers/101-reach-router.md | 9 + .../102-react-ecosystem/100-routers/index.md | 8 + .../101-ssr/100-next-js.md | 12 + .../102-react-ecosystem/101-ssr/index.md | 11 + .../102-react-ecosystem/102-ssg/101-gatsby.md | 9 + .../102-react-ecosystem/102-ssg/index.md | 10 + .../103-api-calls/100-react-query.md | 8 + .../103-api-calls/101-use-http.md | 10 + .../103-api-calls/102-apollo.md | 10 + .../103-api-calls/103-relay-modern.md | 8 + .../103-api-calls/104-axios.md | 11 + .../103-api-calls/105-unfetch.md | 7 + .../103-api-calls/106-superagent.md | 8 + .../103-api-calls/index.md | 9 + .../104-mobile/100-react-native.md | 10 + .../102-react-ecosystem/104-mobile/index.md | 3 + .../105-forms/100-react-hook-form.md | 8 + .../105-forms/101-formik.md | 13 + .../105-forms/102-final-form.md | 9 + .../102-react-ecosystem/105-forms/index.md | 7 + .../106-testing/100-jest.md | 7 + .../106-testing/101-react-testing-library.md | 8 + .../106-testing/102-cypress.md | 9 + .../106-testing/103-vitest.md | 9 + .../106-testing/104-playwright.md | 8 + .../102-react-ecosystem/106-testing/index.md | 8 + .../107-state-management/100-context-state.md | 10 + .../107-state-management/101-redux.md | 12 + .../107-state-management/102-mobx.md | 8 + .../107-state-management/index.md | 8 + .../108-styling/100-chakra-ui.md | 12 + .../108-styling/101-material-ui.md | 9 + .../108-styling/102-ant-design.md | 10 + .../108-styling/103-styled-components.md | 10 + .../108-styling/104-emotion.md | 8 + .../102-react-ecosystem/108-styling/index.md | 7 + .../content/102-react-ecosystem/index.md | 9 + src/roadmaps/react/react.md | 45 ++++ .../100-what-is-software-architecture.md | 9 + .../101-what-is-software-architect.md | 7 + .../100-application-architecture.md | 4 + .../101-solution-architecture.md | 3 + .../102-enterprise-architecture.md | 7 + .../102-levels-of-architecture/index.md | 8 + .../100-software-architect-basics/index.md | 3 + .../content/101-architect-responsibilities.md | 17 ++ .../100-design-and-architecture.md | 11 + .../101-decision-making.md | 10 + .../102-simplifying-things.md | 8 + .../102-important-skills/103-how-to-code.md | 14 ++ .../102-important-skills/104-documentation.md | 8 + .../102-important-skills/105-communication.md | 10 + .../106-estimate-and-evaluate.md | 8 + .../102-important-skills/107-balance.md | 7 + .../108-consult-and-coach.md | 7 + .../109-marketing-skills.md | 10 + .../content/102-important-skills/index.md | 14 ++ .../content/103-technical-skills.md | 10 + .../100-java-kotlin-scala.md | 10 + .../104-programming-languages/101-python.md | 14 ++ .../104-programming-languages/102-ruby.md | 9 + .../104-programming-languages/103-go.md | 14 ++ .../104-javascript-typescript.md | 20 ++ .../105-dotnet-framework.md | 15 ++ .../104-programming-languages/index.md | 1 + .../100-oop.md | 11 + .../101-mvc-mvp-mvvm.md | 12 + .../102-cqrs-eventual-consistency.md | 8 + .../103-actors.md | 8 + .../104-acid-cap-theorem.md | 16 ++ .../105-solid.md | 15 ++ .../106-ddd.md | 16 ++ .../106-tdd.md | 10 + .../index.md | 1 + .../content/106-architect-tools/100-git.md | 9 + .../content/106-architect-tools/101-slack.md | 9 + .../content/106-architect-tools/102-trello.md | 9 + .../103-atlassian-tools.md | 1 + .../content/106-architect-tools/index.md | 1 + .../107-architectures/100-serverless.md | 8 + .../107-architectures/101-microservices.md | 10 + .../102-client-server-architecture.md | 5 + .../103-layered-architecture.md | 1 + .../104-distributed-systems.md | 5 + .../107-architectures/105-service-oriented.md | 15 ++ .../content/107-architectures/index.md | 1 + .../108-security/100-hashing-algorithms.md | 9 + .../content/108-security/101-pki.md | 1 + .../content/108-security/102-owasp.md | 10 + .../108-security/103-auth-strategies.md | 10 + .../content/108-security/index.md | 1 + .../100-hadoop-spark-mapreduce.md | 10 + .../101-etl-datawarehouses.md | 14 ++ .../102-sql-databases.md | 11 + .../103-analytics/100-apache-spark.md | 7 + .../103-analytics/101-hadoop.md | 7 + .../102-datawarehouses-principles.md | 7 + .../103-analytics/index.md | 1 + .../103-nosql-databases.md | 13 + .../content/109-working-with-data/index.md | 1 + .../110-apis-and-integrations/100-grpc.md | 14 ++ .../110-apis-and-integrations/101-esb-soap.md | 1 + .../110-apis-and-integrations/102-graphql.md | 7 + .../110-apis-and-integrations/103-rest.md | 10 + .../110-apis-and-integrations/104-bpm-bpel.md | 17 ++ .../105-messaging-queues.md | 8 + .../110-apis-and-integrations/index.md | 1 + .../100-reactive-functional-programming.md | 12 + .../101-react-vue-angular.md | 20 ++ .../111-web-and-mobile/102-spa-ssr-ssg.md | 10 + .../content/111-web-and-mobile/103-pwa.md | 11 + .../111-web-and-mobile/104-microfrontends.md | 8 + .../105-w3c-and-whatwg-standards.md | 10 + .../content/111-web-and-mobile/index.md | 1 + .../112-architect-frameworks/100-babok.md | 8 + .../112-architect-frameworks/101-iaf.md | 8 + .../112-architect-frameworks/101-uml.md | 10 + .../112-architect-frameworks/102-togaf.md | 8 + .../content/112-architect-frameworks/index.md | 1 + .../100-pmi-itil-prince2-rup.md | 1 + .../100-certifications/index.md | 1 + .../101-agile-scrum/100-less.md | 1 + .../101-agile-scrum/101-safe.md | 1 + .../113-management/101-agile-scrum/index.md | 1 + .../content/113-management/index.md | 1 + .../114-networks/100-osi-tcp-ip-model.md | 9 + .../content/114-networks/101-http-https.md | 18 ++ .../content/114-networks/102-proxies.md | 3 + .../content/114-networks/103-firewalls.md | 3 + .../content/114-networks/index.md | 1 + .../100-infrastructure-as-code.md | 13 + .../101-cloud-providers.md | 1 + .../102-serverless-concepts.md | 11 + .../103-linux-unix.md | 10 + .../104-service-mesh.md | 9 + .../115-operations-knowledge/105-ci-cd.md | 8 + .../106-containers.md | 12 + .../107-cloud-design-patterns.md | 9 + .../content/115-operations-knowledge/index.md | 1 + .../100-ms-dynamics.md | 8 + .../101-sap-epr-hana-business-objects.md | 1 + .../116-enterprise-software/102-emc-dms.md | 1 + .../116-enterprise-software/103-ibm-bpm.md | 8 + .../116-enterprise-software/104-salesforce.md | 8 + .../content/116-enterprise-software/index.md | 1 + .../software-architect/software-architect.md | 53 +++++ .../software-design-architecture.md | 47 ++++ src/roadmaps/system-design/system-design.md | 43 ++++ .../100-fundamental-topics/100-vue-cli.md | 19 ++ .../100-single-file-components.md | 8 + .../101-component-registration.md | 7 + .../101-components/102-props.md | 12 + .../101-components/103-events.md | 9 + .../104-attribute-inheritance.md | 8 + .../101-components/index.md | 9 + .../100-fundamental-topics/102-templates.md | 7 + .../100-fundamental-topics/103-directives.md | 8 + .../104-api-styles/100-options-api.md | 11 + .../104-api-styles/101-composition-api.md | 11 + .../104-api-styles/index.md | 7 + .../105-app-configurations.md | 8 + .../106-rendering-lists.md | 8 + .../107-conditional-rendering.md | 9 + .../108-lifecycle-hooks.md | 8 + .../109-forms-handling.md | 9 + .../110-events-handling.md | 8 + .../111-computed-properties.md | 8 + .../content/100-fundamental-topics/index.md | 9 + .../content/101-advanced-topics/100-ref.md | 11 + .../content/101-advanced-topics/101-torefs.md | 10 + .../101-advanced-topics/102-reactive.md | 9 + .../101-advanced-topics/103-computed.md | 8 + .../content/101-advanced-topics/104-watch.md | 9 + .../101-advanced-topics/105-next-tick.md | 7 + .../101-advanced-topics/106-composables.md | 11 + .../107-async-components.md | 7 + .../108-teleport-components.md | 7 + .../101-advanced-topics/109-provide-inject.md | 8 + .../110-custom-directives.md | 7 + .../101-advanced-topics/111-custom-events.md | 7 + .../101-advanced-topics/112-plugins.md | 8 + .../101-advanced-topics/113-watchers.md | 9 + .../content/101-advanced-topics/114-slots.md | 10 + .../101-advanced-topics/115-transition.md | 11 + .../116-transition-group.md | 8 + .../vue/content/101-advanced-topics/index.md | 3 + .../100-routing/100-vue-router.md | 8 + .../102-ecosystem/100-routing/index.md | 3 + .../101-forms/100-vue-formulate.md | 9 + .../101-forms/101-vee-validate.md | 10 + .../102-ecosystem/101-forms/102-vuelidate.md | 9 + .../content/102-ecosystem/101-forms/index.md | 8 + .../102-ecosystem/102-ssr/100-quasar.md | 11 + .../102-ecosystem/102-ssr/101-nuxt-js.md | 11 + .../content/102-ecosystem/102-ssr/index.md | 11 + .../102-ecosystem/103-ssg/100-gridsome.md | 8 + .../102-ecosystem/103-ssg/101-vuepress.md | 9 + .../content/102-ecosystem/103-ssg/index.md | 10 + .../104-state-management/100-pinia.md | 7 + .../104-state-management/index.md | 7 + .../105-mobile-apps/100-capacitor.md | 10 + .../102-ecosystem/105-mobile-apps/index.md | 7 + .../102-ecosystem/106-api-calls/100-apollo.md | 10 + .../106-api-calls/101-vue-relay.md | 8 + .../102-ecosystem/106-api-calls/102-axios.md | 12 + .../106-api-calls/103-unfetch.md | 9 + .../106-api-calls/104-superagent.md | 9 + .../102-ecosystem/106-api-calls/index.md | 8 + .../vue/content/102-ecosystem/107-jest.md | 8 + .../102-ecosystem/108-vue-testing-library.md | 7 + .../vue/content/102-ecosystem/109-cypress.md | 9 + .../content/102-ecosystem/110-tailwind-css.md | 11 + .../vue/content/102-ecosystem/111-vuetify.md | 8 + .../content/102-ecosystem/112-element-ui.md | 10 + .../vue/content/102-ecosystem/index.md | 8 + src/roadmaps/vue/vue.md | 54 +++++ 1914 files changed, 16538 insertions(+) create mode 100644 src/roadmaps/android/android.md create mode 100644 src/roadmaps/angular/angular.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/100-what-is-typescript.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/101-why-use-typescript.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/102-structural-typing.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/103-type-inference.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/104-union-types.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/105-builtin-types.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/106-type-guard.md create mode 100644 src/roadmaps/angular/content/100-typescript-basics/index.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/100-observable-pattern.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/101-observable-lifecycle.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/102-marble-diagrams.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/103-rxjs-vs-promises.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/104-operators/100-filtering.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/104-operators/101-rate-limiting.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/104-operators/102-transformation.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/104-operators/103-combination.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/104-operators/index.md create mode 100644 src/roadmaps/angular/content/101-rxjs-basics/index.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/100-angularjs-vs-angular.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/101-angular-components.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/102-angular-templates.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/103-angular-modules.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/104-dependency-injection.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/105-services.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/106-routing.md create mode 100644 src/roadmaps/angular/content/102-angular-basics/index.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/100-ng-build.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/101-ng-serve.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/102-ng-generate.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/103-ng-test.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/104-ng-e2e.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/105-ng-new.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/106-schematics.md create mode 100644 src/roadmaps/angular/content/103-angular-cli/index.md create mode 100644 src/roadmaps/angular/content/104-templates/100-interpolation.md create mode 100644 src/roadmaps/angular/content/104-templates/101-property-binding.md create mode 100644 src/roadmaps/angular/content/104-templates/102-template-statements.md create mode 100644 src/roadmaps/angular/content/104-templates/103-binding-data-props-attrs-events.md create mode 100644 src/roadmaps/angular/content/104-templates/104-reference-vars.md create mode 100644 src/roadmaps/angular/content/104-templates/105-input-output.md create mode 100644 src/roadmaps/angular/content/104-templates/index.md create mode 100644 src/roadmaps/angular/content/105-rendering-topics/100-builtin-directives.md create mode 100644 src/roadmaps/angular/content/105-rendering-topics/101-builtin-pipes.md create mode 100644 src/roadmaps/angular/content/105-rendering-topics/102-change-detection.md create mode 100644 src/roadmaps/angular/content/105-rendering-topics/index.md create mode 100644 src/roadmaps/angular/content/106-forms/100-reactive-forms.md create mode 100644 src/roadmaps/angular/content/106-forms/101-template-driven-forms.md create mode 100644 src/roadmaps/angular/content/106-forms/index.md create mode 100644 src/roadmaps/angular/content/107-routing/100-configuration.md create mode 100644 src/roadmaps/angular/content/107-routing/101-router-outlets.md create mode 100644 src/roadmaps/angular/content/107-routing/102-router-links.md create mode 100644 src/roadmaps/angular/content/107-routing/103-router-events.md create mode 100644 src/roadmaps/angular/content/107-routing/104-guards.md create mode 100644 src/roadmaps/angular/content/107-routing/105-lazy-loading.md create mode 100644 src/roadmaps/angular/content/107-routing/index.md create mode 100644 src/roadmaps/angular/content/108-services-remote-data/100-dependency-injection.md create mode 100644 src/roadmaps/angular/content/108-services-remote-data/index.md create mode 100644 src/roadmaps/angular/content/109-lifecycle-hooks.md create mode 100644 src/roadmaps/angular/content/110-state-management/100-ngxs.md create mode 100644 src/roadmaps/angular/content/110-state-management/101-ngrx.md create mode 100644 src/roadmaps/angular/content/110-state-management/index.md create mode 100644 src/roadmaps/angular/content/111-zones.md create mode 100644 src/roadmaps/angular/content/112-creating-a-custom-x/100-directive.md create mode 100644 src/roadmaps/angular/content/112-creating-a-custom-x/101-pipe.md create mode 100644 src/roadmaps/angular/content/112-creating-a-custom-x/102-library.md create mode 100644 src/roadmaps/angular/content/112-creating-a-custom-x/index.md create mode 100644 src/roadmaps/angular/content/113-angular-ssr/100-angular-universal.md create mode 100644 src/roadmaps/angular/content/113-angular-ssr/index.md create mode 100644 src/roadmaps/angular/content/114-angular-ssg/100-scully.md create mode 100644 src/roadmaps/angular/content/114-angular-ssg/index.md create mode 100644 src/roadmaps/angular/content/115-testing-angular-apps/100-testing-pipes.md create mode 100644 src/roadmaps/angular/content/115-testing-angular-apps/101-testing-services.md create mode 100644 src/roadmaps/angular/content/115-testing-angular-apps/102-testing-component-bindings.md create mode 100644 src/roadmaps/angular/content/115-testing-angular-apps/103-testing-directives.md create mode 100644 src/roadmaps/angular/content/115-testing-angular-apps/104-testing-component-templates.md create mode 100644 src/roadmaps/angular/content/115-testing-angular-apps/index.md create mode 100644 src/roadmaps/aspnet-core/aspnet-core.md create mode 100644 src/roadmaps/aspnet-core/content/100-basics-of-csharp/100-csharp.md create mode 100644 src/roadmaps/aspnet-core/content/100-basics-of-csharp/101-dotnet.md create mode 100644 src/roadmaps/aspnet-core/content/100-basics-of-csharp/102-dotnet-cli.md create mode 100644 src/roadmaps/aspnet-core/content/100-basics-of-csharp/index.md create mode 100644 src/roadmaps/aspnet-core/content/101-general-development-skills/100-git.md create mode 100644 src/roadmaps/aspnet-core/content/101-general-development-skills/101-azure-devops-services.md create mode 100644 src/roadmaps/aspnet-core/content/101-general-development-skills/102-vcs-hosting-services.md create mode 100644 src/roadmaps/aspnet-core/content/101-general-development-skills/103-http-https.md create mode 100644 src/roadmaps/aspnet-core/content/101-general-development-skills/104-datastructures-and-algorithms.md create mode 100644 src/roadmaps/aspnet-core/content/101-general-development-skills/index.md create mode 100644 src/roadmaps/aspnet-core/content/102-database-fundamentals/100-database-design-basics.md create mode 100644 src/roadmaps/aspnet-core/content/102-database-fundamentals/101-sql-basics.md create mode 100644 src/roadmaps/aspnet-core/content/102-database-fundamentals/102-stored-procedures.md create mode 100644 src/roadmaps/aspnet-core/content/102-database-fundamentals/103-constraints.md create mode 100644 src/roadmaps/aspnet-core/content/102-database-fundamentals/104-triggers.md create mode 100644 src/roadmaps/aspnet-core/content/102-database-fundamentals/index.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/100-mvc.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/101-rest.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/102-razor-pages.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/103-razor-components.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/104-middlewares.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/105-filters-and-attributes.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/106-app-settings-and-configurations.md create mode 100644 src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/index.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/100-framework-basics.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/101-codefirst-migrations.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/102-change-tracker-api.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/103-lazy-eager-explicit-loading.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/index.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/101-dapper.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/102-repodb.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/103-nhibernate.md create mode 100644 src/roadmaps/aspnet-core/content/104-orm/index.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/100-scrutor.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/100-microsoft-extensions-dependency-injection.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/101-auto-fac.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/102-ninject.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/103-castle-windsor.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/104-simple-injector.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/index.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/100-scoped.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/101-transient.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/102-singleton.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/index.md create mode 100644 src/roadmaps/aspnet-core/content/105-dependency-injection/index.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/100-memory-cache.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/101-entity-framework-cache.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/100-memcached.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/easy-caching.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/index.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/stackexchange-redis.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/index.md create mode 100644 src/roadmaps/aspnet-core/content/106-caching/index.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/100-search-engines/100-elasticsearch.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/100-search-engines/101-solr.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/100-search-engines/102-sphinx.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/100-search-engines/index.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/101-cloud/100-dynamodb.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/101-cloud/101-cosmosdb.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/101-cloud/index.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/102-relational/100-sql-server.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/102-relational/101-postgresql.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/102-relational/102-mariadb.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/102-relational/103-mysql.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/102-relational/index.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/103-nosql/100-redis.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/103-nosql/101-mongodb.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/103-nosql/102-litedb.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/103-nosql/103-cassandra.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/103-nosql/104-ravendb.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/103-nosql/105-couchdb.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/103-nosql/index.md create mode 100644 src/roadmaps/aspnet-core/content/107-databases/index.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/100-serilog.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/101-nlog.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/100-elk-stack.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/101-sentry.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/102-datadog.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/103-loggly.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/104-elmah.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/index.md create mode 100644 src/roadmaps/aspnet-core/content/108-log-frameworks/index.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/100-rest/101-odata.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/100-rest/102-sieve.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/100-rest/index.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/101-grpc.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/100-graphql-dotnet.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/101-hot-chocolate.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/index.md create mode 100644 src/roadmaps/aspnet-core/content/109-api-clients/index.md create mode 100644 src/roadmaps/aspnet-core/content/110-real-time-communication/100-web-sockets.md create mode 100644 src/roadmaps/aspnet-core/content/110-real-time-communication/101-singlar-core.md create mode 100644 src/roadmaps/aspnet-core/content/110-real-time-communication/index.md create mode 100644 src/roadmaps/aspnet-core/content/111-object-mapping/100-atuo-mapper.md create mode 100644 src/roadmaps/aspnet-core/content/111-object-mapping/101-express-mapper.md create mode 100644 src/roadmaps/aspnet-core/content/111-object-mapping/102-agile-mapper.md create mode 100644 src/roadmaps/aspnet-core/content/111-object-mapping/103-mapster.md create mode 100644 src/roadmaps/aspnet-core/content/111-object-mapping/index.md create mode 100644 src/roadmaps/aspnet-core/content/112-task-scheduling/100-hangfire.md create mode 100644 src/roadmaps/aspnet-core/content/112-task-scheduling/101-native-background-service.md create mode 100644 src/roadmaps/aspnet-core/content/112-task-scheduling/102-quartz.md create mode 100644 src/roadmaps/aspnet-core/content/112-task-scheduling/103-coravel.md create mode 100644 src/roadmaps/aspnet-core/content/112-task-scheduling/index.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/100-selenium.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/101-playwright.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/102-puppeteer.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/103-cypress.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/index.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/100-fluent-assertions.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/101-shouldly.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/102-mstest.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/103-xunit.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/104-nunit.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/105-nsubstitute.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/106-moq.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/107-fake-it-easy.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/index.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/100-web-application-factory.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/101-test-server.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/index.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/100-spec-flow.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/101-bddfy.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/102-light-bdd.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/index.md create mode 100644 src/roadmaps/aspnet-core/content/113-testing/index.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/100-active-mq.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/101-apache-kafka.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/102-rabbit-mq.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/103-net-mq.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/104-azure-service-bus.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/index.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/100-mass-transit.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/101-nservice-bus.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/102-easy-net-q.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/index.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/102-kubernetes.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/103-docker-swarm.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/104-ocelot.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/105-docker.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/106-yarp.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/107-orleans.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/108-steel-toe.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/109-dapr.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/110-tye.md create mode 100644 src/roadmaps/aspnet-core/content/114-microservices/index.md create mode 100644 src/roadmaps/aspnet-core/content/115-ci-cd/100-github-actions.md create mode 100644 src/roadmaps/aspnet-core/content/115-ci-cd/101-azure-pipelines.md create mode 100644 src/roadmaps/aspnet-core/content/115-ci-cd/102-travis-ci.md create mode 100644 src/roadmaps/aspnet-core/content/115-ci-cd/103-jenkins.md create mode 100644 src/roadmaps/aspnet-core/content/115-ci-cd/104-circle-ci.md create mode 100644 src/roadmaps/aspnet-core/content/115-ci-cd/105-team-city.md create mode 100644 src/roadmaps/aspnet-core/content/115-ci-cd/index.md create mode 100644 src/roadmaps/aspnet-core/content/116-client-side-libraries/100-blazor.md create mode 100644 src/roadmaps/aspnet-core/content/116-client-side-libraries/index.md create mode 100644 src/roadmaps/aspnet-core/content/117-template-engines/100-razor.md create mode 100644 src/roadmaps/aspnet-core/content/117-template-engines/101-dot-liquid.md create mode 100644 src/roadmaps/aspnet-core/content/117-template-engines/102-scriban.md create mode 100644 src/roadmaps/aspnet-core/content/117-template-engines/103-fluid.md create mode 100644 src/roadmaps/aspnet-core/content/117-template-engines/index.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/100-mediatr.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/101-fluent-validation.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/102-polly.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/103-nuke.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/104-benchmark-net.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/105-noda-time.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/106-gen-fu.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/107-swash-buckle.md create mode 100644 src/roadmaps/aspnet-core/content/118-good-to-know-libraries/index.md create mode 100644 src/roadmaps/backend/backend.md create mode 100644 src/roadmaps/backend/content/100-internet/100-how-does-the-internet-work.md create mode 100644 src/roadmaps/backend/content/100-internet/101-what-is-http.md create mode 100644 src/roadmaps/backend/content/100-internet/102-browsers-and-how-they-work.md create mode 100644 src/roadmaps/backend/content/100-internet/103-dns-and-how-it-works.md create mode 100644 src/roadmaps/backend/content/100-internet/104-what-is-domain-name.md create mode 100644 src/roadmaps/backend/content/100-internet/105-what-is-hosting.md create mode 100644 src/roadmaps/backend/content/100-internet/index.md create mode 100644 src/roadmaps/backend/content/101-basic-frontend/100-html.md create mode 100644 src/roadmaps/backend/content/101-basic-frontend/101-css.md create mode 100644 src/roadmaps/backend/content/101-basic-frontend/102-javascript.md create mode 100644 src/roadmaps/backend/content/101-basic-frontend/index.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/100-terminal-usage.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/101-how-oss-work-in-general.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/102-process-management.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/103-threads-and-concurrency.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/104-basic-terminal-commands.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/105-memory-management.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/106-interprocess-communication.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/107-io-management.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/108-posix-basics.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/109-basic-networking-concepts.md create mode 100644 src/roadmaps/backend/content/102-os-general-knowledge/index.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/100-go.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/101-rust.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/102-java.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/103-csharp.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/103-php.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/105-javascript.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/106-python.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/107-ruby.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/108-cpp.md create mode 100644 src/roadmaps/backend/content/103-learn-a-language/index.md create mode 100644 src/roadmaps/backend/content/104-version-control-systems/100-basic-usage-of-git.md create mode 100644 src/roadmaps/backend/content/104-version-control-systems/index.md create mode 100644 src/roadmaps/backend/content/105-repo-hosting-services/100-github.md create mode 100644 src/roadmaps/backend/content/105-repo-hosting-services/101-gitlab.md create mode 100644 src/roadmaps/backend/content/105-repo-hosting-services/102-bitbucket.md create mode 100644 src/roadmaps/backend/content/105-repo-hosting-services/index.md create mode 100644 src/roadmaps/backend/content/106-relational-databases/100-postgresql.md create mode 100644 src/roadmaps/backend/content/106-relational-databases/101-mysql.md create mode 100644 src/roadmaps/backend/content/106-relational-databases/102-mariadb.md create mode 100644 src/roadmaps/backend/content/106-relational-databases/103-mssql.md create mode 100644 src/roadmaps/backend/content/106-relational-databases/104-oracle.md create mode 100644 src/roadmaps/backend/content/106-relational-databases/index.md create mode 100644 src/roadmaps/backend/content/107-nosql-databases/100-document-databases.md create mode 100644 src/roadmaps/backend/content/107-nosql-databases/101-column-databases.md create mode 100644 src/roadmaps/backend/content/107-nosql-databases/102-timeseries-databases.md create mode 100644 src/roadmaps/backend/content/107-nosql-databases/103-realtime-databases.md create mode 100644 src/roadmaps/backend/content/107-nosql-databases/index.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/100-orms.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/101-acid.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/102-transactions.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/103-n-plus-one-problem.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/104-database-normalization.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/105-database-indexes.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/106-data-replication.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/107-sharding-strategies.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/108-cap-theorem.md create mode 100644 src/roadmaps/backend/content/108-more-about-databases/index.md create mode 100644 src/roadmaps/backend/content/109-apis/100-rest.md create mode 100644 src/roadmaps/backend/content/109-apis/101-json-apis.md create mode 100644 src/roadmaps/backend/content/109-apis/102-soap.md create mode 100644 src/roadmaps/backend/content/109-apis/103-grpc.md create mode 100644 src/roadmaps/backend/content/109-apis/104-hateoas.md create mode 100644 src/roadmaps/backend/content/109-apis/105-open-api-spec.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/100-cookie-based.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/101-oauth.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/102-basic-authentication.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/103-token-authentication.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/104-jwt.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/105-openid.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/105-saml.md create mode 100644 src/roadmaps/backend/content/109-apis/106-authentication/index.md create mode 100644 src/roadmaps/backend/content/109-apis/index.md create mode 100644 src/roadmaps/backend/content/110-caching/100-cdn.md create mode 100644 src/roadmaps/backend/content/110-caching/101-server-side/100-redis.md create mode 100644 src/roadmaps/backend/content/110-caching/101-server-side/101-memcached.md create mode 100644 src/roadmaps/backend/content/110-caching/101-server-side/index.md create mode 100644 src/roadmaps/backend/content/110-caching/102-client-side.md create mode 100644 src/roadmaps/backend/content/110-caching/index.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/100-md5.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/101-sha-family.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/102-bcrypt.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/104-scrypt.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/105-content-security-policy.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/105-https.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/106-cors.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/107-ssl-tls.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/108-owasp.md create mode 100644 src/roadmaps/backend/content/111-web-security-knowledge/index.md create mode 100644 src/roadmaps/backend/content/112-testing/100-integration-testing.md create mode 100644 src/roadmaps/backend/content/112-testing/101-unit-testing.md create mode 100644 src/roadmaps/backend/content/112-testing/102-functional-testing.md create mode 100644 src/roadmaps/backend/content/112-testing/index.md create mode 100644 src/roadmaps/backend/content/113-ci-cd.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/100-gof-design-patterns.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/101-domain-driven-design.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/102-test-driven-development.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/103-solid.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/104-kiss.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/105-yagni.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/106-dry.md create mode 100644 src/roadmaps/backend/content/114-design-and-development-principles/index.md create mode 100644 src/roadmaps/backend/content/115-architectural-patterns/100-monolithic-apps.md create mode 100644 src/roadmaps/backend/content/115-architectural-patterns/101-microservices.md create mode 100644 src/roadmaps/backend/content/115-architectural-patterns/102-soa.md create mode 100644 src/roadmaps/backend/content/115-architectural-patterns/103-cqrs.md create mode 100644 src/roadmaps/backend/content/115-architectural-patterns/104-serverless.md create mode 100644 src/roadmaps/backend/content/115-architectural-patterns/index.md create mode 100644 src/roadmaps/backend/content/116-search-engines/100-elasticsearch.md create mode 100644 src/roadmaps/backend/content/116-search-engines/101-solr.md create mode 100644 src/roadmaps/backend/content/116-search-engines/index.md create mode 100644 src/roadmaps/backend/content/117-message-brokers/100-rabbitmq.md create mode 100644 src/roadmaps/backend/content/117-message-brokers/101-kafka.md create mode 100644 src/roadmaps/backend/content/117-message-brokers/index.md create mode 100644 src/roadmaps/backend/content/118-containerization/100-docker.md create mode 100644 src/roadmaps/backend/content/118-containerization/101-rkt.md create mode 100644 src/roadmaps/backend/content/118-containerization/102-lxc.md create mode 100644 src/roadmaps/backend/content/118-containerization/index.md create mode 100644 src/roadmaps/backend/content/119-graphql/100-apollo.md create mode 100644 src/roadmaps/backend/content/119-graphql/101-relay-modern.md create mode 100644 src/roadmaps/backend/content/119-graphql/index.md create mode 100644 src/roadmaps/backend/content/120-graph-databases/100-neo4j.md create mode 100644 src/roadmaps/backend/content/120-graph-databases/index.md create mode 100644 src/roadmaps/backend/content/121-web-sockets.md create mode 100644 src/roadmaps/backend/content/122-web-servers/100-nginx.md create mode 100644 src/roadmaps/backend/content/122-web-servers/101-apache.md create mode 100644 src/roadmaps/backend/content/122-web-servers/102-caddy.md create mode 100644 src/roadmaps/backend/content/122-web-servers/103-ms-iis.md create mode 100644 src/roadmaps/backend/content/122-web-servers/index.md create mode 100644 src/roadmaps/backend/content/123-scalability/100-mitigation-strategies.md create mode 100644 src/roadmaps/backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md create mode 100644 src/roadmaps/backend/content/123-scalability/102-migration-strategies.md create mode 100644 src/roadmaps/backend/content/123-scalability/103-horizontal-vertical-scaling.md create mode 100644 src/roadmaps/backend/content/123-scalability/104-observability.md create mode 100644 src/roadmaps/backend/content/123-scalability/index.md create mode 100644 src/roadmaps/blockchain/blockchain.md create mode 100644 src/roadmaps/blockchain/content/100-blockchain-basics/100-what-is-blockchain.md create mode 100644 src/roadmaps/blockchain/content/100-blockchain-basics/101-decentralization.md create mode 100644 src/roadmaps/blockchain/content/100-blockchain-basics/102-why-blockchain-matters.md create mode 100644 src/roadmaps/blockchain/content/100-blockchain-basics/103-blockchain-structure.md create mode 100644 src/roadmaps/blockchain/content/100-blockchain-basics/104-basic-blockchain-operations.md create mode 100644 src/roadmaps/blockchain/content/100-blockchain-basics/105-applications-and-uses.md create mode 100644 src/roadmaps/blockchain/content/100-blockchain-basics/index.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/100-storage.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/101-mining-and-incentive-models.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/102-decentralization-vs-trust.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/103-blockchain-forking.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/104-cryptocurrencies.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/105-cryptowallets.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/106-cryptography.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/107-consensus-protocols.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/108-blockchain-interoperability.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/100-solana.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/avalanche.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/binance-smart-chain.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/ethereum.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/fantom.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/gnosis-chain.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/huobi-eco-chain.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/index.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/moonbeam-moonriver.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/polygon.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/arbitrum.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/index.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/moonbeam-moonriver.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/index.md create mode 100644 src/roadmaps/blockchain/content/101-blockchain-general-knowledge/index.md create mode 100644 src/roadmaps/blockchain/content/102-blockchain-oracles/100-hybrid-smart-contracts.md create mode 100644 src/roadmaps/blockchain/content/102-blockchain-oracles/101-chainlink.md create mode 100644 src/roadmaps/blockchain/content/102-blockchain-oracles/102-oracle-networks.md create mode 100644 src/roadmaps/blockchain/content/102-blockchain-oracles/index.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/100-solidity.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/101-vyper.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/102-rust.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/index.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/101-testing/100-unit-tests.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/101-testing/101-integration-tests.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/101-testing/102-code-coverage.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/101-testing/index.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/102-deployment.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/103-monitoring.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/104-upgrades.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/105-erc-tokens.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/106-crypto-wallets.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/107-ides.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/108-crypto-faucets.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/109-decentralized-storage.md create mode 100644 src/roadmaps/blockchain/content/103-smart-contracts/index.md create mode 100644 src/roadmaps/blockchain/content/104-smart-contract-frameworks/100-hardhat.md create mode 100644 src/roadmaps/blockchain/content/104-smart-contract-frameworks/101-brownie.md create mode 100644 src/roadmaps/blockchain/content/104-smart-contract-frameworks/102-truffle.md create mode 100644 src/roadmaps/blockchain/content/104-smart-contract-frameworks/103-foundry.md create mode 100644 src/roadmaps/blockchain/content/104-smart-contract-frameworks/index.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/100-practices/100-fuzz-testing-and-static-analysis.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/100-practices/101-common-threat-vectors.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/100-practices/102-source-of-randomness-attacks.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/100-practices/index.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/101-tools/100-slither.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/101-tools/101-manticore.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/101-tools/102-mythx.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/101-tools/103-echidna.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/101-tools/index.md create mode 100644 src/roadmaps/blockchain/content/105-blockchain-security/index.md create mode 100644 src/roadmaps/blockchain/content/106-management-platforms/100-open-zeppelin.md create mode 100644 src/roadmaps/blockchain/content/106-management-platforms/index.md create mode 100644 src/roadmaps/blockchain/content/107-version-control-systems/100-git.md create mode 100644 src/roadmaps/blockchain/content/107-version-control-systems/index.md create mode 100644 src/roadmaps/blockchain/content/108-repo-hosting-services/100-github.md create mode 100644 src/roadmaps/blockchain/content/108-repo-hosting-services/101-gitlab.md create mode 100644 src/roadmaps/blockchain/content/108-repo-hosting-services/102-bitbucket.md create mode 100644 src/roadmaps/blockchain/content/108-repo-hosting-services/index.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/100-react.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/101-angular.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/102-vue.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/index.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/100-testing.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/101-deployment.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/102-maintenance.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/103-architecture.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/104-security.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/105-applicability/100-defi.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/105-applicability/101-daos.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/105-applicability/102-nfts.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/105-applicability/103-payments.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/105-applicability/104-insurance.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/105-applicability/index.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/100-alchemy.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/101-infura.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/102-moralis.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/103-quicknode.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/index.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/100-javascript.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/101-python.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/index.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/108-client-libraries/100-ethers-js.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/108-client-libraries/101-web3-js.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/108-client-libraries/102-moralis.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/108-client-libraries/index.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/109-client-nodes/100-geth.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/109-client-nodes/101-besu.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/109-client-nodes/102-nethermind.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/109-client-nodes/103-substrate.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/109-client-nodes/index.md create mode 100644 src/roadmaps/blockchain/content/109-dapps/index.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/100-state-and-payment-channels.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/101-optimistic-rollups-and-fraud-proofs.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/102-zero-knowledge-rollups-and-zero-knowledge-proof.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/103-validium.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/104-plasma.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/105-sidechains.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/106-ethereum-2.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/107-on-chain-scaling.md create mode 100644 src/roadmaps/blockchain/content/110-building-for-scale/index.md create mode 100644 src/roadmaps/computer-science/computer-science.md create mode 100644 src/roadmaps/computer-science/content/100-roadmap-note.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/100-c-plus-plus.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/101-c.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/102-java.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/103-python.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/104-go.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/105-c-sharp.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/106-rust.md create mode 100644 src/roadmaps/computer-science/content/101-pick-a-language/index.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/100-array.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/101-linked-list.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/102-stack.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/103-queue.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/104-hash-table.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/105-tree/100-binary-tree.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/105-tree/101-binary-search-tree.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/105-tree/102-full-binary-tree.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/105-tree/103-complete-binary-tree.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/105-tree/104-balanced-tree.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/105-tree/105-unbalanced-tree.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/105-tree/index.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/106-graph/100-directed-graph.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/106-graph/101-undirected-graph.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/106-graph/102-spanning-tree.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/106-graph/103-graph-representation.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/106-graph/index.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/107-heap.md create mode 100644 src/roadmaps/computer-science/content/102-data-structures/index.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/100-big-o-notation.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/101-big-theta-notation.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/102-big-omega-notation.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/100-constant.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/101-logarithmic.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/102-linear.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/103-polynomial.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/104-exponential.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/105-factorial.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/index.md create mode 100644 src/roadmaps/computer-science/content/103-asymptotic-notation/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/100-bubble-sort.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/101-selection-sort.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/102-insertion-sort.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/103-heap-sort.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/104-quick-sort.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/105-merge-sort.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/100-pre-order-traversal.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/101-in-order-traversal.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/102-post-order-traversal.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/103-breadth-first-search.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/104-depth-first-search.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/101-depth-first-search.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/102-bellman-fords-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/103-dijkstras-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/104-a-star-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/100-dijkstras-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/101-huffman-coding.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/102-kruskas-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/103-ford-fulkerson-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/104-prims-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/100-finding-hamiltonian-paths.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/101-solving-n-queen-problem.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/102-maze-solving-problem.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/103-knights-tour-problem.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/106-robin-karp-algorithm.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/100-tail-recursion.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/101-non-tail-recursion.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/100-binary-search.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/101-linear-search.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/100-lru-cache.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/101-lfu-cache.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/102-mfu-cache.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/104-common-algorithms/index.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/100-suffix-arrays.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/101-search-pattern-in-text.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/100-brute-force-search.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/101-knuth-morris-pratt.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/102-boyer-moore.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/103-rabin-karp.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/index.md create mode 100644 src/roadmaps/computer-science/content/105-string-search-and-manipulations/index.md create mode 100644 src/roadmaps/computer-science/content/106-bitwise-operators.md create mode 100644 src/roadmaps/computer-science/content/107-floating-point-numbers.md create mode 100644 src/roadmaps/computer-science/content/108-endianess/100-big-endian.md create mode 100644 src/roadmaps/computer-science/content/108-endianess/101-little-endian.md create mode 100644 src/roadmaps/computer-science/content/108-endianess/index.md create mode 100644 src/roadmaps/computer-science/content/109-character-encodings/100-unicode.md create mode 100644 src/roadmaps/computer-science/content/109-character-encodings/101-ascii.md create mode 100644 src/roadmaps/computer-science/content/109-character-encodings/index.md create mode 100644 src/roadmaps/computer-science/content/110-common-uml-diagrams/100-class-diagrams.md create mode 100644 src/roadmaps/computer-science/content/110-common-uml-diagrams/102-usecase-diagrams.md create mode 100644 src/roadmaps/computer-science/content/110-common-uml-diagrams/103-activity-diagrams.md create mode 100644 src/roadmaps/computer-science/content/110-common-uml-diagrams/104-statemachine-diagrams.md create mode 100644 src/roadmaps/computer-science/content/110-common-uml-diagrams/105-sequence-diagrams.md create mode 100644 src/roadmaps/computer-science/content/110-common-uml-diagrams/index.md create mode 100644 src/roadmaps/computer-science/content/111-design-patterns/100-gof-design-patterns.md create mode 100644 src/roadmaps/computer-science/content/111-design-patterns/101-architectural-patterns.md create mode 100644 src/roadmaps/computer-science/content/111-design-patterns/102-dependency-injection.md create mode 100644 src/roadmaps/computer-science/content/111-design-patterns/103-null-object-pattern.md create mode 100644 src/roadmaps/computer-science/content/111-design-patterns/104-type-object-pattern.md create mode 100644 src/roadmaps/computer-science/content/111-design-patterns/index.md create mode 100644 src/roadmaps/computer-science/content/112-basic-math-skills/100-probability.md create mode 100644 src/roadmaps/computer-science/content/112-basic-math-skills/101-combinatorics.md create mode 100644 src/roadmaps/computer-science/content/112-basic-math-skills/index.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/100-p.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/101-np.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/102-co-np.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/103-np-hard.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/100-travelling-salesman-problem.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/101-knapsack-problem.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/102-longest-path-problem.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/index.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/105-p-equals-np.md create mode 100644 src/roadmaps/computer-science/content/113-complexity-classes/index.md create mode 100644 src/roadmaps/computer-science/content/114-tries.md create mode 100644 src/roadmaps/computer-science/content/115-balanced-search-trees/100-avl-trees.md create mode 100644 src/roadmaps/computer-science/content/115-balanced-search-trees/101-red-black-trees.md create mode 100644 src/roadmaps/computer-science/content/115-balanced-search-trees/102-the-2-3-search-trees.md create mode 100644 src/roadmaps/computer-science/content/115-balanced-search-trees/103-the-2-3-4-trees.md create mode 100644 src/roadmaps/computer-science/content/115-balanced-search-trees/104-n-ary-trees.md create mode 100644 src/roadmaps/computer-science/content/115-balanced-search-trees/105-b-tree.md create mode 100644 src/roadmaps/computer-science/content/115-balanced-search-trees/index.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/101-clustering.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/101-load-balancing.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/102-caching.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/103-cdn.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/104-proxy.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/105-cap-theorem.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/106-queues.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/107-architectural-styles.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/108-rest.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/109-graphql.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/110-grpc.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/111-cloud-design-patterns.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/112-long-polling.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/113-short-polling.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/114-web-sockets.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/115-sse.md create mode 100644 src/roadmaps/computer-science/content/116-system-design/index.md create mode 100644 src/roadmaps/computer-science/content/117-databases/100-sql-vs-nosql-databases.md create mode 100644 src/roadmaps/computer-science/content/117-databases/101-normalization-denormalization.md create mode 100644 src/roadmaps/computer-science/content/117-databases/102-entity-relationship-model.md create mode 100644 src/roadmaps/computer-science/content/117-databases/103-ddl.md create mode 100644 src/roadmaps/computer-science/content/117-databases/104-dml.md create mode 100644 src/roadmaps/computer-science/content/117-databases/105-dql.md create mode 100644 src/roadmaps/computer-science/content/117-databases/106-dcl.md create mode 100644 src/roadmaps/computer-science/content/117-databases/107-locking.md create mode 100644 src/roadmaps/computer-science/content/117-databases/109-acid-model.md create mode 100644 src/roadmaps/computer-science/content/117-databases/110-base-model.md create mode 100644 src/roadmaps/computer-science/content/117-databases/111-cap-theorem.md create mode 100644 src/roadmaps/computer-science/content/117-databases/112-pacelc-theorem.md create mode 100644 src/roadmaps/computer-science/content/117-databases/113-indexes.md create mode 100644 src/roadmaps/computer-science/content/117-databases/114-views.md create mode 100644 src/roadmaps/computer-science/content/117-databases/115-transactions.md create mode 100644 src/roadmaps/computer-science/content/117-databases/116-stored-procedures.md create mode 100644 src/roadmaps/computer-science/content/117-databases/117-database-federation.md create mode 100644 src/roadmaps/computer-science/content/117-databases/118-replication.md create mode 100644 src/roadmaps/computer-science/content/117-databases/119-sharding.md create mode 100644 src/roadmaps/computer-science/content/117-databases/index.md create mode 100644 src/roadmaps/computer-science/content/118-networking/100-sockets.md create mode 100644 src/roadmaps/computer-science/content/118-networking/101-tls-https.md create mode 100644 src/roadmaps/computer-science/content/118-networking/102-http.md create mode 100644 src/roadmaps/computer-science/content/118-networking/103-dns.md create mode 100644 src/roadmaps/computer-science/content/118-networking/104-tcp-ip-model.md create mode 100644 src/roadmaps/computer-science/content/118-networking/105-osi-model.md create mode 100644 src/roadmaps/computer-science/content/118-networking/index.md create mode 100644 src/roadmaps/computer-science/content/119-security/100-public-key-cryptography.md create mode 100644 src/roadmaps/computer-science/content/119-security/101-hashing-encryption-encoding.md create mode 100644 src/roadmaps/computer-science/content/119-security/102-hashing-algorithms.md create mode 100644 src/roadmaps/computer-science/content/119-security/103-owasp-top-10.md create mode 100644 src/roadmaps/computer-science/content/119-security/index.md create mode 100644 src/roadmaps/computer-science/content/120-how-computers-work/100-how-cpu-executes-programs.md create mode 100644 src/roadmaps/computer-science/content/120-how-computers-work/101-how-computers-calculate.md create mode 100644 src/roadmaps/computer-science/content/120-how-computers-work/102-registers-and-ram.md create mode 100644 src/roadmaps/computer-science/content/120-how-computers-work/103-instructions-and-programs.md create mode 100644 src/roadmaps/computer-science/content/120-how-computers-work/104-cpu-cache.md create mode 100644 src/roadmaps/computer-science/content/120-how-computers-work/index.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/100-process-forking.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/101-memory-management.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/102-lock-mutex-semaphore.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/103-concurrency-in-multiple-cores.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/103-scheduling-algorithms.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/104-cpu-interrupts.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/105-processes-vs-threads.md create mode 100644 src/roadmaps/computer-science/content/121-processes-and-threads/index.md create mode 100644 src/roadmaps/computer-science/content/122-kd-trees.md create mode 100644 src/roadmaps/computer-science/content/123-skip-lists.md create mode 100644 src/roadmaps/cyber-security/cyber-security.md create mode 100644 src/roadmaps/design-system/content/100-design-system-basics/100-what-is-design-system.md create mode 100644 src/roadmaps/design-system/content/100-design-system-basics/101-need-of-design-system.md create mode 100644 src/roadmaps/design-system/content/100-design-system-basics/102-design-system-vs-component-library.md create mode 100644 src/roadmaps/design-system/content/100-design-system-basics/103-atomic-design.md create mode 100644 src/roadmaps/design-system/content/100-design-system-basics/105-stakeholders-involved.md create mode 100644 src/roadmaps/design-system/content/100-design-system-basics/106-design-system-examples.md create mode 100644 src/roadmaps/design-system/content/100-design-system-basics/index.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/100-component.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/101-component-library.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/102-design-language.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/103-governance.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/104-guidelines.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/105-pattern.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/106-pilot.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/107-token.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/108-ui-kit.md create mode 100644 src/roadmaps/design-system/content/101-design-system-terminology/index.md create mode 100644 src/roadmaps/design-system/content/102-making-a-design-system/100-from-scratch.md create mode 100644 src/roadmaps/design-system/content/102-making-a-design-system/101-from-existing-design.md create mode 100644 src/roadmaps/design-system/content/102-making-a-design-system/index.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/100-existing-design-process.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/101-visual-audit.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/102-identify-design-elements.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/103-identify-components.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/104-ab-tests-and-experiments.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/105-regional-requirements.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/106-documentation.md create mode 100644 src/roadmaps/design-system/content/103-existing-design-analysis/index.md create mode 100644 src/roadmaps/design-system/content/104-design-language/100-brand/100-vision.md create mode 100644 src/roadmaps/design-system/content/104-design-language/100-brand/101-design-principles.md create mode 100644 src/roadmaps/design-system/content/104-design-language/100-brand/102-terminology.md create mode 100644 src/roadmaps/design-system/content/104-design-language/100-brand/103-tone-of-voice.md create mode 100644 src/roadmaps/design-system/content/104-design-language/100-brand/104-writing-guidelines.md create mode 100644 src/roadmaps/design-system/content/104-design-language/100-brand/index.md create mode 100644 src/roadmaps/design-system/content/104-design-language/101-guidelines/100-accessibility.md create mode 100644 src/roadmaps/design-system/content/104-design-language/101-guidelines/101-user-onboarding.md create mode 100644 src/roadmaps/design-system/content/104-design-language/101-guidelines/102-microcopy-guidelines.md create mode 100644 src/roadmaps/design-system/content/104-design-language/101-guidelines/index.md create mode 100644 src/roadmaps/design-system/content/104-design-language/102-logo/100-monochrome-version.md create mode 100644 src/roadmaps/design-system/content/104-design-language/102-logo/101-small-use-guidance.md create mode 100644 src/roadmaps/design-system/content/104-design-language/102-logo/102-placement-and-clearance-guidance.md create mode 100644 src/roadmaps/design-system/content/104-design-language/102-logo/103-usage-guidance.md create mode 100644 src/roadmaps/design-system/content/104-design-language/102-logo/104-different-file-formats.md create mode 100644 src/roadmaps/design-system/content/104-design-language/102-logo/index.md create mode 100644 src/roadmaps/design-system/content/104-design-language/index.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/100-layout/100-spacing.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/100-layout/101-breakpoints.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/100-layout/102-grid.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/100-layout/103-units.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/100-layout/index.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/101-color/100-guidelines.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/101-color/101-dark-mode.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/101-color/102-functional-colors.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/101-color/103-accessibility.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/101-color/index.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/100-accessibility.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/101-style.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/102-naming.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/103-grid-relation.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/104-sizes.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/105-keywords.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/106-reserved-icons.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/107-guidelines.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/102-iconography/index.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/103-typography/100-responsiveness.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/103-typography/101-grid-relation.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/103-typography/102-readability.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/103-typography/103-performance.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/103-typography/104-guidelines.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/103-typography/index.md create mode 100644 src/roadmaps/design-system/content/105-design-tokens/index.md create mode 100644 src/roadmaps/design-system/content/106-core-components/100-avatar.md create mode 100644 src/roadmaps/design-system/content/106-core-components/101-banner.md create mode 100644 src/roadmaps/design-system/content/106-core-components/102-badge.md create mode 100644 src/roadmaps/design-system/content/106-core-components/103-button.md create mode 100644 src/roadmaps/design-system/content/106-core-components/104-card.md create mode 100644 src/roadmaps/design-system/content/106-core-components/105-carousel.md create mode 100644 src/roadmaps/design-system/content/106-core-components/106-dropdown.md create mode 100644 src/roadmaps/design-system/content/106-core-components/107-icon.md create mode 100644 src/roadmaps/design-system/content/106-core-components/108-input-checkbox.md create mode 100644 src/roadmaps/design-system/content/106-core-components/109-input-radio.md create mode 100644 src/roadmaps/design-system/content/106-core-components/110-input-text.md create mode 100644 src/roadmaps/design-system/content/106-core-components/111-input-switch.md create mode 100644 src/roadmaps/design-system/content/106-core-components/112-select.md create mode 100644 src/roadmaps/design-system/content/106-core-components/113-textarea.md create mode 100644 src/roadmaps/design-system/content/106-core-components/114-list.md create mode 100644 src/roadmaps/design-system/content/106-core-components/115-loading-indicator.md create mode 100644 src/roadmaps/design-system/content/106-core-components/116-modal.md create mode 100644 src/roadmaps/design-system/content/106-core-components/117-tabs.md create mode 100644 src/roadmaps/design-system/content/106-core-components/118-toast.md create mode 100644 src/roadmaps/design-system/content/106-core-components/119-tooltip.md create mode 100644 src/roadmaps/design-system/content/106-core-components/index.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/100-component-catalog.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/101-documentation.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/102-code-style.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/103-unit-testing.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/104-accessibility-testing.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/105-semantic-versioning.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/106-release-strategy.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/107-commit-guidelines.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/108-pr-templates.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/109-contribution-guidelines.md create mode 100644 src/roadmaps/design-system/content/107-tooling/100-development/index.md create mode 100644 src/roadmaps/design-system/content/107-tooling/101-design/100-design-editor.md create mode 100644 src/roadmaps/design-system/content/107-tooling/101-design/101-plugins.md create mode 100644 src/roadmaps/design-system/content/107-tooling/101-design/102-version-control.md create mode 100644 src/roadmaps/design-system/content/107-tooling/101-design/103-contribution-guidelines.md create mode 100644 src/roadmaps/design-system/content/107-tooling/101-design/index.md create mode 100644 src/roadmaps/design-system/content/107-tooling/index.md create mode 100644 src/roadmaps/design-system/content/108-project-management/100-task-management/100-ticketing.md create mode 100644 src/roadmaps/design-system/content/108-project-management/100-task-management/101-milestones.md create mode 100644 src/roadmaps/design-system/content/108-project-management/100-task-management/102-roadmap.md create mode 100644 src/roadmaps/design-system/content/108-project-management/100-task-management/index.md create mode 100644 src/roadmaps/design-system/content/108-project-management/101-communications/100-community-meetings.md create mode 100644 src/roadmaps/design-system/content/108-project-management/101-communications/101-communication-channel.md create mode 100644 src/roadmaps/design-system/content/108-project-management/101-communications/102-open-hours.md create mode 100644 src/roadmaps/design-system/content/108-project-management/101-communications/103-faqs.md create mode 100644 src/roadmaps/design-system/content/108-project-management/101-communications/index.md create mode 100644 src/roadmaps/design-system/content/108-project-management/102-analytics/100-component-analytics.md create mode 100644 src/roadmaps/design-system/content/108-project-management/102-analytics/101-error-logging.md create mode 100644 src/roadmaps/design-system/content/108-project-management/102-analytics/102-tooling-analytics.md create mode 100644 src/roadmaps/design-system/content/108-project-management/102-analytics/103-service-and-health-metrics.md create mode 100644 src/roadmaps/design-system/content/108-project-management/102-analytics/index.md create mode 100644 src/roadmaps/design-system/content/108-project-management/index.md create mode 100644 src/roadmaps/design-system/design-system.md create mode 100644 src/roadmaps/devops/content/100-language/100-python.md create mode 100644 src/roadmaps/devops/content/100-language/101-ruby.md create mode 100644 src/roadmaps/devops/content/100-language/102-javascript.md create mode 100644 src/roadmaps/devops/content/100-language/103-go.md create mode 100644 src/roadmaps/devops/content/100-language/104-rust.md create mode 100644 src/roadmaps/devops/content/100-language/105-c.md create mode 100644 src/roadmaps/devops/content/100-language/106-cpp.md create mode 100644 src/roadmaps/devops/content/100-language/index.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/100-networking.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/101-io-management.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/102-virtualization.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/103-memory-storage.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/104-file-system.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/105-sockets.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/106-posix.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/107-processes.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/108-startup-management.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/109-service-management.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md create mode 100644 src/roadmaps/devops/content/101-os-concepts/index.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/100-windows.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/101-centos.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/102-ubuntu.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/103-suse-linux.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/104-rhel.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/105-fedora.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/106-debian.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/107-free-bsd.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/108-open-bsd.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/109-net-bsd.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/100-operating-system/index.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-editors.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/115-airmon.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/117-airodump.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/132-egrep.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/133-fgrep.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/index.md create mode 100644 src/roadmaps/devops/content/102-managing-servers/index.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/100-osi-model.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/101-dns.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/102-http.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/100-white-grey-listing.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/101-smtp.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/102-imaps.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/103-pop3s.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/104-dmarc.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/105-spf.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/106-domain-keys.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-emails/index.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/103-https.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/104-ftp.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/105-ssl-tls.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/106-ssh.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md create mode 100644 src/roadmaps/devops/content/103-networking-protocols/index.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/100-reverse-proxy.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/101-caching-server.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/102-forward-proxy.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/103-load-balancer.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/104-firewall.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/105-nginx.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/106-apache.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/106-caddy.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/107-tomcat.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/108-iis.md create mode 100644 src/roadmaps/devops/content/104-setting-up-x/index.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/100-consul.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/101-istio.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/102-envoy.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/103-linkerd.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/index.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/101-containers.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/101-lxc.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/100-ansible.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/101-chef.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/103-puppet.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/index.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/100-terraform.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/101-aws-cdk.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/102-cloudformation.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/103-pulumi.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/index.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/104-docker-swarm.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/104-mesos.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md create mode 100644 src/roadmaps/devops/content/105-infrastructure-as-code/index.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/100-gitlab-ci.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/101-jenkins.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/102-github-actions.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/103-travis-ci.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/104-bamboo.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/105-teamcity.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/106-azure-devops-services.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/107-circle-ci.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/108-drone.md create mode 100644 src/roadmaps/devops/content/106-ci-cd/index.md create mode 100644 src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/100-prometheus.md create mode 100644 src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md create mode 100644 src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-datadog.md create mode 100644 src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-grafana.md create mode 100644 src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md create mode 100644 src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-zabbix.md create mode 100644 src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/index.md create mode 100644 src/roadmaps/devops/content/107-monitoring/101-application-monitoring/100-jaeger.md create mode 100644 src/roadmaps/devops/content/107-monitoring/101-application-monitoring/101-new-relic.md create mode 100644 src/roadmaps/devops/content/107-monitoring/101-application-monitoring/102-app-dynamics.md create mode 100644 src/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md create mode 100644 src/roadmaps/devops/content/107-monitoring/101-application-monitoring/104-open-telemetry.md create mode 100644 src/roadmaps/devops/content/107-monitoring/101-application-monitoring/index.md create mode 100644 src/roadmaps/devops/content/107-monitoring/102-logs-management/100-elastic-stack.md create mode 100644 src/roadmaps/devops/content/107-monitoring/102-logs-management/101-graylog.md create mode 100644 src/roadmaps/devops/content/107-monitoring/102-logs-management/102-papertrail.md create mode 100644 src/roadmaps/devops/content/107-monitoring/102-logs-management/102-splunk.md create mode 100644 src/roadmaps/devops/content/107-monitoring/102-logs-management/103-loki.md create mode 100644 src/roadmaps/devops/content/107-monitoring/102-logs-management/index.md create mode 100644 src/roadmaps/devops/content/107-monitoring/index.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/100-aws.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/101-google-cloud.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/102-azure.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/103-heroku.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/104-albaba-cloud.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/104-digital-ocean.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/105-linode.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/106-vultr.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md create mode 100644 src/roadmaps/devops/content/108-cloud-providers/index.md create mode 100644 src/roadmaps/devops/content/109-availability.md create mode 100644 src/roadmaps/devops/content/110-data-management.md create mode 100644 src/roadmaps/devops/content/111-design-and-implementation.md create mode 100644 src/roadmaps/devops/content/112-management-and-monitoring.md create mode 100644 src/roadmaps/devops/devops.md create mode 100644 src/roadmaps/flutter/content/100-dart-basics/100-dart-pad.md create mode 100644 src/roadmaps/flutter/content/100-dart-basics/101-variables.md create mode 100644 src/roadmaps/flutter/content/100-dart-basics/102-built-in-types.md create mode 100644 src/roadmaps/flutter/content/100-dart-basics/103-functions.md create mode 100644 src/roadmaps/flutter/content/100-dart-basics/104-operators.md create mode 100644 src/roadmaps/flutter/content/100-dart-basics/105-control-flow-statements.md create mode 100644 src/roadmaps/flutter/content/100-dart-basics/index.md create mode 100644 src/roadmaps/flutter/content/101-setup-development-environment/100-flutter-cli.md create mode 100644 src/roadmaps/flutter/content/101-setup-development-environment/101-ides/100-vs-code.md create mode 100644 src/roadmaps/flutter/content/101-setup-development-environment/101-ides/101-android-studio.md create mode 100644 src/roadmaps/flutter/content/101-setup-development-environment/101-ides/102-intellij-idea.md create mode 100644 src/roadmaps/flutter/content/101-setup-development-environment/101-ides/index.md create mode 100644 src/roadmaps/flutter/content/101-setup-development-environment/index.md create mode 100644 src/roadmaps/flutter/content/102-widgets/100-stateless-widgets.md create mode 100644 src/roadmaps/flutter/content/102-widgets/101-stateful-widgets.md create mode 100644 src/roadmaps/flutter/content/102-widgets/102-styled-widgets/100-material-widgets.md create mode 100644 src/roadmaps/flutter/content/102-widgets/102-styled-widgets/101-cupertino-widgets.md create mode 100644 src/roadmaps/flutter/content/102-widgets/102-styled-widgets/index.md create mode 100644 src/roadmaps/flutter/content/102-widgets/index.md create mode 100644 src/roadmaps/flutter/content/103-working-with-assets/100-fonts.md create mode 100644 src/roadmaps/flutter/content/103-working-with-assets/101-images.md create mode 100644 src/roadmaps/flutter/content/103-working-with-assets/102-other-file-types.md create mode 100644 src/roadmaps/flutter/content/103-working-with-assets/index.md create mode 100644 src/roadmaps/flutter/content/104-version-control-systems/100-git.md create mode 100644 src/roadmaps/flutter/content/104-version-control-systems/index.md create mode 100644 src/roadmaps/flutter/content/105-repo-hosting-services/100-github.md create mode 100644 src/roadmaps/flutter/content/105-repo-hosting-services/index.md create mode 100644 src/roadmaps/flutter/content/106-design-principles/100-dependency-injection.md create mode 100644 src/roadmaps/flutter/content/106-design-principles/101-design-patterns.md create mode 100644 src/roadmaps/flutter/content/106-design-principles/102-solid-principles.md create mode 100644 src/roadmaps/flutter/content/106-design-principles/103-oop.md create mode 100644 src/roadmaps/flutter/content/106-design-principles/index.md create mode 100644 src/roadmaps/flutter/content/107-package-manager/100-pub-dev.md create mode 100644 src/roadmaps/flutter/content/107-package-manager/101-flutter-pub-dart-pub.md create mode 100644 src/roadmaps/flutter/content/107-package-manager/index.md create mode 100644 src/roadmaps/flutter/content/108-working-with-apis/100-json.md create mode 100644 src/roadmaps/flutter/content/108-working-with-apis/101-web-sockets.md create mode 100644 src/roadmaps/flutter/content/108-working-with-apis/102-graphql.md create mode 100644 src/roadmaps/flutter/content/108-working-with-apis/103-restful-apis.md create mode 100644 src/roadmaps/flutter/content/108-working-with-apis/index.md create mode 100644 src/roadmaps/flutter/content/109-storage/100-sqlite.md create mode 100644 src/roadmaps/flutter/content/109-storage/101-shared-preferences.md create mode 100644 src/roadmaps/flutter/content/109-storage/102-firebase/100-authentication.md create mode 100644 src/roadmaps/flutter/content/109-storage/102-firebase/101-storage.md create mode 100644 src/roadmaps/flutter/content/109-storage/102-firebase/102-firestore.md create mode 100644 src/roadmaps/flutter/content/109-storage/102-firebase/103-push-notifications.md create mode 100644 src/roadmaps/flutter/content/109-storage/102-firebase/104-remote-config.md create mode 100644 src/roadmaps/flutter/content/109-storage/102-firebase/index.md create mode 100644 src/roadmaps/flutter/content/109-storage/index.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/100-core-libraries.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/101-lists.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/102-collections.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/103-lambdas.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/104-functional-programming.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/105-isolates.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/106-async-await.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/107-streams.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/108-futures.md create mode 100644 src/roadmaps/flutter/content/110-advanced-dart/index.md create mode 100644 src/roadmaps/flutter/content/111-state-management/100-provider.md create mode 100644 src/roadmaps/flutter/content/111-state-management/101-bloc.md create mode 100644 src/roadmaps/flutter/content/111-state-management/102-flutter-bloc.md create mode 100644 src/roadmaps/flutter/content/111-state-management/103-velocity-x.md create mode 100644 src/roadmaps/flutter/content/111-state-management/104-get-x.md create mode 100644 src/roadmaps/flutter/content/111-state-management/105-redux.md create mode 100644 src/roadmaps/flutter/content/111-state-management/index.md create mode 100644 src/roadmaps/flutter/content/112-animations/100-curved-animations.md create mode 100644 src/roadmaps/flutter/content/112-animations/101-animation-controller.md create mode 100644 src/roadmaps/flutter/content/112-animations/102-animated-builder.md create mode 100644 src/roadmaps/flutter/content/112-animations/103-animated-widget.md create mode 100644 src/roadmaps/flutter/content/112-animations/104-hero.md create mode 100644 src/roadmaps/flutter/content/112-animations/105-opacity.md create mode 100644 src/roadmaps/flutter/content/112-animations/index.md create mode 100644 src/roadmaps/flutter/content/113-testing/100-unit-testing.md create mode 100644 src/roadmaps/flutter/content/113-testing/101-widget-testing.md create mode 100644 src/roadmaps/flutter/content/113-testing/102-integration-testing.md create mode 100644 src/roadmaps/flutter/content/113-testing/103-tdd.md create mode 100644 src/roadmaps/flutter/content/113-testing/104-bdd.md create mode 100644 src/roadmaps/flutter/content/113-testing/index.md create mode 100644 src/roadmaps/flutter/content/114-reactive-programming/100-rxdart.md create mode 100644 src/roadmaps/flutter/content/114-reactive-programming/index.md create mode 100644 src/roadmaps/flutter/content/115-dev-tools/100-flutter-inspector.md create mode 100644 src/roadmaps/flutter/content/115-dev-tools/101-flutter-outline.md create mode 100644 src/roadmaps/flutter/content/115-dev-tools/102-memory-allocation.md create mode 100644 src/roadmaps/flutter/content/115-dev-tools/index.md create mode 100644 src/roadmaps/flutter/content/116-flutter-internals/100-render-objects.md create mode 100644 src/roadmaps/flutter/content/116-flutter-internals/102-immutability.md create mode 100644 src/roadmaps/flutter/content/116-flutter-internals/3-trees.md create mode 100644 src/roadmaps/flutter/content/116-flutter-internals/index.md create mode 100644 src/roadmaps/flutter/content/117-ci-cd/100-fast-lane.md create mode 100644 src/roadmaps/flutter/content/117-ci-cd/101-codemagic.md create mode 100644 src/roadmaps/flutter/content/117-ci-cd/102-bitrise.md create mode 100644 src/roadmaps/flutter/content/117-ci-cd/103-github-actions.md create mode 100644 src/roadmaps/flutter/content/117-ci-cd/104-firebase-app-distribution.md create mode 100644 src/roadmaps/flutter/content/117-ci-cd/index.md create mode 100644 src/roadmaps/flutter/content/118-analytics/100-segment.md create mode 100644 src/roadmaps/flutter/content/118-analytics/101-mix-panel.md create mode 100644 src/roadmaps/flutter/content/118-analytics/102-firebase-analytics.md create mode 100644 src/roadmaps/flutter/content/118-analytics/103-google-analytics.md create mode 100644 src/roadmaps/flutter/content/118-analytics/index.md create mode 100644 src/roadmaps/flutter/content/119-deployment/100-appstore.md create mode 100644 src/roadmaps/flutter/content/119-deployment/101-guidelines-and-protocols.md create mode 100644 src/roadmaps/flutter/content/119-deployment/101-playstore.md create mode 100644 src/roadmaps/flutter/content/119-deployment/index.md create mode 100644 src/roadmaps/flutter/flutter.md create mode 100644 src/roadmaps/golang/content/100-go-basics/100-basic-syntax.md create mode 100644 src/roadmaps/golang/content/100-go-basics/101-variables.md create mode 100644 src/roadmaps/golang/content/100-go-basics/102-data-types.md create mode 100644 src/roadmaps/golang/content/100-go-basics/103-for-loop.md create mode 100644 src/roadmaps/golang/content/100-go-basics/104-range.md create mode 100644 src/roadmaps/golang/content/100-go-basics/106-errors-panic-recover.md create mode 100644 src/roadmaps/golang/content/100-go-basics/107-conditionals.md create mode 100644 src/roadmaps/golang/content/100-go-basics/108-functions.md create mode 100644 src/roadmaps/golang/content/100-go-basics/109-packages.md create mode 100644 src/roadmaps/golang/content/100-go-basics/110-type-casting.md create mode 100644 src/roadmaps/golang/content/100-go-basics/111-type-inference.md create mode 100644 src/roadmaps/golang/content/100-go-basics/112-arrays.md create mode 100644 src/roadmaps/golang/content/100-go-basics/113-slices.md create mode 100644 src/roadmaps/golang/content/100-go-basics/114-maps.md create mode 100644 src/roadmaps/golang/content/100-go-basics/115-make.md create mode 100644 src/roadmaps/golang/content/100-go-basics/116-structs.md create mode 100644 src/roadmaps/golang/content/100-go-basics/index.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/100-go-modules.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/101-working-with-json.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/102-types-and-type-assertions.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/103-interfaces.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/104-context.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/105-goroutines.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/106-channels.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/107-buffer.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/108-select.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/109-mutext.md create mode 100644 src/roadmaps/golang/content/101-go-advanced/index.md create mode 100644 src/roadmaps/golang/content/102-go-building-clis/100-cobra.md create mode 100644 src/roadmaps/golang/content/102-go-building-clis/101-urfave-cli.md create mode 100644 src/roadmaps/golang/content/102-go-building-clis/index.md create mode 100644 src/roadmaps/golang/content/103-go-orms/100-gorm.md create mode 100644 src/roadmaps/golang/content/103-go-orms/index.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/100-beego.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/101-gin.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/102-revel.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/103-echo.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/104-gorilla.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/105-gofiber.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/106-buffalo.md create mode 100644 src/roadmaps/golang/content/104-go-web-frameworks/index.md create mode 100644 src/roadmaps/golang/content/105-go-logging/100-zerolog.md create mode 100644 src/roadmaps/golang/content/105-go-logging/101-zap.md create mode 100644 src/roadmaps/golang/content/105-go-logging/102-apex.md create mode 100644 src/roadmaps/golang/content/105-go-logging/index.md create mode 100644 src/roadmaps/golang/content/106-go-realtime-communication/100-melody.md create mode 100644 src/roadmaps/golang/content/106-go-realtime-communication/101-centrifugo.md create mode 100644 src/roadmaps/golang/content/106-go-realtime-communication/index.md create mode 100644 src/roadmaps/golang/content/107-go-api-clients/100-rest/100-heimdall.md create mode 100644 src/roadmaps/golang/content/107-go-api-clients/100-rest/101-grequests.md create mode 100644 src/roadmaps/golang/content/107-go-api-clients/100-rest/index.md create mode 100644 src/roadmaps/golang/content/107-go-api-clients/101-graphql/100-graphql-go.md create mode 100644 src/roadmaps/golang/content/107-go-api-clients/101-graphql/101-gqlgen.md create mode 100644 src/roadmaps/golang/content/107-go-api-clients/101-graphql/index.md create mode 100644 src/roadmaps/golang/content/107-go-api-clients/index.md create mode 100644 src/roadmaps/golang/content/108-go-testing-your-apps.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/100-watermill.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/101-rpcx.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/102-go-kit.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/103-micro.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/104-go-zero.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/105-protocol-buffers.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/106-grpc-go.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/107-grpc-gateway.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/108-twirp.md create mode 100644 src/roadmaps/golang/content/109-go-microservices/index.md create mode 100644 src/roadmaps/golang/golang.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/100-basic-syntax.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/101-data-types-variables.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/102-conditionals.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/103-functions.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/104-datastructures.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/105-oop.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/106-files-and-apis.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/106-packages.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/107-loops.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/108-exception-handling.md create mode 100644 src/roadmaps/java/content/100-java-fundamentals/index.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/100-generics.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/101-memory-management.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/102-collection-framework.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/103-serialization.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/104-networking-sockets.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/105-streams.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/106-how-jvm-works.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/107-garbage-collection.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/108-basics-of-threads.md create mode 100644 src/roadmaps/java/content/101-java-advanced-topics/index.md create mode 100644 src/roadmaps/java/content/102-java-build-tools/100-gradle.md create mode 100644 src/roadmaps/java/content/102-java-build-tools/101-maven.md create mode 100644 src/roadmaps/java/content/102-java-build-tools/102-ant.md create mode 100644 src/roadmaps/java/content/102-java-build-tools/index.md create mode 100644 src/roadmaps/java/content/103-java-web-frameworks/100-spring.md create mode 100644 src/roadmaps/java/content/103-java-web-frameworks/101-spring-boot.md create mode 100644 src/roadmaps/java/content/103-java-web-frameworks/102-play-framework.md create mode 100644 src/roadmaps/java/content/103-java-web-frameworks/103-spark.md create mode 100644 src/roadmaps/java/content/103-java-web-frameworks/index.md create mode 100644 src/roadmaps/java/content/104-java-orm/100-jpa.md create mode 100644 src/roadmaps/java/content/104-java-orm/101-spring-data-jpa.md create mode 100644 src/roadmaps/java/content/104-java-orm/102-hibernate.md create mode 100644 src/roadmaps/java/content/104-java-orm/103-ebean.md create mode 100644 src/roadmaps/java/content/104-java-orm/index.md create mode 100644 src/roadmaps/java/content/105-java-logging-frameworks/100-log4j2.md create mode 100644 src/roadmaps/java/content/105-java-logging-frameworks/101-logback.md create mode 100644 src/roadmaps/java/content/105-java-logging-frameworks/102-slf4j.md create mode 100644 src/roadmaps/java/content/105-java-logging-frameworks/103-tinylog.md create mode 100644 src/roadmaps/java/content/105-java-logging-frameworks/index.md create mode 100644 src/roadmaps/java/content/106-java-jdbc/100-jdbi3.md create mode 100644 src/roadmaps/java/content/106-java-jdbc/101-jdbc-template.md create mode 100644 src/roadmaps/java/content/106-java-jdbc/index.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/100-mocking.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/101-cucumber-jvm.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/102-cukes.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/103-jbehave.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/104-junit.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/105-testng.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/106-rest-assured.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/107-jmeter.md create mode 100644 src/roadmaps/java/content/107-testing-java-apps/index.md create mode 100644 src/roadmaps/java/java.md create mode 100644 src/roadmaps/javascript/content/100-javascript-introduction/100-what-is-javascript.md create mode 100644 src/roadmaps/javascript/content/100-javascript-introduction/101-history-of-javascript.md create mode 100644 src/roadmaps/javascript/content/100-javascript-introduction/102-javascript-versions.md create mode 100644 src/roadmaps/javascript/content/100-javascript-introduction/103-how-to-run-javascript.md create mode 100644 src/roadmaps/javascript/content/100-javascript-introduction/index.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/100-var.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/101-let.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/102-const.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/index.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/101-hoisting.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/102-naming-rules.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/103-scopes/100-block.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/103-scopes/101-function.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/103-scopes/102-global.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/103-scopes/index.md create mode 100644 src/roadmaps/javascript/content/101-javascript-variables/index.md create mode 100644 src/roadmaps/javascript/content/102-javascript-datatypes/100-primitive-types.md create mode 100644 src/roadmaps/javascript/content/102-javascript-datatypes/101-object/100-prototype.md create mode 100644 src/roadmaps/javascript/content/102-javascript-datatypes/101-object/101-prototypal-inheritance.md create mode 100644 src/roadmaps/javascript/content/102-javascript-datatypes/101-object/102-builtin-objects.md create mode 100644 src/roadmaps/javascript/content/102-javascript-datatypes/101-object/index.md create mode 100644 src/roadmaps/javascript/content/102-javascript-datatypes/102-typeof-operator.md create mode 100644 src/roadmaps/javascript/content/102-javascript-datatypes/index.md create mode 100644 src/roadmaps/javascript/content/103-javascript-type-casting/100-type-conversion-coercion.md create mode 100644 src/roadmaps/javascript/content/103-javascript-type-casting/101-explicit-type-casting.md create mode 100644 src/roadmaps/javascript/content/103-javascript-type-casting/102-implicit-type-casting.md create mode 100644 src/roadmaps/javascript/content/103-javascript-type-casting/index.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/100-arrays.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/101-typed-arrays.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/index.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/100-map.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/101-weak-map.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/102-set.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/103-weak-set.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/index.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/100-json.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/index.md create mode 100644 src/roadmaps/javascript/content/104-javascript-data-structures/index.md create mode 100644 src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/100-is-loosely-equal.md create mode 100644 src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/101-is-strictly-equal.md create mode 100644 src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/102-same-value-zero.md create mode 100644 src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/103-same-value.md create mode 100644 src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/index.md create mode 100644 src/roadmaps/javascript/content/105-javascript-equality-comparisons/101-value-comparison-operators.md create mode 100644 src/roadmaps/javascript/content/105-javascript-equality-comparisons/index.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/100-for-in-statement.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/101-for-of-statement.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/100-labeled-statements.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/index.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/103-for-statement.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/104-do-while-statement.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/105-while-statement.md create mode 100644 src/roadmaps/javascript/content/106-javascript-loops-iterations/index.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/101-try-catch-finally.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/102-utilizing-error-objects.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/index.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/100-if-else.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/101-switch.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/index.md create mode 100644 src/roadmaps/javascript/content/107-javascript-control-flow/index.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/100-assignment-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/101-omparison-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/102-arithmetic-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/103-bitwise-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/104-logical-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/105-bigint-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/106-string-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/107-conditional-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/108-comma-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/109-unary-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/110-relational-operators.md create mode 100644 src/roadmaps/javascript/content/108-javascript-expressions-and-operators/index.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/100-defining-calling-functions.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/101-rest-params.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/index.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/102-arrow-functions.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/103-iifes.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/104-arguments-object.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/100-recursion.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/101-lexical-scoping.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/102-closures.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/index.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/106-built-in-functions.md create mode 100644 src/roadmaps/javascript/content/109-javascript-functions/index.md create mode 100644 src/roadmaps/javascript/content/110-javascript-strict-mode.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/100-function-borrowing.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/101-this-in-a-method.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/102-this-in-a-function.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/103-using-this-alone.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/104-this-in-event-handlers.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/105-this-in-arrow-functions.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/106-explicit-binding.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/107-call-method.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/108-apply-method.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/109-bind-method.md create mode 100644 src/roadmaps/javascript/content/111-javascript-this-keyword/index.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/100-event-loop.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/101-set-timeout.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/102-set-interval.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/100-callback-hell.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/index.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/100-async-await.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/index.md create mode 100644 src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/index.md create mode 100644 src/roadmaps/javascript/content/113-javascript-classes.md create mode 100644 src/roadmaps/javascript/content/114-javascript-iterators-and-generators.md create mode 100644 src/roadmaps/javascript/content/115-javascript-modules/100-commonjs.md create mode 100644 src/roadmaps/javascript/content/115-javascript-modules/101-esm.md create mode 100644 src/roadmaps/javascript/content/115-javascript-modules/index.md create mode 100644 src/roadmaps/javascript/content/116-javascript-memory-management/100-memory-lifecycle.md create mode 100644 src/roadmaps/javascript/content/116-javascript-memory-management/101-garbage-collection.md create mode 100644 src/roadmaps/javascript/content/116-javascript-memory-management/index.md create mode 100644 src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/100-debugging-issues.md create mode 100644 src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/101-debugging-memory-leaks.md create mode 100644 src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/102-debugging-performance.md create mode 100644 src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/index.md create mode 100644 src/roadmaps/javascript/content/118-working-with-apis/100-xml-http-request.md create mode 100644 src/roadmaps/javascript/content/118-working-with-apis/101-fetch.md create mode 100644 src/roadmaps/javascript/content/118-working-with-apis/index.md create mode 100644 src/roadmaps/javascript/javascript.md create mode 100644 src/roadmaps/nodejs/content/100-nodejs-introduction/100-what-is-nodejs.md create mode 100644 src/roadmaps/nodejs/content/100-nodejs-introduction/101-why-nodejs.md create mode 100644 src/roadmaps/nodejs/content/100-nodejs-introduction/102-history-of-nodejs.md create mode 100644 src/roadmaps/nodejs/content/100-nodejs-introduction/103-nodejs-vs-browser.md create mode 100644 src/roadmaps/nodejs/content/100-nodejs-introduction/104-running-nodejs-code.md create mode 100644 src/roadmaps/nodejs/content/100-nodejs-introduction/index.md create mode 100644 src/roadmaps/nodejs/content/101-nodejs-modules/100-commonjs-vs-esm.md create mode 100644 src/roadmaps/nodejs/content/101-nodejs-modules/101-custom-modules.md create mode 100644 src/roadmaps/nodejs/content/101-nodejs-modules/102-global-keyword.md create mode 100644 src/roadmaps/nodejs/content/101-nodejs-modules/index.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/100-npx.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/101-global-install-vs-local-install.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/102-updating-packages.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/103-using-packages.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/104-running-scripts.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/105-npm-workspaces.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/106-creating-packages.md create mode 100644 src/roadmaps/nodejs/content/102-nodejs-npm/index.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/100-stack-trace.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/101-using-debugger.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/102-uncaught-exceptions.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/100-javascript-errors.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/101-system-errors.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/102-user-specified-errors.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/103-assertion-errors.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/index.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/104-async-errors.md create mode 100644 src/roadmaps/nodejs/content/103-nodejs-error-handling/index.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/100-event-loop.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/101-event-emitter.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/102-promises.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/103-async-await.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/104-callbacks.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/105-set-timeout.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/106-set-interval.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/107-set-immediate.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/108-process-next-tick.md create mode 100644 src/roadmaps/nodejs/content/104-nodejs-async-programming/index.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/100-fs-module.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/101-path-module.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/102-process-cwd.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/103-glob.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/104-globby.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/105-fs-extra.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/106-chokidar.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/107-dirname.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/108-filename.md create mode 100644 src/roadmaps/nodejs/content/105-nodejs-working-with-files/index.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/100-exitting-and-exit-codes.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/100-process-stdout.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/101-process-stderr.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/102-chalk.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/103-figlet.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/104-cli-progress.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/index.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/100-process-stdin.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/101-prompts.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/102-inquirer.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/index.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/100-process-argv.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/101-commander-js.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/index.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/100-dotenv.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/101-process-env.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/index.md create mode 100644 src/roadmaps/nodejs/content/106-nodejs-command-line-apps/index.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/100-http-module.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/101-express-js.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/102-nest-js.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/103-fastify.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/104-got.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/105-unfetch.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/106-axios.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/107-api-calls-http.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/108-jsonwebtoken.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/109-passport-js.md create mode 100644 src/roadmaps/nodejs/content/107-nodejs-apis/index.md create mode 100644 src/roadmaps/nodejs/content/108-nodejs-keep-app-running/100-nodemon.md create mode 100644 src/roadmaps/nodejs/content/108-nodejs-keep-app-running/index.md create mode 100644 src/roadmaps/nodejs/content/109-nodejs-template-engines/100-marko.md create mode 100644 src/roadmaps/nodejs/content/109-nodejs-template-engines/101-pug.md create mode 100644 src/roadmaps/nodejs/content/109-nodejs-template-engines/102-ejs.md create mode 100644 src/roadmaps/nodejs/content/109-nodejs-template-engines/index.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/100-knex.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/101-type-orm.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/102-sequelize.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/103-prisma.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/104-native-drivers.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/index.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/101-document/100-mongoose.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/101-document/101-prisma.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/101-document/102-native-drivers.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/101-document/index.md create mode 100644 src/roadmaps/nodejs/content/110-nodejs-databases/index.md create mode 100644 src/roadmaps/nodejs/content/111-nodejs-testing/100-jest.md create mode 100644 src/roadmaps/nodejs/content/111-nodejs-testing/101-mocha.md create mode 100644 src/roadmaps/nodejs/content/111-nodejs-testing/102-cypress.md create mode 100644 src/roadmaps/nodejs/content/111-nodejs-testing/index.md create mode 100644 src/roadmaps/nodejs/content/112-nodejs-logging/100-morgan.md create mode 100644 src/roadmaps/nodejs/content/112-nodejs-logging/101-winston.md create mode 100644 src/roadmaps/nodejs/content/112-nodejs-logging/index.md create mode 100644 src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/100-pm2.md create mode 100644 src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/101-forever.md create mode 100644 src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/102-nohup.md create mode 100644 src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/index.md create mode 100644 src/roadmaps/nodejs/content/114-nodejs-threads/100-child-process.md create mode 100644 src/roadmaps/nodejs/content/114-nodejs-threads/101-cluster.md create mode 100644 src/roadmaps/nodejs/content/114-nodejs-threads/102-worker-threads.md create mode 100644 src/roadmaps/nodejs/content/114-nodejs-threads/index.md create mode 100644 src/roadmaps/nodejs/content/115-nodejs-streams.md create mode 100644 src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/100-garbage-collection.md create mode 100644 src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/index.md create mode 100644 src/roadmaps/nodejs/content/116-nodejs-more-debugging/101-node-inspect.md create mode 100644 src/roadmaps/nodejs/content/116-nodejs-more-debugging/102-using-apm.md create mode 100644 src/roadmaps/nodejs/content/116-nodejs-more-debugging/index.md create mode 100644 src/roadmaps/nodejs/content/117-nodejs-common-modules/100-builtin-modules.md create mode 100644 src/roadmaps/nodejs/content/117-nodejs-common-modules/index.md create mode 100644 src/roadmaps/nodejs/nodejs.md create mode 100644 src/roadmaps/postgresql-dba/postgresql-dba.md create mode 100644 src/roadmaps/python/content/100-python-basics/100-basic-syntax.md create mode 100644 src/roadmaps/python/content/100-python-basics/101-variables-and-datatypes.md create mode 100644 src/roadmaps/python/content/100-python-basics/102-conditionals.md create mode 100644 src/roadmaps/python/content/100-python-basics/103-typecasting-exceptions.md create mode 100644 src/roadmaps/python/content/100-python-basics/104-functions.md create mode 100644 src/roadmaps/python/content/100-python-basics/105-lists-tuples-sets-dictionaries.md create mode 100644 src/roadmaps/python/content/100-python-basics/106-string-methods.md create mode 100644 src/roadmaps/python/content/100-python-basics/index.md create mode 100644 src/roadmaps/python/content/101-data-structures-and-algorithms/100-arrays-linked-lists.md create mode 100644 src/roadmaps/python/content/101-data-structures-and-algorithms/101-heaps-stacks-queues.md create mode 100644 src/roadmaps/python/content/101-data-structures-and-algorithms/102-hash-tables.md create mode 100644 src/roadmaps/python/content/101-data-structures-and-algorithms/103-binary-search-trees.md create mode 100644 src/roadmaps/python/content/101-data-structures-and-algorithms/104-recursion.md create mode 100644 src/roadmaps/python/content/101-data-structures-and-algorithms/105-sorting-algorithms.md create mode 100644 src/roadmaps/python/content/101-data-structures-and-algorithms/index.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/100-oop/100-methods-dunder.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/100-oop/101-inheritance.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/100-oop/102-classes.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/100-oop/index.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/101-regular-expressions.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/102-decorators.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/103-lambdas.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/104-iterators.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/105-modules/100-builtin-modules.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/105-modules/101-custom-modules.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/105-modules/index.md create mode 100644 src/roadmaps/python/content/102-python-advanced-topics/index.md create mode 100644 src/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md create mode 100644 src/roadmaps/python/content/103-version-control-systems/index.md create mode 100644 src/roadmaps/python/content/104-repo-hosting-services/100-github.md create mode 100644 src/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md create mode 100644 src/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md create mode 100644 src/roadmaps/python/content/104-repo-hosting-services/index.md create mode 100644 src/roadmaps/python/content/105-python-package-managers/100-pypi.md create mode 100644 src/roadmaps/python/content/105-python-package-managers/101-pip.md create mode 100644 src/roadmaps/python/content/105-python-package-managers/index.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/100-synchronous/100-django.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/100-synchronous/101-flask.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/100-synchronous/102-pyramid.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/101-asynchronous/100-gevent.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/101-asynchronous/101-aiohttp.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/101-asynchronous/102-tornado.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/101-asynchronous/103-sanic.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md create mode 100644 src/roadmaps/python/content/106-python-frameworks/index.md create mode 100644 src/roadmaps/python/content/107-python-testing/100-unittest-pyunit.md create mode 100644 src/roadmaps/python/content/107-python-testing/101-pytest.md create mode 100644 src/roadmaps/python/content/107-python-testing/102-doctest.md create mode 100644 src/roadmaps/python/content/107-python-testing/102-nose.md create mode 100644 src/roadmaps/python/content/107-python-testing/index.md create mode 100644 src/roadmaps/python/python.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/100-what-is-qa.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/101-tester-mindset.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/100-white-box-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/101-gray-box-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/102-black-box-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/index.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/103-test-oracles.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/104-test-prioritization.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/100-qtest.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/101-test-rail.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/102-test-link.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/103-zephyr.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/index.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/106-project-management/100-atlassian.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/106-project-management/101-assembla.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/106-project-management/102-youtrack.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/106-project-management/103-trello.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/106-project-management/index.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/exploratory-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/index.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/integration-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/regression-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/sanity-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/smoke-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/uat.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/unit-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/accessibility-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/index.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/load-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/performance-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/security-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/stress-testing.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/index.md create mode 100644 src/roadmaps/qa/content/100-qa-basics/index.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/100-waterfall-model.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/101-v-model.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/100-kanban.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/101-scrum.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/102-safe.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/103-xp.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/index.md create mode 100644 src/roadmaps/qa/content/101-qa-sdlc/index.md create mode 100644 src/roadmaps/qa/content/102-qa-manual-testing/100-tdd.md create mode 100644 src/roadmaps/qa/content/102-qa-manual-testing/101-test-planning.md create mode 100644 src/roadmaps/qa/content/102-qa-manual-testing/102-test-cases-and-scenarios.md create mode 100644 src/roadmaps/qa/content/102-qa-manual-testing/103-reporting.md create mode 100644 src/roadmaps/qa/content/102-qa-manual-testing/104-compatibility.md create mode 100644 src/roadmaps/qa/content/102-qa-manual-testing/105-verification-and-validation.md create mode 100644 src/roadmaps/qa/content/102-qa-manual-testing/index.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/ajax.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/browser-devtools.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/caching.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/csr-vs-ssr.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/html-css-javascript.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/index.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/responsive-vs-adaptive.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/swas-pwas-jamstack.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-selenium-ide.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-browser-addons.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-ghost-inspector.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/cypress.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/index.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jasmine.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jest.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/nightwatch.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/playwright.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/puppeteer.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/qa-wolf.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/robot-framework.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/selenium.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/webdriver-io.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-bug-management.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/103-check-my-links.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/index.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/100-appium.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/101-xcuitest.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/102-espresso.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/103-detox.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/index.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/100-karate-framework.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/101-cypress.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/102-soap-ui.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/103-postman-newman.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/104-rest-assured.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/index.md create mode 100644 src/roadmaps/qa/content/103-qa-automated-testing/index.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/100-vegeta.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/101-jmeter.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/102-locust.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/103-gatling.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/104-k6.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/105-artillery.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/106-lighthouse.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/107-webpage-test.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/index.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/100-chrome-devtools.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/101-wave.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/102-axe.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/index.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/100-authentication-authorization.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/101-vulnerability-scanning.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/102-owasp-10.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/103-attack-vectors.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/104-secrets-management.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/index.md create mode 100644 src/roadmaps/qa/content/104-qa-non-functional-testing/index.md create mode 100644 src/roadmaps/qa/content/105-qa-email-testing/100-mailinator.md create mode 100644 src/roadmaps/qa/content/105-qa-email-testing/101-gmail-tester.md create mode 100644 src/roadmaps/qa/content/105-qa-email-testing/index.md create mode 100644 src/roadmaps/qa/content/106-qa-reporting/100-junit.md create mode 100644 src/roadmaps/qa/content/106-qa-reporting/101-allure.md create mode 100644 src/roadmaps/qa/content/106-qa-reporting/102-test-rail.md create mode 100644 src/roadmaps/qa/content/106-qa-reporting/index.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/100-grafana.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/101-new-relic.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/102-run-scope.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/103-sentry.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/104-kibana.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/105-data-dog.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/106-pager-duty.md create mode 100644 src/roadmaps/qa/content/107-qa-monitoring-logs/index.md create mode 100644 src/roadmaps/qa/content/108-qa-vcs/100-git.md create mode 100644 src/roadmaps/qa/content/108-qa-vcs/index.md create mode 100644 src/roadmaps/qa/content/109-qa-repo-hosting-services/100-gitlab.md create mode 100644 src/roadmaps/qa/content/109-qa-repo-hosting-services/101-bitbucket.md create mode 100644 src/roadmaps/qa/content/109-qa-repo-hosting-services/102-github.md create mode 100644 src/roadmaps/qa/content/109-qa-repo-hosting-services/index.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/100-jenkins.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/101-travis-ci.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/102-circle-ci.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/103-drone.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/104-gitlab-ci.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/105-bamboo.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/106-team-city.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/107-azure-devops-services.md create mode 100644 src/roadmaps/qa/content/110-qa-ci-cd/index.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/100-zombie-js.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/101-playwright.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/102-puppeteer.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/103-cypress.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/104-headless-chrome.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/105-headless-fox.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/106-html-unit.md create mode 100644 src/roadmaps/qa/content/111-qa-headless-testing/index.md create mode 100644 src/roadmaps/qa/qa.md create mode 100644 src/roadmaps/react-native/react-native.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/100-create-react-app.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/101-vite.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/index.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/100-create-react-app.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/101-jsx.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/102-components/100-functional-components.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/102-components/101-class-components.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/102-components/index.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/103-props-vs-state.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/104-conditional-rendering.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/105-component-life-cycle.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/106-lists-and-keys.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/107-composition-vs-inheritance.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/100-use-state.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/101-use-effect.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/102-use-context.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/index.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/109-events.md create mode 100644 src/roadmaps/react/content/100-react-fundamental-topics/index.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/100-hooks/101-writing-your-own-hooks.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/100-hooks/102-common-hooks.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/100-hooks/index.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/101-context.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/102-refs.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/103-render-props.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/104-high-order-components.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/105-portals.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/106-error-boundaries.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/107-fiber-architecture.md create mode 100644 src/roadmaps/react/content/101-react-advanced-topics/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/100-routers/100-react-router.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/100-routers/101-reach-router.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/100-routers/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/101-ssr/100-next-js.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/101-ssr/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/102-ssg/101-gatsby.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/102-ssg/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/100-react-query.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/101-use-http.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/102-apollo.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/103-relay-modern.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/104-axios.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/105-unfetch.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/106-superagent.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/103-api-calls/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/104-mobile/100-react-native.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/104-mobile/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/105-forms/100-react-hook-form.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/105-forms/101-formik.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/105-forms/102-final-form.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/105-forms/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/106-testing/100-jest.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/106-testing/101-react-testing-library.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/106-testing/102-cypress.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/106-testing/103-vitest.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/106-testing/104-playwright.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/106-testing/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/107-state-management/100-context-state.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/107-state-management/101-redux.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/107-state-management/102-mobx.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/107-state-management/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/108-styling/100-chakra-ui.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/108-styling/101-material-ui.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/108-styling/102-ant-design.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/108-styling/103-styled-components.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/108-styling/104-emotion.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/108-styling/index.md create mode 100644 src/roadmaps/react/content/102-react-ecosystem/index.md create mode 100644 src/roadmaps/react/react.md create mode 100644 src/roadmaps/software-architect/content/100-software-architect-basics/100-what-is-software-architecture.md create mode 100644 src/roadmaps/software-architect/content/100-software-architect-basics/101-what-is-software-architect.md create mode 100644 src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/100-application-architecture.md create mode 100644 src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/101-solution-architecture.md create mode 100644 src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/102-enterprise-architecture.md create mode 100644 src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/index.md create mode 100644 src/roadmaps/software-architect/content/100-software-architect-basics/index.md create mode 100644 src/roadmaps/software-architect/content/101-architect-responsibilities.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/100-design-and-architecture.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/101-decision-making.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/102-simplifying-things.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/103-how-to-code.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/104-documentation.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/105-communication.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/106-estimate-and-evaluate.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/107-balance.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/108-consult-and-coach.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/109-marketing-skills.md create mode 100644 src/roadmaps/software-architect/content/102-important-skills/index.md create mode 100644 src/roadmaps/software-architect/content/103-technical-skills.md create mode 100644 src/roadmaps/software-architect/content/104-programming-languages/100-java-kotlin-scala.md create mode 100644 src/roadmaps/software-architect/content/104-programming-languages/101-python.md create mode 100644 src/roadmaps/software-architect/content/104-programming-languages/102-ruby.md create mode 100644 src/roadmaps/software-architect/content/104-programming-languages/103-go.md create mode 100644 src/roadmaps/software-architect/content/104-programming-languages/104-javascript-typescript.md create mode 100644 src/roadmaps/software-architect/content/104-programming-languages/105-dotnet-framework.md create mode 100644 src/roadmaps/software-architect/content/104-programming-languages/index.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/100-oop.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/101-mvc-mvp-mvvm.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/102-cqrs-eventual-consistency.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/103-actors.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/104-acid-cap-theorem.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/105-solid.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-ddd.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-tdd.md create mode 100644 src/roadmaps/software-architect/content/105-patterns-and-design-principles/index.md create mode 100644 src/roadmaps/software-architect/content/106-architect-tools/100-git.md create mode 100644 src/roadmaps/software-architect/content/106-architect-tools/101-slack.md create mode 100644 src/roadmaps/software-architect/content/106-architect-tools/102-trello.md create mode 100644 src/roadmaps/software-architect/content/106-architect-tools/103-atlassian-tools.md create mode 100644 src/roadmaps/software-architect/content/106-architect-tools/index.md create mode 100644 src/roadmaps/software-architect/content/107-architectures/100-serverless.md create mode 100644 src/roadmaps/software-architect/content/107-architectures/101-microservices.md create mode 100644 src/roadmaps/software-architect/content/107-architectures/102-client-server-architecture.md create mode 100644 src/roadmaps/software-architect/content/107-architectures/103-layered-architecture.md create mode 100644 src/roadmaps/software-architect/content/107-architectures/104-distributed-systems.md create mode 100644 src/roadmaps/software-architect/content/107-architectures/105-service-oriented.md create mode 100644 src/roadmaps/software-architect/content/107-architectures/index.md create mode 100644 src/roadmaps/software-architect/content/108-security/100-hashing-algorithms.md create mode 100644 src/roadmaps/software-architect/content/108-security/101-pki.md create mode 100644 src/roadmaps/software-architect/content/108-security/102-owasp.md create mode 100644 src/roadmaps/software-architect/content/108-security/103-auth-strategies.md create mode 100644 src/roadmaps/software-architect/content/108-security/index.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/100-hadoop-spark-mapreduce.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/101-etl-datawarehouses.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/102-sql-databases.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/103-analytics/100-apache-spark.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/103-analytics/101-hadoop.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/103-analytics/102-datawarehouses-principles.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/103-analytics/index.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/103-nosql-databases.md create mode 100644 src/roadmaps/software-architect/content/109-working-with-data/index.md create mode 100644 src/roadmaps/software-architect/content/110-apis-and-integrations/100-grpc.md create mode 100644 src/roadmaps/software-architect/content/110-apis-and-integrations/101-esb-soap.md create mode 100644 src/roadmaps/software-architect/content/110-apis-and-integrations/102-graphql.md create mode 100644 src/roadmaps/software-architect/content/110-apis-and-integrations/103-rest.md create mode 100644 src/roadmaps/software-architect/content/110-apis-and-integrations/104-bpm-bpel.md create mode 100644 src/roadmaps/software-architect/content/110-apis-and-integrations/105-messaging-queues.md create mode 100644 src/roadmaps/software-architect/content/110-apis-and-integrations/index.md create mode 100644 src/roadmaps/software-architect/content/111-web-and-mobile/100-reactive-functional-programming.md create mode 100644 src/roadmaps/software-architect/content/111-web-and-mobile/101-react-vue-angular.md create mode 100644 src/roadmaps/software-architect/content/111-web-and-mobile/102-spa-ssr-ssg.md create mode 100644 src/roadmaps/software-architect/content/111-web-and-mobile/103-pwa.md create mode 100644 src/roadmaps/software-architect/content/111-web-and-mobile/104-microfrontends.md create mode 100644 src/roadmaps/software-architect/content/111-web-and-mobile/105-w3c-and-whatwg-standards.md create mode 100644 src/roadmaps/software-architect/content/111-web-and-mobile/index.md create mode 100644 src/roadmaps/software-architect/content/112-architect-frameworks/100-babok.md create mode 100644 src/roadmaps/software-architect/content/112-architect-frameworks/101-iaf.md create mode 100644 src/roadmaps/software-architect/content/112-architect-frameworks/101-uml.md create mode 100644 src/roadmaps/software-architect/content/112-architect-frameworks/102-togaf.md create mode 100644 src/roadmaps/software-architect/content/112-architect-frameworks/index.md create mode 100644 src/roadmaps/software-architect/content/113-management/100-certifications/100-pmi-itil-prince2-rup.md create mode 100644 src/roadmaps/software-architect/content/113-management/100-certifications/index.md create mode 100644 src/roadmaps/software-architect/content/113-management/101-agile-scrum/100-less.md create mode 100644 src/roadmaps/software-architect/content/113-management/101-agile-scrum/101-safe.md create mode 100644 src/roadmaps/software-architect/content/113-management/101-agile-scrum/index.md create mode 100644 src/roadmaps/software-architect/content/113-management/index.md create mode 100644 src/roadmaps/software-architect/content/114-networks/100-osi-tcp-ip-model.md create mode 100644 src/roadmaps/software-architect/content/114-networks/101-http-https.md create mode 100644 src/roadmaps/software-architect/content/114-networks/102-proxies.md create mode 100644 src/roadmaps/software-architect/content/114-networks/103-firewalls.md create mode 100644 src/roadmaps/software-architect/content/114-networks/index.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/100-infrastructure-as-code.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/101-cloud-providers.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/102-serverless-concepts.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/103-linux-unix.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/104-service-mesh.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/105-ci-cd.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/106-containers.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/107-cloud-design-patterns.md create mode 100644 src/roadmaps/software-architect/content/115-operations-knowledge/index.md create mode 100644 src/roadmaps/software-architect/content/116-enterprise-software/100-ms-dynamics.md create mode 100644 src/roadmaps/software-architect/content/116-enterprise-software/101-sap-epr-hana-business-objects.md create mode 100644 src/roadmaps/software-architect/content/116-enterprise-software/102-emc-dms.md create mode 100644 src/roadmaps/software-architect/content/116-enterprise-software/103-ibm-bpm.md create mode 100644 src/roadmaps/software-architect/content/116-enterprise-software/104-salesforce.md create mode 100644 src/roadmaps/software-architect/content/116-enterprise-software/index.md create mode 100644 src/roadmaps/software-architect/software-architect.md create mode 100644 src/roadmaps/software-design-architecture/software-design-architecture.md create mode 100644 src/roadmaps/system-design/system-design.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/100-vue-cli.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/101-components/100-single-file-components.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/101-components/101-component-registration.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/101-components/102-props.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/101-components/103-events.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/101-components/104-attribute-inheritance.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/101-components/index.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/102-templates.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/103-directives.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/100-options-api.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/101-composition-api.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/index.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/105-app-configurations.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/106-rendering-lists.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/107-conditional-rendering.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/108-lifecycle-hooks.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/109-forms-handling.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/110-events-handling.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/111-computed-properties.md create mode 100644 src/roadmaps/vue/content/100-fundamental-topics/index.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/100-ref.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/101-torefs.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/102-reactive.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/103-computed.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/104-watch.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/105-next-tick.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/106-composables.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/107-async-components.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/108-teleport-components.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/109-provide-inject.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/110-custom-directives.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/111-custom-events.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/112-plugins.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/113-watchers.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/114-slots.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/115-transition.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/116-transition-group.md create mode 100644 src/roadmaps/vue/content/101-advanced-topics/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/100-routing/100-vue-router.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/100-routing/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/101-forms/100-vue-formulate.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/101-forms/101-vee-validate.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/101-forms/102-vuelidate.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/101-forms/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/102-ssr/100-quasar.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/102-ssr/101-nuxt-js.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/102-ssr/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/103-ssg/100-gridsome.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/103-ssg/101-vuepress.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/103-ssg/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/104-state-management/100-pinia.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/104-state-management/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/100-capacitor.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/106-api-calls/100-apollo.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/106-api-calls/101-vue-relay.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/106-api-calls/102-axios.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/106-api-calls/103-unfetch.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/106-api-calls/104-superagent.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/106-api-calls/index.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/107-jest.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/108-vue-testing-library.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/109-cypress.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/111-vuetify.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/112-element-ui.md create mode 100644 src/roadmaps/vue/content/102-ecosystem/index.md create mode 100644 src/roadmaps/vue/vue.md diff --git a/src/roadmaps/android/android.md b/src/roadmaps/android/android.md new file mode 100644 index 000000000..3b03b3491 --- /dev/null +++ b/src/roadmaps/android/android.md @@ -0,0 +1,128 @@ +--- +jsonUrl: "/jsons/android.json" +pdfUrl: "/pdfs/android.pdf" +order: 4 +featuredTitle: "Android" +featuredDescription: "Step by step guide to becoming an Android Developer in 2022" +title: "Android Developer" +description: "Step by step guide to becoming an Android developer in 2022" +hasTopics: false +seo: + title: "Android Developer Roadmap: Learn to become an Android developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for android development. Learn to become a modern Android developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming an android developer" + - "android developer roadmap" + - "android roadmap" + - "become android developer" + - "android developer skills" + - "android skills test" + - "skills for android development" + - "learn android development" + - "what is android" + - "android quiz" + - "android interview questions" +relatedRoadmaps: + - "frontend" + - "javascript" + - "react" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + +The intent of this guide is to give you an idea about the Android development landscape and to help guide your learning if you are confused. Before we start, please note that the roadmap is opinionated, and you might have different opinions than those of the author. Having said that, [we would love to hear your opinions](https://github.com/kamranahmedse/developer-roadmap/issues/new) and incorporate them in the roadmap if suitable. + +There are multiple ways to develop applications for the android; you can go down the path of hybrid application development where [flutter](https://flutter.dev/), [react-native](https://reactnative.dev/), or [NativeScript](https://www.nativescript.org/) are the most common contenders. Flutter uses Dart, whereas React Native and Native Script rely on JavaScript. Answering the question of hybrid vs native is out of the scope of this roadmap. This roadmap is focused on the native Android apps development but if you are interested in learning any hybrid framework, my personal preference is [react-native](https://reactnative.dev) and I would recommend you to checkout the [Frontend Developer Roadmap](/frontend). + +## Complete Roadmap + +Here is the full version of the roadmap in a single image and after that we have the broken down version with the resources and links to learn more about each of the boxes. + +Android Developer Roadmap + +## Broken Down Version +Below is the broken down version of the roadmap with links and resources to learn more about each of the items listed in the complete roadmap above. + +## Pick a Language +For the languages, you can develop android apps either by using Kotlin or Java. + +[![Pick a Language](/assets/roadmaps/android/pick-language.svg)](/assets/roadmaps/android/pick-language.svg) + +Although, you can use both [Kotlin](https://en.wikipedia.org/wiki/Kotlin_(programming_language)) and [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) to develop native android apps, [Google announced in 2019](https://android-developers.googleblog.com/2019/05/google-io-2019-empowering-developers-to-build-experiences-on-Android-Play.html) to make Kotlin the preferred way of developing android applications. If you were to start learning android development today, Kotlin should be your language of choice. + +## The Fundamentals +Install the [Android Studio](https://developer.android.com/studio) and learn the basics of Kotlin to get started. + +[![Android Fundamentals](/assets/roadmaps/android/the-fundamentals.png)](/assets/roadmaps/android/the-fundamentals.png) + +We have also listed down some free resources which you can use for the items listed in the image above. If you have some better ones, please do suggest. Also, you don't need to go through all of them, just go through them and pick what you like. + +* [Learn the basics of Kotlin](https://blog.teamtreehouse.com/absolute-beginners-guide-kotlin) +* [Kotlin Docs](https://kotlinlang.org/docs/reference/basic-syntax.html) and [Official Kotlin Tutorials](https://kotlinlang.org/docs/tutorials/) +* [Data Structures and Algorithms](https://www.studytonight.com/data-structures/introduction-to-data-structures). Also [check this](https://www.tutorialspoint.com/data_structures_algorithms/index.htm). +* [Kotlin DataStructures](https://kotlinlang.org/docs/reference/collections-overview.html) +* [Algorithms and DataStructures in Kotlin](https://github.com/bmaslakov/kotlin-algorithm-club) +* [Gradle](https://docs.gradle.org/current/userguide/what_is_gradle.html) +* [Getting started with Gradle](https://docs.gradle.org/current/userguide/getting_started.html) +Note: Android Studio comes with a working installation of Gradle, so you don’t need to install Gradle separately in that case. + +## Version Control Systems +Version control systems record your changes to the codebase and allow you to recall specific versions later. There are multiple Version Control Systems available but [Git](https://git-scm.com/) is the most common one these days. + +[![Version Control Systems](/assets/roadmaps/android/git-github.png)](/assets/roadmaps/android/git-github.png) + +Here are some of the resources to get you started. Feel free to google and find something else that you find easier. + +* [Udacity — Version Control with Git](https://www.udacity.com/course/version-control-with-git--ud123) +* [GitHub Hello World](https://guides.github.com/activities/hello-world/) + +## Building an Application + +Here is the list of items that you are going to need when developing Android applications. Please note that, this is an exhaustive list, and you don't need to know it all from the get-go. Get an idea of the items listed, and just start building some apps and keep the items listed in the back of your mind and have a deep dive when using them. + +[![Building an Application](/assets/roadmaps/android/build-an-application.png)](/assets/roadmaps/android/build-an-application.png) + +To learn more about the items listed in the image above, here are the links to the relevant docs + +* [Using Activities and Activity Life Cycles](https://developer.android.com/guide/components/activities/intro-activities) +* Building Flexible Interfaces using [Fragments](https://developer.android.com/guide/components/fragments) +* [Debugging using Android Studio Debugger](https://developer.android.com/studio/debug) +* [Handling App Configurations](https://developer.android.com/work/managed-configurations) +* [Using Intents and Intent Filters](https://developer.android.com/guide/components/intents-filters) +* [Understand Context](https://guides.codepath.com/android/Using-Context) +* [Learn about Multithreading](https://developer.android.com/training/multiple-threads) +* [Data Privacy](https://www.raywenderlich.com/6901838-data-privacy-for-android) +* [Securing Network Data](https://www.raywenderlich.com/5634-securing-network-data-tutorial-for-android) +* [Dependency Injection](https://developer.android.com/training/dependency-injection) +* [Content Providers](https://developer.android.com/guide/topics/providers/content-providers) +* [Glide](https://github.com/bumptech/glide), [Retrofit](https://square.github.io/retrofit/), [Crashlytics](https://firebase.google.com/docs/crashlytics/get-started), [GSON](https://github.com/google/gson) +* [Room](https://developer.android.com/topic/libraries/architecture/room), [Navigation](https://developer.android.com/guide/navigation/navigation-getting-started), [Work Manager](https://developer.android.com/topic/libraries/architecture/workmanager), [LiveData](https://developer.android.com/topic/libraries/architecture/livedata), [Data Binding](https://developer.android.com/topic/libraries/data-binding) +* [RxJava](https://github.com/ReactiveX/RxJava), [RxKotlin](https://github.com/ReactiveX/RxKotlin) +* [Memory Management Overview](https://developer.android.com/topic/performance/memory-overview) +* [Diving deeper into context-oriented programming in Kotlin](https://proandroiddev.com/diving-deeper-into-context-oriented-programming-in-kotlin-3ecb4ec38814) + +## Jetpack Compose +Jetpack Compose is Android’s modern toolkit for building native UI. It simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs. +* [Jetpack Compose](https://developer.android.com/jetpack/compose/documentation) +* [Material Design 3](https://m3.material.io/) +* [Getting started with Material Components](https://m3.material.io/libraries/mdc-android/getting-started) + +## Free Resources +I would highly recommend watching [this free course](https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012) from google on Developing Android Apps with Kotlin. You may also get started with this [free course](https://developer.android.com/courses/android-basics-kotlin/course) on the android developer's page, concepts are taught with the help of code labs, projects and quizzes and you also earn badges as you learn that appear on your google developer profile. Also, here are some of the resources to learn more about the topics listed above. + +* [Developing Android Apps with Kotlin](https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012) +* [Android Basics in Kotlin](https://developer.android.com/courses/android-basics-kotlin/course) +* [Android Developer Guides](https://developer.android.com/guide) +* [Raywenderlich](https://www.raywenderlich.com) + +## Wrap Up + +That wraps it up for the android developer roadmap. Again, remember to not be exhausted by the list; just learn the basics and start working on some project, rest of the learnings will come along the way. Good luck! + +For any suggestions, improvements and feedback, feel free to [submit an issue](https://github.com/kamranahmedse/developer-roadmap) or reach out to me on twitter [@kamranahmedse](https://twitter.com/kamranahmedse). diff --git a/src/roadmaps/angular/angular.md b/src/roadmaps/angular/angular.md new file mode 100644 index 000000000..158fac961 --- /dev/null +++ b/src/roadmaps/angular/angular.md @@ -0,0 +1,42 @@ +--- +jsonUrl: "angular.json" +pdfUrl: "ngular.pdf" +order: 3 +featuredTitle: "Angular" +featuredDescription: "Step by step guide to become a Angular Developer in 2022" +title: "Angular Developer" +description: "Everything that is there to learn about Angular and the ecosystem in 2022." +hasTopics: true +dimensions: + width: 968 + height: 2277.8 +seo: + title: "Angular Developer Roadmap: Learn to become a Angular developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for angular development. Learn to become a modern Angular developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a angular developer" + - "angular developer roadmap" + - "angular roadmap" + - "become angular developer" + - "angular developer skills" + - "angular skills test" + - "skills for angular development" + - "learn angular development" + - "what is angular" + - "angular quiz" + - "angular interview questions" +relatedRoadmaps: + - "frontend" + - "javascript" + - "react" + - "vue" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/angular/content/100-typescript-basics/100-what-is-typescript.md b/src/roadmaps/angular/content/100-typescript-basics/100-what-is-typescript.md new file mode 100644 index 000000000..7082cfac4 --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/100-what-is-typescript.md @@ -0,0 +1,10 @@ +# What is Typescript + +TypeScript is a strongly typed, object-oriented, compiled programming language that builds on JavaScript. It is a superset of the JavaScript language, designed to give you better tooling at any scale. TypeScript calls itself “JavaScript with syntax for types.” In short, it is JavaScript with some additional features. The secret to the success of TypeScript is in the type checking, ensuring that the data flowing through the program is of the correct kind of data. + +{% resources %} + {% Blog "https://thenewstack.io/what-is-typescript/", "What is TypeScript" %} + {% Blog "https://www.w3schools.com/typescript/", "W3Schools – TypeScript Tutorial" %} + {% Blog "https://www.tutorialspoint.com/typescript/index.htm", "Tutorials point – TypeScript Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=d56mG7DezGs", "TypeScript Crash Course for Beginners" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/100-typescript-basics/101-why-use-typescript.md b/src/roadmaps/angular/content/100-typescript-basics/101-why-use-typescript.md new file mode 100644 index 000000000..3b8f2dbf6 --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/101-why-use-typescript.md @@ -0,0 +1,8 @@ +# Why use TypeScript + +TypeScript extends JavaScript, providing a better developer experience. The benefits of using TypeScript over JavaScript include.Static typing – TypeScript comes with optional static typing and a type inference system, which means that a variable declared with no type may be inferred by TypeScript based on its value. Object-oriented programming – TypeScript supports object-oriented programming concepts like classes, inheritance, etc. Compile time checks – JavaScript is an interpreted programming language. There is no compilation involved. Hence, the errors get caught during the runtime. Since TypeScript compiles into JavaScript, errors get reported during the compile time rather than the runtime. Code editor support – IDEs or code editors like VS Code support autocomplete for a TypeScript codebase. They also provide inline documentation and highlight the errors. Use existing packages – You might want to use an npm package written in JavaScript. Since TypeScript is a superset of JavaScript, you can import and use that package. Moreover, the TypeScript community creates and maintains type definitions for popular packages that can be utilized in your project. + +{% resources %} + {% Blog "https://linguinecode.com/post/5-reasons-why-to-use-typescript", "linguinecode - Reasons to use TypeScript" %} + {% Blog "https://www.codemotion.com/magazine/backend/why-you-should-use-typescript-for-your-next-project/", "Codemotion - Reasons to use TypeScript" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/100-typescript-basics/102-structural-typing.md b/src/roadmaps/angular/content/100-typescript-basics/102-structural-typing.md new file mode 100644 index 000000000..112f1f57a --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/102-structural-typing.md @@ -0,0 +1,12 @@ +# Structural Typing + +Type compatibility in TypeScript is based on structural subtyping. `Structural typing` is a way of relating types based solely on their members. This is in contrast with nominal typing. + +TypeScript’s structural type system was designed based on how JavaScript code is typically written. Because JavaScript widely uses anonymous objects like function expressions and object literals, it’s much more natural to represent the relationships found in JavaScript libraries with a structural type system instead of a nominal one. + +{% resources %} + {% Blog "https://medium.com/redox-techblog/structural-typing-in-typescript-4b89f21d6004", "Structural typings — Medium" %} + {% Blog "https://www.typescriptlang.org/docs/handbook/type-compatibility.html", "Structural typings — Typescriptlang" %} + {% Blog "https://www.youtube.com/watch?v=kWtwsX_rT3k", "Structural typing video for Beginners" %} +{% endresources %} + diff --git a/src/roadmaps/angular/content/100-typescript-basics/103-type-inference.md b/src/roadmaps/angular/content/100-typescript-basics/103-type-inference.md new file mode 100644 index 000000000..04dee4ac9 --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/103-type-inference.md @@ -0,0 +1,8 @@ +# Type Inference + +In TypeScript, several places where `type inference` is used to provide type information when there is no explicit type annotation. The type of the x variable is inferred to be a number. This inference occurs when variables and members are initialized, set parameter default values are, and determine function return types. For example, `let x: number`. In most cases, type inference is straightforward. In the following sections, we’ll explore some nuances in how types are inferred. For example, `let x: (number | null)[]` + +{% resources %} + {% Blog "https://www.typescriptlang.org/docs/handbook/type-inference.html", "Type Interface - typescriptlang" %} + {% Blog "https://www.youtube.com/watch?v=3ui_st7rtfA", "Type Inference video for Beginners" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/100-typescript-basics/104-union-types.md b/src/roadmaps/angular/content/100-typescript-basics/104-union-types.md new file mode 100644 index 000000000..af44385bf --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/104-union-types.md @@ -0,0 +1,8 @@ +# Union Types + +In TypeScript, we can define a variable that can have multiple types of values. In other words, TypeScript can combine one or two types of data (i.e., number, string, etc.) in a single type, a union type. Union types are a powerful way to express a variable with multiple types. Two or more data types can be combined using the pipe ('|') symbol between the types. For example, `(type1 | type2 | type3 | .. | typeN)`. + +{% resources %} + {% Blog "https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html", "Union Types - typescriptlang" %} + {% Blog "https://www.youtube.com/watch?v=uxjpm4W5pCo", "Union Type video for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/100-typescript-basics/105-builtin-types.md b/src/roadmaps/angular/content/100-typescript-basics/105-builtin-types.md new file mode 100644 index 000000000..46164e669 --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/105-builtin-types.md @@ -0,0 +1,8 @@ +# Builtin Types + +The Builtin types represent the different types of values supported by the language. The builtin types check the validity of the supplied values before they are stored or manipulated by the program. This ensures that the code behaves as expected. The Builtin types further allow for richer code hinting and automated documentation too. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/typescript/typescript_types.htm", "TypeScript Types - Tutorialspoint" %} + {% Blog "https://www.youtube.com/watch?v=Nt9ajBrqV_M", "Builtin Type video for Beginners" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/100-typescript-basics/106-type-guard.md b/src/roadmaps/angular/content/100-typescript-basics/106-type-guard.md new file mode 100644 index 000000000..cf8dccc0a --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/106-type-guard.md @@ -0,0 +1,11 @@ +# Type Guard + +A type guard is a TypeScript technique used to get information about the type of a variable, usually within a conditional block. Type guards are regular functions that return a boolean, taking a type and telling TypeScript if it can be narrowed down to something more specific. Type guards have the unique property of assuring that the value tested is of a set type depending on the returned boolean. + +TypeScript uses built-in JavaScript operators like `typeof`, `instanceof`, and the `in` operator, which is used to determine if an object contains a property. Type guards enable you to instruct the TypeScript compiler to infer a specific type for a variable in a particular context, ensuring that the type of an argument is what you say it is. + +Type guards are typically used for narrowing a type and are pretty similar to feature detection, allowing you to detect the correct methods, prototypes, and properties of a value. Therefore, you can quickly figure out how to handle that value. + +{% resources %} + {% Blog "https://blog.logrocket.com/how-to-use-type-guards-typescript/", "Types Guards - Blog" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/100-typescript-basics/index.md b/src/roadmaps/angular/content/100-typescript-basics/index.md new file mode 100644 index 000000000..532b4995f --- /dev/null +++ b/src/roadmaps/angular/content/100-typescript-basics/index.md @@ -0,0 +1,8 @@ +# Typescript Basics + +In order to enter into the world of Angular application development, typescript is necessary and it is the primary language here. Typescript is a superset of JavaScript. It comes with design-time support which is useful for type safety and tooling. Since, browsers cannot execute the TypeScript directly, it will be 'Transpiled' into JavaScript using the tsc compiler. + +{% resources %} + {% Blog "https://medium.com/jspoint/typescript-a-beginners-guide-6956fe8bcf9e", "Typescript a Beginners Guide" %} + {% Blog "https://www.typescriptlang.org/play", "TypeScript Playground" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/101-rxjs-basics/100-observable-pattern.md b/src/roadmaps/angular/content/101-rxjs-basics/100-observable-pattern.md new file mode 100644 index 000000000..2bcfbcdf2 --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/100-observable-pattern.md @@ -0,0 +1,9 @@ +# Observable Pattern + +The observer pattern is a software design pattern in which an object, named the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods. + +Angular uses the Observer pattern which simply means — Observable objects are registered, and other objects observe (in Angular using the subscribe method) them and take action when the observable object is acted on in some way. + +{% resources %} + {% Blog "https://medium.com/fuzzycloud/angular-and-observable-4bf890b2a282", "Angular and Observable" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/101-rxjs-basics/101-observable-lifecycle.md b/src/roadmaps/angular/content/101-rxjs-basics/101-observable-lifecycle.md new file mode 100644 index 000000000..9093e8989 --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/101-observable-lifecycle.md @@ -0,0 +1,13 @@ +# Observable lifecycle + +An observable is a function that acts as a wrapper for a data stream. They support to pass messages inside your application. An observable is useless until an observer subscribes to it. An observer is an object which consumes the data emitted by the observable. An observer keeps receiving data values from the observable until the observable is completed, or the observer unsubscribes from the observable. Otherwise observers can receive data values from the observable continuously and asynchronously. So we can perform various operations such as updating the user interface, or passing the JSON response. + +There are 4 stages for a life cycle of an observable. + - Creation + - Subscription + - Execution + - Destruction + +{% resources %} + {% Official "https://medium.com/analytics-vidhya/understanding-rxjs-observables-ad5b34d9607f", "Understanding Observable LifeCycle" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/101-rxjs-basics/102-marble-diagrams.md b/src/roadmaps/angular/content/101-rxjs-basics/102-marble-diagrams.md new file mode 100644 index 000000000..34e624ddc --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/102-marble-diagrams.md @@ -0,0 +1 @@ +# Marble diagrams \ No newline at end of file diff --git a/src/roadmaps/angular/content/101-rxjs-basics/103-rxjs-vs-promises.md b/src/roadmaps/angular/content/101-rxjs-basics/103-rxjs-vs-promises.md new file mode 100644 index 000000000..e07feeedd --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/103-rxjs-vs-promises.md @@ -0,0 +1 @@ +# Rxjs vs promises \ No newline at end of file diff --git a/src/roadmaps/angular/content/101-rxjs-basics/104-operators/100-filtering.md b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/100-filtering.md new file mode 100644 index 000000000..a46bebea9 --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/100-filtering.md @@ -0,0 +1 @@ +# Filtering \ No newline at end of file diff --git a/src/roadmaps/angular/content/101-rxjs-basics/104-operators/101-rate-limiting.md b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/101-rate-limiting.md new file mode 100644 index 000000000..2f7164892 --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/101-rate-limiting.md @@ -0,0 +1 @@ +# Rate limiting \ No newline at end of file diff --git a/src/roadmaps/angular/content/101-rxjs-basics/104-operators/102-transformation.md b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/102-transformation.md new file mode 100644 index 000000000..e6ad4acf4 --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/102-transformation.md @@ -0,0 +1 @@ +# Transformation \ No newline at end of file diff --git a/src/roadmaps/angular/content/101-rxjs-basics/104-operators/103-combination.md b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/103-combination.md new file mode 100644 index 000000000..9029b2388 --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/103-combination.md @@ -0,0 +1 @@ +# Combination \ No newline at end of file diff --git a/src/roadmaps/angular/content/101-rxjs-basics/104-operators/index.md b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/index.md new file mode 100644 index 000000000..6e9c99ec0 --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/104-operators/index.md @@ -0,0 +1,38 @@ +# RxJS Operators + + +RxJS is mostly useful for its operators, even though the Observable is the foundation. Operators are the essential pieces that allow complex asynchronous code to be easily composed in a declarative manner. + +Operators are functions. There are two kinds of operators: + +**Pipeable Operators** are the kind that can be piped to Observables using the syntax observableInstance.pipe(operator()). These include, filter(...), and mergeMap(...). When called, they do not change the existing Observable instance. Instead, they return a new Observable, whose subscription logic is based on the first Observable. + +A Pipeable Operator is essentially a pure function which takes one Observable as input and generates another Observable as output. Subscribing to the output Observable will also subscribe to the input Observable. + +**Creation Operators** are the other kind of operator, which can be called as standalone functions to create a new Observable. For example: of(1, 2, 3) creates an observable that will emit 1, 2, and 3, one right after another. Creation operators will be discussed in more detail in a later section. + +## Piping + +Pipeable operators are functions, so they could be used like ordinary functions: op()(obs) — but in practice, there tend to be many of them convolved together, and quickly become unreadable: op4()(op3()(op2()(op1()(obs)))). For that reason, Observables have a method called .pipe() that accomplishes the same thing while being much easier to read: + +```bash + obs.pipe(op1(), op2(), op3(), op4()); + ``` + + ## Creation Operators + +**What are creation operators?** Distinct from pipeable operators, creation operators are functions that can be used to create an Observable with some common predefined behavior or by joining other Observables. + +A typical example of a creation operator would be the interval function. It takes a number (not an Observable) as input argument, and produces an Observable as output: + +```bash +import { interval } from 'rxjs'; + +const observable = interval(1000 /* number of milliseconds */); +``` + +{% resources %} + {% Official "https://rxjs.dev/guide/operators#creation-operators-list", "List of creation operators" %} + {% Official "https://rxjs.dev/guide/operators", "Full RxJS Operators Documentation" %} +{% endresources %} + diff --git a/src/roadmaps/angular/content/101-rxjs-basics/index.md b/src/roadmaps/angular/content/101-rxjs-basics/index.md new file mode 100644 index 000000000..3ca9f0a6a --- /dev/null +++ b/src/roadmaps/angular/content/101-rxjs-basics/index.md @@ -0,0 +1,5 @@ +# RxJS Basics + +Reactive Extensions for JavaScript, or RxJS, is a reactive library used to implement reactive programming to deal with async implementation, callbacks, and event-based programs. + +The reactive paradigm can be used in many different languages through the use of reactive libraries. These libraries are downloaded APIs that provide functionalities for reactive tools like observers and operators. It can be used in your browser or with Node.js. diff --git a/src/roadmaps/angular/content/102-angular-basics/100-angularjs-vs-angular.md b/src/roadmaps/angular/content/102-angular-basics/100-angularjs-vs-angular.md new file mode 100644 index 000000000..2fc906ec2 --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/100-angularjs-vs-angular.md @@ -0,0 +1,8 @@ +# AngularJS vs. Angular + +AngularJS was the older version of Angular, whose support officially ended in January 2022. Angular is a component-based front-end development framework built on TypeScript, which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more. + +{% resources %} + {% Official "https://angularjs.org/", "AngularJS Website" %} + {% Official "https://angular.io/start", "Official - Getting started with Angular" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/102-angular-basics/101-angular-components.md b/src/roadmaps/angular/content/102-angular-basics/101-angular-components.md new file mode 100644 index 000000000..bd6c61c4e --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/101-angular-components.md @@ -0,0 +1,13 @@ +# Angular Components + +Components are the main building block for Angular applications. Each component consists of: + +* An HTML template that declares what renders on the page +* A TypeScript class that defines the behavior +* A CSS selector that defines how the component is used in a template +* Optionally, CSS styles applied to the template + +{% resources %} + {% Official "https://angular.io/guide/component-overview", "Angular Components Overview" %} + {% Blog "https://www.youtube.com/watch?v=x5PZwb4XurU", "Standalone Components in Angular" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/102-angular-basics/102-angular-templates.md b/src/roadmaps/angular/content/102-angular-basics/102-angular-templates.md new file mode 100644 index 000000000..1cdb8d2cf --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/102-angular-templates.md @@ -0,0 +1,8 @@ +# Angular Templates + +A Template is a form of HTML which tells Angular to go towards another component. To create many Angular features, special syntax within the templates is used. + +{% resources %} + {% Official "https://angular.io/guide/template-overview", "Understanding Templates" %} + {% Official "https://angular.io/guide/template-syntax", "Template Syntax" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/102-angular-basics/103-angular-modules.md b/src/roadmaps/angular/content/102-angular-basics/103-angular-modules.md new file mode 100644 index 000000000..ae06be566 --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/103-angular-modules.md @@ -0,0 +1,7 @@ +# Angular Modules + +Modules in Angular act like a container where we can group the components, directives, pipes, and services, related to the application. + +{% resources %} + {% Official "https://angular.io/guide/architecture-modules", "Introduction to Modules" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/102-angular-basics/104-dependency-injection.md b/src/roadmaps/angular/content/102-angular-basics/104-dependency-injection.md new file mode 100644 index 000000000..00c3b4d3b --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/104-dependency-injection.md @@ -0,0 +1,8 @@ +# Dependency Injection + +Dependency Injection is one of the fundamental concepts in Angular. DI is wired into the Angular framework and allows classes with Angular decorators, such as Components, Directives, Pipes, and Injectables, to configure dependencies that they need. + +{% resources %} + {% Official "https://angular.io/guide/dependency-injection", "Understanding Dependency Injection" %} + {% Official "https://angular.io/guide/dependency-injection-in-action", "Dependency Injection in Action" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/102-angular-basics/105-services.md b/src/roadmaps/angular/content/102-angular-basics/105-services.md new file mode 100644 index 000000000..88c2374d5 --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/105-services.md @@ -0,0 +1,10 @@ +# Services + +Services let you define code or functionalities that are then accessible and reusable in many other components in the Angular project. It also helps you with the abstraction of logic and data that is hosted independently but can be shared across other components. + +{% resources %} + {% Official "https://angular.io/tutorial/toh-pt4", "Services" %} + {% Blog "https://www.javatpoint.com/what-is-an-angular-service", "What is an Angular Service" %} + {% Blog "https://www.knowledgehut.com/blog/web-development/make-api-calls-angular", "Service for API Calls" %} + {% Blog "https://www.positronx.io/angular-service-tutorial-with-example/", "Service Tutorial with Example" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/102-angular-basics/106-routing.md b/src/roadmaps/angular/content/102-angular-basics/106-routing.md new file mode 100644 index 000000000..887e32b5a --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/106-routing.md @@ -0,0 +1,8 @@ +# Routing + +Routing in Angular allows the users to create a single-page application with multiple views and allows navigation between them. + +{% resources %} + {% Official "https://angular.io/guide/routing-overview", "Angular Routing" %} + {% Official "https://angular.io/guide/router", "Common Routing Tasks" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/102-angular-basics/index.md b/src/roadmaps/angular/content/102-angular-basics/index.md new file mode 100644 index 000000000..d4e8db216 --- /dev/null +++ b/src/roadmaps/angular/content/102-angular-basics/index.md @@ -0,0 +1,5 @@ +# Angular Basics + +Angular is an strong front-end JavaScript framework which means that it enforces a certain style of application development and project structure that developers need to follow to develop apps with Angular. However, it also offers enough flexibility to allow you to structure your project in an understandable and manageable manner. + +In this module, we will have a look at some of the most basic concepts that you need to understand before diving into the framework with more advanced concepts. \ No newline at end of file diff --git a/src/roadmaps/angular/content/103-angular-cli/100-ng-build.md b/src/roadmaps/angular/content/103-angular-cli/100-ng-build.md new file mode 100644 index 000000000..3982d8b21 --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/100-ng-build.md @@ -0,0 +1,8 @@ +# Ng build + +The command can be used to build a project of type "application" or "library". When used to build a library, a different builder is invoked, and only the ts-config, configuration, and watch options are applied. All other options apply only to building applications. + +{% resources %} + {% Official "https://angular.io/cli/build", "Ng Build - Angular.io" %} + {% Blog "https://www.youtube.com/watch?v=VB6WuCPDwz0", "Building an Angular project" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/103-angular-cli/101-ng-serve.md b/src/roadmaps/angular/content/103-angular-cli/101-ng-serve.md new file mode 100644 index 000000000..7aa07f7f6 --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/101-ng-serve.md @@ -0,0 +1,8 @@ +# Ng serve + +ng serve — This command builds, deploy, serves and every time watches your code changes. if find any change in code it builds and serves that code automatically. How do Angular builds? After coding our Angular apps using TypeScript, we use the Angular CLI command to build the app. + +{% resources %} + {% Official "https://angular.io/cli/serve", "Ng serve - Angular.io" %} + {% Blog "https://www.youtube.com/watch?v=-w-RfHcLt5U", "Running a project with ng serve" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/103-angular-cli/102-ng-generate.md b/src/roadmaps/angular/content/103-angular-cli/102-ng-generate.md new file mode 100644 index 000000000..9ac5d187f --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/102-ng-generate.md @@ -0,0 +1,9 @@ +# Ng generate + +ng generate is used to create the component in angular project. These are the two main ways to generate a new component in Angular: using ng g c , and using ng generate component . Using either of these two commands, the new component can be generated pretty easily and followed by the suitable component name of your choice. + + +{% resources %} + {% Official "https://angular.io/cli/generate", "Ng generate - Angular.io" %} + {% Blog "https://www.youtube.com/watch?v=NlHlu_zzmo4", "Angular cli generate component" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/103-angular-cli/103-ng-test.md b/src/roadmaps/angular/content/103-angular-cli/103-ng-test.md new file mode 100644 index 000000000..2c52b1fc4 --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/103-ng-test.md @@ -0,0 +1,11 @@ +# Ng test + +ng test is used to runs unit tests in angular project. + +`ng test [options]` | `ng t [options]` + + +{% resources %} + {% Official "https://angular.io/cli/test", "Ng test - Angular.io" %} + {% Blog "https://www.youtube.com/watch?v=n1O_eRwzRKA", "Angular Ng test commands" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/103-angular-cli/104-ng-e2e.md b/src/roadmaps/angular/content/103-angular-cli/104-ng-e2e.md new file mode 100644 index 000000000..4b4f5b0d8 --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/104-ng-e2e.md @@ -0,0 +1,8 @@ +# Ng e2e + +End-to-end testing (E2E) of Angular applications is performed using the Protractor testing framework, which is created by the Angular team themselves. Protractor can perform end to end tests on Angular applications that are running in a real browser by interacting with it, similar to that of an end-user. + +{% resources %} + {% Official "https://angular.io/cli/e2e", "Ng e2e - Angular.io" %} + {% Blog "https://www.youtube.com/watch?v=3vFnhzEGfew", "Angular cli generate component" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/103-angular-cli/105-ng-new.md b/src/roadmaps/angular/content/103-angular-cli/105-ng-new.md new file mode 100644 index 000000000..1ec878868 --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/105-ng-new.md @@ -0,0 +1,12 @@ +# Ng new + +`$ ng new [name]` + +That’s the default usage of the command and creating a new project folder with name. The project which is created in that folder is containing: + +The default Angular project, All dependencies installed in node_modules folder , Testing files for each components + +{% resources %} + {% Official "https://angular.io/cli/new", "Ng New - Angular.io" %} + {% Blog "https://www.youtube.com/watch?v=NdEpZezptkQ", "ng New command" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/103-angular-cli/106-schematics.md b/src/roadmaps/angular/content/103-angular-cli/106-schematics.md new file mode 100644 index 000000000..e0e53d70f --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/106-schematics.md @@ -0,0 +1,8 @@ +# Schematics + +A schematic is a template-based code generator that supports complex logic. It is a set of instructions for transforming a software project by generating or modifying code. + +{% resources %} + {% Official "https://angular.io/guide/schematics#:~:text=A%20schematic%20is%20a%20template,collections%20and%20installed%20with%20npm.", "Angular Website" %} + {% Official "https://blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2?gi=ad9571373944", "Angular Blog" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/103-angular-cli/index.md b/src/roadmaps/angular/content/103-angular-cli/index.md new file mode 100644 index 000000000..616dea0c3 --- /dev/null +++ b/src/roadmaps/angular/content/103-angular-cli/index.md @@ -0,0 +1,10 @@ +# Angular CLI + +The Angular CLI is a command-line interface tool that you use to initialize, develop, scaffold, and maintain Angular applications directly from a command shell. we can install angular latest CLI using the following command + +`npm install -g @angular/cli` + +{% resources %} + {% Official "https://angular.io/cli", "Angular CLI - Angular.io" %} + {% Blog "https://www.youtube.com/watch?v=mZnzX3J5XKI", "Angular CLI - setup" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/104-templates/100-interpolation.md b/src/roadmaps/angular/content/104-templates/100-interpolation.md new file mode 100644 index 000000000..a0d2e71c1 --- /dev/null +++ b/src/roadmaps/angular/content/104-templates/100-interpolation.md @@ -0,0 +1,7 @@ +# Interpolation + +Interpolation refers to embedding expressions into marked up text. By default, interpolation uses the double curly braces {{ and }} as delimiters. Angular replaces currentCustomer with the string value of the corresponding component property. + +{% resources %} + {% Official "ttps://angular.io/guide/interpolation", "Angular Official Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/104-templates/101-property-binding.md b/src/roadmaps/angular/content/104-templates/101-property-binding.md new file mode 100644 index 000000000..d9e1c5661 --- /dev/null +++ b/src/roadmaps/angular/content/104-templates/101-property-binding.md @@ -0,0 +1,7 @@ +# Property binding + +Property binding helps you set values for properties of HTML elements or directives. To bind to an element's property, enclose it in square brackets `[]` which causes Angular to evaluate the right-hand side of the assignment as a dynamic expression. + +{% resources %} + {% Official "https://angular.io/guide/property-binding", "Angular Official Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/104-templates/102-template-statements.md b/src/roadmaps/angular/content/104-templates/102-template-statements.md new file mode 100644 index 000000000..b4eb670c5 --- /dev/null +++ b/src/roadmaps/angular/content/104-templates/102-template-statements.md @@ -0,0 +1,7 @@ +# Template statements + +Template statements are methods or properties that you can use in your HTML to respond to user events. With template statements, your application can engage users through actions such as displaying dynamic content or submitting forms. Enclose the event in `()` which causes Angular to evaluate the right hand side of the assignment as one or more template statements chained together using semicolon `;`. + +{% resources %} + {% Official "https://angular.io/guide/template-statements", "Angular Official Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/104-templates/103-binding-data-props-attrs-events.md b/src/roadmaps/angular/content/104-templates/103-binding-data-props-attrs-events.md new file mode 100644 index 000000000..1209d9ea2 --- /dev/null +++ b/src/roadmaps/angular/content/104-templates/103-binding-data-props-attrs-events.md @@ -0,0 +1,12 @@ +# Binding data props attrs events + +In an Angular template, a binding creates a live connection between view and the model and keeps them both in sync. + +- **property**: helps you set values for properties of HTML elements or directives. +- **attributes**: helps you set values for attributes of HTML elements directly. +- **event**: lets you listen for and respond to user actions such as keystrokes, mouse movements, clicks, and touches. +- **data**: It's a combination of property and event binding and helps you share data between components. + +{% resources %} + {% Official "https://angular.io/guide/binding-overview", "Angular Official Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/104-templates/104-reference-vars.md b/src/roadmaps/angular/content/104-templates/104-reference-vars.md new file mode 100644 index 000000000..a891e588b --- /dev/null +++ b/src/roadmaps/angular/content/104-templates/104-reference-vars.md @@ -0,0 +1,7 @@ +# Reference vars + +Template reference variables help you use data from one part of a template in another part of the template. A template variable can refer to a DOM element within a template, component or directive. In the template, use the hash symbol, `#`, to declare a template reference variable. + +{% resources %} + {% Official "https://angular.io/guide/template-reference-variables", "Angular Official Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/104-templates/105-input-output.md b/src/roadmaps/angular/content/104-templates/105-input-output.md new file mode 100644 index 000000000..0b21fe1be --- /dev/null +++ b/src/roadmaps/angular/content/104-templates/105-input-output.md @@ -0,0 +1,7 @@ +# Input output + +`@Input()` and `@Output()` give a child component a way to communicate with its parent component. `@Input()` lets a parent component update data in the child component. Conversely, `@Output()` lets the child send data to a parent component. + +{% resources %} + {% Official "https://angular.io/guide/inputs-outputs", "Angular Official Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/104-templates/index.md b/src/roadmaps/angular/content/104-templates/index.md new file mode 100644 index 000000000..c48eb55c4 --- /dev/null +++ b/src/roadmaps/angular/content/104-templates/index.md @@ -0,0 +1,7 @@ +# Templates + +A template is a form of HTML that tells Angular how to render the component. + +{% resources %} + {% Blog "https://angular.io/guide/architecture-components", "Introduction to Components and Templates" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/105-rendering-topics/100-builtin-directives.md b/src/roadmaps/angular/content/105-rendering-topics/100-builtin-directives.md new file mode 100644 index 000000000..d89335f39 --- /dev/null +++ b/src/roadmaps/angular/content/105-rendering-topics/100-builtin-directives.md @@ -0,0 +1,11 @@ +# Builtin directives + +SKDirectives are classes that add additional behavior to elements in your Angular applications. Use Angular's built-in directives to manage forms, lists, styles, and what users see. + +`NgClass` Adds and removes a set of CSS classes. | `NgStyle` Adds and removes a set of HTML styles. | `NgModel` Adds two-way data binding to an HTML form element. + + +{% resources %} + {% Official "https://angular.io/guide/built-in-directives", "Understanding BuiltIn Directives" %} + {% Blog "https://thinkster.io/tutorials/angular-2-directives", "BuiltIn Directives Types" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/105-rendering-topics/101-builtin-pipes.md b/src/roadmaps/angular/content/105-rendering-topics/101-builtin-pipes.md new file mode 100644 index 000000000..f3b2c4f43 --- /dev/null +++ b/src/roadmaps/angular/content/105-rendering-topics/101-builtin-pipes.md @@ -0,0 +1,11 @@ +# Builtin pipes + +Use pipes to transform strings, currency amounts, dates, and other data for display. Pipes are simple functions to use in template expressions to accept an input value and return a transformed value. Pipes are useful because you can use them throughout your application , some common pipes are + +`DatePipe` | `UpperCasePipe` | `LowerCasePipe` | `CurrencyPipe` | `DecimalPipe` | `PercentPipe` + + +{% resources %} + {% Official "https://angular.io/guide/pipes", "Understanding BuiltIn Pipes" %} + {% Blog "https://codecraft.tv/courses/angular/pipes/built-in-pipes/", "BuiltIn Pipes - exampls" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/105-rendering-topics/102-change-detection.md b/src/roadmaps/angular/content/105-rendering-topics/102-change-detection.md new file mode 100644 index 000000000..547e5119d --- /dev/null +++ b/src/roadmaps/angular/content/105-rendering-topics/102-change-detection.md @@ -0,0 +1,8 @@ +# Change detection + +Change detection is the process through which Angular checks to see whether your application state has changed, and if any DOM needs to be updated. At a high level, Angular walks your components from top to bottom, looking for changes. Angular runs its change detection mechanism periodically so that changes to the data model are reflected in an application’s view. Change detection can be triggered either manually or through an asynchronous event + +{% resources %} + {% Official "https://angular.io/guide/change-detection", "Understanding Change detection" %} + {% Blog "https://www.youtube.com/watch?v=f8sA-i6gkGQ", "4 Runtime Performance Optimizations ( Change detection )" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/105-rendering-topics/index.md b/src/roadmaps/angular/content/105-rendering-topics/index.md new file mode 100644 index 000000000..63bac718d --- /dev/null +++ b/src/roadmaps/angular/content/105-rendering-topics/index.md @@ -0,0 +1 @@ +# Rendering topics \ No newline at end of file diff --git a/src/roadmaps/angular/content/106-forms/100-reactive-forms.md b/src/roadmaps/angular/content/106-forms/100-reactive-forms.md new file mode 100644 index 000000000..3816b4605 --- /dev/null +++ b/src/roadmaps/angular/content/106-forms/100-reactive-forms.md @@ -0,0 +1,10 @@ +# Reactive Forms + +Reactive Forms in angular are those which used to handle the inputs coming from the user. We can define controls by using classes such as FormGroup and FormControl. + +{% resources %} + {% Official "https://angular.io/guide/reactive-forms", "Reactive forms - Angular" %} + {% Blog "https://www.javatpoint.com/angular-reactive-forms", "Angular Reactive Forms" %} + {% Blog "https://www.digitalocean.com/community/tutorials/angular-reactive-forms-introduction", "How To Use Reactive Forms in Angular" %} + {% Blog "https://www.youtube.com/watch?v=8k4ctDmVn7w", "Reactive Form in Angular" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/106-forms/101-template-driven-forms.md b/src/roadmaps/angular/content/106-forms/101-template-driven-forms.md new file mode 100644 index 000000000..2e42d1076 --- /dev/null +++ b/src/roadmaps/angular/content/106-forms/101-template-driven-forms.md @@ -0,0 +1,12 @@ +# Template Driven Forms + +A Template driven form is the simplest form we can build in Angular. It is mainly used for creating simple form application. + +It uses two-way data-binding (ngModel) to create and handle the form components. + +{% resources %} + {% Official "https://angular.io/guide/forms", "Building a template-driven form" %} + {% Blog "https://codecraft.tv/courses/angular/forms/template-driven/", "Template-Driven Forms" %} + {% Blog "https://www.youtube.com/watch?v=whr14XxB8-M", "Template driven form" %} + {% Blog "https://www.youtube.com/watch?v=cVd4ZCIXprs", "Template driven form Validations" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/106-forms/index.md b/src/roadmaps/angular/content/106-forms/index.md new file mode 100644 index 000000000..54ae6c547 --- /dev/null +++ b/src/roadmaps/angular/content/106-forms/index.md @@ -0,0 +1,12 @@ +# Forms + +Forms are used to handle user inputs in many applications. It enables users from entering sensitive information to performing several data entry tasks. + +Angular provides two approachs to handle user inputs trough forms: reactive and template-driven forms. + +{% resources %} + {% Official "https://angular.io/guide/forms-overview", "Introduction to forms in Angular" %} + {% Blog "https://www.w3schools.com/angular/angular_forms.asp", "Angular Forms" %} + {% Blog "https://www.youtube.com/watch?v=-bGgjgx3fGs", "Angular Forms Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=hAaoPOx_oIw", "Building Forms in Angular Apps" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/107-routing/100-configuration.md b/src/roadmaps/angular/content/107-routing/100-configuration.md new file mode 100644 index 000000000..af4abbfe2 --- /dev/null +++ b/src/roadmaps/angular/content/107-routing/100-configuration.md @@ -0,0 +1 @@ +# Configuration \ No newline at end of file diff --git a/src/roadmaps/angular/content/107-routing/101-router-outlets.md b/src/roadmaps/angular/content/107-routing/101-router-outlets.md new file mode 100644 index 000000000..1e1db159e --- /dev/null +++ b/src/roadmaps/angular/content/107-routing/101-router-outlets.md @@ -0,0 +1,9 @@ +# Router outlets + +The router-outlet is a directive that's available from the @angular/router package and is used by the router to mark where in a template, a matched component should be inserted. + +Thanks to the router outlet, your app will have multiple views/pages and the app template acts like a shell of your application. Any element, you add to the shell will be rendered in each view, only the part marked by the router outlet will be changed between views. + +{% resources %} + {% Official "https://angular.io/api/router/RouterOutle", "Understanding Router Outlets" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/107-routing/102-router-links.md b/src/roadmaps/angular/content/107-routing/102-router-links.md new file mode 100644 index 000000000..ac8fa1f83 --- /dev/null +++ b/src/roadmaps/angular/content/107-routing/102-router-links.md @@ -0,0 +1 @@ +# Router links \ No newline at end of file diff --git a/src/roadmaps/angular/content/107-routing/103-router-events.md b/src/roadmaps/angular/content/107-routing/103-router-events.md new file mode 100644 index 000000000..7b8aaf456 --- /dev/null +++ b/src/roadmaps/angular/content/107-routing/103-router-events.md @@ -0,0 +1 @@ +# Router events \ No newline at end of file diff --git a/src/roadmaps/angular/content/107-routing/104-guards.md b/src/roadmaps/angular/content/107-routing/104-guards.md new file mode 100644 index 000000000..8cd2f991e --- /dev/null +++ b/src/roadmaps/angular/content/107-routing/104-guards.md @@ -0,0 +1,14 @@ +# Route Guards + +Angular route guards are interfaces provided by Angular which, when implemented, allow us to control the accessibility of a route based on conditions provided in class implementation of that interface. + +Some types of angular guards are `CanActivate`, `CanActivateChild`, `CanLoad`, `CanDeactivate` and `Resolve`. + +{% resources %} + {% Official "https://angular.io/api/router", "Angular Official Website" %} + {% Official "https://angular.io/api/router/CanActivate", "Can Activate Guard" %} + {% Official "https://angular.io/api/router/CanActivateChild", "Can Activate Child" %} + {% Official "https://angular.io/api/router/CanDeactivate", "Can Deactivate" %} + {% Official "https://angular.io/api/router/CanLoad", "Angular Can Load" %} + {% Official "https://angular.io/api/router/CanMatch", "Can Match" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/107-routing/105-lazy-loading.md b/src/roadmaps/angular/content/107-routing/105-lazy-loading.md new file mode 100644 index 000000000..1f7d88ecd --- /dev/null +++ b/src/roadmaps/angular/content/107-routing/105-lazy-loading.md @@ -0,0 +1,8 @@ +# Lazy loading + +Lazy loading is a technique in Angular that allows you to load JavaScript components asynchronously when a specific route is activated. It improves the application load time speed by splitting the application into several bundles. The bundles are loaded as required when the user navigates through the app. + +{% resources %} + {% Blog "https://angular.io/guide/lazy-loading-ngmodules", "What is Lazy loading ? - Angular.io " %} + {% Blog "https://www.youtube.com/watch?v=JjIQq9lh-Bw", "Angular Tutorial - Lazy Loading" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/107-routing/index.md b/src/roadmaps/angular/content/107-routing/index.md new file mode 100644 index 000000000..422dfa239 --- /dev/null +++ b/src/roadmaps/angular/content/107-routing/index.md @@ -0,0 +1,9 @@ +# Routing + +Routing in Angular allows the users to create a single-page application with multiple views and navigation between them. Users can switch between these views without losing the application state and properties. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/routing-in-angular-9-10/", "What is Routing ? - Geeksforgeeks " %} + {% Blog "https://angular.io/guide/router", "Explanation of Routing ? - Angular.io " %} + {% Blog "https://www.youtube.com/watch?v=Nehk4tBxD4o", "Angular Tutorial - Routing and Navigation" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/108-services-remote-data/100-dependency-injection.md b/src/roadmaps/angular/content/108-services-remote-data/100-dependency-injection.md new file mode 100644 index 000000000..f5050039c --- /dev/null +++ b/src/roadmaps/angular/content/108-services-remote-data/100-dependency-injection.md @@ -0,0 +1,9 @@ +# Dependency Injection + +Dependency Injection (DI) is a design pattern that creates the dependencies of a class and provides those objects to the class when required. Angular being a nice framework, provides a built-in dependency injection mechanism that creates and provides a runtime version of a dependency value using dependency injectors. + +{% resources %} + {% Blog "https://angular.io/guide/dependency-injection", "What is Dependency Injection ? - angular.io " %} + {% Blog "https://www.youtube.com/watch?v=OFPIGlxunL0", "Introduction of Dependency injection" %} +{% endresources %} + diff --git a/src/roadmaps/angular/content/108-services-remote-data/index.md b/src/roadmaps/angular/content/108-services-remote-data/index.md new file mode 100644 index 000000000..814f40d7c --- /dev/null +++ b/src/roadmaps/angular/content/108-services-remote-data/index.md @@ -0,0 +1,8 @@ +# Services + +Components shouldn't fetch or save data directly and shouldn't knowingly present fake data. They should focus on presenting data and delegate data access to a service. Service is where all the remote API calls exist to retrieve and provide data to components. + +{% resources %} + {% Blog "https://angular.io/tutorial/toh-pt4", "Adding Services in Angular" %} + {% Blog "https://angular.io/tutorial/toh-pt6", "Get Data from Server" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/109-lifecycle-hooks.md b/src/roadmaps/angular/content/109-lifecycle-hooks.md new file mode 100644 index 000000000..cf788d9e5 --- /dev/null +++ b/src/roadmaps/angular/content/109-lifecycle-hooks.md @@ -0,0 +1,14 @@ +# Lifecycle hooks + +A component instance has a lifecycle that starts when Angular instantiates the component class and renders the component view along with its child views. The lifecycle continues with change detection, as Angular checks to see when data-bound properties change, and updates both the view and the component instance as needed. The lifecycle ends when Angular destroys the component instance and removes its rendered template from the DOM. Directives have a similar lifecycle, as Angular creates, updates, and destroys instances in the course of execution. + +Your application can use lifecycle hook methods to tap into key events in the lifecycle of a component or directive to initialize new instances, initiate change detection when needed, respond to updates during change detection, and clean up before deletion of instances. + +The following life cycle hooks of angular are : + +`OnChanges` , `OnInit` , `DoCheck` , `OnDestroy` , `AfterContentInit` , `AfterContentChecked` , `AfterViewInit` , `AfterViewChecked` + +{% resources %} + {% Blog "https://angular.io/guide/lifecycle-hooks", "What is Life Cycle Hooks? - Angular.io " %} + {% Blog "https://blog.logrocket.com/angular-lifecycle-hooks/", "The life cycle hooks of angular - Blog " %} +{% endresources %} diff --git a/src/roadmaps/angular/content/110-state-management/100-ngxs.md b/src/roadmaps/angular/content/110-state-management/100-ngxs.md new file mode 100644 index 000000000..6df3a15e3 --- /dev/null +++ b/src/roadmaps/angular/content/110-state-management/100-ngxs.md @@ -0,0 +1,10 @@ +# Ngxs + +Ngxs is a state management pattern for the Angular framework. It acts as a single source of truth for our application. Ngxs is very simple and easily implementable. It reduce lots of boilerplate code . It is a replacement for Ngrx. In Ngrx we are creating state, action, reducer, and effects but in Ngxs, we are creating only state and actions instead of all of this. Like Ngrx, Ngxs is also asynchronous and when we dispatch any action we can get a response back. + +{% resources %} + {% Blog "https://www.ngxs.io/", "What is NGXS ? - Ngxs.io " %} + {% Blog "https://medium.com/@knoldus/introduction-to-ngxs-state-management-pattern-library-for-angular-ec76f681ceba", "Details about NGXS - Medium " %} + {% Blog "https://www.youtube.com/watch?v=SGj11j4hxmg", "Practise of NGXS" %} +{% endresources %} + diff --git a/src/roadmaps/angular/content/110-state-management/101-ngrx.md b/src/roadmaps/angular/content/110-state-management/101-ngrx.md new file mode 100644 index 000000000..6ab91487e --- /dev/null +++ b/src/roadmaps/angular/content/110-state-management/101-ngrx.md @@ -0,0 +1,9 @@ +# Ngrx + +Ngrx is a group of Angular libraries for reactive extensions that implements the Redux pattern and it’s supercharged with RXJS. +{% resources %} + {% Blog "https://ngrx.io/", "What is NGRX ? - ngrx.io " %} + {% Blog "https://ahmedrebai.medium.com/introduction-to-state-management-with-ngrx-and-angular-91f4ff27ec9f", "Details about NGRX - Medium " %} + {% Blog "https://www.youtube.com/watch?v=f97ICOaekNU", "Practise of NGRX" %} +{% endresources %} + diff --git a/src/roadmaps/angular/content/110-state-management/index.md b/src/roadmaps/angular/content/110-state-management/index.md new file mode 100644 index 000000000..2f242acac --- /dev/null +++ b/src/roadmaps/angular/content/110-state-management/index.md @@ -0,0 +1,9 @@ +# State Management + +Application state management is the process of maintaining knowledge of an application's inputs across multiple related data flows that form a complete business transaction -- or a session -- to understand the condition of the app at any given moment. In computer science, an input is information put into the program by the user and state refers to the condition of an application according to its stored inputs -- saved as variables or constants. State can also be described as the collection of preserved information that forms a complete session. + +{% resources %} + {% Blog "https://www.techtarget.com/searchapparchitecture/definition/state-management", "What is State Management?" %} + {% Blog "https://blog.logrocket.com/angular-state-management-made-simple-with-ngrx/", " Angular state management made simple with NgRx" %} + {% Blog "https://www.syncfusion.com/blogs/post/angular-state-management-with-ngrx.aspx", "Angular State Management with NgRx" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/111-zones.md b/src/roadmaps/angular/content/111-zones.md new file mode 100644 index 000000000..3921f153e --- /dev/null +++ b/src/roadmaps/angular/content/111-zones.md @@ -0,0 +1 @@ +# Zones \ No newline at end of file diff --git a/src/roadmaps/angular/content/112-creating-a-custom-x/100-directive.md b/src/roadmaps/angular/content/112-creating-a-custom-x/100-directive.md new file mode 100644 index 000000000..0c3205240 --- /dev/null +++ b/src/roadmaps/angular/content/112-creating-a-custom-x/100-directive.md @@ -0,0 +1,10 @@ +# Directive + +Directives are the functions that will execute whenever the Angular compiler finds them. Angular Directives enhance the capability of HTML elements by attaching custom behaviors to the DOM. + +From the core concept, Angular directives are categorized into three categories: Attribute Directives, Structural Directives, and Component Directives. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/angular-directives-learn-how-to-use-or-create-custom-directives-in-angular-c9b133c24442/", "Create a custom directive - Freecodecamp" %} + {% Blog "https://www.youtube.com/watch?v=AoN56g6UAsE", "Create a custom directive video for Beginners" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/112-creating-a-custom-x/101-pipe.md b/src/roadmaps/angular/content/112-creating-a-custom-x/101-pipe.md new file mode 100644 index 000000000..a7ff0cba2 --- /dev/null +++ b/src/roadmaps/angular/content/112-creating-a-custom-x/101-pipe.md @@ -0,0 +1,8 @@ +# Custom Pipes + +Pipes to transform strings, currency amounts, dates, and other data for display. Pipes are simple functions in template expressions to accept an input value and return a transformed value. Pipes are helpful because you can use them throughout your application while only declaring each pipe once. For example, you would use a pipe to show the date as April 15, 1988, rather than the raw string format. + +{% resources %} + {% Blog "https://angular.io/guide/pipes-custom-data-trans", "Create a custom pipe - angular.io" %} + {% Blog "https://www.youtube.com/watch?v=P2587FN4Y0w", "Create a custom pipe video for Beginners" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/angular/content/112-creating-a-custom-x/102-library.md b/src/roadmaps/angular/content/112-creating-a-custom-x/102-library.md new file mode 100644 index 000000000..c7aec06ef --- /dev/null +++ b/src/roadmaps/angular/content/112-creating-a-custom-x/102-library.md @@ -0,0 +1,7 @@ +# Library + +Use the Angular CLI and the npm package manager to build and publish your library as an npm package. + +{% resources %} + {% Official "https://angular.io/guide/creating-libraries", "Angular Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/112-creating-a-custom-x/index.md b/src/roadmaps/angular/content/112-creating-a-custom-x/index.md new file mode 100644 index 000000000..686af4877 --- /dev/null +++ b/src/roadmaps/angular/content/112-creating-a-custom-x/index.md @@ -0,0 +1,3 @@ +# Creating a custom X + +Learn how to create custom pipes, libraries and directives in Angular. diff --git a/src/roadmaps/angular/content/113-angular-ssr/100-angular-universal.md b/src/roadmaps/angular/content/113-angular-ssr/100-angular-universal.md new file mode 100644 index 000000000..bae5f786a --- /dev/null +++ b/src/roadmaps/angular/content/113-angular-ssr/100-angular-universal.md @@ -0,0 +1,8 @@ +# Angular universal + +Angular Universal also known as server-side rendering is tool which allows server to pre-render Angular application while user hits your website for first time. + +{% resources %} + {% Official "https://angular.io/guide/universal", "Angular Website" %} + {% Blog "https://github.com/angular/universal", "Github Repository" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/113-angular-ssr/index.md b/src/roadmaps/angular/content/113-angular-ssr/index.md new file mode 100644 index 000000000..38c32d92a --- /dev/null +++ b/src/roadmaps/angular/content/113-angular-ssr/index.md @@ -0,0 +1,8 @@ +# SSR in Angular + +A normal Angular application executes in the browser, rendering pages in the DOM in response to user actions. Angular Universal executes on the server, generating static application pages that later get bootstrapped on the client. This means that the application generally renders more quickly, giving users a chance to view the application layout before it becomes fully interactive. + +{% resources %} + {% Official "https://angular.io/guide/universal", "Angular Universal" %} + {% Blog "https://web.dev/rendering-on-the-web/", "Rendering on the Web" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/114-angular-ssg/100-scully.md b/src/roadmaps/angular/content/114-angular-ssg/100-scully.md new file mode 100644 index 000000000..e453f7c60 --- /dev/null +++ b/src/roadmaps/angular/content/114-angular-ssg/100-scully.md @@ -0,0 +1,8 @@ +# Scully + +Scully is the best static site generator for Angular projects looking to embrace the Jamstack. It will use your application and will create a static index. html for each of your pages/routes. + +{% resources %} + {% Official "https://scully.io/", "Scully Website" %} + {% Blog "https://github.com/scullyio/scully", "Github Repository" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/114-angular-ssg/index.md b/src/roadmaps/angular/content/114-angular-ssg/index.md new file mode 100644 index 000000000..314a6863c --- /dev/null +++ b/src/roadmaps/angular/content/114-angular-ssg/index.md @@ -0,0 +1,3 @@ +# Angular SSG + +SSG (Static Site Generator), helps in building the HTML full website, during the process of building and serving that HTML Page. This method helps to generate the HTML website on the client side before its being served on the server side. Therefore, whenever a user requests a HTML Page, firstly HTML page will be rendered and secondly, the angular app will be rendered. The SSG can be used only if your website is static (or) it's content doesn't changes frequently. diff --git a/src/roadmaps/angular/content/115-testing-angular-apps/100-testing-pipes.md b/src/roadmaps/angular/content/115-testing-angular-apps/100-testing-pipes.md new file mode 100644 index 000000000..01b288672 --- /dev/null +++ b/src/roadmaps/angular/content/115-testing-angular-apps/100-testing-pipes.md @@ -0,0 +1,8 @@ +# Testing pipes + +An Angular Pipe is a special function that is called from a Component template. Its purpose is to transform a value: You pass a value to the Pipe, the Pipe computes a new value and returns it. + +{% resources %} + {% Blog "https://angular.io/guide/testing-pipes", "Angular.io Website" %} + {% Blog "https://testing-angular.com/testing-pipes/", "Testing-Angular.com" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/115-testing-angular-apps/101-testing-services.md b/src/roadmaps/angular/content/115-testing-angular-apps/101-testing-services.md new file mode 100644 index 000000000..32716414f --- /dev/null +++ b/src/roadmaps/angular/content/115-testing-angular-apps/101-testing-services.md @@ -0,0 +1,8 @@ +# Testing services + +In an Angular application, Services are responsible for fetching, storing and processing data. Services are singletons, meaning there is only one instance of a Service during runtime. They are fit for central data storage, HTTP and WebSocket communication as well as data validation. + +{% resources %} + {% Blog "https://angular.io/guide/testing-services", "Angular.io Website" %} + {% Blog "https://testing-angular.com/testing-services/", "Testing-Angular.com" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/115-testing-angular-apps/102-testing-component-bindings.md b/src/roadmaps/angular/content/115-testing-angular-apps/102-testing-component-bindings.md new file mode 100644 index 000000000..728509339 --- /dev/null +++ b/src/roadmaps/angular/content/115-testing-angular-apps/102-testing-component-bindings.md @@ -0,0 +1,7 @@ +# Testing component bindings + +Angular processes all data bindings once for each JavaScript event cycle, from the root of the application component tree through all child components. Data binding plays an important role in communication between a template and its component, and is also important for communication between parent and child components. + +{% resources %} + {% Blog "https://angular.io/guide/architecture-components#:~:text=Angular%20processes%20all%20data%20bindings,between%20parent%20and%20child%20components.", "Angular.io Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/115-testing-angular-apps/103-testing-directives.md b/src/roadmaps/angular/content/115-testing-angular-apps/103-testing-directives.md new file mode 100644 index 000000000..906fef13c --- /dev/null +++ b/src/roadmaps/angular/content/115-testing-angular-apps/103-testing-directives.md @@ -0,0 +1,8 @@ +# Testing directives + +Directives are classes that add new behavior or modify the existing behavior to the elements in the template. Basically directives are used to manipulate the DOM, for example adding/removing the element from DOM or changing the appearance of the DOM elements. + +{% resources %} + {% Blog "https://angular.io/guide/testing-attribute-directives", "Angular.io Website" %} + {% Blog "https://testing-angular.com/testing-directives/", "tesing-angular Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/115-testing-angular-apps/104-testing-component-templates.md b/src/roadmaps/angular/content/115-testing-angular-apps/104-testing-component-templates.md new file mode 100644 index 000000000..0f9857352 --- /dev/null +++ b/src/roadmaps/angular/content/115-testing-angular-apps/104-testing-component-templates.md @@ -0,0 +1,7 @@ +# Testing component templates + +With a component template , you can save and reuse component processes and properties and create components from them; template-based components inherit the template's properties and process. + +{% resources %} + {% Blog "https://angular.io/guide/architecture-components", "Angular.io Website" %} +{% endresources %} diff --git a/src/roadmaps/angular/content/115-testing-angular-apps/index.md b/src/roadmaps/angular/content/115-testing-angular-apps/index.md new file mode 100644 index 000000000..5a50e53ca --- /dev/null +++ b/src/roadmaps/angular/content/115-testing-angular-apps/index.md @@ -0,0 +1,3 @@ +# Testing Angular Apps + +In any software development process, Testing the application plays a vital role. If Bugs and crashes are not figured out and solved they can defame the development company as well as hurt the clients too. But, Angular’s architecture comes with built-in testability features. As soon as you create a new project with Angular CLI, two essential testing tools are installed.They are: Jasmine and Karma. Jasmine is the testing library which structures individual tests into specifications (“specs”) and suites. And Karma is the test runner, which enables the different browsers to run the tests mentioned by Jasmine and the browsers will finally report the test results back. diff --git a/src/roadmaps/aspnet-core/aspnet-core.md b/src/roadmaps/aspnet-core/aspnet-core.md new file mode 100644 index 000000000..bafae5b8c --- /dev/null +++ b/src/roadmaps/aspnet-core/aspnet-core.md @@ -0,0 +1,56 @@ +--- +jsonUrl: "/jsons/aspnet-core.json" +pdfUrl: "/pdfs/aspnet-core.pdf" +order: 9 +featuredTitle: "ASP.NET Core" +featuredDescription: "Step by step guide to becoming an ASP.NET Core Developer in 2022" +title: "ASP.NET Core Developer" +description: "Step by step guide to becoming an ASP.NET core developer in 2022" +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 2773.45 +seo: + title: "Learn to become a modern ASP.NET core developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for asp.net core development. Learn to become a modern ASP.NET core developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a developer" + - "guide to becoming an asp.net core developer" + - "asp.net core developer" + - "asp.net core engineer" + - "asp.net core skills" + - "guide to asp.net core" + - "asp.net developer roadmap" + - "asp net developer roadmap" + - "asp developer roadmap" + - "asp.net core roadmap" + - "asp.net core skills" + - "asp.net core skills test" + - "skills for asp.net core" + - "cloud development" + - "what is asp.net core" + - "asp.net core quiz" + - "asp.net core interview questions" + - "asp.net core engineer roadmap" + - "asp.net core developer roadmap" + - "become an asp.net core developer" + - "asp.net core developer career path" + - "asp.net core developer" + - "modern asp.net core developer" +relatedRoadmaps: + - "backend" + - "devops" + - "python" + - "golang" + - "java" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + diff --git a/src/roadmaps/aspnet-core/content/100-basics-of-csharp/100-csharp.md b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/100-csharp.md new file mode 100644 index 000000000..3c0866ec0 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/100-csharp.md @@ -0,0 +1,8 @@ +# C# + +C# is a modern coding language that was developed by Microsoft that focuses on applying the coding style to C++ and making it so that way it's more condensed and simple. It's similar to Java by both being static, strong, and manifestive languages. Both use the System's prebuilt class to do certain features like printing output to the screen, etc.C#, like Java, also contains a garbage collection, which removes lower-level maintenance code from the programmer. + +{% resources %} + {% Blog "https://learn.microsoft.com/en-us/dotnet/csharp//", "C# official website?" %} + {% Course "https://www.w3schools.com/CS/index.php", "The Beginners Guide to C#" %} +{% endresources %} diff --git a/src/roadmaps/aspnet-core/content/100-basics-of-csharp/101-dotnet.md b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/101-dotnet.md new file mode 100644 index 000000000..b312fdf76 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/101-dotnet.md @@ -0,0 +1 @@ +# Dotnet \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/100-basics-of-csharp/102-dotnet-cli.md b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/102-dotnet-cli.md new file mode 100644 index 000000000..bda23dd96 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/102-dotnet-cli.md @@ -0,0 +1 @@ +# Dotnet cli \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/100-basics-of-csharp/index.md b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/index.md new file mode 100644 index 000000000..ea0a373d6 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/100-basics-of-csharp/index.md @@ -0,0 +1 @@ +# Basics of csharp \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/101-general-development-skills/100-git.md b/src/roadmaps/aspnet-core/content/101-general-development-skills/100-git.md new file mode 100644 index 000000000..959018824 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/101-general-development-skills/100-git.md @@ -0,0 +1,10 @@ +# Git + +[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. + +{% resources %} + {% Course "https://github.com/jlord/git-it-electron", "Learn Git on the command line" %} + {% Blog "https://www.youtube.com/watch?v=zbKdDsNNOhg", "Version Control System Introduction" %} + {% Blog "https://www.youtube.com/watch?v=SWYqp7iY_Tc", "Git & GitHub Crash Course For Beginners" %} + {% Blog "https://youtu.be/Y9XZQO1n_7c?t=21", "Learn Git in 20 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/aspnet-core/content/101-general-development-skills/101-azure-devops-services.md b/src/roadmaps/aspnet-core/content/101-general-development-skills/101-azure-devops-services.md new file mode 100644 index 000000000..6d3ea56d5 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/101-general-development-skills/101-azure-devops-services.md @@ -0,0 +1 @@ +# Azure devops services \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/101-general-development-skills/102-vcs-hosting-services.md b/src/roadmaps/aspnet-core/content/101-general-development-skills/102-vcs-hosting-services.md new file mode 100644 index 000000000..67e7a5a9b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/101-general-development-skills/102-vcs-hosting-services.md @@ -0,0 +1,9 @@ +# Repo Hosting Services + +There are different repository hosting services with the most famous one being GitHub, GitLab and BitBucket. I would recommend creating an account on GitHub because that is where most of the OpenSource work is done and most of the developers are. + +{% resources %} + {% Blog "https://github.com", "GitHub: Where the world builds software" %} + {% Blog "https://gitlab.com", "GitLab: Iterate faster, innovate together" %} + {% Blog "https://bitbucket.com", "BitBucket: The Git solution for professional teams" %} +{% endresources %} diff --git a/src/roadmaps/aspnet-core/content/101-general-development-skills/103-http-https.md b/src/roadmaps/aspnet-core/content/101-general-development-skills/103-http-https.md new file mode 100644 index 000000000..d14c78e79 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/101-general-development-skills/103-http-https.md @@ -0,0 +1,21 @@ +# HTTP + +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. + +# HTTPS + +HTTPS (**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. + +`HTTPS = HTTP + SSL/TLS` + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/", "What is HTTP?" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview", "An overview of HTTP" %} + {% Blog "https://kamranahmed.info/blog/2016/08/13/http-in-depth", "Journey to HTTP/2" %} + {% Blog "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", "HTTP/3 From A To Z: Core Concepts" %} + {% Blog "https://www.youtube.com/watch?v=iYM2zFP3Zn0", "HTTP Crash Course & Exploration" %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/", "What is HTTPS?" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https", "Why HTTPS Matters" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https", "Enabling HTTPS on Your Servers" %} + {% Blog "https://howhttps.works/", "How HTTPS works (comic)" %} +{% endresources %} diff --git a/src/roadmaps/aspnet-core/content/101-general-development-skills/104-datastructures-and-algorithms.md b/src/roadmaps/aspnet-core/content/101-general-development-skills/104-datastructures-and-algorithms.md new file mode 100644 index 000000000..c0926b510 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/101-general-development-skills/104-datastructures-and-algorithms.md @@ -0,0 +1,11 @@ +# Data Structures + +As the name indicates, a **Data Structure** is a way of organizing the data in the **memory** so it can be used efficiently. Some common data structures are array, linked list, stack, hashtable, queue, tree, heap, and graph. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/data-structures", "What are Data Structures?" %} + {% Blog "https://www.javatpoint.com/data-structure-tutorial", " Data Structures and Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=9rhT3P1MDHk&list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY", "Data Structures Illustrated" %} + {% Blog "https://dev.to/adavidoaiei/fundamental-data-structures-and-algorithms-in-c-4ocf", "C# resources" %} + {% Blog "https://www.csharpstar.com/csharp-algorithms/", "Interview Questions about Data Structures" %} +{% endresources %} diff --git a/src/roadmaps/aspnet-core/content/101-general-development-skills/index.md b/src/roadmaps/aspnet-core/content/101-general-development-skills/index.md new file mode 100644 index 000000000..d8e5ab08b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/101-general-development-skills/index.md @@ -0,0 +1 @@ +# General development skills \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/102-database-fundamentals/100-database-design-basics.md b/src/roadmaps/aspnet-core/content/102-database-fundamentals/100-database-design-basics.md new file mode 100644 index 000000000..52aa93bfc --- /dev/null +++ b/src/roadmaps/aspnet-core/content/102-database-fundamentals/100-database-design-basics.md @@ -0,0 +1 @@ +# Database design basics \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/102-database-fundamentals/101-sql-basics.md b/src/roadmaps/aspnet-core/content/102-database-fundamentals/101-sql-basics.md new file mode 100644 index 000000000..a0b69d1a9 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/102-database-fundamentals/101-sql-basics.md @@ -0,0 +1 @@ +# Sql basics \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/102-database-fundamentals/102-stored-procedures.md b/src/roadmaps/aspnet-core/content/102-database-fundamentals/102-stored-procedures.md new file mode 100644 index 000000000..ff0ca159f --- /dev/null +++ b/src/roadmaps/aspnet-core/content/102-database-fundamentals/102-stored-procedures.md @@ -0,0 +1 @@ +# Stored procedures \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/102-database-fundamentals/103-constraints.md b/src/roadmaps/aspnet-core/content/102-database-fundamentals/103-constraints.md new file mode 100644 index 000000000..857142d89 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/102-database-fundamentals/103-constraints.md @@ -0,0 +1 @@ +# Constraints \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/102-database-fundamentals/104-triggers.md b/src/roadmaps/aspnet-core/content/102-database-fundamentals/104-triggers.md new file mode 100644 index 000000000..57cdccb40 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/102-database-fundamentals/104-triggers.md @@ -0,0 +1 @@ +# Triggers \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/102-database-fundamentals/index.md b/src/roadmaps/aspnet-core/content/102-database-fundamentals/index.md new file mode 100644 index 000000000..c90d02e25 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/102-database-fundamentals/index.md @@ -0,0 +1 @@ +# Database fundamentals \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/100-mvc.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/100-mvc.md new file mode 100644 index 000000000..ada383a85 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/100-mvc.md @@ -0,0 +1 @@ +# Mvc \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/101-rest.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/101-rest.md new file mode 100644 index 000000000..5088a865c --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/101-rest.md @@ -0,0 +1 @@ +# Rest \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/102-razor-pages.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/102-razor-pages.md new file mode 100644 index 000000000..9e02a4009 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/102-razor-pages.md @@ -0,0 +1 @@ +# Razor pages \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/103-razor-components.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/103-razor-components.md new file mode 100644 index 000000000..a005e7ce4 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/103-razor-components.md @@ -0,0 +1 @@ +# Razor components \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/104-middlewares.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/104-middlewares.md new file mode 100644 index 000000000..9a18400f5 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/104-middlewares.md @@ -0,0 +1 @@ +# Middlewares \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/105-filters-and-attributes.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/105-filters-and-attributes.md new file mode 100644 index 000000000..0d02d316d --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/105-filters-and-attributes.md @@ -0,0 +1 @@ +# Filters and attributes \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/106-app-settings-and-configurations.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/106-app-settings-and-configurations.md new file mode 100644 index 000000000..d312a1d87 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/106-app-settings-and-configurations.md @@ -0,0 +1 @@ +# App settings and configurations \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/index.md b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/index.md new file mode 100644 index 000000000..739675108 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/103-basics-of-aspnet-core/index.md @@ -0,0 +1 @@ +# Basics of aspnet core \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/100-framework-basics.md b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/100-framework-basics.md new file mode 100644 index 000000000..5f87516f1 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/100-framework-basics.md @@ -0,0 +1 @@ +# Framework basics \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/101-codefirst-migrations.md b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/101-codefirst-migrations.md new file mode 100644 index 000000000..9c53e81c2 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/101-codefirst-migrations.md @@ -0,0 +1 @@ +# Codefirst migrations \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/102-change-tracker-api.md b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/102-change-tracker-api.md new file mode 100644 index 000000000..269fbca83 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/102-change-tracker-api.md @@ -0,0 +1 @@ +# Change tracker api \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/103-lazy-eager-explicit-loading.md b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/103-lazy-eager-explicit-loading.md new file mode 100644 index 000000000..5bbe4d300 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/103-lazy-eager-explicit-loading.md @@ -0,0 +1 @@ +# Lazy eager explicit loading \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/index.md b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/index.md new file mode 100644 index 000000000..16cddf046 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/100-entity-framework-core/index.md @@ -0,0 +1 @@ +# Entity framework core \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/101-dapper.md b/src/roadmaps/aspnet-core/content/104-orm/101-dapper.md new file mode 100644 index 000000000..3310c7359 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/101-dapper.md @@ -0,0 +1 @@ +# Dapper \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/102-repodb.md b/src/roadmaps/aspnet-core/content/104-orm/102-repodb.md new file mode 100644 index 000000000..a5714fb9f --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/102-repodb.md @@ -0,0 +1 @@ +# Repodb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/103-nhibernate.md b/src/roadmaps/aspnet-core/content/104-orm/103-nhibernate.md new file mode 100644 index 000000000..48efc75fb --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/103-nhibernate.md @@ -0,0 +1 @@ +# Nhibernate \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/104-orm/index.md b/src/roadmaps/aspnet-core/content/104-orm/index.md new file mode 100644 index 000000000..de9a0a7df --- /dev/null +++ b/src/roadmaps/aspnet-core/content/104-orm/index.md @@ -0,0 +1 @@ +# Orm \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/100-scrutor.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/100-scrutor.md new file mode 100644 index 000000000..837dead2f --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/100-scrutor.md @@ -0,0 +1 @@ +# Scrutor \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/100-microsoft-extensions-dependency-injection.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/100-microsoft-extensions-dependency-injection.md new file mode 100644 index 000000000..9f33143c7 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/100-microsoft-extensions-dependency-injection.md @@ -0,0 +1 @@ +# Microsoft extensions dependency injection \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/101-auto-fac.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/101-auto-fac.md new file mode 100644 index 000000000..05af34b00 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/101-auto-fac.md @@ -0,0 +1 @@ +# Auto fac \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/102-ninject.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/102-ninject.md new file mode 100644 index 000000000..a0dbfeb71 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/102-ninject.md @@ -0,0 +1 @@ +# Ninject \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/103-castle-windsor.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/103-castle-windsor.md new file mode 100644 index 000000000..e210453ab --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/103-castle-windsor.md @@ -0,0 +1 @@ +# Castle windsor \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/104-simple-injector.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/104-simple-injector.md new file mode 100644 index 000000000..4d9af164e --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/104-simple-injector.md @@ -0,0 +1 @@ +# Simple injector \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/index.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/index.md new file mode 100644 index 000000000..22e7c41f4 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/101-di-containers/index.md @@ -0,0 +1 @@ +# Di containers \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/100-scoped.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/100-scoped.md new file mode 100644 index 000000000..020b94603 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/100-scoped.md @@ -0,0 +1 @@ +# Scoped \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/101-transient.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/101-transient.md new file mode 100644 index 000000000..8c06546cd --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/101-transient.md @@ -0,0 +1 @@ +# Transient \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/102-singleton.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/102-singleton.md new file mode 100644 index 000000000..d80f013d6 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/102-singleton.md @@ -0,0 +1 @@ +# Singleton \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/index.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/index.md new file mode 100644 index 000000000..63e8d903b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/102-life-cycles/index.md @@ -0,0 +1 @@ +# Life cycles \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/105-dependency-injection/index.md b/src/roadmaps/aspnet-core/content/105-dependency-injection/index.md new file mode 100644 index 000000000..450bde1c7 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/105-dependency-injection/index.md @@ -0,0 +1 @@ +# Dependency injection \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/100-memory-cache.md b/src/roadmaps/aspnet-core/content/106-caching/100-memory-cache.md new file mode 100644 index 000000000..488d0d6c9 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/100-memory-cache.md @@ -0,0 +1 @@ +# Memory cache \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/101-entity-framework-cache.md b/src/roadmaps/aspnet-core/content/106-caching/101-entity-framework-cache.md new file mode 100644 index 000000000..cff289ce0 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/101-entity-framework-cache.md @@ -0,0 +1 @@ +# Entity framework cache \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/100-memcached.md b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/100-memcached.md new file mode 100644 index 000000000..a77571ada --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/100-memcached.md @@ -0,0 +1 @@ +# Memcached \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/easy-caching.md b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/easy-caching.md new file mode 100644 index 000000000..bddbaaed5 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/easy-caching.md @@ -0,0 +1 @@ +# Easy caching \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/index.md b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/index.md new file mode 100644 index 000000000..0de4bc736 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/index.md @@ -0,0 +1 @@ +# Redis \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/stackexchange-redis.md b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/stackexchange-redis.md new file mode 100644 index 000000000..e8241a6ad --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/101-redis/stackexchange-redis.md @@ -0,0 +1 @@ +# Stackexchange redis \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/index.md b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/index.md new file mode 100644 index 000000000..657aa944b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/102-distributed-cache/index.md @@ -0,0 +1 @@ +# Distributed cache \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/106-caching/index.md b/src/roadmaps/aspnet-core/content/106-caching/index.md new file mode 100644 index 000000000..07f88797a --- /dev/null +++ b/src/roadmaps/aspnet-core/content/106-caching/index.md @@ -0,0 +1 @@ +# Caching \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/100-elasticsearch.md b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/100-elasticsearch.md new file mode 100644 index 000000000..1c01a877a --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/100-elasticsearch.md @@ -0,0 +1 @@ +# Elasticsearch \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/101-solr.md b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/101-solr.md new file mode 100644 index 000000000..54c3caa94 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/101-solr.md @@ -0,0 +1 @@ +# Solr \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/102-sphinx.md b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/102-sphinx.md new file mode 100644 index 000000000..470f2a5a7 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/102-sphinx.md @@ -0,0 +1 @@ +# Sphinx \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/index.md b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/index.md new file mode 100644 index 000000000..bc600ec99 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/100-search-engines/index.md @@ -0,0 +1 @@ +# Search engines \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/101-cloud/100-dynamodb.md b/src/roadmaps/aspnet-core/content/107-databases/101-cloud/100-dynamodb.md new file mode 100644 index 000000000..b08ce7569 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/101-cloud/100-dynamodb.md @@ -0,0 +1 @@ +# Dynamodb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/101-cloud/101-cosmosdb.md b/src/roadmaps/aspnet-core/content/107-databases/101-cloud/101-cosmosdb.md new file mode 100644 index 000000000..84cc06469 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/101-cloud/101-cosmosdb.md @@ -0,0 +1 @@ +# Cosmosdb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/101-cloud/index.md b/src/roadmaps/aspnet-core/content/107-databases/101-cloud/index.md new file mode 100644 index 000000000..bd82553bb --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/101-cloud/index.md @@ -0,0 +1 @@ +# Cloud \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/102-relational/100-sql-server.md b/src/roadmaps/aspnet-core/content/107-databases/102-relational/100-sql-server.md new file mode 100644 index 000000000..4c59024d3 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/102-relational/100-sql-server.md @@ -0,0 +1 @@ +# Sql server \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/102-relational/101-postgresql.md b/src/roadmaps/aspnet-core/content/107-databases/102-relational/101-postgresql.md new file mode 100644 index 000000000..a6798acec --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/102-relational/101-postgresql.md @@ -0,0 +1 @@ +# Postgresql \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/102-relational/102-mariadb.md b/src/roadmaps/aspnet-core/content/107-databases/102-relational/102-mariadb.md new file mode 100644 index 000000000..2efaf2286 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/102-relational/102-mariadb.md @@ -0,0 +1 @@ +# Mariadb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/102-relational/103-mysql.md b/src/roadmaps/aspnet-core/content/107-databases/102-relational/103-mysql.md new file mode 100644 index 000000000..39b7062b3 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/102-relational/103-mysql.md @@ -0,0 +1 @@ +# Mysql \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/102-relational/index.md b/src/roadmaps/aspnet-core/content/107-databases/102-relational/index.md new file mode 100644 index 000000000..e6a7c3178 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/102-relational/index.md @@ -0,0 +1 @@ +# Relational \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/103-nosql/100-redis.md b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/100-redis.md new file mode 100644 index 000000000..0de4bc736 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/100-redis.md @@ -0,0 +1 @@ +# Redis \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/103-nosql/101-mongodb.md b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/101-mongodb.md new file mode 100644 index 000000000..090d1d3ea --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/101-mongodb.md @@ -0,0 +1 @@ +# Mongodb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/103-nosql/102-litedb.md b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/102-litedb.md new file mode 100644 index 000000000..f4298759b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/102-litedb.md @@ -0,0 +1 @@ +# Litedb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/103-nosql/103-cassandra.md b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/103-cassandra.md new file mode 100644 index 000000000..fb6bc61fc --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/103-cassandra.md @@ -0,0 +1 @@ +# Cassandra \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/103-nosql/104-ravendb.md b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/104-ravendb.md new file mode 100644 index 000000000..b27209c6f --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/104-ravendb.md @@ -0,0 +1 @@ +# Ravendb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/103-nosql/105-couchdb.md b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/105-couchdb.md new file mode 100644 index 000000000..643c17afc --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/105-couchdb.md @@ -0,0 +1 @@ +# Couchdb \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/103-nosql/index.md b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/index.md new file mode 100644 index 000000000..a6b54c76c --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/103-nosql/index.md @@ -0,0 +1 @@ +# Nosql \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/107-databases/index.md b/src/roadmaps/aspnet-core/content/107-databases/index.md new file mode 100644 index 000000000..602f6d863 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/107-databases/index.md @@ -0,0 +1 @@ +# Databases \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/100-serilog.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/100-serilog.md new file mode 100644 index 000000000..c3a09a797 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/100-serilog.md @@ -0,0 +1 @@ +# Serilog \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/101-nlog.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/101-nlog.md new file mode 100644 index 000000000..d40545ab0 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/101-nlog.md @@ -0,0 +1 @@ +# Nlog \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/100-elk-stack.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/100-elk-stack.md new file mode 100644 index 000000000..a2c2f9ee2 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/100-elk-stack.md @@ -0,0 +1 @@ +# Elk stack \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/101-sentry.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/101-sentry.md new file mode 100644 index 000000000..efc441663 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/101-sentry.md @@ -0,0 +1 @@ +# Sentry \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/102-datadog.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/102-datadog.md new file mode 100644 index 000000000..c11e557ba --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/102-datadog.md @@ -0,0 +1 @@ +# Datadog \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/103-loggly.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/103-loggly.md new file mode 100644 index 000000000..63234d0cb --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/103-loggly.md @@ -0,0 +1 @@ +# Loggly \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/104-elmah.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/104-elmah.md new file mode 100644 index 000000000..3031f5bc6 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/104-elmah.md @@ -0,0 +1 @@ +# Elmah \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/index.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/index.md new file mode 100644 index 000000000..6bb298261 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/102-log-management-system/index.md @@ -0,0 +1 @@ +# Log management system \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/108-log-frameworks/index.md b/src/roadmaps/aspnet-core/content/108-log-frameworks/index.md new file mode 100644 index 000000000..f0e9793fa --- /dev/null +++ b/src/roadmaps/aspnet-core/content/108-log-frameworks/index.md @@ -0,0 +1 @@ +# Log frameworks \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/101-odata.md b/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/101-odata.md new file mode 100644 index 000000000..36b735b92 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/101-odata.md @@ -0,0 +1 @@ +# Odata \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/102-sieve.md b/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/102-sieve.md new file mode 100644 index 000000000..61b8d81ea --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/102-sieve.md @@ -0,0 +1 @@ +# Sieve \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/index.md b/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/index.md new file mode 100644 index 000000000..5088a865c --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/100-rest/index.md @@ -0,0 +1 @@ +# Rest \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/101-grpc.md b/src/roadmaps/aspnet-core/content/109-api-clients/101-grpc.md new file mode 100644 index 000000000..5d543f43c --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/101-grpc.md @@ -0,0 +1 @@ +# Grpc \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/100-graphql-dotnet.md b/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/100-graphql-dotnet.md new file mode 100644 index 000000000..8f8f0f5b7 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/100-graphql-dotnet.md @@ -0,0 +1 @@ +# Graphql dotnet \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/101-hot-chocolate.md b/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/101-hot-chocolate.md new file mode 100644 index 000000000..075634181 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/101-hot-chocolate.md @@ -0,0 +1 @@ +# Hot chocolate \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/index.md b/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/index.md new file mode 100644 index 000000000..92b738b69 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/102-graphql/index.md @@ -0,0 +1 @@ +# Graphql \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/109-api-clients/index.md b/src/roadmaps/aspnet-core/content/109-api-clients/index.md new file mode 100644 index 000000000..3ad7ce843 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/109-api-clients/index.md @@ -0,0 +1 @@ +# Api clients \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/110-real-time-communication/100-web-sockets.md b/src/roadmaps/aspnet-core/content/110-real-time-communication/100-web-sockets.md new file mode 100644 index 000000000..8b76cfb8d --- /dev/null +++ b/src/roadmaps/aspnet-core/content/110-real-time-communication/100-web-sockets.md @@ -0,0 +1 @@ +# Web sockets \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/110-real-time-communication/101-singlar-core.md b/src/roadmaps/aspnet-core/content/110-real-time-communication/101-singlar-core.md new file mode 100644 index 000000000..511d797ad --- /dev/null +++ b/src/roadmaps/aspnet-core/content/110-real-time-communication/101-singlar-core.md @@ -0,0 +1 @@ +# Singlar core \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/110-real-time-communication/index.md b/src/roadmaps/aspnet-core/content/110-real-time-communication/index.md new file mode 100644 index 000000000..fcca92201 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/110-real-time-communication/index.md @@ -0,0 +1 @@ +# Real time communication \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/111-object-mapping/100-atuo-mapper.md b/src/roadmaps/aspnet-core/content/111-object-mapping/100-atuo-mapper.md new file mode 100644 index 000000000..2458788e2 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/111-object-mapping/100-atuo-mapper.md @@ -0,0 +1 @@ +# Atuo mapper \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/111-object-mapping/101-express-mapper.md b/src/roadmaps/aspnet-core/content/111-object-mapping/101-express-mapper.md new file mode 100644 index 000000000..ab9cfe0e5 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/111-object-mapping/101-express-mapper.md @@ -0,0 +1 @@ +# Express mapper \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/111-object-mapping/102-agile-mapper.md b/src/roadmaps/aspnet-core/content/111-object-mapping/102-agile-mapper.md new file mode 100644 index 000000000..d52b64a0f --- /dev/null +++ b/src/roadmaps/aspnet-core/content/111-object-mapping/102-agile-mapper.md @@ -0,0 +1 @@ +# Agile mapper \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/111-object-mapping/103-mapster.md b/src/roadmaps/aspnet-core/content/111-object-mapping/103-mapster.md new file mode 100644 index 000000000..eb8824e72 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/111-object-mapping/103-mapster.md @@ -0,0 +1 @@ +# Mapster \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/111-object-mapping/index.md b/src/roadmaps/aspnet-core/content/111-object-mapping/index.md new file mode 100644 index 000000000..21bbef441 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/111-object-mapping/index.md @@ -0,0 +1 @@ +# Object mapping \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/112-task-scheduling/100-hangfire.md b/src/roadmaps/aspnet-core/content/112-task-scheduling/100-hangfire.md new file mode 100644 index 000000000..44ebc6d66 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/112-task-scheduling/100-hangfire.md @@ -0,0 +1 @@ +# Hangfire \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/112-task-scheduling/101-native-background-service.md b/src/roadmaps/aspnet-core/content/112-task-scheduling/101-native-background-service.md new file mode 100644 index 000000000..fc05d1421 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/112-task-scheduling/101-native-background-service.md @@ -0,0 +1 @@ +# Native background service \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/112-task-scheduling/102-quartz.md b/src/roadmaps/aspnet-core/content/112-task-scheduling/102-quartz.md new file mode 100644 index 000000000..0c4afd83b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/112-task-scheduling/102-quartz.md @@ -0,0 +1 @@ +# Quartz \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/112-task-scheduling/103-coravel.md b/src/roadmaps/aspnet-core/content/112-task-scheduling/103-coravel.md new file mode 100644 index 000000000..10e347362 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/112-task-scheduling/103-coravel.md @@ -0,0 +1 @@ +# Coravel \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/112-task-scheduling/index.md b/src/roadmaps/aspnet-core/content/112-task-scheduling/index.md new file mode 100644 index 000000000..af077b7a8 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/112-task-scheduling/index.md @@ -0,0 +1 @@ +# Task scheduling \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/100-selenium.md b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/100-selenium.md new file mode 100644 index 000000000..832bd8988 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/100-selenium.md @@ -0,0 +1 @@ +# Selenium \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/101-playwright.md b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/101-playwright.md new file mode 100644 index 000000000..454f06c7c --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/101-playwright.md @@ -0,0 +1 @@ +# Playwright \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/102-puppeteer.md b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/102-puppeteer.md new file mode 100644 index 000000000..70452d2a2 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/102-puppeteer.md @@ -0,0 +1 @@ +# Puppeteer \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/103-cypress.md b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/103-cypress.md new file mode 100644 index 000000000..c881065db --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/103-cypress.md @@ -0,0 +1 @@ +# Cypress \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/index.md b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/index.md new file mode 100644 index 000000000..d4b55904e --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/100-e2e-testing/index.md @@ -0,0 +1 @@ +# E2e testing \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/100-fluent-assertions.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/100-fluent-assertions.md new file mode 100644 index 000000000..184bda8b3 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/100-fluent-assertions.md @@ -0,0 +1 @@ +# Fluent assertions \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/101-shouldly.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/101-shouldly.md new file mode 100644 index 000000000..76c15d93d --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/101-shouldly.md @@ -0,0 +1 @@ +# Shouldly \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/102-mstest.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/102-mstest.md new file mode 100644 index 000000000..1b6dfb56b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/102-mstest.md @@ -0,0 +1 @@ +# Mstest \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/103-xunit.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/103-xunit.md new file mode 100644 index 000000000..e6b9f19fb --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/103-xunit.md @@ -0,0 +1 @@ +# Xunit \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/104-nunit.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/104-nunit.md new file mode 100644 index 000000000..575e4aeab --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/104-nunit.md @@ -0,0 +1 @@ +# Nunit \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/105-nsubstitute.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/105-nsubstitute.md new file mode 100644 index 000000000..9d4b95656 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/105-nsubstitute.md @@ -0,0 +1 @@ +# Nsubstitute \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/106-moq.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/106-moq.md new file mode 100644 index 000000000..ca5011ced --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/106-moq.md @@ -0,0 +1 @@ +# Moq \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/107-fake-it-easy.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/107-fake-it-easy.md new file mode 100644 index 000000000..1496a8157 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/107-fake-it-easy.md @@ -0,0 +1 @@ +# Fake it easy \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/index.md b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/index.md new file mode 100644 index 000000000..94ee45331 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/101-unit-testing/index.md @@ -0,0 +1 @@ +# Unit testing \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/100-web-application-factory.md b/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/100-web-application-factory.md new file mode 100644 index 000000000..a72c421ca --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/100-web-application-factory.md @@ -0,0 +1 @@ +# Web application factory \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/101-test-server.md b/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/101-test-server.md new file mode 100644 index 000000000..614981335 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/101-test-server.md @@ -0,0 +1 @@ +# Test server \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/index.md b/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/index.md new file mode 100644 index 000000000..30f1d7fbd --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/102-integration-testing/index.md @@ -0,0 +1 @@ +# Integration testing \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/100-spec-flow.md b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/100-spec-flow.md new file mode 100644 index 000000000..a792ff348 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/100-spec-flow.md @@ -0,0 +1 @@ +# Spec flow \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/101-bddfy.md b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/101-bddfy.md new file mode 100644 index 000000000..d7631439b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/101-bddfy.md @@ -0,0 +1 @@ +# Bddfy \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/102-light-bdd.md b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/102-light-bdd.md new file mode 100644 index 000000000..e114e3ef5 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/102-light-bdd.md @@ -0,0 +1 @@ +# Light bdd \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/index.md b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/index.md new file mode 100644 index 000000000..007085e2b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/103-behavior-testing/index.md @@ -0,0 +1 @@ +# Behavior testing \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/113-testing/index.md b/src/roadmaps/aspnet-core/content/113-testing/index.md new file mode 100644 index 000000000..94cfd7d77 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/113-testing/index.md @@ -0,0 +1 @@ +# Testing \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/100-active-mq.md b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/100-active-mq.md new file mode 100644 index 000000000..fa679bc02 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/100-active-mq.md @@ -0,0 +1 @@ +# Active mq \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/101-apache-kafka.md b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/101-apache-kafka.md new file mode 100644 index 000000000..183b6f6fb --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/101-apache-kafka.md @@ -0,0 +1 @@ +# Apache kafka \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/102-rabbit-mq.md b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/102-rabbit-mq.md new file mode 100644 index 000000000..ef9a745cb --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/102-rabbit-mq.md @@ -0,0 +1 @@ +# Rabbit mq \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/103-net-mq.md b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/103-net-mq.md new file mode 100644 index 000000000..16267af2d --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/103-net-mq.md @@ -0,0 +1 @@ +# Net mq \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/104-azure-service-bus.md b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/104-azure-service-bus.md new file mode 100644 index 000000000..60b5aa2f8 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/104-azure-service-bus.md @@ -0,0 +1 @@ +# Azure service bus \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/index.md b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/index.md new file mode 100644 index 000000000..08e76c75e --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/100-message-brokers/index.md @@ -0,0 +1 @@ +# Message brokers \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/100-mass-transit.md b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/100-mass-transit.md new file mode 100644 index 000000000..ce010d048 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/100-mass-transit.md @@ -0,0 +1 @@ +# Mass transit \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/101-nservice-bus.md b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/101-nservice-bus.md new file mode 100644 index 000000000..a922ac132 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/101-nservice-bus.md @@ -0,0 +1 @@ +# Nservice bus \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/102-easy-net-q.md b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/102-easy-net-q.md new file mode 100644 index 000000000..32d23fcde --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/102-easy-net-q.md @@ -0,0 +1 @@ +# Easy net q \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/index.md b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/index.md new file mode 100644 index 000000000..6f6e4e461 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/101-message-bus/index.md @@ -0,0 +1 @@ +# Message bus \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/102-kubernetes.md b/src/roadmaps/aspnet-core/content/114-microservices/102-kubernetes.md new file mode 100644 index 000000000..ddf04c9b3 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/102-kubernetes.md @@ -0,0 +1 @@ +# Kubernetes \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/103-docker-swarm.md b/src/roadmaps/aspnet-core/content/114-microservices/103-docker-swarm.md new file mode 100644 index 000000000..eec61f718 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/103-docker-swarm.md @@ -0,0 +1 @@ +# Docker swarm \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/104-ocelot.md b/src/roadmaps/aspnet-core/content/114-microservices/104-ocelot.md new file mode 100644 index 000000000..742ca4ab8 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/104-ocelot.md @@ -0,0 +1 @@ +# Ocelot \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/105-docker.md b/src/roadmaps/aspnet-core/content/114-microservices/105-docker.md new file mode 100644 index 000000000..687140836 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/105-docker.md @@ -0,0 +1 @@ +# Docker \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/106-yarp.md b/src/roadmaps/aspnet-core/content/114-microservices/106-yarp.md new file mode 100644 index 000000000..4c670a13b --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/106-yarp.md @@ -0,0 +1 @@ +# Yarp \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/107-orleans.md b/src/roadmaps/aspnet-core/content/114-microservices/107-orleans.md new file mode 100644 index 000000000..32a10391f --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/107-orleans.md @@ -0,0 +1 @@ +# Orleans \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/108-steel-toe.md b/src/roadmaps/aspnet-core/content/114-microservices/108-steel-toe.md new file mode 100644 index 000000000..f4d77a364 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/108-steel-toe.md @@ -0,0 +1 @@ +# Steel toe \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/109-dapr.md b/src/roadmaps/aspnet-core/content/114-microservices/109-dapr.md new file mode 100644 index 000000000..794944feb --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/109-dapr.md @@ -0,0 +1 @@ +# Dapr \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/110-tye.md b/src/roadmaps/aspnet-core/content/114-microservices/110-tye.md new file mode 100644 index 000000000..32625bfa4 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/110-tye.md @@ -0,0 +1 @@ +# Tye \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/114-microservices/index.md b/src/roadmaps/aspnet-core/content/114-microservices/index.md new file mode 100644 index 000000000..3ace82ef2 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/114-microservices/index.md @@ -0,0 +1 @@ +# Microservices \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/115-ci-cd/100-github-actions.md b/src/roadmaps/aspnet-core/content/115-ci-cd/100-github-actions.md new file mode 100644 index 000000000..d1cf49177 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/115-ci-cd/100-github-actions.md @@ -0,0 +1 @@ +# Github actions \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/115-ci-cd/101-azure-pipelines.md b/src/roadmaps/aspnet-core/content/115-ci-cd/101-azure-pipelines.md new file mode 100644 index 000000000..9798d36c9 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/115-ci-cd/101-azure-pipelines.md @@ -0,0 +1 @@ +# Azure pipelines \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/115-ci-cd/102-travis-ci.md b/src/roadmaps/aspnet-core/content/115-ci-cd/102-travis-ci.md new file mode 100644 index 000000000..fbffb7e93 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/115-ci-cd/102-travis-ci.md @@ -0,0 +1 @@ +# Travis ci \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/115-ci-cd/103-jenkins.md b/src/roadmaps/aspnet-core/content/115-ci-cd/103-jenkins.md new file mode 100644 index 000000000..2b36b080c --- /dev/null +++ b/src/roadmaps/aspnet-core/content/115-ci-cd/103-jenkins.md @@ -0,0 +1 @@ +# Jenkins \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/115-ci-cd/104-circle-ci.md b/src/roadmaps/aspnet-core/content/115-ci-cd/104-circle-ci.md new file mode 100644 index 000000000..b76511472 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/115-ci-cd/104-circle-ci.md @@ -0,0 +1 @@ +# Circle ci \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/115-ci-cd/105-team-city.md b/src/roadmaps/aspnet-core/content/115-ci-cd/105-team-city.md new file mode 100644 index 000000000..ea700b253 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/115-ci-cd/105-team-city.md @@ -0,0 +1 @@ +# Team city \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/115-ci-cd/index.md b/src/roadmaps/aspnet-core/content/115-ci-cd/index.md new file mode 100644 index 000000000..edee7d737 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/115-ci-cd/index.md @@ -0,0 +1 @@ +# Ci cd \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/116-client-side-libraries/100-blazor.md b/src/roadmaps/aspnet-core/content/116-client-side-libraries/100-blazor.md new file mode 100644 index 000000000..8f9d59155 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/116-client-side-libraries/100-blazor.md @@ -0,0 +1 @@ +# Blazor \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/116-client-side-libraries/index.md b/src/roadmaps/aspnet-core/content/116-client-side-libraries/index.md new file mode 100644 index 000000000..b187395fa --- /dev/null +++ b/src/roadmaps/aspnet-core/content/116-client-side-libraries/index.md @@ -0,0 +1 @@ +# Client side libraries \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/117-template-engines/100-razor.md b/src/roadmaps/aspnet-core/content/117-template-engines/100-razor.md new file mode 100644 index 000000000..14e9169a9 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/117-template-engines/100-razor.md @@ -0,0 +1 @@ +# Razor \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/117-template-engines/101-dot-liquid.md b/src/roadmaps/aspnet-core/content/117-template-engines/101-dot-liquid.md new file mode 100644 index 000000000..6aaeb25ff --- /dev/null +++ b/src/roadmaps/aspnet-core/content/117-template-engines/101-dot-liquid.md @@ -0,0 +1 @@ +# Dot liquid \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/117-template-engines/102-scriban.md b/src/roadmaps/aspnet-core/content/117-template-engines/102-scriban.md new file mode 100644 index 000000000..63d93d9e4 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/117-template-engines/102-scriban.md @@ -0,0 +1 @@ +# Scriban \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/117-template-engines/103-fluid.md b/src/roadmaps/aspnet-core/content/117-template-engines/103-fluid.md new file mode 100644 index 000000000..dd7bfbb44 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/117-template-engines/103-fluid.md @@ -0,0 +1 @@ +# Fluid \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/117-template-engines/index.md b/src/roadmaps/aspnet-core/content/117-template-engines/index.md new file mode 100644 index 000000000..8d9b2651a --- /dev/null +++ b/src/roadmaps/aspnet-core/content/117-template-engines/index.md @@ -0,0 +1 @@ +# Template engines \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/100-mediatr.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/100-mediatr.md new file mode 100644 index 000000000..c3376ec54 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/100-mediatr.md @@ -0,0 +1 @@ +# Mediatr \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/101-fluent-validation.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/101-fluent-validation.md new file mode 100644 index 000000000..d8742b170 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/101-fluent-validation.md @@ -0,0 +1 @@ +# Fluent validation \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/102-polly.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/102-polly.md new file mode 100644 index 000000000..91efcfb06 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/102-polly.md @@ -0,0 +1 @@ +# Polly \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/103-nuke.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/103-nuke.md new file mode 100644 index 000000000..a179d88a1 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/103-nuke.md @@ -0,0 +1 @@ +# Nuke \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/104-benchmark-net.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/104-benchmark-net.md new file mode 100644 index 000000000..873ad98d1 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/104-benchmark-net.md @@ -0,0 +1 @@ +# Benchmark net \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/105-noda-time.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/105-noda-time.md new file mode 100644 index 000000000..97482f6a3 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/105-noda-time.md @@ -0,0 +1 @@ +# Noda time \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/106-gen-fu.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/106-gen-fu.md new file mode 100644 index 000000000..8697cbd01 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/106-gen-fu.md @@ -0,0 +1 @@ +# Gen fu \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/107-swash-buckle.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/107-swash-buckle.md new file mode 100644 index 000000000..7dc1907b3 --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/107-swash-buckle.md @@ -0,0 +1 @@ +# Swash buckle \ No newline at end of file diff --git a/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/index.md b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/index.md new file mode 100644 index 000000000..4d208577c --- /dev/null +++ b/src/roadmaps/aspnet-core/content/118-good-to-know-libraries/index.md @@ -0,0 +1 @@ +# Good to know libraries \ No newline at end of file diff --git a/src/roadmaps/backend/backend.md b/src/roadmaps/backend/backend.md new file mode 100644 index 000000000..db2b9ac49 --- /dev/null +++ b/src/roadmaps/backend/backend.md @@ -0,0 +1,58 @@ +--- +jsonUrl: "/jsons/backend.json" +pdfUrl: "/pdfs/backend.pdf" +order: 2 +featuredTitle: "Backend" +featuredDescription: "Step by step guide to becoming a backend developer in 2022" +title: "Backend Developer" +description: "Step by step guide to becoming a modern backend developer in 2022" +hasTopics: true +dimensions: + width: 968 + height: 2458.52 +seo: + title: "Backend Developer Roadmap: Learn to become a modern backend developer" + description: "Learn to become a modern backend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern backend development." + keywords: + - "backend roadmap 2022" + - "backend developer roadmap 2022" + - "guide to becoming a developer" + - "guide to becoming a backend developer" + - "backend roadmap" + - "backend developer" + - "backend engineer" + - "backend skills" + - "backend development" + - "javascript developer" + - "backend development skills" + - "backend development skills test" + - "backend engineer roadmap" + - "backend developer roadmap" + - "become a backend developer" + - "backend developer career path" + - "javascript developer" + - "modern javascript developer" + - "node developer" + - "skills for backend development" + - "learn backend development" + - "what is backend development" + - "backend developer quiz" + - "backend developer interview questions" +relatedRoadmaps: + - "python" + - "java" + - "golang" + - "devops" + - "javascript" + - "nodejs" + - "postgresql-dba" + - "software-design-architecture" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + diff --git a/src/roadmaps/backend/content/100-internet/100-how-does-the-internet-work.md b/src/roadmaps/backend/content/100-internet/100-how-does-the-internet-work.md new file mode 100644 index 000000000..7e0f91579 --- /dev/null +++ b/src/roadmaps/backend/content/100-internet/100-how-does-the-internet-work.md @@ -0,0 +1,12 @@ +# Internet + +The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols. + +{% resources %} + {% Blog "https://www.vox.com/2014/6/16/18076282/the-internet", "The Internet Explained" %} + {% Blog "http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm", "How Does the Internet Work?" %} + {% Blog "/guides/what-is-internet", "Introduction to Internet" %} + {% Blog "https://www.youtube.com/watch?v=x3c1ih2NJEg", "How does the Internet work?" %} + {% Blog "https://www.youtube.com/watch?v=7_LPdttKXPc", "How the Internet Works in 5 Minutes" %} + {% Blog "https://www.youtube.com/watch?v=zN8YNNHcaZc", "How does the internet work? (Full Course)" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/100-internet/101-what-is-http.md b/src/roadmaps/backend/content/100-internet/101-what-is-http.md new file mode 100644 index 000000000..321d57bbc --- /dev/null +++ b/src/roadmaps/backend/content/100-internet/101-what-is-http.md @@ -0,0 +1,12 @@ +# What is HTTP? + +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. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/", "What is HTTP?" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview", "An overview of HTTP" %} + {% Blog "https://kamranahmed.info/blog/2016/08/13/http-in-depth", "Journey to HTTP/2" %} + {% Blog "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", "HTTP/3 From A To Z: Core Concepts" %} + {% Blog "https://www.youtube.com/watch?v=a-sBfyiXysI", "HTTP/1 to HTTP/2 to HTTP/3" %} + {% Blog "https://www.youtube.com/watch?v=iYM2zFP3Zn0", "HTTP Crash Course & Exploration" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/100-internet/102-browsers-and-how-they-work.md b/src/roadmaps/backend/content/100-internet/102-browsers-and-how-they-work.md new file mode 100644 index 000000000..73f983b41 --- /dev/null +++ b/src/roadmaps/backend/content/100-internet/102-browsers-and-how-they-work.md @@ -0,0 +1,9 @@ +# Browsers + +A web browser is a software application that enables a user to access and display web pages or other online content through its graphical user interface. + +{% resources %} + {% Blog "https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/", "How Browsers Work" %} + {% Blog "https://www.browserstack.com/guide/browser-rendering-engine", "Role of Rendering Engine in Browsers" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work", "Populating the Page: How Browsers Work" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/100-internet/103-dns-and-how-it-works.md b/src/roadmaps/backend/content/100-internet/103-dns-and-how-it-works.md new file mode 100644 index 000000000..81ecfdf5b --- /dev/null +++ b/src/roadmaps/backend/content/100-internet/103-dns-and-how-it-works.md @@ -0,0 +1,11 @@ +# DNS + +The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/", "What is DNS?" %} + {% Blog "https://howdns.works/", "How DNS works (comic)" %} + {% Blog "https://www.youtube.com/watch?v=Wj0od2ag5sk", "DNS and How does it Work?" %} + {% Blog "https://www.youtube.com/watch?v=7lxgpKh_fRY", "DNS Records" %} + {% Blog "https://www.youtube.com/watch?v=zEmUuNFBgN8&list=PLTk5ZYSbd9MhMmOiPhfRJNW7bhxHo4q-K", "Complete DNS mini-series" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/100-internet/104-what-is-domain-name.md b/src/roadmaps/backend/content/100-internet/104-what-is-domain-name.md new file mode 100644 index 000000000..7b217a65b --- /dev/null +++ b/src/roadmaps/backend/content/100-internet/104-what-is-domain-name.md @@ -0,0 +1,9 @@ +# Domain Name + +A domain name is a unique, easy-to-remember address used to access websites, such as ‘google.com’, and ‘facebook.com’. Users can connect to websites using domain names thanks to the DNS system. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_domain_name", "What is a Domain Name?" %} + {% Blog "https://www.cloudflare.com/en-gb/learning/dns/glossary/what-is-a-domain-name/", "What is a Domain Name? | Domain name vs. URL" %} + {% Blog "https://www.youtube.com/watch?v=Y4cRx19nhJk", "A Beginners Guide to How Domain Names Work" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/100-internet/105-what-is-hosting.md b/src/roadmaps/backend/content/100-internet/105-what-is-hosting.md new file mode 100644 index 000000000..f2b3d37aa --- /dev/null +++ b/src/roadmaps/backend/content/100-internet/105-what-is-hosting.md @@ -0,0 +1,9 @@ +# Hosting + +Web hosting is an online service that allows you to publish your website files onto the internet. So, anyone who has access to the internet has access to your website. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=htbY9-yggB0", "What Is Web Hosting? Explained" %} + {% Blog "https://www.youtube.com/watch?v=AXVZYzw8geg", "Different Types of Web Hosting Explained" %} + {% Blog "https://www.youtube.com/watch?v=Kx_1NYYJS7Q", "Where to Host a Fullstack Project on a Budget" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/100-internet/index.md b/src/roadmaps/backend/content/100-internet/index.md new file mode 100644 index 000000000..a17347723 --- /dev/null +++ b/src/roadmaps/backend/content/100-internet/index.md @@ -0,0 +1,11 @@ +# Internet + +The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols. + +{% resources %} + {% Blog "https://www.vox.com/2014/6/16/18076282/the-internet", "The Internet Explained" %} + {% Blog "http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm", "How Does the Internet Work?" %} + {% Blog "/guides/what-is-internet", "Introduction to Internet" %} + {% Blog "https://www.youtube.com/watch?v=x3c1ih2NJEg", "How does the Internet work?" %} + {% Blog "https://www.youtube.com/watch?v=7_LPdttKXPc", "How the Internet Works in 5 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/101-basic-frontend/100-html.md b/src/roadmaps/backend/content/101-basic-frontend/100-html.md new file mode 100644 index 000000000..a064a7088 --- /dev/null +++ b/src/roadmaps/backend/content/101-basic-frontend/100-html.md @@ -0,0 +1,11 @@ +# HTML + +HTML stands for HyperText Markup Language. It is used on the frontend and gives the structure to the webpage which you can style using CSS and make interactive using JavaScript. + +{% resources %} + {% Blog "https://www.w3schools.com/html/html_intro.asp", "W3Schools: Learn HTML" %} + {% Course "https://www.codecademy.com/learn/learn-html", "Codecademy - Learn HTML" %} + {% Course "https://github.com/denysdovhan/learnyouhtml", "Interactive HTML Course" %} + {% Blog "https://www.youtube.com/watch?v=pQN-pnXPaVg", "HTML Full Course - Build a Website Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=qz0aGYrrlhU", "HTML Tutorial for Beginners: HTML Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/101-basic-frontend/101-css.md b/src/roadmaps/backend/content/101-basic-frontend/101-css.md new file mode 100644 index 000000000..9f1409ca0 --- /dev/null +++ b/src/roadmaps/backend/content/101-basic-frontend/101-css.md @@ -0,0 +1,16 @@ +# CSS + +CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript. + +{% resources %} + {% Blog "https://www.w3schools.com/css/", "W3Schools — Learn CSS" %} + {% Blog "https://www.freecodecamp.org/learn/2022/responsive-web-design", "freeCodeCamp — Responsive Web Design" %} + {% Blog "https://learn.shayhowe.com/html-css/building-your-first-web-page/", "Learn to Code HTML & CSS" %} + {% Course "https://flexbox.io/", "What The Flexbox!" %} + {% Course "https://www.codecademy.com/learn/learn-css", "Learn CSS | Codecademy" %} + {% Course "https://www.codecademy.com/learn/learn-intermediate-css", "Learn Intermediate CSS | Codecademy" %} + {% Blog "https://www.youtube.com/watch?v=yfoY53QXEnI", "CSS Crash Course For Absolute Beginners" %} + {% Blog "https://www.youtube.com/watch?v=D-h8L5hgW-w", "HTML and CSS Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=FqmB-Zj2-PA", "CSS Masterclass - Tutorial & Course for Beginners" %} +{% endresources %} + diff --git a/src/roadmaps/backend/content/101-basic-frontend/102-javascript.md b/src/roadmaps/backend/content/101-basic-frontend/102-javascript.md new file mode 100644 index 000000000..377690453 --- /dev/null +++ b/src/roadmaps/backend/content/101-basic-frontend/102-javascript.md @@ -0,0 +1,13 @@ +{% Roadmap "/javascript", "JavaScript" %} + +# JavaScript + +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. + +{% resources %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} + {% Blog "https://javascript.info/", "The Modern JavaScript Tutorial" %} + {% Blog "https://exploringjs.com/", "Exploring JS: JavaScript books for programmers" %} + {% Blog "https://youtu.be/hdI2bqOjy3c?t=2", "JavaScript Crash Course for Beginners" %} + {% Blog "https://youtu.be/P7t13SGytRk?t=22", "Build a Netflix Landing Page Clone with HTML, CSS & JS" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/101-basic-frontend/index.md b/src/roadmaps/backend/content/101-basic-frontend/index.md new file mode 100644 index 000000000..f8907d763 --- /dev/null +++ b/src/roadmaps/backend/content/101-basic-frontend/index.md @@ -0,0 +1,10 @@ +# Basic Frontend Knowledge + +As a backend developer, you may not need to have proficient knowledge of the frontend stack but you should at least have some basic understanding of HTML, CSS and JavaScript. + +{% resources %} + {% Blog "https://www.w3schools.com/html/html_intro.asp", "W3Schools: Learn HTML" %} + {% Blog "https://www.w3schools.com/css/", "W3Schools: Learn CSS" %} + {% Blog "https://www.w3schools.com/js/", "W3Schools: JavaScript Tutorial" %} + {% Blog "https://thenewstack.io/category/frontend-dev/", "Articles about Frontend Development" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/100-terminal-usage.md b/src/roadmaps/backend/content/102-os-general-knowledge/100-terminal-usage.md new file mode 100644 index 000000000..9b8adf819 --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/100-terminal-usage.md @@ -0,0 +1,8 @@ +# Terminal usage + +Terminals, also known as command lines or consoles, allow us to accomplish and automate tasks on a computer without the use of a graphical user interface. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line", "Command line crash course" %} + {% Blog "https://www.youtube.com/watch?v=jDINUSK7rXE", "Basic Terminal Usage - Cheat Sheet to make the command line EASY" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/101-how-oss-work-in-general.md b/src/roadmaps/backend/content/102-os-general-knowledge/101-how-oss-work-in-general.md new file mode 100644 index 000000000..5d590f5e8 --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/101-how-oss-work-in-general.md @@ -0,0 +1,10 @@ +# Operating Systems + +An operating system is a main program on computer, that governs all other applications. It allows you to use browsers, play games, print documents, launch your favorite program. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/operating_system/os_overview.htm", "Operating System - Overview" %} + {% Blog "https://infinite.education/view/how_oss_work_in_general", "How OSs work in general" %} + {% Blog "https://codex.cs.yale.edu/avi/os-book/OS10/index.html", "Operating System Concepts" %} + {% Blog "https://www.youtube.com/watch?v=9GDX-IyZ_C8", "Operating System Basics " %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/102-process-management.md b/src/roadmaps/backend/content/102-os-general-knowledge/102-process-management.md new file mode 100644 index 000000000..ddf829111 --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/102-process-management.md @@ -0,0 +1,8 @@ +# Process Management + +Process management involves various tasks like creation, scheduling, termination of processes, and a deadlock. Process is a program that is under execution, which is an important part of modern-day operating systems. The OS must allocate resources that enable processes to share and exchange information. It also protects the resources of each process from other methods and allows synchronization among processes. + +{% resources %} + {% Blog "https://medium.com/@akhandmishra/operating-system-process-and-process-management-108d83e8ce60", "Operating System: Process and Process Management" %} + {% Blog "https://www.guru99.com/process-management-pcb.html", "Process Management in OS: PCB in Operating System" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/103-threads-and-concurrency.md b/src/roadmaps/backend/content/102-os-general-knowledge/103-threads-and-concurrency.md new file mode 100644 index 000000000..9bb9e9f5b --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/103-threads-and-concurrency.md @@ -0,0 +1,13 @@ +# Threads and Concurrency + +A thread is the smallest unit of processing that can be performed in an OS. In most modern operating systems, a thread exists within a process - that is, a single process may contain multiple threads. + +Concurrency refers to the execution of multiple threads at the same time. It occurs in an operating system when multiple process threads are executing concurrently. These threads can interact with one another via shared memory or message passing. Concurrency results in resource sharing, which causes issues like deadlocks and resource scarcity. It aids with techniques such as process coordination, memory allocation, and execution schedule to maximize throughput. + +{% resources %} + {% Blog "https://www.backblaze.com/blog/whats-the-diff-programs-processes-and-threads/", "What’s the Diff: Programs, Processes and Threads" %} + {% Blog "https://www.javatpoint.com/concurrency-in-operating-system", "Concurrency in Operating System" %} + {% Blog "https://www.youtube.com/watch?v=exbKr6fnoUw", "Intro to Processes & Threads" %} + {% Blog "https://www.youtube.com/watch?v=iKtvNJQoCNw", "Introduction to Concurrency" %} + {% Blog "https://www.youtube.com/watch?v=olYdb0DdGtM", "Concurrency, Threading and Parallelism Explained" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/104-basic-terminal-commands.md b/src/roadmaps/backend/content/102-os-general-knowledge/104-basic-terminal-commands.md new file mode 100644 index 000000000..acb43be3f --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/104-basic-terminal-commands.md @@ -0,0 +1,17 @@ +# Basic Terminal Commands + +Working within the terminal is common practice for any Backend Developer and there are many commands and utilities that can help you achieve your tasks more efficiently. + +The best way to learn these commands is to practice them in your own machine/environment. Specifically, these are related to Linux commands/utilities which are the most prevalent in the market. + +To understand these commands, read through the manual pages by using `man` command e.g. `man grep`, `man awk` etc. + +After enough exposure and practice to these commands, it will become easier to use these in practice + +{% resources %} + {% Blog "https://www.hostinger.com/tutorials/linux-commands", "40 Basic Linux Commands" %} + {% Blog "https://github.com/ibraheemdev/modern-unix", "A collection of modern/faster/saner alternatives to common unix commands" %} + {% Course "https://www.learnenough.com/command-line-tutorial", "Command Line Tutorial" %} + {% Blog "https://cmdchallenge.com/", "Commandline Challenge" %} + {% Blog "https://www.youtube.com/watch?v=ZtqBQ68cfJc", "The 50 Most Popular Linux & Terminal Commands (with timestamps)" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/105-memory-management.md b/src/roadmaps/backend/content/102-os-general-knowledge/105-memory-management.md new file mode 100644 index 000000000..ba40dcc9a --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/105-memory-management.md @@ -0,0 +1,10 @@ +# Memory Management + +The term Memory can be defined as a collection of data in a specific format. It is used to store instructions and process data. The memory comprises a large array or group of words or bytes, each with its own location. The primary motive of a computer system is to execute programs. These programs, along with the information they access, should be in the main memory during execution. The CPU fetches instructions from memory according to the value of the program counter. + +To achieve a degree of multiprogramming and proper utilization of memory, memory management is important. There are several memory management methods, reflecting various approaches, and the effectiveness of each algorithm depends on the situation. + +{% resources %} + {% Blog "https://dev.to/deepu105/demystifying-memory-management-in-modern-programming-languages-ddd", "Demystifying memory management in modern programming languages" %} + {% Blog "https://www.geeksforgeeks.org/memory-management-in-operating-system/", "Memory Management in Operating System" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/106-interprocess-communication.md b/src/roadmaps/backend/content/102-os-general-knowledge/106-interprocess-communication.md new file mode 100644 index 000000000..ce2e8c264 --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/106-interprocess-communication.md @@ -0,0 +1,8 @@ +# Interprocess Communication + +Interprocess communication (IPC) refers specifically to the mechanisms an operating system provides to allow the processes to manage shared data + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/inter-process-communication-ipc/", "Interprocess Communication" %} + {% Blog "https://www.youtube.com/watch?v=dJuYKfR8vec", "Interprocess Communication - Neso Academy" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/107-io-management.md b/src/roadmaps/backend/content/102-os-general-knowledge/107-io-management.md new file mode 100644 index 000000000..4a732b63f --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/107-io-management.md @@ -0,0 +1,9 @@ +# I/O Management + +One of the important jobs of an Operating System is to manage various I/O devices including mouse, keyboards, touchpad, disk drives, display adapters, USB devices, Bit-mapped screens, LED, Analog-to-digital converter, On/off switch, network connections, audio I/O, printers, etc. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/operating_system/os_io_hardware.htm", "Operating System - I/O Hardware" %} + {% Blog "https://www.omscs-notes.com/operating-systems/io-management/", "IO Management" %} + {% Blog "https://www.youtube.com/watch?v=F18RiREDkwE", "Basics of OS (I/O Structure)" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/108-posix-basics.md b/src/roadmaps/backend/content/102-os-general-knowledge/108-posix-basics.md new file mode 100644 index 000000000..a173a8af5 --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/108-posix-basics.md @@ -0,0 +1,15 @@ +# POSIX Basics + +POSIX (Portable Operating System Interface) is a family of standards for maintaining compatibility between operating systems. It describes utilities, APIs, and services that a compliant OS should provide to software, thus making it easier to port programs from one system to another. + +A practical example: in a Unix-like operating system, there are three *standard streams*, `stdin`, `stdout` and `stderr` - they are I/O connections that you will probably come across when using a terminal, as they manage the flow from the **standard input** (stdin), **standard output** (stdout) and **standard error** (stderr). + +So, in this case, when we want to interact with any of these streams (through a process, for example), the POSIX operating system API makes it easier - for example, in the `` C header where the stdin, stderr, and stdout are defined as `STDIN_FILENO`, `STDERR_FILENO` and `STDOUT_FILENO`. + +POSIX also adds a standard for exit codes, filesystem semantics, and several other command line utility API conventions. + +{% resources %} + {% Official "https://pubs.opengroup.org/onlinepubs/9699919799/", "POSIX standard by IEEE" %} + {% Blog "https://unix.stackexchange.com/a/220877", "Summary of some POSIX implementations" %} + {% Blog "https://www.baeldung.com/linux/posix", "A guide to POSIX" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/109-basic-networking-concepts.md b/src/roadmaps/backend/content/102-os-general-knowledge/109-basic-networking-concepts.md new file mode 100644 index 000000000..5c6810c2d --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/109-basic-networking-concepts.md @@ -0,0 +1,7 @@ +# Basic Networking Concepts + +Computer networking refers to interconnected computing devices that can exchange data and share resources with each other. These networked devices use a system of rules, called communications protocols, to transmit information over physical or wireless technologies. + +{% resources %} + {% Blog "https://aws.amazon.com/what-is/computer-networking/", "What is Computer Networking?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/102-os-general-knowledge/index.md b/src/roadmaps/backend/content/102-os-general-knowledge/index.md new file mode 100644 index 000000000..dc0a66c63 --- /dev/null +++ b/src/roadmaps/backend/content/102-os-general-knowledge/index.md @@ -0,0 +1,9 @@ +# General Knowledge + +Operating System is a program that manages a computer’s resources, especially the allocation of those resources among other programs. Typical resources include the central processing unit (CPU), computer memory, file storage, input/output (I/O) devices, and network connections. + +{% resources %} + {% Blog "https://edu.gcfglobal.org/en/computerbasics/understanding-operating-systems/1/", "What is an operating system?" %} + {% Blog "https://www.youtube.com/watch?v=26QPDBe-NB8&ab_channel=CrashCourse", "Operating Systems: Crash Course Computer Science #18" %} + {% Blog "https://www.youtube.com/watch?v=vBURTt97EkA&list=PL9hkZBQk8d1zEGbY7ShWCZ2n1gtxqkRrS&index=1", "Introduction to Operating System" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/103-learn-a-language/100-go.md b/src/roadmaps/backend/content/103-learn-a-language/100-go.md new file mode 100644 index 000000000..d8efe85a5 --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/100-go.md @@ -0,0 +1,16 @@ +{% Roadmap "/golang", "Go" %} + + +# Go + +Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more. + +{% resources %} + {% Blog "https://go.dev/tour/welcome/1", "A Tour of Go – Go Basics" %} + {% Blog "https://go.dev/doc/", "Go Reference Documentation" %} + {% Blog "https://gobyexample.com/", "Go by Example - annotated example programs" %} + {% Course "https://www.codecademy.com/learn/learn-go", "Learn Go | Codecademy" %} + {% Course "https://www.w3schools.com/go/", "W3Schools Go Tutorial " %} + {% Blog "https://thenewstack.io/make-a-restful-json-api-go/", "Making a RESTful JSON API in Go" %} + {% Blog "https://thenewstack.io/go-the-programming-language-of-the-cloud/", "Go, the Programming Language of the Cloud" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/101-rust.md b/src/roadmaps/backend/content/103-learn-a-language/101-rust.md new file mode 100644 index 000000000..b3601aab6 --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/101-rust.md @@ -0,0 +1,10 @@ +# Rust + +Rust is a modern systems programming language focusing on safety, speed, and concurrency. It accomplishes these goals by being memory safe without using garbage collection. + +{% resources %} + {% Blog "https://doc.rust-lang.org/book/", "The Rust Programming Language - online book" %} + {% Blog "https://doc.rust-lang.org/stable/rust-by-example/index.html", "Rust by Example - collection of runnable examples" %} + {% Blog "https://thenewstack.io/rust-vs-go-why-theyre-better-together/", "Rust vs. Go: Why They’re Better Together" %} + {% Blog "https://thenewstack.io/rust-by-the-numbers-the-rust-programming-language-in-2021/", "Rust by the Numbers: The Rust Programming Language in 2021" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/102-java.md b/src/roadmaps/backend/content/103-learn-a-language/102-java.md new file mode 100644 index 000000000..7eaa324c0 --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/102-java.md @@ -0,0 +1,13 @@ +{% Roadmap "/java", "Java" %} + +# Java + +Java is general-purpose language, primarily used for Internet-based applications. +It was created in 1995 by James Gosling at Sun Microsystems and is one of the most popular options for backend developers. + +{% resources %} + {% Official "https://www.java.com/", "Java Website" %} + {% Blog "https://www.codecademy.com/learn/learn-java", "Codeacademy - Free Course" %} + {% Blog "https://www.w3schools.com/java/", "W3 Schools Tutorials" %} + {% Blog "https://www.youtube.com/watch?v=eIrMbAQSU34", "Java Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/103-csharp.md b/src/roadmaps/backend/content/103-learn-a-language/103-csharp.md new file mode 100644 index 000000000..d9d866c3c --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/103-csharp.md @@ -0,0 +1,9 @@ +# Csharp +C# (pronounced "C sharp") is a general purpose programming language made by Microsoft. It is used to perform different tasks and can be used to create web apps, games, mobile apps, etc. + +{% resources %} + {% Blog "https://docs.microsoft.com/en-us/learn/paths/csharp-first-steps/?WT.mc_id=dotnet-35129-website", "C# Learning Path" %} + {% Blog "https://www.w3schools.com/cs/index.php", "C# on W3 schools" %} + {% Blog "https://docs.microsoft.com/en-us/shows/CSharp-101/?WT.mc_id=Educationalcsharp-c9-scottha", "Introduction to C#" %} + {% Blog "https://www.youtube.com/watch?v=gfkTfcpWqAY&list=PLTjRvDozrdlz3_FPXwb6lX_HoGXa09Yef", "C# tutorials" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/103-php.md b/src/roadmaps/backend/content/103-learn-a-language/103-php.md new file mode 100644 index 000000000..5f7de416d --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/103-php.md @@ -0,0 +1,12 @@ +# PHP + +PHP is a general purpose scripting language often used for making dynamic and interactive Web pages. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1994. The PHP reference implementation is now produced by The PHP Group and supported by PHP Foundation. PHP supports procedural and object-oriented styles of programming with some elements of functional programming as well. + +{% resources %} + {% Official "https://php.org/", "PHP Website" %} + {% Blog "https://www.w3schools.com/php/", "Learn PHP - W3Schools" %} + {% Blog "https://phptherightway.com/", "PHP - The Right Way" %} + {% Blog "https://www.youtube.com/watch?v=U2lQWR6uIuo&list=PL3VM-unCzF8ipG50KDjnzhugceoSG3RTC", "PHP for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=2eebptXfEvw", "PHP For Absolute Beginners" %} + {% Blog "https://www.youtube.com/watch?v=sVbEyFZKgqk&list=PLr3d3QYzkw2xabQRUpcZ_IBk9W50M9pe-", "Full PHP 8 Tutorial - Learn PHP The Right Way In 2022" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/105-javascript.md b/src/roadmaps/backend/content/103-learn-a-language/105-javascript.md new file mode 100644 index 000000000..31b0dc93b --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/105-javascript.md @@ -0,0 +1,17 @@ +{% Roadmap "/javascript", "JavaScript" %} + +# JavaScript + +JavaScript, often abbreviated JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. It lets us add interactivity to pages e.g. you might have seen sliders, alerts, click interactions, and popups etc on different websites -- all of that is built using JavaScript. Apart from being used in the browser, it is also used in other non-browser environments as well such as Node.js for writing server-side code in JavaScript, Electron for writing desktop applications, React Native for mobile applications and so on. + + +{% resources %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} + {% Blog "https://javascript.info/", "The Modern JavaScript Tutorial" %} + {% Blog "https://eloquentjavascript.net/", "Eloquent Javascript - Book" %} + {% Blog "https://github.com/getify/You-Dont-Know-JS", "You Dont Know JS Yet (book series) " %} + {% Course "https://www.codecademy.com/learn/introduction-to-javascript", "Codecademy - Learn JavaScript" %} + {% Blog "https://youtu.be/hdI2bqOjy3c", "JavaScript Crash Course for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=fBNz5xF-Kx4", "Node.js Crash Course" %} + {% Blog "https://www.youtube.com/watch?v=TlB_eWDSMt4", "Node.js Tutorial for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/106-python.md b/src/roadmaps/backend/content/103-learn-a-language/106-python.md new file mode 100644 index 000000000..1d4d8a591 --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/106-python.md @@ -0,0 +1,18 @@ +{% Roadmap "/python", "Python" %} + +# Python + +Python is a well known programming language which is both a strongly typed and a dynamically typed language. Being an interpreted language, code is executed as soon as it is written and the Python syntax allows for writing code in functional, procedural or object-oriented programmatic ways. + +{% resources %} + {% Official "https://www.python.org/", "Python Website" %} + {% Blog "https://www.python.org/about/gettingstarted/", "Python Getting Started" %} + {% Blog "https://automatetheboringstuff.com/", "Automate the Boring Stuff" %} + {% Blog "https://www.freecodecamp.org/news/how-to-learn-python/", "FreeCodeCamp.org - How to Learn Python ? " %} + {% Course "https://pythonprinciples.com/", "Python principles - Python basics" %} + {% Course "https://www.w3schools.com/python/", "W3Schools - Python Tutorial " %} + {% Course "https://ehmatthes.github.io/pcc/", "Python Crash Course" %} + {% Course "https://www.codecademy.com/learn/learn-python", "Codecademy - Learn Python 2" %} + {% Blog "https://thenewstack.io/an-introduction-to-python-for-non-programmers/", "An Introduction to Python for Non-Programmers" %} + {% Blog "https://thenewstack.io/getting-started-with-python-and-influxdb/", "Getting Started with Python and InfluxDB" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/107-ruby.md b/src/roadmaps/backend/content/103-learn-a-language/107-ruby.md new file mode 100644 index 000000000..7749396a7 --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/107-ruby.md @@ -0,0 +1,10 @@ +# Ruby + +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. + +{% resources %} + {% Official "https://www.ruby-lang.org/en/", "Ruby Website" %} + {% Course "https://www.ruby-lang.org/en/documentation/quickstart/", "Learn Ruby in 20 minutes" %} + {% Course "https://www.codecademy.com/learn/learn-ruby", "Learn Ruby | Codecademy" %} + {% Blog "https://thenewstack.io/ruby-a-programmers-best-friend/", "Ruby, An Introduction to a Programmer’s Best Friend" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/108-cpp.md b/src/roadmaps/backend/content/103-learn-a-language/108-cpp.md new file mode 100644 index 000000000..cc04816f8 --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/108-cpp.md @@ -0,0 +1,8 @@ +# C++ + +C++ is a powerful general-purpose programming language. It can be used to develop operating systems, browsers, games, and so on. C++ supports different ways of programming like procedural, object-oriented, functional, and so on. This makes C++ powerful as well as flexible. + +{% resources %} + {% Blog "https://learncpp.com/", "Learn Cpp" %} + {% Blog "https://en.cppreference.com/", "C++ Reference" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/103-learn-a-language/index.md b/src/roadmaps/backend/content/103-learn-a-language/index.md new file mode 100644 index 000000000..1cb5648a8 --- /dev/null +++ b/src/roadmaps/backend/content/103-learn-a-language/index.md @@ -0,0 +1,5 @@ +# Learn a Language + +Even if you’re a beginner the least you would have known is that Web Development is majorly classified into two facets: Frontend Development and Backend Development. And obviously, they both have their respective set of tools and technologies. For instance, when we talk about Frontend Development, there always comes 3 names first and foremost – HTML, CSS, and JavaScript. + +In the same way, when it comes to Backend Web Development – we primarily require a backend (or you can say server-side) programming language to make the website function along with various other tools & technologies such as databases, frameworks, web servers, etc. diff --git a/src/roadmaps/backend/content/104-version-control-systems/100-basic-usage-of-git.md b/src/roadmaps/backend/content/104-version-control-systems/100-basic-usage-of-git.md new file mode 100644 index 000000000..959018824 --- /dev/null +++ b/src/roadmaps/backend/content/104-version-control-systems/100-basic-usage-of-git.md @@ -0,0 +1,10 @@ +# Git + +[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. + +{% resources %} + {% Course "https://github.com/jlord/git-it-electron", "Learn Git on the command line" %} + {% Blog "https://www.youtube.com/watch?v=zbKdDsNNOhg", "Version Control System Introduction" %} + {% Blog "https://www.youtube.com/watch?v=SWYqp7iY_Tc", "Git & GitHub Crash Course For Beginners" %} + {% Blog "https://youtu.be/Y9XZQO1n_7c?t=21", "Learn Git in 20 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/104-version-control-systems/index.md b/src/roadmaps/backend/content/104-version-control-systems/index.md new file mode 100644 index 000000000..3ad3c5ce4 --- /dev/null +++ b/src/roadmaps/backend/content/104-version-control-systems/index.md @@ -0,0 +1,10 @@ +# Version Control Systems + +Version control/source control systems allow developers to track and control changes to code over time. These services often include the ability to make atomic revisions to code, branch/fork off of specific points, and to compare versions of code. They are useful in determining the who, what, when, and why code changes were made. + + +{% resources %} + {% Official "https://git-scm.com/", "Git" %} + {% Blog "https://www.mercurial-scm.org/", "Mercurial" %} + {% Blog "https://www.atlassian.com/git/tutorials/what-is-version-control", "What is Version Control?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/105-repo-hosting-services/100-github.md b/src/roadmaps/backend/content/105-repo-hosting-services/100-github.md new file mode 100644 index 000000000..202fc81ad --- /dev/null +++ b/src/roadmaps/backend/content/105-repo-hosting-services/100-github.md @@ -0,0 +1,13 @@ +# GitHub + +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. + +{% resources %} + {% Official "https://github.com", "GitHub Website" %} + {% Official "https://docs.github.com/en/get-started/quickstart", "GitHub Documentation" %} + {% Course "https://ooloo.io/project/github-flow", "How to Use Git in a Professional Dev Team" %} + {% Blog "https://www.youtube.com/watch?v=w3jLJU7DT5E", "What is GitHub?" %} + {% Blog "https://www.youtube.com/watch?v=wpISo9TNjfU", "Git vs. GitHub: Whats the difference?" %} + {% Blog "https://www.youtube.com/watch?v=RGOj5yH7evk", "Git and GitHub for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=eulnSXkhE7I", "Git and GitHub - CS50 Beyond 2019" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/105-repo-hosting-services/101-gitlab.md b/src/roadmaps/backend/content/105-repo-hosting-services/101-gitlab.md new file mode 100644 index 000000000..a3bc43043 --- /dev/null +++ b/src/roadmaps/backend/content/105-repo-hosting-services/101-gitlab.md @@ -0,0 +1,8 @@ +# GitLab + +GitLab 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. + +{% resources %} + {% Official "https://gitlab.com/", "GitLab Website" %} + {% Official "https://docs.gitlab.com/", "GitLab Documentation" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/105-repo-hosting-services/102-bitbucket.md b/src/roadmaps/backend/content/105-repo-hosting-services/102-bitbucket.md new file mode 100644 index 000000000..38c75600c --- /dev/null +++ b/src/roadmaps/backend/content/105-repo-hosting-services/102-bitbucket.md @@ -0,0 +1,14 @@ +# Bitbucket + +Bitbucket is a Git based hosting and source code repository service that is Atlassian's alternative to other products like GitHub, GitLab etc + +Bitbucket offers hosting options via Bitbucket Cloud (Atlassian's servers), Bitbucket Server (customer's on-premise) or Bitbucket Data Centre (number of servers in customers on-premise or cloud environment) + +{% resources %} + {% Official "https://bitbucket.org/product", "Bitbucket Website" %} + {% Course "https://bitbucket.org/product/guides/basics/bitbucket-interface", "Getting started with Bitbucket" %} + {% Course "https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud", "Using Git with Bitbucket Cloud" %} + {% Blog "https://bitbucket.org/product/guides/getting-started/overview#a-brief-overview-of-bitbucket", "A brief overview of Bitbucket" %} + {% Blog "https://www.youtube.com/watch?v=M44nEyd_5To", "Bitbucket tutorial | How to use Bitbucket Cloud" %} + {% Blog "https://www.youtube.com/watch?v=i5T-DB8tb4A", "Bitbucket Tutorial | Bitbucket for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/105-repo-hosting-services/index.md b/src/roadmaps/backend/content/105-repo-hosting-services/index.md new file mode 100644 index 000000000..9aa94ded6 --- /dev/null +++ b/src/roadmaps/backend/content/105-repo-hosting-services/index.md @@ -0,0 +1,10 @@ +# Repo Hosting Services + +When working on a team, you often need a remote place to put your code so others can access it, create their own branches, and create or review pull requests. These services often include issue tracking, code review, and continuous integration features. A few popular choices are GitHub, GitLab, BitBucket, and AWS CodeCommit. + +{% resources %} + {% Official "https://github.com/features/", "GitHub" %} + {% Official "https://about.gitlab.com/", "GitLab" %} + {% Official "https://bitbucket.org/product/guides/getting-started/overview", "BitBucket" %} + {% Blog "https://bitbucket.org/product/code-repository", "How to choose the best source code repository" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/106-relational-databases/100-postgresql.md b/src/roadmaps/backend/content/106-relational-databases/100-postgresql.md new file mode 100644 index 000000000..64ead2d71 --- /dev/null +++ b/src/roadmaps/backend/content/106-relational-databases/100-postgresql.md @@ -0,0 +1,13 @@ +{% Roadmap "/postgresql-dba", "PostgreSQL DBA" %} + +# PostgreSQL + +PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance. + +{% resources %} + {% Official "https://www.postgresql.org/", "Official Website" %} + {% Blog "https://www.geeksforgeeks.org/what-is-postgresql-introduction/", "What is PostgreSQL" %} + {% Blog "https://www.postgresqltutorial.com/", "Learn PostgreSQL - Full Tutorial for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=qw--VYLpxG4", "Learn PostgreSQL Tutorial - Full Course for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=eMIxuk0nOkU", "Postgres tutorial for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/106-relational-databases/101-mysql.md b/src/roadmaps/backend/content/106-relational-databases/101-mysql.md new file mode 100644 index 000000000..857c20f25 --- /dev/null +++ b/src/roadmaps/backend/content/106-relational-databases/101-mysql.md @@ -0,0 +1,9 @@ +# MySQL + +MySQL is an incredibly popular open source relational database management system (RDBMS). MySQL can be used as a stand-alone client or in conjunction with other services to provide database connectivity. The **M** in LAMP stack stands for MySQL; that alone should provide an idea of its prevalence. + +{% resources %} + {% Official "https://www.mysql.com/", "MySQL website" %} + {% Course "https://www.w3schools.com/mySQl/default.asp", "W3Schools - MySQL tutorial " %} + {% Blog "https://www.youtube.com/watch?v=7S_tz1z_5bA", "MySQL tutorial for beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/106-relational-databases/102-mariadb.md b/src/roadmaps/backend/content/106-relational-databases/102-mariadb.md new file mode 100644 index 000000000..3ab6a26fd --- /dev/null +++ b/src/roadmaps/backend/content/106-relational-databases/102-mariadb.md @@ -0,0 +1,10 @@ +# MariaDB + +MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry. MariaDB was created with the intention of being a more versatile, drop-in replacement version of MySQL + +{% resources %} + {% Official "https://mariadb.org/", "MariaDB website" %} + {% Blog "https://www.guru99.com/mariadb-vs-mysql.html", "MariaDB vs MySQL" %} + {% Course "https://www.w3schools.blog/mariadb-tutorial", "W3Schools - MariaDB tutorial " %} + {% Blog "https://www.youtube.com/watch?v=_AMj02sANpI", "MariaDB Tutorial For Beginners in One Hour" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/106-relational-databases/103-mssql.md b/src/roadmaps/backend/content/106-relational-databases/103-mssql.md new file mode 100644 index 000000000..ea35e9208 --- /dev/null +++ b/src/roadmaps/backend/content/106-relational-databases/103-mssql.md @@ -0,0 +1,9 @@ +# MS SQL + +MS SQL (or Microsoft SQL Server) is the Microsoft developed relational database management system (RDBMS). MS SQL uses the T-SQL (Transact-SQL) query language to interact with the relational databases. There are many different versions and editions available of MS SQL + +{% resources %} + {% Official "https://www.microsoft.com/en-ca/sql-server/", "MS SQL website" %} + {% Course "https://docs.microsoft.com/en-us/sql/sql-server/tutorials-for-sql-server-2016?view=sql-server-ver15", "Tutorials for SQL Server" %} + {% Blog "https://www.youtube.com/watch?v=-EPMOaV7h_Q", "SQL Server tutorial for beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/106-relational-databases/104-oracle.md b/src/roadmaps/backend/content/106-relational-databases/104-oracle.md new file mode 100644 index 000000000..9aa3f648e --- /dev/null +++ b/src/roadmaps/backend/content/106-relational-databases/104-oracle.md @@ -0,0 +1,9 @@ +# Oracle + +Oracle Database Server or sometimes called Oracle RDBMS or even simply Oracle is a world leading relational database management system produced by Oracle Corporation. + +{% resources %} + {% Official "https://www.oracle.com/database/", "Official Website" %} + {% Blog "https://docs.oracle.com/en/database/index.html", "Official Docs" %} + {% Blog "https://www.youtube.com/watch?v=ObbNGhcxXJA", "Oracle SQL Tutorial for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/106-relational-databases/index.md b/src/roadmaps/backend/content/106-relational-databases/index.md new file mode 100644 index 000000000..371cda5ab --- /dev/null +++ b/src/roadmaps/backend/content/106-relational-databases/index.md @@ -0,0 +1,11 @@ +# Relational Databases + +A relational database is **a type of database that stores and provides access to data points that are related to one another**. Relational databases store data in a series of tables. Interconnections between the tables are specified as foreign keys. A foreign key is a unique reference from one row in a relational table to another row in a table, which can be the same table but is most commonly a different table. + +{% resources %} + {% Blog "https://www.ibm.com/cloud/learn/relational-databases", "Relational Databases" %} + {% Blog "https://learnsql.com/blog/codd-article-databases/", "51 Years of Relational Databases" %} + {% Blog "https://www.edx.org/course/databases-5-sql", "Databases and SQL" %} + {% Blog "https://www.udacity.com/course/intro-to-relational-databases--ud197", "Intro To Relational Databases" %} + {% Blog "https://youtu.be/OqjJjpjDRLc", "What is Relational Database" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/107-nosql-databases/100-document-databases.md b/src/roadmaps/backend/content/107-nosql-databases/100-document-databases.md new file mode 100644 index 000000000..b8b1d0664 --- /dev/null +++ b/src/roadmaps/backend/content/107-nosql-databases/100-document-databases.md @@ -0,0 +1,14 @@ +# Document databases + +## MongoDB + +MongoDB is a source-available cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. MongoDB is developed by MongoDB Inc. and licensed under the Server Side Public License (SSPL). + +{% resources %} + {% Official "https://www.mongodb.com/", "MongoDB Website" %} + {% Official "https://docs.mongodb.com/", "MongoDB Documentation" %} + {% Blog "https://mongoplayground.net/", "MongoDB Online Sandbox" %} + {% Blog "https://university.mongodb.com/learning_paths/developer", "Learning Path for MongoDB Developers" %} + {% Official "https://docs.aws.amazon.com/dynamodb/index.html", "Dynamo DB Docs" %} + {% Blog "https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html", "Official Developers Guide" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/107-nosql-databases/101-column-databases.md b/src/roadmaps/backend/content/107-nosql-databases/101-column-databases.md new file mode 100644 index 000000000..3ec06e771 --- /dev/null +++ b/src/roadmaps/backend/content/107-nosql-databases/101-column-databases.md @@ -0,0 +1,10 @@ +# Column Databases + +A **wide-column database** (sometimes referred to as a column database) is similar to a relational database. It store data in tables, rows and columns. However in opposite to relational databases here each row can have its own format of the columns. Column databases can be seen as a two-dimensional key-value database. One of such database system is **Apache Cassandra**. + +**Warning:** note that a "columnar database" and a "column database" are two different terms! + +{% resources %} + {% Official "https://cassandra.apache.org/_/index.html", "Apache Cassandra" %} + {% Blog "https://www.youtube.com/watch?v=J-cSy5MeMOA", "Apache Cassandra Database - Full Course for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/107-nosql-databases/102-timeseries-databases.md b/src/roadmaps/backend/content/107-nosql-databases/102-timeseries-databases.md new file mode 100644 index 000000000..98bf0a67d --- /dev/null +++ b/src/roadmaps/backend/content/107-nosql-databases/102-timeseries-databases.md @@ -0,0 +1,10 @@ +# Timeseries databases + +## InfluxDB + +InfluxDB was built from the ground up to be a purpose-built time series database; i.e., it was not repurposed to be time series. Time was built-in from the beginning. InfluxDB is part of a comprehensive platform that supports the collection, storage, monitoring, visualization and alerting of time series data. It’s much more than just a time series database. + +{% resources %} + {% Official "https://www.influxdata.com/", "InfluxDB Website" %} + {% Blog "https://www.influxdata.com/time-series-database/", "Time series database" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/107-nosql-databases/103-realtime-databases.md b/src/roadmaps/backend/content/107-nosql-databases/103-realtime-databases.md new file mode 100644 index 000000000..45dffd394 --- /dev/null +++ b/src/roadmaps/backend/content/107-nosql-databases/103-realtime-databases.md @@ -0,0 +1,3 @@ +# Realtime databases + +A real-time database is broadly defined as a data store designed to collect, process, and/or enrich an incoming series of data points (i.e., a data stream) in real time, typically immediately after the data is created. diff --git a/src/roadmaps/backend/content/107-nosql-databases/index.md b/src/roadmaps/backend/content/107-nosql-databases/index.md new file mode 100644 index 000000000..b9822cb09 --- /dev/null +++ b/src/roadmaps/backend/content/107-nosql-databases/index.md @@ -0,0 +1,10 @@ +# NoSQL databases + +NoSQL databases offer data storage and retrieval that is modelled differently to "traditional" relational databases. NoSQL databases typically focus more on horizontal scaling, eventual consistency, speed and flexibility and is used commonly for big data and real-time streaming applications. +NoSQL is often described as a BASE system (**B**asically **A**vailable, **S**oft state, **E**ventual consistency) as opposed to SQL/relational which typically focus on ACID (Atomicity, Consistency, Isolation, Durability). Common NoSQL data structures include key-value pair, wide column, graph and document. + +{% resources %} + {% Blog "https://www.mongodb.com/nosql-explained", "NoSQL Explained" %} + {% Blog "https://www.youtube.com/watch?v=0buKQHokLK8", "How do NoSQL Databases work" %} + {% Blog "https://www.youtube.com/watch?v=ruz-vK8IesE", "SQL vs NoSQL Explained" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/100-orms.md b/src/roadmaps/backend/content/108-more-about-databases/100-orms.md new file mode 100644 index 000000000..00a55f231 --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/100-orms.md @@ -0,0 +1,8 @@ +# ORMs + +Object-Relational Mapping (ORM) is a technique that lets you query and manipulate data from a database using an object-oriented paradigm. When talking about ORM, most people are referring to a library that implements the Object-Relational Mapping technique, hence the phrase "an ORM". + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Object–relational_mapping", "Object Relational Mapping - Wikipedia" %} + {% Blog "https://stackoverflow.com/questions/1279613/what-is-an-orm-how-does-it-work-and-how-should-i-use-one", "What is an ORM and how should I use it?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/101-acid.md b/src/roadmaps/backend/content/108-more-about-databases/101-acid.md new file mode 100644 index 000000000..4ae8116ca --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/101-acid.md @@ -0,0 +1,9 @@ +# ACID + +ACID are the four properties of any database system that help in making sure that we are able to perform the transactions in a reliable manner. It's an acronym which refers to the presence of four properties: atomicity, consistency, isolation and durability + +{% resources %} + {% Blog "https://retool.com/blog/whats-an-acid-compliant-database/", "What is ACID Compliant Database?" %} + {% Blog "https://fauna.com/blog/what-is-acid-compliance-atomicity-consistency-isolation", "What is ACID Compliance?: Atomicity, Consistency, Isolation" %} + {% Blog "https://www.youtube.com/watch?v=yaQ5YMWkxq4", "ACID Explained: Atomic, Consistent, Isolated & Durable" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/102-transactions.md b/src/roadmaps/backend/content/108-more-about-databases/102-transactions.md new file mode 100644 index 000000000..093e68a4e --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/102-transactions.md @@ -0,0 +1,7 @@ +# Transactions + +In short, a database transaction is a sequence of multiple operations performed on a database, and all served as a single logical unit of work — taking place wholly or not at all. In other words, there's never a case where only half of the operations are performed and the results saved. + +{% resources %} + {% Blog "https://fauna.com/blog/database-transaction", "What are Transactions?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/103-n-plus-one-problem.md b/src/roadmaps/backend/content/108-more-about-databases/103-n-plus-one-problem.md new file mode 100644 index 000000000..0d0c5e418 --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/103-n-plus-one-problem.md @@ -0,0 +1,7 @@ +# N plus one problem + +The N+1 query problem happens when your code executes N additional query statements to fetch the same data that could have been retrieved when executing the primary query. + +{% resources %} + {% Blog "https://medium.com/doctolib/understanding-and-fixing-n-1-query-30623109fe89", "In Detail Explanation of N+1 Problem" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/104-database-normalization.md b/src/roadmaps/backend/content/108-more-about-databases/104-database-normalization.md new file mode 100644 index 000000000..1b5a8b9fd --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/104-database-normalization.md @@ -0,0 +1,11 @@ +# Database Normalization + +Database normalization is the process of structuring a relational database in accordance with a series of so-called normal forms in order to reduce data redundancy and improve data integrity. It was first proposed by Edgar F. Codd as part of his relational model. + +Normalization entails organizing the columns (attributes) and tables (relations) of a database to ensure that their dependencies are properly enforced by database integrity constraints. It is accomplished by applying some formal rules either by a process of synthesis (creating a new database design) or decomposition (improving an existing database design). + +{% resources %} + {% Blog "https://www.guru99.com/database-normalization.html", "What is Normalization in DBMS (SQL)? 1NF, 2NF, 3NF, BCNF Database with Example" %} + {% Blog "https://en.wikipedia.org/wiki/Database_normalization", "Database normalization" %} + {% Blog "https://www.youtube.com/watch?v=xoTyrdT9SZI", "Basic Concept of Database Normalization" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/108-more-about-databases/105-database-indexes.md b/src/roadmaps/backend/content/108-more-about-databases/105-database-indexes.md new file mode 100644 index 000000000..2b07898f1 --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/105-database-indexes.md @@ -0,0 +1,8 @@ +# Database Indexes + +An index is a data structure that you build and assign on top of an existing table that basically looks through your table and tries to analyze and summarize so that it can create shortcuts. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/database-indexing-at-a-glance-bb50809d48bd/", "An in-depth look at Database Indexing" %} + {% Blog "https://www.youtube.com/watch?v=-qNSXK7s7_w", "Database Indexing Explained" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/106-data-replication.md b/src/roadmaps/backend/content/108-more-about-databases/106-data-replication.md new file mode 100644 index 000000000..86059d179 --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/106-data-replication.md @@ -0,0 +1,7 @@ +# Data Replication + +Data replication is the process by which data residing on a physical/virtual server(s) or cloud instance (primary instance) is continuously replicated or copied to a secondary server(s) or cloud instance (standby instance). Organizations replicate data to support high availability, backup, and/or disaster recovery. + +{% resources %} + {% Blog "https://youtu.be/fUrKt-AQYtE", "What is Data Replication?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/107-sharding-strategies.md b/src/roadmaps/backend/content/108-more-about-databases/107-sharding-strategies.md new file mode 100644 index 000000000..e23bc16f0 --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/107-sharding-strategies.md @@ -0,0 +1,9 @@ +# Sharding strategies + +Sharding strategy is a technique to split a large dataset into smaller chunks (logical shard) in which we distribute these chunks in different machines/database nodes in order to distribute the traffic load. It’s a good mechanism to improve the scalability of an application. Many databases support sharding, but not all. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/database-sharding-a-system-design-concept/", "Database Sharding – System Design Interview Concept" %} + {% Blog "https://en.wikipedia.org/wiki/Shard_(database_architecture)", "Wikipedia - Sharding in Datbase Architectures" %} + {% Blog "https://stackoverflow.blog/2022/03/14/how-sharding-a-database-can-make-it-faster/", "How sharding a database can make it faster" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/108-cap-theorem.md b/src/roadmaps/backend/content/108-more-about-databases/108-cap-theorem.md new file mode 100644 index 000000000..5619a1a5f --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/108-cap-theorem.md @@ -0,0 +1,11 @@ +# CAP Theorem + +CAP is an acronym that stands for Consistency, Availability and Partition Tolerance. According to CAP theorem, any distributed system can only guarantee two of the three properties at any point of time. You can't guarantee all three properties at once. + +{% resources %} + {% Blog "https://www.bmc.com/blogs/cap-theorem/", "What is CAP Theorem?" %} + {% Blog "https://en.wikipedia.org/wiki/CAP_theorem", "CAP Theorem - Wikipedia" %} + {% Blog "https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/", "An Illustrated Proof of the CAP Theorem" %} + {% Blog "https://www.ibm.com/uk-en/cloud/learn/cap-theorem", "CAP Theorem and its applications in NoSQL Databases" %} + {% Blog "https://www.youtube.com/watch?v=_RbsFXWRZ10", "What is CAP Theorem?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/108-more-about-databases/index.md b/src/roadmaps/backend/content/108-more-about-databases/index.md new file mode 100644 index 000000000..313daa484 --- /dev/null +++ b/src/roadmaps/backend/content/108-more-about-databases/index.md @@ -0,0 +1,8 @@ +# Databases + +A database is a collection of useful data of one or more related organizations structured in a way to make data an asset to the organization. A database management system is a software designed to assist in maintaining and extracting large collections of data in a timely fashion. + +{% resources %} + {% Blog "https://www.oracle.com/database/what-is-database/", "Oracle: What is a Database?" %} + {% Blog "https://www.prisma.io/dataguide/intro/what-are-databases", "Prisma.io: What are Databases?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/100-rest.md b/src/roadmaps/backend/content/109-apis/100-rest.md new file mode 100644 index 000000000..b8d09f743 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/100-rest.md @@ -0,0 +1,10 @@ +# REST + +REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. + +{% resources %} + {% Blog "https://www.codecademy.com/article/what-is-rest", "What is REST?" %} + {% Blog "https://www.redhat.com/en/topics/api/what-is-a-rest-api", "What is a REST API?" %} + {% Blog "https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm", "Roy Fieldings dissertation chapter, Representational State Transfer (REST)" %} + {% Course "https://restapitutorial.com/", "Learn REST: A RESTful Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/109-apis/101-json-apis.md b/src/roadmaps/backend/content/109-apis/101-json-apis.md new file mode 100644 index 000000000..7eb0f7593 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/101-json-apis.md @@ -0,0 +1,9 @@ +# JSON APIs + +JSON or JavaScript Object Notation is an encoding scheme that is designed to eliminate the need for an ad-hoc code for each application to communicate with servers that communicate in a defined way. JSON API module exposes an implementation for data stores and data structures, such as entity types, bundles, and fields. + +{% resources %} + {% Official "https://jsonapi.org/", "Official Website" %} + {% Blog "https://jsonapi.org/implementations/", "Official Docs" %} + {% Blog "https://www.youtube.com/watch?v=N-4prIh7t38", "JSON API: Explained in 4 minutes " %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/102-soap.md b/src/roadmaps/backend/content/109-apis/102-soap.md new file mode 100644 index 000000000..8e5d9b5ba --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/102-soap.md @@ -0,0 +1,7 @@ +# SOAP + +Simple Object Access Protocol (SOAP) is a message protocol for exchanging information between systems and applications. When it comes to application programming interfaces (APIs), a SOAP API is developed in a more structured and formalized way. SOAP messages can be carried over a variety of lower-level protocols, including the web-related Hypertext Transfer Protocol (HTTP). + +{% resources %} + {% Course "https://www.w3schools.com/xml/xml_soap.asp", "w3school SOAP explanation" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/103-grpc.md b/src/roadmaps/backend/content/109-apis/103-grpc.md new file mode 100644 index 000000000..1827639e6 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/103-grpc.md @@ -0,0 +1,10 @@ +# gRPC + +gRPC is a high-performance, open source universal RPC framework + +RPC stands for Remote Procedure Call, there's an ongoing debate on what the g stands for. RPC is a protocol that allows a program to execute a procedure of another program located on another computer. The great advantage is that the developer doesn’t need to code the details of the remote interaction. The remote procedure is called like any other function. But the client and the server can be coded in different languages. + +{% resources %} + {% Official "https://grpc.io/", "gRPC Website" %} + {% Official "https://grpc.io/docs/", "gRPC Docs" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/104-hateoas.md b/src/roadmaps/backend/content/109-apis/104-hateoas.md new file mode 100644 index 000000000..2b77e65de --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/104-hateoas.md @@ -0,0 +1,7 @@ +# Hateoas + +HATEOAS is an acronym for Hypermedia As The Engine Of Application State, it's the concept that when sending information over a RESTful API the document received should contain everything the client needs in order to parse and use the data i.e they don't have to contact any other endpoint not explicitly mentioned within the Document + +{% resources %} + {% Blog "https://youtu.be/MiOSzpfP1Ww?t=236", "Oktane17: Designing Beautiful REST + JSON APIs (3:56 - 5:57)" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/105-open-api-spec.md b/src/roadmaps/backend/content/109-apis/105-open-api-spec.md new file mode 100644 index 000000000..8d03bd883 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/105-open-api-spec.md @@ -0,0 +1,12 @@ +# Open api spec + +The OpenAPI Specification (OAS) defines a standard, language-agnostic interface to RESTful APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection. When properly defined, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. + +An OpenAPI definition can then be used by documentation generation tools to display the API, code generation tools to generate servers and clients in various programming languages, testing tools, and many other use cases. + +{% resources %} + {% Official "https://swagger.io/specification/", "OpenAPI Specification Website" %} + {% Blog "https://swagger.io/tools/swagger-editor/", "Open API Live Editor" %} + {% Course "https://swagger.io/docs/specification/about/", "Official training guide" %} + {% Blog "https://www.youtube.com/watch?v=6kwmW_p_Tig", "OpenAPI 3.0: How to Design and Document APIs with the Latest OpenAPI Specification 3.0" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/100-cookie-based.md b/src/roadmaps/backend/content/109-apis/106-authentication/100-cookie-based.md new file mode 100644 index 000000000..6b763f86c --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/100-cookie-based.md @@ -0,0 +1,8 @@ +# Cookie-Based Authentication + +Cookies are pieces of data used to identify the user and their preferences. The browser returns the cookie to the server every time the page is requested. Specific cookies like HTTP cookies are used to perform cookie-based authentication to maintain the session for each user. + +{% resources %} + {% Blog "https://stackoverflow.com/questions/17769011/how-does-cookie-based-authentication-work", "How does cookie based authentication work?" %} +{% endresources %} + diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/101-oauth.md b/src/roadmaps/backend/content/109-apis/106-authentication/101-oauth.md new file mode 100644 index 000000000..9797fea2d --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/101-oauth.md @@ -0,0 +1,14 @@ +# OAuth + +OAuth stands for **O**pen **Auth**orization and is an open standard for authorization. It works to authorize devices, APIs, servers and applications using access tokens rather than user credentials, known as "secure delegated access". + +In its most simplest form, OAuth delegates authentication to services like Facebook, Amazon, Twitter and authorizes third-party applications to access the user account **without** having to enter their login and password. + +It is mostly utilized for REST/APIs and only provides a limited scope of a user's data. + +{% resources %} + {% Blog "https://developer.okta.com/blog/2017/06/21/what-the-heck-is-oauth", "Okta - What the Heck is OAuth" %} + {% Blog "https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2", "DigitalOcean - An Introduction to OAuth 2" %} + {% Blog "https://www.youtube.com/watch?v=t4-416mg6iU", "What is OAuth really all about" %} + {% Blog "https://www.youtube.com/watch?v=CPbvxxslDTU", "OAuth 2.0: An Overview" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/102-basic-authentication.md b/src/roadmaps/backend/content/109-apis/106-authentication/102-basic-authentication.md new file mode 100644 index 000000000..26d9c32e0 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/102-basic-authentication.md @@ -0,0 +1,10 @@ +# Basic authentication + +Given the name "Basic Authentication", you should not confuse Basic Authentication with the standard username and password authentication. Basic authentication is a part of the HTTP specification, and the details can be [found in the RFC7617](https://www.rfc-editor.org/rfc/rfc7617.html). + +Because it is a part of the HTTP specifications, all the browsers have native support for "HTTP Basic Authentication". + +{% resources %} + {% Blog "https://roadmap.sh/guides/http-basic-authentication", "HTTP Basic Authentication" %} + {% Blog "https://www.youtube.com/watch?v=mwccHwUn7Gc", "Illustrated HTTP Basic Authentication" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/103-token-authentication.md b/src/roadmaps/backend/content/109-apis/106-authentication/103-token-authentication.md new file mode 100644 index 000000000..b907f0ba9 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/103-token-authentication.md @@ -0,0 +1,14 @@ +# Token authentication + +Token-based authentication is a protocol which allows users to verify their identity, and in return receive a unique access token. During the life of the token, users then access the website or app that the token has been issued for, rather than having to re-enter credentials each time they go back to the same webpage, app, or any resource protected with that same token. + +Auth tokens work like a stamped ticket. The user retains access as long as the token remains valid. Once the user logs out or quits an app, the token is invalidated. + +Token-based authentication is different from traditional password-based or server-based authentication techniques. Tokens offer a second layer of security, and administrators have detailed control over each action and transaction. + +But using tokens requires a bit of coding know-how. Most developers pick up the techniques quickly, but there is a learning curve. + + +{% resources %} + {% Blog "https://www.okta.com/identity-101/what-is-token-based-authentication/", "What Is Token-Based Authentication?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/104-jwt.md b/src/roadmaps/backend/content/109-apis/106-authentication/104-jwt.md new file mode 100644 index 000000000..1879584cb --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/104-jwt.md @@ -0,0 +1,11 @@ +# JWT + +JWT stands for JSON Web Token is a token-based encryption open standard/methodology that is used to transfer information securely as a JSON object. Clients and Servers use JWT to securely share information, with the JWT containing encoded JSON objects and claims. JWT tokens are designed to be compact, safe to use within URLs, and ideal for SSO contexts. + +{% resources %} + {% Official "https://jwt.io/", "jwt.io Website" %} + {% Blog "https://jwt.io/introduction", "Introduction to JSON Web Tokens" %} + {% Blog "https://www.akana.com/blog/what-is-jwt", "What is JWT?" %} + {% Blog "https://www.youtube.com/watch?v=7Q17ubqLfaM", "What Is JWT and Why Should You Use JWT" %} + {% Blog "https://www.youtube.com/watch?v=926mknSW9Lo", "What is JWT? JSON Web Token Explained" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/105-openid.md b/src/roadmaps/backend/content/109-apis/106-authentication/105-openid.md new file mode 100644 index 000000000..dd2410c65 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/105-openid.md @@ -0,0 +1,11 @@ +# OpenID + +OpenID is a protocol that utilizes the authorization and authentication mechanisms of OAuth 2.0 and is now widely adopted by many identity providers on the Internet. +It solves the problem of needing to share user's personal info between many different web services(e.g. online shops, discussion forums etc.) + +{% resources %} + {% Blog "https://openid.net/", "Official Website" %} + {% Blog "https://openid.net/connect/", "What is OpenID" %} + {% Blog "https://securew2.com/blog/oauth-vs-openid-which-is-better", "OAuth vs OpenID" %} + {% Blog "https://www.youtube.com/watch?v=t18YB3xDfXI", "An Illustrated Guide to OAuth and OpenID Connect" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/105-saml.md b/src/roadmaps/backend/content/109-apis/106-authentication/105-saml.md new file mode 100644 index 000000000..9cec13756 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/105-saml.md @@ -0,0 +1 @@ +# Saml \ No newline at end of file diff --git a/src/roadmaps/backend/content/109-apis/106-authentication/index.md b/src/roadmaps/backend/content/109-apis/106-authentication/index.md new file mode 100644 index 000000000..8e73a1967 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/106-authentication/index.md @@ -0,0 +1,23 @@ +# Authentication + +The API authentication process validates the identity of the client attempting to make a connection by using an authentication protocol. The protocol sends the credentials from the remote client requesting the connection to the remote access server in either plain text or encrypted form. The server then knows whether it can grant access to that remote client or not. + +Here is the list of common ways of authentication: + +- JWT Authentication +- Token based Authentication +- Session based Authentication +- Basic Authentication +- OAuth - Open Authorization +- SSO - Single Sign On + +{% resources %} + {% Blog "https://swoopnow.com/user-authentication/", "User Authentication: Understanding the Basics & Top Tips" %} + {% Blog "https://betterprogramming.pub/how-do-you-authenticate-mate-f2b70904cc3a", "An overview about authentication methods" %} + {% Blog "https://roadmap.sh/guides/sso", "SSO - Single Sign On" %} + {% Blog "https://roadmap.sh/guides/oauth", "OAuth - Open Authorization" %} + {% Blog "https://roadmap.sh/guides/jwt-authentication", "JWT Authentication" %} + {% Blog "https://roadmap.sh/guides/token-authentication", "Token Based Authentication" %} + {% Blog "https://roadmap.sh/guides/session-authentication", "Session Based Authentication" %} + {% Blog "https://roadmap.sh/guides/basic-authentication", "Basic Authentication" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/109-apis/index.md b/src/roadmaps/backend/content/109-apis/index.md new file mode 100644 index 000000000..76feed570 --- /dev/null +++ b/src/roadmaps/backend/content/109-apis/index.md @@ -0,0 +1,8 @@ +# APIs + +API is the acronym for Application Programming Interface, which is a software intermediary that allows two applications to talk to each other. + +{% resources %} + {% Blog "https://aws.amazon.com/what-is/api/", "What is an API?" %} + {% Blog "https://www.youtube.com/watch?v=s7wmiS2mSXY", "What is an API?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/110-caching/100-cdn.md b/src/roadmaps/backend/content/110-caching/100-cdn.md new file mode 100644 index 000000000..0d4827208 --- /dev/null +++ b/src/roadmaps/backend/content/110-caching/100-cdn.md @@ -0,0 +1,13 @@ +# CDN (Content Delivery Network) + +A Content Delivery Network (CDN) service aims to provide high availability and performance improvements of websites. This is achieved with fast delivery of website assets and content typically via geographically closer endpoints to the client requests. +Traditional commercial CDNs (Amazon CloudFront, Akamai, CloudFlare and Fastly) provide servers across the globe which can be used for this purpose. +Serving assets and contents via a CDN reduces bandwidth on website hosting, provides an extra layer of caching to reduce potential outages and can improve website security as well + + +{% resources %} + {% Blog "https://www.cloudflare.com/en-ca/learning/cdn/what-is-a-cdn/", "CloudFlare - What is a CDN? | How do CDNs work?" %} + {% Blog "https://en.wikipedia.org/wiki/Content_delivery_network", "Wikipedia - Content Delivery Network" %} + {% Blog "https://www.youtube.com/watch?v=841kyd_mfH0", "What is Cloud CDN?" %} + {% Blog "https://www.youtube.com/watch?v=Bsq5cKkS33I", "What is a Content Delivery Network (CDN)?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/110-caching/101-server-side/100-redis.md b/src/roadmaps/backend/content/110-caching/101-server-side/100-redis.md new file mode 100644 index 000000000..6d53e9193 --- /dev/null +++ b/src/roadmaps/backend/content/110-caching/101-server-side/100-redis.md @@ -0,0 +1,8 @@ +# Redis + +Redis is an open source (BSD licensed), in-memory **data structure store** used as a database, cache, message broker, and streaming engine. Redis provides data structures such as [strings](https://redis.io/topics/data-types-intro#strings), [hashes](https://redis.io/topics/data-types-intro#hashes), [lists](https://redis.io/topics/data-types-intro#lists), [sets](https://redis.io/topics/data-types-intro#sets), [sorted sets](https://redis.io/topics/data-types-intro#sorted-sets) with range queries, [bitmaps](https://redis.io/topics/data-types-intro#bitmaps), [hyperloglogs](https://redis.io/topics/data-types-intro#hyperloglogs), [geospatial indexes](https://redis.io/commands/geoadd), and [streams](https://redis.io/topics/streams-intro). Redis has built-in [replication](https://redis.io/topics/replication), [Lua scripting](https://redis.io/commands/eval), [LRU eviction](https://redis.io/topics/lru-cache), [transactions](https://redis.io/topics/transactions), and different levels of [on-disk persistence](https://redis.io/topics/persistence), and provides high availability via [Redis Sentinel](https://redis.io/topics/sentinel) and automatic partitioning with [Redis Cluster](https://redis.io/topics/cluster-tutorial). + +{% resources %} + {% Official "https://redis.io/", "Redis Website" %} + {% Blog "https://www.youtube.com/watch?v=G1rOthIU-uo", "Redis in 100 Seconds" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/110-caching/101-server-side/101-memcached.md b/src/roadmaps/backend/content/110-caching/101-server-side/101-memcached.md new file mode 100644 index 000000000..f16fb23ba --- /dev/null +++ b/src/roadmaps/backend/content/110-caching/101-server-side/101-memcached.md @@ -0,0 +1,13 @@ +# Memcached + +Memcached (pronounced variously mem-cash-dee or mem-cashed) is a general-purpose distributed memory-caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read. Memcached is free and open-source software, licensed under the Revised BSD license. Memcached runs on Unix-like operating systems (Linux and macOS) and on Microsoft Windows. It depends on the `libevent` library. + +Memcached's APIs provide a very large hash table distributed across multiple machines. When the table is full, subsequent inserts cause older data to be purged in the least recently used (LRU) order. Applications using Memcached typically layer requests and additions into RAM before falling back on a slower backing store, such as a database. + +Memcached has no internal mechanism to track misses which may happen. However, some third-party utilities provide this functionality. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Memcached", "Memcached, From Wikipedia" %} + {% Blog "https://github.com/memcached/memcached#readme", "Memcached, From Official Github" %} + {% Course "https://www.tutorialspoint.com/memcached/index.htm", "Memcached Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/110-caching/101-server-side/index.md b/src/roadmaps/backend/content/110-caching/101-server-side/index.md new file mode 100644 index 000000000..ed5eacf69 --- /dev/null +++ b/src/roadmaps/backend/content/110-caching/101-server-side/index.md @@ -0,0 +1,13 @@ +# Server side + +Server-side caching temporarily stores web files and data on the origin server to reuse later. + +When the user first requests for the webpage, the website goes under the normal process of retrieving data from the server and generates or constructs the webpage of the website. After the request has happened and the response has been sent back, the server copies the webpage and stores it as a cache. + +Next time the user revisits the website, it loads the already saved or cached copy of the webpage, thus making it faster. + +{% resources %} + {% Blog "https://www.starwindsoftware.com/resource-library/server-side-caching/", "Server-side caching " %} + {% Blog "https://www.codingninjas.com/codestudio/library/server-side-caching-and-client-side-caching", "Server-side caching and Client-side caching" %} +{% endresources %} + diff --git a/src/roadmaps/backend/content/110-caching/102-client-side.md b/src/roadmaps/backend/content/110-caching/102-client-side.md new file mode 100644 index 000000000..91bb00b97 --- /dev/null +++ b/src/roadmaps/backend/content/110-caching/102-client-side.md @@ -0,0 +1,7 @@ +# Client Side Caching + +Client-side caching is the storage of network data to a local cache for future re-use. After an application fetches network data, it stores that resource in a local cache. Once a resource has been cached, the browser uses the cache on future requests for that resource to boost performance. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=HiBDZgTNpXY", "Everything you need to know about HTTP Caching" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/110-caching/index.md b/src/roadmaps/backend/content/110-caching/index.md new file mode 100644 index 000000000..a0d734661 --- /dev/null +++ b/src/roadmaps/backend/content/110-caching/index.md @@ -0,0 +1,3 @@ +# Caching + +Caching is a technique of storing frequently used data or information in a local memory, for a certain time period. So, next time, when the client requests the same information, instead of retrieving the information from the database, it will give the information from the local memory. The main advantage of caching is that it improves the performance by reducing the processing burden. diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/100-md5.md b/src/roadmaps/backend/content/111-web-security-knowledge/100-md5.md new file mode 100644 index 000000000..b579d81c6 --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/100-md5.md @@ -0,0 +1,9 @@ +# MD5 + +MD5 (Message-Digest Algorithm 5) is a hash function that is currently advised not to be used due to its extensive vulnerabilities. It is still used as a checksum to verify data integrity. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/MD5", "Wikipedia - MD5" %} + {% Blog "https://www.techtarget.com/searchsecurity/definition/MD5", "What is MD5?" %} + {% Blog "https://infosecscout.com/why-md5-is-not-safe/", "Why is MD5 not safe?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/101-sha-family.md b/src/roadmaps/backend/content/111-web-security-knowledge/101-sha-family.md new file mode 100644 index 000000000..4b1d850fa --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/101-sha-family.md @@ -0,0 +1,13 @@ +# SHA family + +SHA (Secure Hash Algorithms) is a family of cryptographic hash functions created by the NIST (National Institute of Standards and Technology). The family includes: +- SHA-0: Published in 1993, this is the first algorithm in the family. Shortly after its release, it was discontinued for an undisclosed significant flaw. +- SHA-1: Created to replace SHA-0 and which resembles MD5, this algorithm has been considered insecure since 2010. +- SHA-2: This isn't an algorithm, but a set of them, with SHA-256 and SHA-512 being the most popular. SHA-2 is still secure and widely used. +- SHA-3: Born in a competition, this is the newest member of the family. SHA-3 is very secure and doesn't carry the same design flaws as its brethren. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/SHA-1", "Wikipedia - SHA-1" %} + {% Blog "https://en.wikipedia.org/wiki/SHA-2", "Wikipedia - SHA-2" %} + {% Blog "https://en.wikipedia.org/wiki/SHA-3", "Wikipedia - SHA-3" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/102-bcrypt.md b/src/roadmaps/backend/content/111-web-security-knowledge/102-bcrypt.md new file mode 100644 index 000000000..4c9c450fd --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/102-bcrypt.md @@ -0,0 +1,9 @@ +# Bcrypt + +bcrypt is a password hashing function, that has been proven reliable and secure since it's release in 1999. It has been implemented into most commonly-used programming languages. + +{% resources %} + {% Official "https://www.npmjs.com/package/bcrypt", "bcrypts npm package" %} + {% Blog "https://auth0.com/blog/hashing-in-action-understanding-bcrypt/", "Understanding bcrypt" %} + {% Blog "https://www.youtube.com/watch?v=O6cmuiTBZVs", "bcrypt explained" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/104-scrypt.md b/src/roadmaps/backend/content/111-web-security-knowledge/104-scrypt.md new file mode 100644 index 000000000..79d85c451 --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/104-scrypt.md @@ -0,0 +1,7 @@ +# Scrypt + +Scrypt (pronounced "ess crypt") is a password hashing function (like bcrypt). It is designed to use a lot of hardware, which makes brute-force attacks more difficult. Scrypt is mainly used as a proof-of-work algorithm for cryptocurrencies. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Scrypt", "Wikipedia - Scrypt" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/105-content-security-policy.md b/src/roadmaps/backend/content/111-web-security-knowledge/105-content-security-policy.md new file mode 100644 index 000000000..478ec2a8f --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/105-content-security-policy.md @@ -0,0 +1,8 @@ +# Content Security Policy + +Content Security Policy is a computer security standard introduced to prevent cross-site scripting, clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP", "MDN — Content Security Policy (CSP)" %} + {% Blog "https://developers.google.com/web/fundamentals/security/csp", "Google Devs — Content Security Policy (CSP)" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/105-https.md b/src/roadmaps/backend/content/111-web-security-knowledge/105-https.md new file mode 100644 index 000000000..6ccb9f0b3 --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/105-https.md @@ -0,0 +1,12 @@ +# HTTPS + +HTTPS is a secure way to send data between a web server and a browser. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/", "What is HTTPS?" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https", "Why HTTPS Matters" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https", "Enabling HTTPS on Your Servers" %} + {% Blog "https://howhttps.works/", "How HTTPS works (comic)" %} + {% Blog "https://www.youtube.com/watch?v=hExRDVZHhig", "SSL, TLS, HTTP, HTTPS Explained" %} + {% Blog "https://www.youtube.com/watch?v=GoXgl9r0Kjk", "HTTPS — Stories from the field" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/106-cors.md b/src/roadmaps/backend/content/111-web-security-knowledge/106-cors.md new file mode 100644 index 000000000..cdd089f2e --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/106-cors.md @@ -0,0 +1,8 @@ +# Cors + +Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources. +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS", "Cross-Origin Resource Sharing (CORS)" %} + {% Blog "https://www.youtube.com/watch?v=4KHiSt0oLJ0", "CORS in 100 Seconds" %} + {% Blog "https://www.youtube.com/watch?v=PNtFSVU-YTI", "CORS in 6 minutes" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/107-ssl-tls.md b/src/roadmaps/backend/content/111-web-security-knowledge/107-ssl-tls.md new file mode 100644 index 000000000..afffb4388 --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/107-ssl-tls.md @@ -0,0 +1,8 @@ +# SSL/TLS + +Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols used to provide security in internet communications. These protocols encrypt the data that is transmitted over the web, so anyone who tries to intercept packets will not be able to interpret the data. One difference that is important to know is that SSL is now deprecated due to security flaws, and most modern web browsers no longer support it. But TLS is still secure and widely supported, so preferably use TLS. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Transport_Layer_Security", "Wikipedia - SSL/TLS" %} + {% Blog "https://www.cloudflare.com/learning/ssl/what-is-ssl/", "Cloudflare - What is SSL?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/108-owasp.md b/src/roadmaps/backend/content/111-web-security-knowledge/108-owasp.md new file mode 100644 index 000000000..8b08120d0 --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/108-owasp.md @@ -0,0 +1,10 @@ +# OWASP Security Risks + +OWASP or Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/OWASP", "Wikipedia - OWASP" %} + {% Blog "https://github.com/OWASP/ASVS", "OWASP Application Security Verification Standard" %} + {% Blog "https://cheatsheetseries.owasp.org/IndexTopTen.html", "OWASP Top 10 Security Risks" %} + {% Blog "https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html", "OWASP Cheatsheets" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/111-web-security-knowledge/index.md b/src/roadmaps/backend/content/111-web-security-knowledge/index.md new file mode 100644 index 000000000..257aa6150 --- /dev/null +++ b/src/roadmaps/backend/content/111-web-security-knowledge/index.md @@ -0,0 +1,12 @@ +# Web Security Knowledge + +Web security refers to the protective measures taken by the developers to protect the web applications from threats that could affect the business. + +{% resources %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https", "Why HTTPS Matters" %} + {% Blog "https://en.wikipedia.org/wiki/OWASP", "Wikipedia - OWASP" %} + {% Blog "https://github.com/0xRadi/OWASP-Web-Checklist", "OWASP Web Application Security Testing Checklist" %} + {% Blog "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/", "OWASP Top 10 Security Risks" %} + {% Blog "https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html", "OWASP Cheatsheets" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP", "Content Security Policy (CSP)" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/112-testing/100-integration-testing.md b/src/roadmaps/backend/content/112-testing/100-integration-testing.md new file mode 100644 index 000000000..c894bc372 --- /dev/null +++ b/src/roadmaps/backend/content/112-testing/100-integration-testing.md @@ -0,0 +1,9 @@ +# Integration Testing + +Integration testing is a broad category of tests where multiple software modules are __integrated__ and tested as a group. It is meant to test the __interaction__ between multiple services, resources, or modules. For example, an API's interaction with a backend service, or a service with a database. + +{% resources %} + {% Blog "https://www.guru99.com/integration-testing.html", "Integration Testing" %} + {% Blog "https://thenewstack.io/how-to-integrate-and-test-your-tech-stack/", "How to Integrate and Test Your Tech Stack" %} + {% Blog "https://youtu.be/QYCaaNz8emY", "What is Integration Testing?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/112-testing/101-unit-testing.md b/src/roadmaps/backend/content/112-testing/101-unit-testing.md new file mode 100644 index 000000000..7b7c60f85 --- /dev/null +++ b/src/roadmaps/backend/content/112-testing/101-unit-testing.md @@ -0,0 +1,8 @@ +# Unit Testing + +Unit testing is where individual __units__ (modules, functions/methods, routines, etc.) of software are tested to ensure their correctness. This low-level testing ensures smaller components are functionally sound while taking the burden off of higher-level tests. Generally, a developer writes these tests during the development process and they are run as automated tests. + +{% resources %} + {% Blog "https://www.guru99.com/unit-testing-guide.html", "Unit Testing Tutorial" %} + {% Blog "https://youtu.be/3kzHmaeozDI", "What is Unit Testing?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/112-testing/102-functional-testing.md b/src/roadmaps/backend/content/112-testing/102-functional-testing.md new file mode 100644 index 000000000..dbb655140 --- /dev/null +++ b/src/roadmaps/backend/content/112-testing/102-functional-testing.md @@ -0,0 +1,9 @@ +# Functional Testing + +Functional testing is where software is tested to ensure functional requirements are met. Usually, it is a form of black box testing in which the tester has no understanding of the source code; testing is performed by providing input and comparing expected/actual output. +It contrasts with non-functional testing, which includes performance, load, scalability, and penetration testing. + +{% resources %} + {% Blog "https://www.guru99.com/functional-testing.html", "What is Functional Testing?" %} + {% Blog "https://youtu.be/j_79AXkG4PY", "Functional Testing vs Non-Functional Testing" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/112-testing/index.md b/src/roadmaps/backend/content/112-testing/index.md new file mode 100644 index 000000000..5eaf2bfb6 --- /dev/null +++ b/src/roadmaps/backend/content/112-testing/index.md @@ -0,0 +1,8 @@ +# Testing + +A key to building software that meets requirements without defects is testing. Software testing helps developers know they are building the right software. When tests are run as part of the development process (often with continuous integration tools), they build confidence and prevent regressions in the code. + +{% resources %} + {% Blog "https://www.guru99.com/software-testing-introduction-importance.html", "What is Software Testing?" %} + {% Blog "https://www.browserstack.com/guide/testing-pyramid-for-test-automation", "Testing Pyramid" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/113-ci-cd.md b/src/roadmaps/backend/content/113-ci-cd.md new file mode 100644 index 000000000..83a0436b4 --- /dev/null +++ b/src/roadmaps/backend/content/113-ci-cd.md @@ -0,0 +1,12 @@ +# CI/CD + +CI/CD (Continuous Integration/Continuous Deployment) is the practice of automating building, testing, and deployment of applications with the main goal of detecting issues early, and provide quicker releases to the production environment. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=scEDHsr3APg", "DevOps CI/CD Explained in 100 Seconds by Fireship" %} + {% Blog "https://www.youtube.com/watch?v=nyKZTKQS_EQ", "Automate your Workflows with GitHub Actions" %} + {% Blog "https://about.gitlab.com/topics/ci-cd/", "What is CI/CD?" %} + {% Blog "https://thenewstack.io/a-primer-continuous-integration-and-continuous-delivery-ci-cd/", "A Primer: Continuous Integration and Continuous Delivery (CI/CD)" %} + {% Blog "https://thenewstack.io/3-ways-to-use-automation-in-ci-cd-pipelines/", "3 Ways to Use Automation in CI/CD Pipelines" %} + {% Blog "https://thenewstack.io/category/ci-cd/", "Articles about CI/CD" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/100-gof-design-patterns.md b/src/roadmaps/backend/content/114-design-and-development-principles/100-gof-design-patterns.md new file mode 100644 index 000000000..0185b3e25 --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/100-gof-design-patterns.md @@ -0,0 +1,13 @@ +# Design Patterns + +Design patterns are typical solutions to commonly occurring problems in software design. They can be broken into three categories: + +- Creational Patterns for the creation of objects +- Structural Patterns to provide relationship between objects +- Behavioral Patterns to help define how objects interact + +{% resources %} + {% Blog "https://github.com/kamranahmedse/design-patterns-for-humans", "Design Patterns for Humans" %} + {% Blog "https://springframework.guru/gang-of-four-design-patterns/", "GOF design patterns" %} + {% Blog "https://refactoring.guru/design-patterns", "Design Patterns" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/101-domain-driven-design.md b/src/roadmaps/backend/content/114-design-and-development-principles/101-domain-driven-design.md new file mode 100644 index 000000000..4f440f434 --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/101-domain-driven-design.md @@ -0,0 +1,15 @@ +# Domain-Driven Design + +Domain-driven design (DDD) is a software design approach focusing on modeling software to match a domain according to input from that domain's experts. + +In terms of object-oriented programming, it means that the structure and language of software code (class names, class methods, class variables) should match the business domain. For example, if a software processes loan applications, it might have classes like LoanApplication and Customer, and methods such as AcceptOffer and Withdraw. + +DDD connects the implementation to an evolving model and it is predicated on the following goals: + +- Placing the project's primary focus on the core domain and domain logic; +- Basing complex designs on a model of the domain; +- Initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems. + +{% resources %} + {% Official "https://matfrs2.github.io/RS2/predavanja/literatura/Avram%20A,%20Marinescu%20F.%20-%20Domain%20Driven%20Design%20Quickly.pdf", "Domain Driven Design Quickly" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/102-test-driven-development.md b/src/roadmaps/backend/content/114-design-and-development-principles/102-test-driven-development.md new file mode 100644 index 000000000..d377f8f2e --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/102-test-driven-development.md @@ -0,0 +1,9 @@ +# Test Driven Development + +Test driven development (TDD) is the process of writing tests for software's requirements which will fail until the software is developed to meet those requirements. Once those tests pass, then the cycle repeats to refactor code or develop another feature/requirement. In theory, this ensures that software is written to meet requirements in the simplest form, and avoids code defects. + +{% resources %} + {% Blog "https://www.guru99.com/test-driven-development.html", "What is Test Driven Development (TDD)?" %} + {% Blog "https://www.ibm.com/garage/method/practices/code/practice_test_driven_development/", "Test-driven development" %} + {% Blog "https://youtu.be/uGaNkTahrIw", "Agile in Practice: Test Driven Development" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/103-solid.md b/src/roadmaps/backend/content/114-design-and-development-principles/103-solid.md new file mode 100644 index 000000000..68a6aaea1 --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/103-solid.md @@ -0,0 +1,14 @@ +# SOLID + +SOLID is a set of principles applied to object-oriented design (OOD) to create maintainable, understandable, and flexible code, while avoiding code smells and defects. The principles are: + +- Single Responsibility +- Open/Closed +- Liskov Substitution +- Interface Segregation +- Dependency Inversion + +{% resources %} + {% Blog "https://www.baeldung.com/solid-principles", "SOLID Principles" %} + {% Blog "https://www.digitalocean.com/community/conceptual_articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design", "SOLID: The First 5 Principles of Object Oriented Design" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/104-kiss.md b/src/roadmaps/backend/content/114-design-and-development-principles/104-kiss.md new file mode 100644 index 000000000..d0ecfd643 --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/104-kiss.md @@ -0,0 +1,8 @@ +# KISS + +Keep It Simple, Stupid (KISS) is a software design principle that states avoiding needless complexity is the best way to build software that is easier to maintain, understand, and contains fewer defects. A simple product that does a single thing well is better than a complex product that does many things poorly. + +{% resources %} + {% Blog "https://deviq.com/principles/keep-it-simple", "Keep It Simple" %} + {% Blog "https://www.interaction-design.org/literature/topics/keep-it-simple-stupid", "Keep It Simple, Stupid (Kiss)" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/105-yagni.md b/src/roadmaps/backend/content/114-design-and-development-principles/105-yagni.md new file mode 100644 index 000000000..14e885f87 --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/105-yagni.md @@ -0,0 +1,8 @@ +# YAGNI + +You Aren't Going to Need It (YAGNI) is a software design principle from the Extreme Programming (XP) framework that states when developing software, functionality or features should not be added until they are necessary. Within agile software development in general, requirements are always open to change; any extra functionality may end up being wasted time and resources. + +{% resources %} + {% Blog "https://martinfowler.com/bliki/Yagni.html", "Yagni" %} + {% Blog "https://deviq.com/principles/yagni", "YAGNI" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/106-dry.md b/src/roadmaps/backend/content/114-design-and-development-principles/106-dry.md new file mode 100644 index 000000000..eb92b9712 --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/106-dry.md @@ -0,0 +1,8 @@ +# DRY + +Don't Repeat Yourself (DRY) is a software design principle which encourages developers to not repeat software patterns or code. DRY encourages code reusability, often in the form of methods, functions, or subroutines. When DRY is implemented successfully, developers are able to make one change to update many related elements while avoiding making changes to unrelated elements. + +{% resources %} + {% Blog "https://dzone.com/articles/software-design-principles-dry-and-kiss", "Software Design Principles DRY and KISS" %} + {% Blog "https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1001745#s5", "Best Practices for Scientific Computing" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/114-design-and-development-principles/index.md b/src/roadmaps/backend/content/114-design-and-development-principles/index.md new file mode 100644 index 000000000..46706a444 --- /dev/null +++ b/src/roadmaps/backend/content/114-design-and-development-principles/index.md @@ -0,0 +1 @@ +# Design and development principles \ No newline at end of file diff --git a/src/roadmaps/backend/content/115-architectural-patterns/100-monolithic-apps.md b/src/roadmaps/backend/content/115-architectural-patterns/100-monolithic-apps.md new file mode 100644 index 000000000..7aec80983 --- /dev/null +++ b/src/roadmaps/backend/content/115-architectural-patterns/100-monolithic-apps.md @@ -0,0 +1,8 @@ +# Monolithic Apps + +Monolithic architecture is a pattern in which an application handles requests, executes business logic, interacts with the database, and creates the HTML for the front end. In simpler terms, this one application does many things. It's inner components are highly coupled and deployed as one unit. + +{% resources %} + {% Blog "https://microservices.io/patterns/monolithic.html", "Pattern: Monolithic Architecture" %} + {% Blog "https://datamify.medium.com/monolithic-architecture-advantages-and-disadvantages-e71a603eec89", "Monolithic Architecture - Advantages & Disadvantages" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/115-architectural-patterns/101-microservices.md b/src/roadmaps/backend/content/115-architectural-patterns/101-microservices.md new file mode 100644 index 000000000..ac23f6baf --- /dev/null +++ b/src/roadmaps/backend/content/115-architectural-patterns/101-microservices.md @@ -0,0 +1,11 @@ +# Microservices + +Microservice architecture is a pattern in which highly cohesive, loosely coupled services are separately developed, maintained, and deployed. Each component handles an individual function, and when combined, the application handles an overall business function. + +{% resources %} + {% Blog "https://microservices.io/patterns/microservices.html", "Pattern: Microservice Architecture" %} + {% Blog "https://smartbear.com/solutions/microservices/", "What is Microservices?" %} + {% Blog "https://thenewstack.io/microservices-101/", "Microservices 101" %} + {% Blog "https://thenewstack.io/primer-microservices-explained/", "Primer: Microservices Explained" %} + {% Blog "https://thenewstack.io/category/microservices/", "Articles about Microservices" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/115-architectural-patterns/102-soa.md b/src/roadmaps/backend/content/115-architectural-patterns/102-soa.md new file mode 100644 index 000000000..d82c43ee5 --- /dev/null +++ b/src/roadmaps/backend/content/115-architectural-patterns/102-soa.md @@ -0,0 +1,7 @@ +# SOA + +SOA, or service-oriented architecture, defines a way to make software components reusable via service interfaces. These interfaces utilize common communication standards in such a way that they can be rapidly incorporated into new applications without having to perform deep integration each time. + +{% resources %} + {% Official "http://docs.oasis-open.org/soa-rm/soa-ra/v1.0/soa-ra.html", "Reference Architecture Foundation for Service Oriented Architecture" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/115-architectural-patterns/103-cqrs.md b/src/roadmaps/backend/content/115-architectural-patterns/103-cqrs.md new file mode 100644 index 000000000..44b9de4d4 --- /dev/null +++ b/src/roadmaps/backend/content/115-architectural-patterns/103-cqrs.md @@ -0,0 +1,7 @@ +# CQRS and Event Sourcing + +CQRS, or command query responsibility segregation, defines an architectural pattern where the main focus is to separate the approach of reading and writing operations for a data store. CQRS can also be used along with Event Sourcing pattern in order to persist application state as an ordered of sequence events, making it possible to restore data to any point in time. + +{% resources %} + {% Official "https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs", "CQRS Pattern" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/115-architectural-patterns/104-serverless.md b/src/roadmaps/backend/content/115-architectural-patterns/104-serverless.md new file mode 100644 index 000000000..86e3e06a7 --- /dev/null +++ b/src/roadmaps/backend/content/115-architectural-patterns/104-serverless.md @@ -0,0 +1,9 @@ +# Serverless + +Serverless is an architecture in which a developer builds and runs applications without provisioning or managing servers. With cloud computing/serverless, servers exist but are managed by the cloud provider. Resources are used as they are needed, on demand and often using auto scaling. + +{% resources %} + {% Blog "https://www.ibm.com/cloud/learn/serverless", "Serverless" %} + {% Blog "https://aws.amazon.com/serverless/", "AWS Services" %} + {% Blog "https://www.youtube.com/watch?v=W_VV2Fx32_Y&ab_channel=Fireship", "Serverless Computing in 100 Seconds" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/115-architectural-patterns/index.md b/src/roadmaps/backend/content/115-architectural-patterns/index.md new file mode 100644 index 000000000..288b1548a --- /dev/null +++ b/src/roadmaps/backend/content/115-architectural-patterns/index.md @@ -0,0 +1,7 @@ +# Architectural Patterns + +An architectural pattern is a general, reusable solution to a commonly occurring problem in software architecture within a given context.The architectural patterns address various issues in software engineering, such as computer hardware performance limitations, high availability and minimization of a business risk. + +{% resources %} + {% Blog "https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013", "Architectural Patterns in a nutshell" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/116-search-engines/100-elasticsearch.md b/src/roadmaps/backend/content/116-search-engines/100-elasticsearch.md new file mode 100644 index 000000000..579721621 --- /dev/null +++ b/src/roadmaps/backend/content/116-search-engines/100-elasticsearch.md @@ -0,0 +1,10 @@ +# Elasticsearch + +Elastic search at its core is a document-oriented search engine. It is a document based database that lets you INSERT, DELETE , RETRIEVE and even perform analytics on the saved records. But, Elastic Search is unlike any other general purpose database you have worked with, in the past. It's essentially a search engine and offers an arsenal of features you can use to retrieve the data stored in it, as per your search criteria. And that too, at lightning speeds. + +{% resources %} + {% Official "https://www.elastic.co/elasticsearch/", "Elasticsearch Website" %} + {% Official "https://www.elastic.co/guide/index.html", "Elasticsearch Documentation" %} +{% endresources %} + + diff --git a/src/roadmaps/backend/content/116-search-engines/101-solr.md b/src/roadmaps/backend/content/116-search-engines/101-solr.md new file mode 100644 index 000000000..eb66a5f6d --- /dev/null +++ b/src/roadmaps/backend/content/116-search-engines/101-solr.md @@ -0,0 +1,8 @@ +# Solr + +Solr is highly reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. Solr powers the search and navigation features of many of the world's largest internet sites. + +{% resources %} + {% Blog "https://solr.apache.org/", "Official Website" %} + {% Blog "https://solr.apache.org/resources.html#documentation", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/116-search-engines/index.md b/src/roadmaps/backend/content/116-search-engines/index.md new file mode 100644 index 000000000..bc600ec99 --- /dev/null +++ b/src/roadmaps/backend/content/116-search-engines/index.md @@ -0,0 +1 @@ +# Search engines \ No newline at end of file diff --git a/src/roadmaps/backend/content/117-message-brokers/100-rabbitmq.md b/src/roadmaps/backend/content/117-message-brokers/100-rabbitmq.md new file mode 100644 index 000000000..699912c21 --- /dev/null +++ b/src/roadmaps/backend/content/117-message-brokers/100-rabbitmq.md @@ -0,0 +1,8 @@ +# RabbitMQ + +With tens of thousands of users, RabbitMQ is one of the most popular open-source message brokers. RabbitMQ is lightweight and easy to deploy on-premises and in the cloud. It supports multiple messaging protocols. RabbitMQ can be deployed in distributed and federated configurations to meet high-scale, high-availability requirements. + +{% resources %} + {% Blog "https://www.rabbitmq.com/getstarted.html", "RabbitMQ Tutorials" %} + {% Blog "https://www.youtube.com/watch?v=nFxjaVmFj5E", "RabbitMQ Tutorial - Message Queues and Distributed Systems" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/117-message-brokers/101-kafka.md b/src/roadmaps/backend/content/117-message-brokers/101-kafka.md new file mode 100644 index 000000000..77dd662b0 --- /dev/null +++ b/src/roadmaps/backend/content/117-message-brokers/101-kafka.md @@ -0,0 +1,8 @@ +# Kafka + +Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications. + +{% resources %} + {% Blog "https://kafka.apache.org/quickstart", "Apache Kafka quickstart" %} + {% Blog "https://www.youtube.com/watch?v=B5j3uNBH8X4", "Apache Kafka Fundamentals" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/117-message-brokers/index.md b/src/roadmaps/backend/content/117-message-brokers/index.md new file mode 100644 index 000000000..c13c0ed10 --- /dev/null +++ b/src/roadmaps/backend/content/117-message-brokers/index.md @@ -0,0 +1,7 @@ +# Message Brokers + +Message brokers are an inter-application communication technology to help build a common integration mechanism to support cloud-native, microservices-based, serverless, and hybrid cloud architectures. Two of the most famous message brokers are `RabbitMQ` and `Apache Kafka` + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=57Qr9tk6Uxc", "Introduction to Message Brokers" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/118-containerization/100-docker.md b/src/roadmaps/backend/content/118-containerization/100-docker.md new file mode 100644 index 000000000..d369f5cea --- /dev/null +++ b/src/roadmaps/backend/content/118-containerization/100-docker.md @@ -0,0 +1,10 @@ +# Docker + +Docker is a platform for working with containerized applications. Among its features are a daemon and client for managing and interacting with containers, registries for storing images, and a desktop application to package all these features together. + +{% resources %} + {% Official "https://docs.docker.com/", "Docker Documentation" %} + {% Blog "https://aws.amazon.com/docker/", "What is Docker | AWS " %} + {% Blog "https://youtu.be/3c-iBn73dDE", "Docker Tutorial" %} + {% Blog "https://youtu.be/vP_4DlOH1G4", "Docker simplified in 55 seconds" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/118-containerization/101-rkt.md b/src/roadmaps/backend/content/118-containerization/101-rkt.md new file mode 100644 index 000000000..1a555fdb3 --- /dev/null +++ b/src/roadmaps/backend/content/118-containerization/101-rkt.md @@ -0,0 +1,14 @@ +# RKT + +RKT(pronounced like a "rocket") is an application container engine developed for modern production cloud-native environments. It features a pod-native approach, a pluggable execution environment, and a well-defined surface area that makes it ideal for integration with other systems. + + +RKT project was ended in 2018. + +{% resources %} + {% Official "https://rocket.readthedocs.io/en/latest/Documentation/trying-out-rkt/", "RKT Documentation" %} + {% Blog "https://www.redhat.com/en/topics/containers/what-is-rkt", "What is RKT?" %} + {% Blog "https://github.com/rkt/rkt", "What is RKT?" %} + {% Blog "https://youtu.be/JgUEXKTSVXw", "Introduction to RKT" %} + {% Blog "https://youtu.be/mRlQC6s8IwM", "The RKT Container Runtime - Explanation & Demonstration" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/118-containerization/102-lxc.md b/src/roadmaps/backend/content/118-containerization/102-lxc.md new file mode 100644 index 000000000..f2abe866a --- /dev/null +++ b/src/roadmaps/backend/content/118-containerization/102-lxc.md @@ -0,0 +1,10 @@ +# LXC + +LXC is an abbreviation used for Linux Containers which is an operating system that is used for running multiple Linux systems virtually on a controlled host via a single Linux kernel. LXC is a userspace interface for the Linux kernel containment features. Through a powerful API and simple tools, it lets Linux users easily create and manage system or application containers. + +{% resources %} + {% Official "https://linuxcontainers.org/lxc/documentation/", "LXC Documentation" %} + {% Blog "https://linuxcontainers.org/lxc/introduction/", "What is LXC?" %} + {% Blog "https://youtu.be/_KnmRdK69qM", "Linux Container (LXC) Introduction" %} + {% Blog "https://youtu.be/CWmkSj_B-wo", "Getting started with LXC containers" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/118-containerization/index.md b/src/roadmaps/backend/content/118-containerization/index.md new file mode 100644 index 000000000..b00de8cd4 --- /dev/null +++ b/src/roadmaps/backend/content/118-containerization/index.md @@ -0,0 +1,8 @@ +# Containerization vs. Virtualization + +Containers and virtual machines are the two most popular approaches to setting up a software infrastructure for your organization. + +{% resources %} + {% Blog "https://middleware.io/blog/containerization-vs-virtualization/", "Containerization vs. Virtualization: Everything you need to know" %} + {% Blog "https://www.youtube.com/watch?v=1WnDHitznGY", "Containerization or Virtualization - The Differences " %} +{% endresources %} diff --git a/src/roadmaps/backend/content/119-graphql/100-apollo.md b/src/roadmaps/backend/content/119-graphql/100-apollo.md new file mode 100644 index 000000000..288bc754f --- /dev/null +++ b/src/roadmaps/backend/content/119-graphql/100-apollo.md @@ -0,0 +1,10 @@ +# Apollo + +Apollo is a platform for building a unified graph, a communication layer that helps you manage the flow of data between your application clients (such as web and native apps) and your back-end services. + +{% resources %} + {% Official "https://www.apollographql.com", "Apollo Website" %} + {% Blog "https://www.apollographql.com/docs/", "Official Docs" %} + {% Blog "https://www.youtube.com/c/ApolloGraphQL/", "Official YouTube Channel" %} + {% Blog "https://www.youtube.com/watch?v=YyUWW04HwKY", "GraphQL With React Tutorial - Apollo Client" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/119-graphql/101-relay-modern.md b/src/roadmaps/backend/content/119-graphql/101-relay-modern.md new file mode 100644 index 000000000..ca5d2ff63 --- /dev/null +++ b/src/roadmaps/backend/content/119-graphql/101-relay-modern.md @@ -0,0 +1,8 @@ +# Relay Modern + +Relay is a JavaScript client used in the browser to fetch GraphQL data. It's a JavaScript framework developed by Facebook for managing and fetching data in React applications. It is built with scalability in mind in order to power complex applications like Facebook. The ultimate goal of GraphQL and Relay is to deliver instant UI-response interactions. + +{% resources %} + {% Official "https://relay.dev/", "Official Website" %} + {% Blog "https://relay.dev/docs/", "Introduction to Relay modern" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/119-graphql/index.md b/src/roadmaps/backend/content/119-graphql/index.md new file mode 100644 index 000000000..8ab2dd7be --- /dev/null +++ b/src/roadmaps/backend/content/119-graphql/index.md @@ -0,0 +1,10 @@ +# Graphql + +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. + +{% resources %} + {% Blog "https://graphql.org/learn/", "Introduction to GraphQL" %} + {% Blog "https://www.howtographql.com/", "The Fullstack Tutorial for GraphQL" %} + {% Course "https://odyssey.apollographql.com/", "GraphQL Tutorials" %} + {% Blog "https://www.youtube.com/watch?v=ed8SzALpx1Q", "GraphQL Course for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/120-graph-databases/100-neo4j.md b/src/roadmaps/backend/content/120-graph-databases/100-neo4j.md new file mode 100644 index 000000000..4fb333979 --- /dev/null +++ b/src/roadmaps/backend/content/120-graph-databases/100-neo4j.md @@ -0,0 +1,9 @@ +# Neo4j + +Neo4j AuraDB is a fast, reliable, scalable, and completely automated Neo4j graph database, provided as a cloud service. + +{% resources %} + {% Official "https://neo4j.com/", "Official Website" %} + {% Blog "https://neo4j.com/docs/", "Official Docs" %} + {% Blog "https://www.youtube.com/watch?v=8jNPelugC2s", "Neo4j (Graph Database) Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/120-graph-databases/index.md b/src/roadmaps/backend/content/120-graph-databases/index.md new file mode 100644 index 000000000..6d21f569a --- /dev/null +++ b/src/roadmaps/backend/content/120-graph-databases/index.md @@ -0,0 +1,8 @@ +# Graph databases + +A graph database stores nodes and relationships instead of tables, or documents. Data is stored just like you might sketch ideas on a whiteboard. Your data is stored without restricting it to a pre-defined model, allowing a very flexible way of thinking about and using it. + +{% resources %} + {% Blog "https://neo4j.com/developer/graph-database/", "What is a Graph Database?" %} + {% Blog "https://www.freecodecamp.org/news/graph-database-vs-relational-database/", "Graph Databases VS Relational Databases" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/121-web-sockets.md b/src/roadmaps/backend/content/121-web-sockets.md new file mode 100644 index 000000000..4289fc0df --- /dev/null +++ b/src/roadmaps/backend/content/121-web-sockets.md @@ -0,0 +1,9 @@ +# Web sockets + +Web sockets are defined as a two-way communication between the servers and the clients, which mean both the parties, communicate and exchange data at the same time. This protocol defines a full duplex communication from the ground up. Web sockets take a step forward in bringing desktop rich functionalities to the web browsers. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/websockets/index.htm", "Introduction to WebSockets" %} + {% Course "https://www.youtube.com/watch?v=8ARodQ4Wlf4", "A Beginners Guide to WebSockets" %} + {% Blog "https://socket.io/", "Socket.io Library Bidirectional and low-latency communication for every platform" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/122-web-servers/100-nginx.md b/src/roadmaps/backend/content/122-web-servers/100-nginx.md new file mode 100644 index 000000000..3e27d0ab3 --- /dev/null +++ b/src/roadmaps/backend/content/122-web-servers/100-nginx.md @@ -0,0 +1,8 @@ +# Nginx + +NGINX is a powerful web server and uses a non-threaded, event-driven architecture that enables it to outperform Apache if configured correctly. It can also do other important things, such as load balancing, HTTP caching, or be used as a reverse proxy. + +{% resources %} + {% Official "https://nginx.org/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=JKxlsvZXG7c", "NGINX Explained in 100 Seconds" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/122-web-servers/101-apache.md b/src/roadmaps/backend/content/122-web-servers/101-apache.md new file mode 100644 index 000000000..36a37b022 --- /dev/null +++ b/src/roadmaps/backend/content/122-web-servers/101-apache.md @@ -0,0 +1,8 @@ +# Apache + +Apache is a free, open-source HTTP server, available on many operating systems, but mainly used on Linux distributions. It is one of the most popular options for web developers, as it accounts for over 30% of all the websites, as estimated by W3Techs. + +{% resources %} + {% Official "https://httpd.apache.org/", "Apache Server Website" %} + {% Blog "https://www.youtube.com/watch?v=kaaenHXO4t4", "What is Apache Web Server?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/122-web-servers/102-caddy.md b/src/roadmaps/backend/content/122-web-servers/102-caddy.md new file mode 100644 index 000000000..fc368f80c --- /dev/null +++ b/src/roadmaps/backend/content/122-web-servers/102-caddy.md @@ -0,0 +1,8 @@ +# Caddy + +The Caddy web server is an extensible, cross-platform, open-source web server written in Go. It has some really nice features like automatic SSL/HTTPs and a really easy configuration file. + +{% resources %} + {% Official "https://caddyserver.com/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=t4naLFSlBpQ", "Getting started with Caddy the HTTPS Web Server from scratch" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/122-web-servers/103-ms-iis.md b/src/roadmaps/backend/content/122-web-servers/103-ms-iis.md new file mode 100644 index 000000000..bbaa33da1 --- /dev/null +++ b/src/roadmaps/backend/content/122-web-servers/103-ms-iis.md @@ -0,0 +1,8 @@ +# MS IIS + +Internet Information Services (IIS) for Windows® Server is a flexible, secure and manageable Web server for hosting anything on the Web. + +{% resources %} + {% Official "https://www.iis.net/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=1VdxPWwtISA", "Learn Windows Web Server IIS" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/122-web-servers/index.md b/src/roadmaps/backend/content/122-web-servers/index.md new file mode 100644 index 000000000..885db8163 --- /dev/null +++ b/src/roadmaps/backend/content/122-web-servers/index.md @@ -0,0 +1,18 @@ +# Web Servers + +Web servers can be either hardware or software, or perhaps a combination of the two. + +### Hardware Side: + +A hardware web server is a computer that houses web server software and the files that make up a website (for example, HTML documents, images, CSS stylesheets, and JavaScript files). A web server establishes a connection to the Internet and facilitates the physical data exchange with other web-connected devices. + +### Software side: + +A software web server has a number of software components that regulate how hosted files are accessed by online users. This is at the very least an HTTP server. Software that knows and understands HTTP and URLs (web addresses) is known as an HTTP server (the protocol your browser uses to view webpages). The content of these hosted websites is sent to the end user's device through an HTTP server, which may be accessed via the domain names of the websites it holds. + +Basically, an HTTP request is made by a browser anytime it wants a file that is stored on a web server. The relevant (hardware) web server receives the request, which is then accepted by the appropriate (software) HTTP server, which then locates the requested content and returns it to the browser over HTTP. (If the server cannot locate the requested page, it responds with a 404 error.) + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_web_server", "What is a Web Server " %} + {% Blog "https://youtu.be/9J1nJOivdyw", "Web Server Concepts and Examples" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/123-scalability/100-mitigation-strategies.md b/src/roadmaps/backend/content/123-scalability/100-mitigation-strategies.md new file mode 100644 index 000000000..b3b2ef0fa --- /dev/null +++ b/src/roadmaps/backend/content/123-scalability/100-mitigation-strategies.md @@ -0,0 +1,3 @@ +# Mitigation Strategies + +This section is mainly relevant to the cloud design patterns that help you build scalable solutions. Have a look at the [Cloud Design Patterns](https://learn.microsoft.com/en-us/azure/architecture/patterns/) docs by Microsoft and this video covering [the throttling, retry and circuit breaker patterns](https://www.youtube.com/watch?v=0HoTGgb5oFg) diff --git a/src/roadmaps/backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md b/src/roadmaps/backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md new file mode 100644 index 000000000..96a232279 --- /dev/null +++ b/src/roadmaps/backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md @@ -0,0 +1,13 @@ +# Instrumentation, Monitoring, and Telemetry + +Instrumentation refers to the measure of a product's performance, in order to diagnose errors and to write trace information. Instrumentation can be of two types: source instrumentation and binary instrumentation. + +Backend monitoring allows the user to view the performance of infrastructure i.e. the components that run a web application. These include the HTTP server, middleware, database, third-party API services, and more. + +Telemetry is the process of continuously collecting data from different components of the application. This data helps engineering teams to troubleshoot issues across services and identify the root causes. In other words, telemetry data powers observability for your distributed applications. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Instrumentation_(computer_programming)", "What is Instrumentation?" %} + {% Blog "https://www.yottaa.com/performance-monitoring-backend-vs-front-end-solutions/", "What is Monitoring?" %} + {% Blog "https://www.sumologic.com/insight/what-is-telemetry/", "What is Telemetry?" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/123-scalability/102-migration-strategies.md b/src/roadmaps/backend/content/123-scalability/102-migration-strategies.md new file mode 100644 index 000000000..0c29b4b91 --- /dev/null +++ b/src/roadmaps/backend/content/123-scalability/102-migration-strategies.md @@ -0,0 +1,7 @@ +# Migration Strategies + +A migration strategy is a plan for moving data from one location to another, and it is an important step in any database migration. A data migration strategy should include a plan for how to move the data and what to do with it once it arrives at the new location. + +{% resources %} + {% Blog "https://theecmconsultant.com/data-migration-strategy", "Migration strategies" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/123-scalability/103-horizontal-vertical-scaling.md b/src/roadmaps/backend/content/123-scalability/103-horizontal-vertical-scaling.md new file mode 100644 index 000000000..b99feccda --- /dev/null +++ b/src/roadmaps/backend/content/123-scalability/103-horizontal-vertical-scaling.md @@ -0,0 +1,10 @@ +# Horizontal/Vertical Scaling + +Horizontal scaling is a change in the **number** of a resource. For example, increasing the number of virtual machines processing messages in a queue. Vertical scaling is a change in the **size/power** of a resource. For example, increasing the memory or disk space available to a machine. Scaling can be applied to databases, cloud resources, and other areas of computing. + +{% resources %} + {% Blog "https://touchstonesecurity.com/horizontal-vs-vertical-scaling-what-you-need-to-know/", "Horizontal vs Vertical Scaling" %} + {% Blog "https://www.geeksforgeeks.org/horizontal-and-vertical-scaling-in-databases/", "Scaling In Databases" %} + {% Blog "https://youtu.be/xpDnVSmNFX0", "System Design Basics: Horizontal vs. Vertical Scaling" %} + {% Blog "https://www.youtube.com/watch?v=Y-Gl4HEyeUQ", "System Design 101" %} +{% endresources %} diff --git a/src/roadmaps/backend/content/123-scalability/104-observability.md b/src/roadmaps/backend/content/123-scalability/104-observability.md new file mode 100644 index 000000000..abf6a29c2 --- /dev/null +++ b/src/roadmaps/backend/content/123-scalability/104-observability.md @@ -0,0 +1,15 @@ +# Observability + +In sofware development, observability is the measure of how well we can understand a system from the work it does, and how to make it better. + +So what makes a system to be "observable"? It is its ability of producing and collecting metrics, logs and traces in order for us to understand what happens under the hood and identify issues and bottlenecks faster. + +You can of course implement all those features by yourself, but there are a lot of softwares out there that can help you with it like Datadog, Sentry and CloudWatch. + +{% resources %} + {% Official "https://docs.datadoghq.com/", "DataDog Docs" %} + {% Official "https://aws.amazon.com/cloudwatch/getting-started/", "AWS CloudWatch Docs" %} + {% Official "https://docs.sentry.io/", "Sentry Docs" %} + {% Blog "https://www.youtube.com/watch?v=Wx0SHRb2xcI", "AWS re:Invent 2017: Improving Microservice and Serverless Observability with Monitor" %} + {% Blog "https://newrelic.com/blog/best-practices/observability-instrumentation", "Observability and Instrumentation: What They Are and Why They Matter" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/backend/content/123-scalability/index.md b/src/roadmaps/backend/content/123-scalability/index.md new file mode 100644 index 000000000..db15b7366 --- /dev/null +++ b/src/roadmaps/backend/content/123-scalability/index.md @@ -0,0 +1,20 @@ +# Building for Scale + +Speaking in general terms, scalability is the ability of a system to handle a growing amount of work by adding resources to it. + +A software that was conceived with a scalable architecture in mind, is a system that will support higher workloads without any fundamental changes to it, but don't be fooled, this isn't magic. You'll only get so far with smart thinking without adding more sources to it. + +For a system to be scalable, there are certain things you must pay attention to, like: +* Coupling +* Observability +* Evolvability +* Infrastructure + +When you think about the infrastructure of a scalable system, you have two main ways of building it: using on-premises resources or leveraging all the tools a cloud provider can give you. + +The main difference between on-premises and cloud resources will be FLEXIBILITY, on cloud providers you don't really need to plan ahead, you can upgrade your infrastructure with a couple of clicks, while with on-premises resources you will need a certain level of planning. + +{% resources %} + {% Blog "https://www.sentinelone.com/blog/scalable-architecture/", "Scalable Architecture: A Definition and How-To Guide" %} + {% Blog "https://www.youtube.com/watch?v=gxfERVP18-g", "Scaling Distributed Systems - Software Architecture Introduction" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/blockchain.md b/src/roadmaps/blockchain/blockchain.md new file mode 100644 index 000000000..5610a25dc --- /dev/null +++ b/src/roadmaps/blockchain/blockchain.md @@ -0,0 +1,61 @@ +--- +jsonUrl: "/jsons/blockchain.json" +pdfUrl: "/pdfs/blockchain.pdf" +order: 6 +featuredTitle: "Blockchain" +featuredDescription: "Step by step guide to becoming a blockchain developer in 2022" +title: "Blockchain Developer" +description: "Step by step guide to becoming a blockchain developer in 2022." +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 2173.87 +seo: + title: "Blockchain Developer Roadmap: Learn to become a blockchain developer" + description: "Learn to become a blockchain developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern backend development." + keywords: + - "blockchain roadmap 2022" + - "web3 developer roadmap" + - "web3 developer roadmap 2022" + - "web3 roadmap" + - "blockchain developer roadmap 2022" + - "guide to becoming a blockchain developer" + - "guide to becoming a blockchain developer" + - "blockchain roadmap" + - "blockchain developer" + - "blockchain engineer" + - "blockchain skills" + - "blockchain development" + - "javascript developer" + - "blockchain development skills" + - "blockchain development skills test" + - "blockchain engineer roadmap" + - "blockchain developer roadmap" + - "become a blockchain developer" + - "blockchain developer career path" + - "javascript developer" + - "modern javascript developer" + - "node developer" + - "skills for blockchain development" + - "learn blockchain development" + - "what is blockchain development" + - "blockchain developer quiz" + - "blockchain developer interview questions" +relatedRoadmaps: + - "frontend" + - "backend" + - "javascript" + - "nodejs" + - "react" + - "vue" + - "angular" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + diff --git a/src/roadmaps/blockchain/content/100-blockchain-basics/100-what-is-blockchain.md b/src/roadmaps/blockchain/content/100-blockchain-basics/100-what-is-blockchain.md new file mode 100644 index 000000000..ea88a4ef6 --- /dev/null +++ b/src/roadmaps/blockchain/content/100-blockchain-basics/100-what-is-blockchain.md @@ -0,0 +1,10 @@ +# Blockchain + +A blockchain is a decentralized, distributed, and oftentimes public, digital ledger consisting of records called blocks that is used to record transactions across many computers so that any involved block cannot be altered retroactively, without the alteration of all subsequent blocks. + +{% resources %} + {% Blog "https://www.investopedia.com/terms/b/blockchain.asp", "Blockchain Explained" %} + {% Blog "https://aws.amazon.com/blockchain/decentralization-in-blockchain/", "What is decentralization?" %} + {% Blog "https://youtu.be/SSo_EIwHSd4", "How does a blockchain work?" %} + {% Blog "https://youtu.be/4ff9esY_4aU", "What Is a Blockchain? | Blockchain Basics for Developers" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/100-blockchain-basics/101-decentralization.md b/src/roadmaps/blockchain/content/100-blockchain-basics/101-decentralization.md new file mode 100644 index 000000000..0f1020720 --- /dev/null +++ b/src/roadmaps/blockchain/content/100-blockchain-basics/101-decentralization.md @@ -0,0 +1,8 @@ +# Decentralization + +In blockchain, decentralization refers to the transfer of control and decision-making from a centralized entity (individual, organization, or group thereof) to a distributed network. Decentralized networks strive to reduce the level of trust that participants must place in one another, and deter their ability to exert authority or control over one another in ways that degrade the functionality of the network. + +{% resources %} + {% Blog "https://aws.amazon.com/blockchain/decentralization-in-blockchain/", "What is decentralization?" %} + {% Blog "https://www.blockchain-council.org/blockchain/what-is-decentralization-in-blockchain/", "What is Decentralization in Blockchain?" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/100-blockchain-basics/102-why-blockchain-matters.md b/src/roadmaps/blockchain/content/100-blockchain-basics/102-why-blockchain-matters.md new file mode 100644 index 000000000..e767689f9 --- /dev/null +++ b/src/roadmaps/blockchain/content/100-blockchain-basics/102-why-blockchain-matters.md @@ -0,0 +1,12 @@ +# Why it matters + +The nature of blockchain allows for trustless systems to be built on top of it. Users don’t rely on a centralized group of people, such as a bank, to make decisions and allow transactions to flow through. Because the system is decentralized, users know that transactions will never be denied for non-custodial reasons. + +This decentralization enables use-cases that were previously impossible, such as parametric insurance, decentralized finance, and decentralized organizations (DAOs), among a few. This allows developers to build products that provide immediate value without having to go through a bureaucratic process of applications, approvals, and general red tape. + +{% resources %} + {% Blog "https://www.blockchain.education/blockchain101/blockchain", "Why Blockchain?" %} + {% Blog "https://www.forbes.com/sites/theyec/2020/05/18/what-is-the-blockchain-and-why-does-it-matter/", "What Is The Blockchain And Why Does It Matter?" %} + {% Blog "https://continuations.com/post/671863718643105792/web3crypto-why-bother", "Web3/Crypto: Why Bother?" %} + {% Blog "https://www.simplilearn.com/tutorials/blockchain-tutorial/why-is-blockchain-important", "Why is Blockchain Important and Why Does it Matter" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/100-blockchain-basics/103-blockchain-structure.md b/src/roadmaps/blockchain/content/100-blockchain-basics/103-blockchain-structure.md new file mode 100644 index 000000000..949b47182 --- /dev/null +++ b/src/roadmaps/blockchain/content/100-blockchain-basics/103-blockchain-structure.md @@ -0,0 +1,12 @@ +# Blockchain Structure + +The blockchain gets its name from its underlying structure. The blockchain is organized as a series of “blocks” that are “chained” together. + +Understanding blockchain security requires understanding how the blockchain is put together. This requires knowing what the blocks and chains of blockchain are and why they are designed the way that they are. + +{% resources %} + {% Blog "https://mlsdev.com/blog/156-how-to-build-your-own-blockchain-architecture", "Blockchain Architecture Basics: Components, Structure, Benefits & Creation" %} + {% Blog "https://komodoplatform.com/en/academy/blockchain-architecture-101/", "Blockchain Architecture 101: Components, Structure, and Benefits" %} + {% Blog "https://resources.infosecinstitute.com/topic/blockchain-structure/", "Blockchain structure" %} + {% Course "https://www.coursera.org/lecture/blockchain-basics/blockchain-structure-5rj9Z", "Blockchain Basics | Coursera" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/100-blockchain-basics/104-basic-blockchain-operations.md b/src/roadmaps/blockchain/content/100-blockchain-basics/104-basic-blockchain-operations.md new file mode 100644 index 000000000..3d41bf488 --- /dev/null +++ b/src/roadmaps/blockchain/content/100-blockchain-basics/104-basic-blockchain-operations.md @@ -0,0 +1,10 @@ +# Basic Blockchain Operations + +Operations in a decentralized networks are the responsibility of the peer participants and their respective computational nodes. These are specific for each type of blockchain. + +{% resources %} + {% Blog "https://www.mlq.ai/blockchain-basics/", "Blockchain Basics: Structure, Operations, and the Bitcoin Blockchain" %} + {% Blog "https://developer.bitcoin.org/reference/transactions.html", "Bitcoin blockchain transactions | Bitcoin Developer" %} + {% Blog "https://ethereum.org/en/developers/docs/transactions/", "Ethereum blockchain transactions | ethereum.org" %} + {% Course "https://www.coursera.org/lecture/blockchain-basics/basic-operations-OxILB", "Blockchain Basics | Coursera" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/100-blockchain-basics/105-applications-and-uses.md b/src/roadmaps/blockchain/content/100-blockchain-basics/105-applications-and-uses.md new file mode 100644 index 000000000..0f655f1c3 --- /dev/null +++ b/src/roadmaps/blockchain/content/100-blockchain-basics/105-applications-and-uses.md @@ -0,0 +1,10 @@ +# Application and uses of Blockchain technology + +Blockchain applications go far beyond cryptocurrency and bitcoin. With its ability to create more transparency and fairness while also saving businesses time and money, the technology is impacting a variety of sectors in ways that range from how contracts are enforced to making government work more efficiently. + +{% resources %} + {% Blog "https://consensys.net/blockchain-use-cases/", "Blockchain Use Cases and Applications by Industry" %} + {% Blog "https://www.blockchain-council.org/blockchain/top-10-real-world-applications-of-blockchain-technology/", "Top 10 Real-World Applications Of Blockchain Technology" %} + {% Blog "https://ethereum.org/en/developers/docs/transactions/", "Ethereum blockchain transactions | ethereum.org" %} + {% Blog "https://builtin.com/blockchain/blockchain-applications", "E34 Blockchain Applications and Real-World Use Cases Disrupting the Status Quo" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/100-blockchain-basics/index.md b/src/roadmaps/blockchain/content/100-blockchain-basics/index.md new file mode 100644 index 000000000..48a76317a --- /dev/null +++ b/src/roadmaps/blockchain/content/100-blockchain-basics/index.md @@ -0,0 +1,10 @@ +# Blockchain + +A blockchain is a decentralized, distributed, and oftentimes public, digital ledger consisting of records called blocks that is used to record transactions across many computers so that any involved block cannot be altered retroactively, without the alteration of all subsequent blocks. + +{% resources %} + {% Blog "https://www.blockchain.education/blockchain101/blockchain", "Introduction to Blockchain" %} + {% Blog "https://www.investopedia.com/terms/b/blockchain.asp", "Blockchain Explained" %} + {% Blog "https://youtu.be/SSo_EIwHSd4", "How does a blockchain work?" %} + {% Blog "https://youtu.be/4ff9esY_4aU", "What Is a Blockchain? | Blockchain Basics for Developers" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/100-storage.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/100-storage.md new file mode 100644 index 000000000..bd70e4cb3 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/100-storage.md @@ -0,0 +1,9 @@ +# Storage + +Unlike a centralized server operated by a single company or organization, decentralized storage systems consist of a peer-to-peer network of user-operators who hold a portion of the overall data, creating a resilient file storage sharing system. + +{% resources %} + {% Blog "https://www.techtarget.com/searchstorage/definition/blockchain-storage", "Blockchain Storage" %} + {% Blog "https://ethereum.org/en/developers/docs/storage/", "Decentralized Storage" %} + {% Blog "https://docs.ipfs.tech/concepts/how-ipfs-works/", "How IPFS works" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/101-mining-and-incentive-models.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/101-mining-and-incentive-models.md new file mode 100644 index 000000000..96f5994ec --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/101-mining-and-incentive-models.md @@ -0,0 +1,11 @@ +# Mining and incentive models + +Mining is the process of adding transaction details to the Blockchain, like sender address, hash value, etc. The Blockchain contains all the history of the transactions that have taken place in the past for record purposes and it is stored in such a manner that, it can’t be manipulated. + +An Incentive is basically a reward given to a Blockchain Miner for speeding up the transactions and making correct decisions while processing the complete transaction securely. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/blockchain-incentives-to-miners/", "Blockchain Incentives to Miners" %} + {% Blog "https://ethereum.org/en/developers/docs/consensus-mechanisms/", "Ethereum Consensus Mechanisms" %} + {% Blog "https://docs.solana.com/implemented-proposals/staking-rewards", "Solana Staking Rewards" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/102-decentralization-vs-trust.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/102-decentralization-vs-trust.md new file mode 100644 index 000000000..af7037a0a --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/102-decentralization-vs-trust.md @@ -0,0 +1,9 @@ +# Decentralization vs trust + +Blockchains, cryptocurrency, smart contracts, and oracles have emerged as new technologies for coordinating social and economic activities in a more secure, transparent, and accessible manner. Most importantly, these technologies are revealing the power of cryptographic guarantees—what we often call cryptographic truth—in restoring users’ trust in everyday interactions. + +{% resources %} + {% Blog "https://blog.chain.link/what-crypto-is-really-about/", "What Crypto Is Really About" %} + {% Blog "https://ethereum.org/en/developers/docs/consensus-mechanisms/", "Ethereum Consensus Mechanisms" %} + {% Blog "https://youtu.be/AEtBPbmIRKQ", "The Superiority of Cryptographic Truth" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/103-blockchain-forking.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/103-blockchain-forking.md new file mode 100644 index 000000000..2c0c48409 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/103-blockchain-forking.md @@ -0,0 +1,9 @@ +# Blockchain forking + +A fork happens whenever a community makes a change to the blockchain’s protocol, or basic set of rules. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Fork_(blockchain)", "Blockchain Fork" %} + {% Blog "https://www.coinbase.com/learn/crypto-basics/what-is-a-fork", "What is a fork?" %} + {% Blog "https://www.investopedia.com/terms/h/hard-fork.asp", "What Is a Hard Fork?" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/104-cryptocurrencies.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/104-cryptocurrencies.md new file mode 100644 index 000000000..e41cd344a --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/104-cryptocurrencies.md @@ -0,0 +1,9 @@ +# Cryptocurrencies + +A cryptocurrency, crypto-currency, or crypto is a digital currency designed to work as a medium of exchange through a blockchain, which is not reliant on any central authority, such as a government or bank, to uphold or maintain it. + +{% resources %} + {% Blog "https://www.investopedia.com/terms/c/cryptocurrency.asp", "What Is Cryptocurrency?" %} + {% Blog "https://www.nerdwallet.com/article/investing/cryptocurrency", "Cryptocurrency: What It Is and How It Works" %} + {% Blog "https://youtu.be/rYQgy8QDEBI", "How Cryptocurrency actually works." %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/105-cryptowallets.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/105-cryptowallets.md new file mode 100644 index 000000000..fdedabc72 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/105-cryptowallets.md @@ -0,0 +1,8 @@ +# Cryptowallets + +A cryptocurrency wallet is an application that functions as a wallet for your cryptocurrency. + +{% resources %} + {% Blog "https://www.investopedia.com/terms/b/bitcoin-wallet.asp", "What is a Cryptocurrency Wallet?" %} + {% Blog "https://crypto.com/university/crypto-wallets", "What is a Crypto Wallet? A Beginner’s Guide" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/106-cryptography.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/106-cryptography.md new file mode 100644 index 000000000..6edcb1fd4 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/106-cryptography.md @@ -0,0 +1,11 @@ +# Cryptography + +Cryptography, or cryptology, is the practice and study of techniques for secure communication in the presence of adversarial behavior. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Cryptography", "Cryptography" %} + {% Blog "https://www.synopsys.com/glossary/what-is-cryptography.html", "What is Cryptography" %} + {% Blog "https://youtu.be/AQDCe585Lnc", "Asymmetric Encryption - Simply explained" %} + {% Blog "https://www.youtube.com/watch?v=6_Cxj5WKpIw", "What is Cryptography?" %} + {% Blog "https://www.youtube.com/watch?v=trHox1bN5es", "Learn Cryptography" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/107-consensus-protocols.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/107-consensus-protocols.md new file mode 100644 index 000000000..b87a28b48 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/107-consensus-protocols.md @@ -0,0 +1,9 @@ +# Consensus protocols + +Consensus for blockchain is a procedure in which the peers of a Blockchain network reach agreement about the present state of the data in the network. Through this, consensus algorithms establish reliability and trust in the Blockchain network. + +{% resources %} + {% Blog "https://crypto.com/university/consensus-mechanisms-in-blockchain", "Consensus Mechanisms in Blockchain: A Beginner’s Guide" %} + {% Blog "https://ethereum.org/en/developers/docs/consensus-mechanisms/", "Consensus Mechanisms" %} + {% Blog "https://www.coindesk.com/learn/what-is-a-consensus-mechanism/", "What Is a Consensus Mechanism?" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/108-blockchain-interoperability.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/108-blockchain-interoperability.md new file mode 100644 index 000000000..5b9950f1b --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/108-blockchain-interoperability.md @@ -0,0 +1,9 @@ +# Blockchain interoperability + +The concept of “blockchain interoperability” refers to the ability of different blockchain networks to exchange and leverage data between one another and to move unique types of digital assets between the networks’ respective blockchains. + +{% resources %} + {% Blog "https://www.gemini.com/cryptopedia/why-is-interoperability-important-for-blockchain", "Cross-Chain Interoperability: What it Means for Blockchain" %} + {% Blog "https://101blockchains.com/blockchain-interoperability/", "Blockchain Interoperability : Why Is Cross Chain Technology Important?" %} + {% Blog "https://www.blockchain-council.org/blockchain/blockchain-interoperability/", "Blockchain Interoperability – Understanding Cross-Chain Technology" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/100-solana.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/100-solana.md new file mode 100644 index 000000000..ec91f4c71 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/100-solana.md @@ -0,0 +1,11 @@ +# Solana + +Solana is a public blockchain platform with smart contract functionality. Its native cryptocurrency is SOL. + +{% resources %} + {% Blog "https://cointelegraph.com/news/what-is-solana-and-how-does-it-work", "What is Solana, and how does it work?" %} + {% Blog "https://solana.com/news/getting-started-with-solana-development", "Beginners Guide To Solana" %} + {% Blog "https://docs.solana.com/introduction", "Solana Introduction" %} + {% Blog "https://docs.solana.com/cluster/overview", "Solana Architecture" %} + {% Blog "https://beta.solpg.io/?utm_source=solana.com", "Start Building Solana!" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/avalanche.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/avalanche.md new file mode 100644 index 000000000..da5f2e248 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/avalanche.md @@ -0,0 +1,8 @@ +# Avalanche + +Avalanche describes itself as an “open, programmable smart contracts platform for decentralized applications.” What does that mean? Like many other decentralized protocols, Avalanche has its own token called AVAX, which is used to pay transaction fees and can be staked to secure the network. + +{% resources %} + {% Blog "https://assets.website-files.com/5d80307810123f5ffbb34d6e/6008d7bbf8b10d1eb01e7e16_Avalanche%20Platform%20Whitepaper.pdf", "Avalanche whitepaper" %} + {% Blog "https://www.avax.network/", "Avalanche official website" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/binance-smart-chain.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/binance-smart-chain.md new file mode 100644 index 000000000..a5e7b5198 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/binance-smart-chain.md @@ -0,0 +1,8 @@ +# Binance Smart Chain + +Binance Smart Chain (also known as BNB Chain) is a blockchain project initiated by Binance as a central piece of their cryptocurrency exchange, which is the largest exchange in the world in terms of daily trading volume of cryptocurrencies. + +{% resources %} + {% Blog "https://www.exodus.com/assets/docs/binance-coin-whitepaper.pdf", "Binance whitepaper" %} + {% Blog "https://www.binance.com/en/blog/all/bnb-chain-blockchain-for-exchanging-the-world-304219301536473088", "BNB Chain overview" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/ethereum.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/ethereum.md new file mode 100644 index 000000000..d902a1ac5 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/ethereum.md @@ -0,0 +1,11 @@ +# Ethereum + +Ethereum is a programmable blockchain platform with the capacity to support smart contracts, dapps (decentralized apps), and other DeFi projects. The Ethereum native token is the Ether (ETH), and it’s used to fuel operations on the blockchain. + +The Ethereum platform launched in 2015, and it’s now the second largest form of crypto next to Bitcoin (BTC). + +{% resources %} + {% Blog "https://ethereum.org/en/whitepaper/", "Ethereum whitepaper" %} + {% Blog "https://ethereum.org/en/developers/docs/intro-to-ethereum/", "Intro to Ethereum" %} + {% Blog "https://bitsonblocks.net/2016/10/02/gentle-introduction-ethereum/", "A gentle introduction to Ethereum" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/fantom.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/fantom.md new file mode 100644 index 000000000..903063043 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/fantom.md @@ -0,0 +1,8 @@ +# Fantom + +Fantom is a decentralized, open-source smart contract platform that supports decentralized applications (dApps) and digital assets. It's one of many blockchain networks built as a faster, more efficient alternative to Ethereum, it uses the proof-of-stake consensus mechanism. + +{% resources %} + {% Blog "https://arxiv.org/pdf/1810.10360.pdf", "Fantom whitepaper" %} + {% Blog "https://docs.fantom.foundation/ ", "Fantom overview" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/gnosis-chain.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/gnosis-chain.md new file mode 100644 index 000000000..950c76abd --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/gnosis-chain.md @@ -0,0 +1,8 @@ +# Gnosis Chain + +Gnosis is a blockchain based on Ethereum, which changed the consensus model to PoS to solve major issues on the Ethereum mainnet. While the platform solves problems surrounding transaction fees and speed, it also means that the Gnosis chain is less decentralized, as it is somewhat reliant on the Ethereum chain. + +{% resources %} + {% Blog "https://blockchainlab.com/pdf/gnosis_whitepaper.pdf", "Gnosis whitepaper" %} + {% Blog "https://developers.gnosischain.com/#gnosis-chain", "Gnosis overview" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/huobi-eco-chain.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/huobi-eco-chain.md new file mode 100644 index 000000000..44f529425 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/huobi-eco-chain.md @@ -0,0 +1,8 @@ +# Huobi Eco Chain + +Huobi's ECO Chain (also known as HECO) is a public blockchain that provides developers with a low-cost onchain environment for running decentralized apps (dApps) of smart contracts and storing digital assets. + +{% resources %} + {% Blog "https://www.hecochain.com/developer.133bd45.pdf", "Huobi Eco Chain whitepaper" %} + {% Blog "https://docs.hecochain.com/#/", "Introduction to HECO Chain" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/index.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/index.md new file mode 100644 index 000000000..553d3f4f6 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/index.md @@ -0,0 +1,9 @@ +# EVM based + +The Ethereum Virtual Machine (EVM) is a dedicated software virtual stack that executes smart contract bytecode and is integrated into each Ethereum node. Simply said, EVM is a software framework that allows developers to construct Ethereum-based decentralized applications (DApps). All Ethereum accounts and smart contracts are stored on this virtual computer. + +Many blockchains have forked the Ethereum blockchain and added functionality on top, these blockchains are referred to as EVM-based blockchains. + +{% resources %} + {% Blog "https://moralis.io/evm-explained-what-is-ethereum-virtual-machine/", "What is Ethereum Virtual Machine?" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/moonbeam-moonriver.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/moonbeam-moonriver.md new file mode 100644 index 000000000..c13eb68b0 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/moonbeam-moonriver.md @@ -0,0 +1,10 @@ +# Moonbeam Moonriver + +Moonbeam is a Polkadot network parachain that promises cross-chain interoperability between the Ethereum and Polkadot . More specifically, Moonbeam is a smart contract platform that enables developers to move dApps between the two networks without having to rewrite code or redeploy infrastructure. + +Moonriver is an incentivized testnet. It enables developers to create, test, and adjust their protocols prior to launching on Moonbeam. Moonbeam is the mainnet of the ecosystem. + +{% resources %} + {% Blog "https://docs.moonbeam.network/learn/platform/networks/moonbeam/", "About Moonbream" %} + {% Blog "https://docs.moonbeam.network/learn/platform/vision/", "Moonbeam Vision" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/polygon.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/polygon.md new file mode 100644 index 000000000..3b7e715d8 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/polygon.md @@ -0,0 +1,8 @@ +# Polygon + +Polygon, formerly known as the Matic Network, is a scaling solution that aims to provide multiple tools to improve the speed and reduce the cost and complexities of transactions on the Ethereum blockchain. + +{% resources %} + {% Blog "https://polygon.technology/lightpaper-polygon.pdf", "Polygon whitepaper" %} + {% Blog "https://wiki.polygon.technology/docs/develop/getting-started", "Introduction to Polygon" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/arbitrum.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/arbitrum.md new file mode 100644 index 000000000..345d718bc --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/arbitrum.md @@ -0,0 +1,8 @@ +# Arbitrum + +Arbitrum aims to reduce transaction fees and congestion by moving as much computation and data storage off of Ethereum's main blockchain (layer 1) as it can. Storing data off of Ethereum's blockchain is known as Layer 2 scaling solutions. + +{% resources %} + {% Blog "https://www.usenix.org/system/files/conference/usenixsecurity18/sec18-kalodner.pdf", "Arbitrum whitepaper" %} + {% Blog "https://developer.offchainlabs.com/docs/Inside_Arbitrum", "Inside Arbitrum" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/index.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/index.md new file mode 100644 index 000000000..ae3133d15 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/index.md @@ -0,0 +1,10 @@ +# L2 blockchains + +Layer-2 refers to a network or technology that operates on top of an underlying blockchain protocol to improve its scalability and efficiency. + +This category of scaling solutions entails shifting a portion of Ethereum's transactional burden to an adjacent system architecture, which then handles the brunt of the network’s processing and only subsequently reports back to Ethereum to finalize its results. + +{% resources %} + {% Blog "https://www.gemini.com/cryptopedia/blockchain-layer-2-network-layer-1-network", "Layer-1 and Layer-2 Blockchain Scaling Solutions" %} + {% Blog "https://academy.binance.com/en/glossary/layer-2", "Layer 2 - Binance Academy" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/moonbeam-moonriver.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/moonbeam-moonriver.md new file mode 100644 index 000000000..15030f791 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/103-l2-blockchains/moonbeam-moonriver.md @@ -0,0 +1,10 @@ +# Moonbeam Moonriver + +Moonbeam is a Polkadot network parachain that promises cross-chain interoperability between the Ethereum and Polkadot . More specifically, Moonbeam is a smart contract platform that enables developers to move dApps between the two networks without having to rewrite code or redeploy infrastructure. + +Moonriver is an incentivized testnet. It enables developers to create, test, and adjust their protocols prior to launching on Moonbeam. Moonbeam is the mainnet of the ecosystem. + +{% resources %} + {% Blog "https://docs.moonbeam.network/learn/platform/networks/moonbeam/", "About Moonbeam" %} + {% Blog "https://docs.moonbeam.network/learn/platform/vision/", "Moonbeam Vision" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/index.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/index.md new file mode 100644 index 000000000..1a16dc30e --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/109-blockchains/index.md @@ -0,0 +1,8 @@ +# Blockchains + +Blockchain systems vary considerably in their design, particularly with regard to the consensus mechanisms used to perform the essential task of verifying network data. + +{% resources %} + {% Blog "https://www.gemini.com/cryptopedia/blockchain-types-pow-pos-private", "Types of Blockchains: PoW, PoS, and Private" %} + {% Blog "https://www.geeksforgeeks.org/types-of-blockchain/", "Types of Blockchain" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/index.md b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/index.md new file mode 100644 index 000000000..f48d1a6e9 --- /dev/null +++ b/src/roadmaps/blockchain/content/101-blockchain-general-knowledge/index.md @@ -0,0 +1,6 @@ +# Blockchain general knowledge + +{% resources %} + {% Blog "https://www.udemy.com/course/understanding-blockchain-technology/", "The Complete Course On Understanding Blockchain Technology" %} + {% Blog "https://youtu.be/qOVAbKKSH10", "Blockchain Technology Explained" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/102-blockchain-oracles/100-hybrid-smart-contracts.md b/src/roadmaps/blockchain/content/102-blockchain-oracles/100-hybrid-smart-contracts.md new file mode 100644 index 000000000..f20ee70df --- /dev/null +++ b/src/roadmaps/blockchain/content/102-blockchain-oracles/100-hybrid-smart-contracts.md @@ -0,0 +1,8 @@ +# Hybrid Smart Contracts + +Hybrid smart contracts combine code running on the blockchain (on-chain) with data and computation from outside the blockchain (off-chain) provided by Decentralized Oracle Networks. + +{% resources %} + {% Blog "https://blog.chain.link/hybrid-smart-contracts-explained/", "Hybrid Smart Contracts Explained" %} + {% Blog "https://www.leewayhertz.com/hybrid-smart-contracts/", "A complete guide to understand hybrid smart contracts" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/102-blockchain-oracles/101-chainlink.md b/src/roadmaps/blockchain/content/102-blockchain-oracles/101-chainlink.md new file mode 100644 index 000000000..23cd88763 --- /dev/null +++ b/src/roadmaps/blockchain/content/102-blockchain-oracles/101-chainlink.md @@ -0,0 +1,8 @@ +# Chainlink + +Chainlink is a decentralized network of oracles that enables smart contracts to securely interact with real-world data and services that exist outside of blockchain networks. + +{% resources %} + {% Blog "https://blog.chain.link/what-is-chainlink/", "What Is Chainlink? A Beginner’s Guide" %} + {% Blog "https://www.gemini.com/cryptopedia/what-is-chainlink-and-how-does-it-work", "What Is Chainlink in 5 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/102-blockchain-oracles/102-oracle-networks.md b/src/roadmaps/blockchain/content/102-blockchain-oracles/102-oracle-networks.md new file mode 100644 index 000000000..358a99c9f --- /dev/null +++ b/src/roadmaps/blockchain/content/102-blockchain-oracles/102-oracle-networks.md @@ -0,0 +1,9 @@ +# Oracle Networks + +By leveraging many different data sources, and implementing an oracle system that isn’t controlled by a single entity, decentralized oracle networks provide an increased level of security and fairness to smart contracts. + +{% resources %} + {% Blog "https://medium.com/coinmonks/decentralized-oracle-networks-9fead28f5fe5", "Decentralized Oracle Networks" %} + {% Blog "https://chainlinktoday.com/a-beginners-guide-to-the-evolution-of-decentralized-oracle-networks/", "A Beginner’s Guide To The Evolution Of Decentralized Oracle Networks" %} + {% Blog "https://coinmetro.com/blog/understanding-oracle-networks/", "Understanding Oracle Networks" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/102-blockchain-oracles/index.md b/src/roadmaps/blockchain/content/102-blockchain-oracles/index.md new file mode 100644 index 000000000..29621552c --- /dev/null +++ b/src/roadmaps/blockchain/content/102-blockchain-oracles/index.md @@ -0,0 +1,8 @@ +# Blockchain Oracles + +A blockchain oracle is a third-party service that connects smart contracts with the outside world, primarily to feed information in from the world, but also the reverse. Information from the world encapsulates multiple sources so that decentralised knowledge is obtained. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Blockchain_oracle", "Blockchain Oracle" %} + {% Blog "https://chain.link/education/blockchain-oracles", "What Is a Blockchain Oracle?" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/100-solidity.md b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/100-solidity.md new file mode 100644 index 000000000..db65a091b --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/100-solidity.md @@ -0,0 +1,16 @@ +# Solidity + +Solidity is an object-oriented programming language created specifically by Ethereum Network team for constructing smart contracts on various blockchain platforms, most notably, Ethereum. + +* It's used to create smart contracts that implements business logic and generate a chain of transaction records in the blochain system. +* It acts as a tool for creating machine-level code and compilling it on the Ethereum Vitural Machine (EVM). + +Like any other programming languages, Solidity also has variables, functions, classes, arithmetic operations, string manipulation, and many more. + +{% resources %} + {% Blog "https://soliditylang.org/", "Solidity Programming Language" %} + {% Blog "https://www.tutorialspoint.com/solidity/index.htm", "Solidity Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=ipwxYa-F1uY", "Solidity Course by FreeCodeCamp" %} + {% Blog "https://www.youtube.com/watch?v=EhPeHeoKF88", "Solidity Course by Dapp University" %} + {% Blog "https://youtu.be/gyMwXuJrbJQ", "Learn Blockchain, Solidity, and Full Stack Web3 Development" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/101-vyper.md b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/101-vyper.md new file mode 100644 index 000000000..55446d1b5 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/101-vyper.md @@ -0,0 +1,8 @@ +# Vyper + +Vyper is a contract-oriented, pythonic programming language that targets the Ethereum Virtual Machine (EVM). + +{% resources %} + {% Blog "https://vyper.readthedocs.io/en/stable/", "Vyper Programming Language" %} + {% Blog "https://learnxinyminutes.com/docs/vyper/", "Learn Vyper in Y Minutes" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/102-rust.md b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/102-rust.md new file mode 100644 index 000000000..f34bd6825 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/102-rust.md @@ -0,0 +1,8 @@ +# Rust + +Rust is a multi-paradigm, general-purpose programming language. Rust emphasizes performance, type safety, and concurrency. It is popular on smart contract chains Solana and Polkadot. + +{% resources %} + {% Blog "https://www.rust-lang.org/", "Rust Programming Language" %} + {% Blog "https://learn.figment.io/tutorials/write-and-deploy-a-smart-contract-on-near", "How to write and deploy a smart contract in Rust" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/index.md b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/index.md new file mode 100644 index 000000000..6d0832c29 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/100-programming-languages/index.md @@ -0,0 +1,7 @@ +# Programming Languages + +Smart contracts can be programmed using relatively developer-friendly languages. If you're experienced with Python or any curly-bracket language, you can find a language with familiar syntax. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/smart-contracts/languages/", "Smart Contract Languages" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/100-unit-tests.md b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/100-unit-tests.md new file mode 100644 index 000000000..beeb43b59 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/100-unit-tests.md @@ -0,0 +1,8 @@ +# Unit Tests + +Unit testing involves testing individual components in a smart contract for correctness. A unit test is simple, quick to run, and provides a clear idea of what went wrong if the test fails. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/smart-contracts/testing/#unit-testing", "Smart Contracts Unit Testing" %} + {% Blog "https://betterprogramming.pub/a-few-tips-for-unit-testing-ethereum-smart-contract-in-solidity-d804062068fb", "Tips for Unit Testing Ethereum Smart Contracts in Solidity" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/101-integration-tests.md b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/101-integration-tests.md new file mode 100644 index 000000000..83553f213 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/101-integration-tests.md @@ -0,0 +1,7 @@ +# Integration Tests + +Integration tests validate interactions between multiple components. For smart contract testing this can mean interactions between different components of a single contract, or across multiple contracts. + +{% resources %} + {% Blog "https://youtu.be/GxnX9k8i0zM", "Unit tests vs integration tests | Smart contract testing course" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/102-code-coverage.md b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/102-code-coverage.md new file mode 100644 index 000000000..102502c98 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/102-code-coverage.md @@ -0,0 +1,8 @@ +# Code Coverage + +Code coverage is a metric that can help you understand how much of your source is tested. It's a very useful metric that can help you assess the quality of your test suite. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/smart-contracts/testing/", "Testing Smart Contracts" %} + {% Blog "https://medium.com/coinmonks/smart-contract-code-coverage-in-hardhat-d4a5ff6c9ba6", "Smart Contract Code Coverage In Hardhat" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/index.md b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/index.md new file mode 100644 index 000000000..114282f89 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/101-testing/index.md @@ -0,0 +1,9 @@ +# Testing + +Testing smart contracts is one of the most important measures for improving smart contract security. Unlike traditional software, smart contracts cannot typically be updated after launching, making it imperative to test rigorously before deploying contracts onto mainnet. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/smart-contracts/testing/", "Testing Smart Contracts" %} + {% Blog "https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d", "How to Test Ethereum Smart Contracts" %} + {% Blog "https://docs.openzeppelin.com/learn/writing-automated-tests", "Writing automated smart contract tests" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/102-deployment.md b/src/roadmaps/blockchain/content/103-smart-contracts/102-deployment.md new file mode 100644 index 000000000..855d0afc5 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/102-deployment.md @@ -0,0 +1,8 @@ +# Deployment + +Unlike other software, smart contracts don’t run on a local computer or a remote server: they live on the blockchain. Thus, interacting with them is different from more traditional applications. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/smart-contracts/deploying/", "Deploying Smart Contracts" %} + {% Blog "https://docs.openzeppelin.com/learn/deploying-and-interacting", "Deploying and interacting with smart contracts" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/103-monitoring.md b/src/roadmaps/blockchain/content/103-smart-contracts/103-monitoring.md new file mode 100644 index 000000000..39dbc0b47 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/103-monitoring.md @@ -0,0 +1,7 @@ +# Monitoring + +Monitoring smart contracts allow their authors to view its activity and interactions based on generated transactions and events, allowing verification of the contract's intended purpose and functionality. + +{% resources %} + {% Blog "https://consensys.github.io/smart-contract-best-practices/development-recommendations/solidity-specific/event-monitoring/", "Monitoring Smart Contracts" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/104-upgrades.md b/src/roadmaps/blockchain/content/103-smart-contracts/104-upgrades.md new file mode 100644 index 000000000..a866080a8 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/104-upgrades.md @@ -0,0 +1,10 @@ +# Upgrades + +Smart contracts are immutable by default. Once they are created there is no way to alter them, effectively acting as an unbreakable contract among participants. However, for some scenarios, it is desirable to be able to modify them. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/smart-contracts/upgrading/", "Upgrading Ethereum contracts" %} + {% Blog "https://docs.openzeppelin.com/learn/upgrading-smart-contracts", "Upgrading smart contracts" %} + {% Blog "https://moralis.io/what-are-upgradable-smart-contracts-full-guide/", "What are Upgradable Smart Contracts? Full Guide" %} + {% Blog "https://youtu.be/bdXJmWajZRY", "Upgrading your Smart Contracts | A Tutorial & Introduction" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/105-erc-tokens.md b/src/roadmaps/blockchain/content/103-smart-contracts/105-erc-tokens.md new file mode 100644 index 000000000..ba5f3d82c --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/105-erc-tokens.md @@ -0,0 +1,12 @@ +# ERC Tokens + +An ‘Ethereum Request for Comments’ (ERC) is a document that programmers use to write smart contracts on Ethereum Blockchain. They describe rules in these documents that Ethereum-based tokens must comply with. + +While there are several Ethereum standards. These ERC Ethereum standards are the most well-known and popular: ERC-20, ERC-721, ERC-1155, and ERC-777. + +{% resources %} + {% Blog "https://dev.to/envoy_/ks-what-are-ethereum-request-for-comments-erc-standards-5f80", "What are Ethereum request for comments (ERC) Standards" %} + {% Blog "https://ethereum.org/en/developers/docs/standards/tokens/erc-20/", "ERC-20 Token Standard" %} + {% Blog "https://decrypt.co/resources/erc-721-ethereum-nft-token-standard", "ERC-721 Token Standard (NFTs)" %} + {% Blog "https://decrypt.co/resources/what-is-erc-1155-ethereums-flexible-token-standard", "ERC-1155 Token Standard (Multi-Token)" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/106-crypto-wallets.md b/src/roadmaps/blockchain/content/103-smart-contracts/106-crypto-wallets.md new file mode 100644 index 000000000..b6842e883 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/106-crypto-wallets.md @@ -0,0 +1,8 @@ +# Crypto Wallets + +A cryptocurrency wallet is a device, physical medium, program, or service which stores the public and/or private keys for cryptocurrency transactions. In addition to this basic function of storing the keys, a cryptocurrency wallet more often also offers the functionality of encrypting and/or signing information. + +{% resources %} + {% Blog "https://www.coinbase.com/learn/crypto-basics/what-is-a-crypto-wallet", "What is a crypto wallet?" %} + {% Blog "https://crypto.com/university/crypto-wallets", "What is a Crypto Wallet? A Beginner’s Guide" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/107-ides.md b/src/roadmaps/blockchain/content/103-smart-contracts/107-ides.md new file mode 100644 index 000000000..5c6328545 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/107-ides.md @@ -0,0 +1,8 @@ +# IDEs + +An integrated development environment is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools and a debugger. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/ides/", "Integrated Development Environments" %} + {% Blog "https://remix-project.org/", "Remix - Ethereum IDE & community" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/108-crypto-faucets.md b/src/roadmaps/blockchain/content/103-smart-contracts/108-crypto-faucets.md new file mode 100644 index 000000000..d1fe1bd97 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/108-crypto-faucets.md @@ -0,0 +1,10 @@ +# Crypto Faucets + +A crypto faucet lets users earn small crypto rewards by completing simple tasks. The metaphor is based on how even one drop of water from a leaky faucet could eventually fill up a cup. There are various kinds of crypto faucets, including bitcoin (BTC), Ethereum (ETH), and BNB faucets. + +Faucets are common in development environments where developers obtain testnet crypto in order develop and test their application prior to mainnet deployment. + +{% resources %} + {% Blog "https://academy.binance.com/en/articles/what-is-a-crypto-faucet", "What Is A Crypto Faucet?" %} + {% Blog "https://cointelegraph.com/news/what-are-crypto-faucets-and-how-do-they-work", "What are crypto faucets and how do they work?" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/109-decentralized-storage.md b/src/roadmaps/blockchain/content/103-smart-contracts/109-decentralized-storage.md new file mode 100644 index 000000000..80d67a517 --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/109-decentralized-storage.md @@ -0,0 +1,8 @@ +# Decentralized Storage + +Decentralized storage is where data is stored on a decentralized network across multiple locations by users or groups who are incentivized to join, store, and keep data accessible. The servers used are hosted by people, rather than a single company. Anyone is free to join, they are kept honest due to smart contracts, and they are incentivized to participate via tokens. + +{% resources %} + {% Blog "https://medium.com/@ppio/what-is-decentralized-storage-9c4b761942e2", "What Is Decentralized Storage?" %} + {% Blog "https://ethereum.org/en/developers/docs/storage/", "Decentralized Storage" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/103-smart-contracts/index.md b/src/roadmaps/blockchain/content/103-smart-contracts/index.md new file mode 100644 index 000000000..454ae72fb --- /dev/null +++ b/src/roadmaps/blockchain/content/103-smart-contracts/index.md @@ -0,0 +1,9 @@ +# Smart Contracts + +A smart contract is a computer program or a transaction protocol that is intended to automatically execute, control or document legally relevant events and actions according to the terms of a contract or an agreement. + +{% resources %} + {% Blog "https://www.blockchain.education/blockchain101/smart-contracts", "Smart Contracts Introduction" %} + {% Blog "https://chain.link/education/smart-contracts", "What Is a Smart Contract?" %} + {% Blog "https://youtu.be/ZE2HxTmxfrI", "Smart contracts - Simply Explained" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/104-smart-contract-frameworks/100-hardhat.md b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/100-hardhat.md new file mode 100644 index 000000000..77d486532 --- /dev/null +++ b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/100-hardhat.md @@ -0,0 +1,8 @@ +# Hardhat + +Hardhat is an Ethereum development environment. It allows users to compile contracts and run them on a development network. Get Solidity stack traces, console.log and more. + +{% resources %} + {% Blog "https://hardhat.org/hardhat-runner/docs/getting-started#overview", "Hardhat Overview" %} + {% Blog "https://youtu.be/GBc3lBrXEBo", "Build and Deploy Smart Contracts using Hardhat" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/104-smart-contract-frameworks/101-brownie.md b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/101-brownie.md new file mode 100644 index 000000000..2130a5e59 --- /dev/null +++ b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/101-brownie.md @@ -0,0 +1,8 @@ +# Brownie + +Brownie is a Python-based development and testing framework for smart contracts targeting the Ethereum Virtual Machine. + +{% resources %} + {% Blog "https://eth-brownie.readthedocs.io/", "Brownie Overview" %} + {% Blog "https://youtu.be/QfFO22lwSw4", "Python and Blockchain: Deploy Smart Contracts using Brownie" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/104-smart-contract-frameworks/102-truffle.md b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/102-truffle.md new file mode 100644 index 000000000..45f15189d --- /dev/null +++ b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/102-truffle.md @@ -0,0 +1,8 @@ +# Truffle + +A development environment, testing framework, and asset pipeline for blockchains using the Ethereum Virtual Machine (EVM), aiming to make life as a developer easier. + +{% resources %} + {% Blog "https://trufflesuite.com/docs/truffle/", "Truffle Overview" %} + {% Blog "https://youtu.be/62f757RVEvU", "Truffle Tutorial for Beginners | Compile, Test & Deploy Smart contracts to any EVM Blockchain" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/104-smart-contract-frameworks/103-foundry.md b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/103-foundry.md new file mode 100644 index 000000000..94136a1cf --- /dev/null +++ b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/103-foundry.md @@ -0,0 +1,9 @@ +# Foundry + +Foundry is a smart contract development toolchain. Foundry manages your dependencies, compiles your project, runs tests, deploys, and lets you interact with the chain from the command-line and via Solidity scripts. + +{% resources %} + {% Blog "https://book.getfoundry.sh/", "Foundry Overview" %} + {% Blog "https://youtu.be/fNMfMxGxeag", "Intro to Foundry" %} +{% endresources %} + diff --git a/src/roadmaps/blockchain/content/104-smart-contract-frameworks/index.md b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/index.md new file mode 100644 index 000000000..ac138720d --- /dev/null +++ b/src/roadmaps/blockchain/content/104-smart-contract-frameworks/index.md @@ -0,0 +1,9 @@ +# Smart Contract Frameworks + +Building a full-fledged dapp requires different pieces of technology. Software frameworks include many of the needed features or provide easy plugin systems to pick the tools you desire. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/frameworks/", "dApp Development Frameworks" %} + {% Blog "https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974#frameworks", "A Definitive List of Ethereum Developer Tools - Frameworks" %} + {% Blog "https://medium.com/better-programming/top-10-smart-contract-developer-tools-you-need-for-2022-b763f5df689a", "Top 10 Smart Contract Developer Tools You Need for 2022" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/100-fuzz-testing-and-static-analysis.md b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/100-fuzz-testing-and-static-analysis.md new file mode 100644 index 000000000..248e8421e --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/100-fuzz-testing-and-static-analysis.md @@ -0,0 +1,11 @@ +# Fuzz Testing and Static Analysis + + Fuzzing or fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a smart contract. + + Static analysis is the analysis of smart contracts performed without executing them. + + {% resources %} + {% Blog "https://www.immunebytes.com/blog/getting-started-with-smart-contract-fuzzing/", "Getting Started with Smart Contract Fuzzing" %} + {% Blog "https://lightrains.com/blogs/solidity-static-analysis-tools/#static-code-analysis", "Solidity smart contract Static Code Analysis" %} + {% Blog "https://youtu.be/LRyyNzrqgOc", "Smart contract Fuzzing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/101-common-threat-vectors.md b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/101-common-threat-vectors.md new file mode 100644 index 000000000..f70acbeca --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/101-common-threat-vectors.md @@ -0,0 +1,9 @@ +# Common Threat Vectors + +Smart contract audits enable developers to provide a thorough analysis of smart contract sets. The main goal of a smart contract audit is to detect and eliminate vulnerabilities, starting with the most common threat vectors. + +{% resources %} + {% Blog "https://github.com/kadenzipfel/smart-contract-attack-vectors", "Smart Contract Attack Vectors" %} + {% Blog "https://blog.sigmaprime.io/solidity-security.html", "Solidity Security: Comprehensive list of known attack vectors and common anti-patterns" %} + {% Blog "https://www.apriorit.com/dev-blog/578-blockchain-attack-vectors", "Blockchain Attack Vectors: Vulnerabilities of the Most Secure Technology" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/102-source-of-randomness-attacks.md b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/102-source-of-randomness-attacks.md new file mode 100644 index 000000000..128f8ca55 --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/102-source-of-randomness-attacks.md @@ -0,0 +1,7 @@ +# Source of Randomness Attacks + +The security of cryptographic systems depends on some secret data that is known to authorized persons but unknown and unpredictable to others. To achieve this unpredictability, some randomization is typically employed. Modern cryptographic protocols often require frequent generation of random quantities. Cryptographic attacks that subvert or exploit weaknesses in this process are known as randomness attacks. + +{% resources %} + {% Blog "https://blog.finxter.com/randomness-or-replicatedlogic-attack-on-smart-contracts/", "Smart Contract Randomness or ReplicatedLogic Attack" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/index.md b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/index.md new file mode 100644 index 000000000..de2997a6d --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/100-practices/index.md @@ -0,0 +1,8 @@ +# Practices + +Smart contract programming requires a different engineering mindset. The cost of failure can be high, and change can be difficult. + +{% resources %} + {% Blog "https://consensys.github.io/smart-contract-best-practices/", "Ethereum Smart Contract Security Best Practices" %} + {% Blog "https://youtu.be/0aJfCug1zTM", "Smart Contract Security and Auditing 101" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/100-slither.md b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/100-slither.md new file mode 100644 index 000000000..2fc5c1d38 --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/100-slither.md @@ -0,0 +1,7 @@ +# Slither + +Slither is a Solidity static analysis framework written in Python 3. It runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses. Slither enables developers to find vulnerabilities, enhance their code comprehension, and quickly prototype custom analyses. + +{% resources %} + {% Blog "https://github.com/crytic/slither/blob/master/README.md", "Slither, the Solidity source analyzer" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/101-manticore.md b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/101-manticore.md new file mode 100644 index 000000000..f4cd346e7 --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/101-manticore.md @@ -0,0 +1,7 @@ +# Manticore + +Manticore is a symbolic execution tool for analysis of smart contracts and binaries. + +{% resources %} + {% Blog "https://manticore.readthedocs.io/", "Manticore Docs" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/102-mythx.md b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/102-mythx.md new file mode 100644 index 000000000..aab386b3a --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/102-mythx.md @@ -0,0 +1,8 @@ +# Mythx + +MythX is a comprehensive smart contract security analysis tools developed by Consensys. It allows users to detect security vulnerabilities in Ethereum smart contracts throughout the development life cycle as well as analyze Solidity dapps for security holes and known smart contract vulnerabilities. + +{% resources %} + {% Blog "https://mythx.io/", "MythX Official Site" %} + {% Blog "https://docs.mythx.io/", "MythX Documentation" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/103-echidna.md b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/103-echidna.md new file mode 100644 index 000000000..eaa4ea4e6 --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/103-echidna.md @@ -0,0 +1,7 @@ +# Echidna + +Echidna is a Haskell program designed for fuzzing/property-based testing of Ethereum smarts contracts. It uses sophisticated grammar-based fuzzing campaigns based on a contract ABI to falsify user-defined predicates or Solidity assertions. + +{% resources %} + {% Blog "https://github.com/crytic/echidna/blob/master/README.md", "Echidna: A Fast Smart Contract Fuzzer" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/index.md b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/index.md new file mode 100644 index 000000000..58cbd91e4 --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/101-tools/index.md @@ -0,0 +1,3 @@ +# Tools + +Blockchain and smart contract technology is faily new, therefore, you should expect constant changes in the security landscape, as new bugs and security risks are discovered, and new best practices are developed. Keeping track of this constantly moving landscape proves difficult, so using tools to aid this mission is important. The cost of failing to property secure smart contracts can be high, and because change can be difficult, we must make use of these tools. diff --git a/src/roadmaps/blockchain/content/105-blockchain-security/index.md b/src/roadmaps/blockchain/content/105-blockchain-security/index.md new file mode 100644 index 000000000..80a4b4a00 --- /dev/null +++ b/src/roadmaps/blockchain/content/105-blockchain-security/index.md @@ -0,0 +1,8 @@ +# Security + +Smart contracts are extremely flexible, capable of both holding large quantities of tokens (often in excess of $1B) and running immutable logic based on previously deployed smart contract code. While this has created a vibrant and creative ecosystem of trustless, interconnected smart contracts, it is also the perfect ecosystem to attract attackers looking to profit by exploiting vulnerabilities + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/smart-contracts/security/", "Smart Contract Security" %} + {% Blog "https://consensys.net/blog/developers/ethereum-smart-contract-security-recommendations/", "Ethereum Smart Contract Security Recommendations" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/106-management-platforms/100-open-zeppelin.md b/src/roadmaps/blockchain/content/106-management-platforms/100-open-zeppelin.md new file mode 100644 index 000000000..0eab684f5 --- /dev/null +++ b/src/roadmaps/blockchain/content/106-management-platforms/100-open-zeppelin.md @@ -0,0 +1,7 @@ +# OpenZeppelin + +OpenZeppelin Contracts helps you minimize risk by using battle-tested libraries of smart contracts for Ethereum and other blockchains. It includes the most used implementations of ERC standards. + +{% resources %} + {% Blog "https://docs.openzeppelin.com/contracts/", "OpenZeppelin Contracts" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/106-management-platforms/index.md b/src/roadmaps/blockchain/content/106-management-platforms/index.md new file mode 100644 index 000000000..ecc43954e --- /dev/null +++ b/src/roadmaps/blockchain/content/106-management-platforms/index.md @@ -0,0 +1,3 @@ +# Management Platforms + +Managing smart contracts in a production environment (mainnet) can prove difficult as users must keep track of different versions, blockchains, deployments, etc. Using a tool for this process eliminates a lot of the risk that comes with manual tracking. diff --git a/src/roadmaps/blockchain/content/107-version-control-systems/100-git.md b/src/roadmaps/blockchain/content/107-version-control-systems/100-git.md new file mode 100644 index 000000000..45eefee57 --- /dev/null +++ b/src/roadmaps/blockchain/content/107-version-control-systems/100-git.md @@ -0,0 +1,10 @@ +# Git + +[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=zbKdDsNNOhg", "Version Control System Introduction" %} + {% Blog "https://www.youtube.com/watch?v=SWYqp7iY_Tc", "Git & GitHub Crash Course For Beginners" %} + {% Blog "https://youtu.be/Y9XZQO1n_7c?t=21", "Learn Git in 20 Minutes" %} + {% Course "https://github.com/jlord/git-it-electron", "Learn Git on the command line" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/107-version-control-systems/index.md b/src/roadmaps/blockchain/content/107-version-control-systems/index.md new file mode 100644 index 000000000..4104f0e7b --- /dev/null +++ b/src/roadmaps/blockchain/content/107-version-control-systems/index.md @@ -0,0 +1,9 @@ +# Version Control Systems + +Version control/source control systems allow developers to track and control changes to code over time. These services often include the ability to make atomic revisions to code, branch/fork off of specific points, and to compare versions of code. They are useful in determining the who, what, when, and why code changes were made. + +{% resources %} + {% Official "https://git-scm.com/", "Git" %} + {% Official "https://www.mercurial-scm.org/", "Mercurial" %} + {% Blog "https://www.atlassian.com/git/tutorials/what-is-version-control", "What is Version Control?" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/108-repo-hosting-services/100-github.md b/src/roadmaps/blockchain/content/108-repo-hosting-services/100-github.md new file mode 100644 index 000000000..be4dcf64b --- /dev/null +++ b/src/roadmaps/blockchain/content/108-repo-hosting-services/100-github.md @@ -0,0 +1,13 @@ +# GitHub + +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. + +{% resources %} + {% Official "https://github.com", "GitHub Website" %} + {% Official "https://docs.github.com/en/get-started/quickstart", "GitHub Documentation" %} + {% Blog "https://www.youtube.com/watch?v=w3jLJU7DT5E", "What is GitHub?" %} + {% Blog "https://www.youtube.com/watch?v=wpISo9TNjfU", "Git vs. GitHub: Whats the difference?" %} + {% Blog "https://www.youtube.com/watch?v=RGOj5yH7evk", "Git and GitHub for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=eulnSXkhE7I", "Git and GitHub - CS50 Beyond 2019" %} + {% Course "https://ooloo.io/project/github-flow", "How to Use Git in a Professional Dev Team" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/108-repo-hosting-services/101-gitlab.md b/src/roadmaps/blockchain/content/108-repo-hosting-services/101-gitlab.md new file mode 100644 index 000000000..a3bc43043 --- /dev/null +++ b/src/roadmaps/blockchain/content/108-repo-hosting-services/101-gitlab.md @@ -0,0 +1,8 @@ +# GitLab + +GitLab 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. + +{% resources %} + {% Official "https://gitlab.com/", "GitLab Website" %} + {% Official "https://docs.gitlab.com/", "GitLab Documentation" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/108-repo-hosting-services/102-bitbucket.md b/src/roadmaps/blockchain/content/108-repo-hosting-services/102-bitbucket.md new file mode 100644 index 000000000..0facc9ce8 --- /dev/null +++ b/src/roadmaps/blockchain/content/108-repo-hosting-services/102-bitbucket.md @@ -0,0 +1,14 @@ +# Bitbucket + +Bitbucket is a Git based hosting and source code repository service that is Atlassian's alternative to other products like GitHub, GitLab etc + +Bitbucket offers hosting options via Bitbucket Cloud (Atlassian's servers), Bitbucket Server (customer's on-premise) or Bitbucket Data Centre (number of servers in customers on-premise or cloud environment) + +{% resources %} + {% Blog "https://bitbucket.org/product", "Bitbucket Website" %} + {% Blog "https://bitbucket.org/product/guides/getting-started/overview#a-brief-overview-of-bitbucket", "A brief overview of Bitbucket" %} + {% Blog "https://bitbucket.org/product/guides/basics/bitbucket-interface", "Getting started with Bitbucket" %} + {% Blog "https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud", "Using Git with Bitbucket Cloud" %} + {% Blog "https://www.youtube.com/watch?v=M44nEyd_5To", "Bitbucket tutorial | How to use Bitbucket Cloud" %} + {% Blog "https://www.youtube.com/watch?v=i5T-DB8tb4A", "Bitbucket Tutorial | Bitbucket for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/108-repo-hosting-services/index.md b/src/roadmaps/blockchain/content/108-repo-hosting-services/index.md new file mode 100644 index 000000000..9aa94ded6 --- /dev/null +++ b/src/roadmaps/blockchain/content/108-repo-hosting-services/index.md @@ -0,0 +1,10 @@ +# Repo Hosting Services + +When working on a team, you often need a remote place to put your code so others can access it, create their own branches, and create or review pull requests. These services often include issue tracking, code review, and continuous integration features. A few popular choices are GitHub, GitLab, BitBucket, and AWS CodeCommit. + +{% resources %} + {% Official "https://github.com/features/", "GitHub" %} + {% Official "https://about.gitlab.com/", "GitLab" %} + {% Official "https://bitbucket.org/product/guides/getting-started/overview", "BitBucket" %} + {% Blog "https://bitbucket.org/product/code-repository", "How to choose the best source code repository" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/100-react.md b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/100-react.md new file mode 100644 index 000000000..ce32b32f0 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/100-react.md @@ -0,0 +1,14 @@ +{% Roadmap "/react", "React" %} + +# React + +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. + +{% resources %} + {% Blog "https://reactjs.org/", "React Website" %} + {% Blog "https://reactjs.org/tutorial/tutorial.html", "Official Getting Started" %} + {% Course "https://egghead.io/courses/the-beginner-s-guide-to-react", "The Beginners Guide to React" %} + {% Course "https://www.youtube.com/watch?v=nTeuhbP7wdE", "React JS Course for Beginners" %} + {% Course "https://www.youtube.com/watch?v=bMknfKXIFA8", "React Course - Beginners Tutorial for React JavaScript Library [2022]" %} + {% Blog "https://www.youtube.com/watch?v=i793Qm6kv3U", "Understanding Reacts UI Rendering Process" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/101-angular.md b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/101-angular.md new file mode 100644 index 000000000..9b6d9e926 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/101-angular.md @@ -0,0 +1,9 @@ +{% Roadmap "/angular", "Angular" %} + +# Angular + +Angular is a component based front-end development framework built on TypeScript which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more. + +{% resources %} + {% Blog "https://angular.io/start", "Official - Getting started with Angular" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/102-vue.md b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/102-vue.md new file mode 100644 index 000000000..c2303ac5d --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/102-vue.md @@ -0,0 +1,12 @@ +{% Roadmap "/vue", "Vue" %} + +# Vue.js + +Vue.js is an open-source JavaScript framework for building user interfaces and single-page applications. It is mainly focused on front end development. + +{% resources %} + {% Blog "https://vuejs.org/", "Vue.js Website" %} + {% Official "https://vuejs.org/v2/guide/", "Official Getting Started" %} + {% Course "https://www.youtube.com/watch?v=FXpIoQ_rT_c", "Vue.js Course for Beginners" %} + {% Course "https://www.youtube.com/watch?v=qZXt1Aom3Cs", "Vue.js Crash Course" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/index.md b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/index.md new file mode 100644 index 000000000..78ec2f23e --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/100-frontend-frameworks/index.md @@ -0,0 +1,9 @@ +# Frontend Frameworks + +Web frameworks are designed to write web applications. Frameworks are collections of libraries that aid in the development of a software product or website. Frameworks for web application development are collections of various tools. Frameworks vary in their capabilities and functions, depending on the tasks set. They define the structure, establish the rules, and provide the development tools required. + +{% resources %} + {% Blog "https://moralis.io/web3-frontend-everything-you-need-to-learn-about-building-dapp-frontends/", "Web3 Frontend – Everything You Need to Learn About Building Dapp Frontends" %} + {% Blog "https://www.youtube.com/watch?v=D_MO9vIRBcA", "What is the difference between a framework and a library?" %} + {% Blog "https://www.youtube.com/watch?v=cuHDQhDhvPE", " Which JS Framework is best?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/100-testing.md b/src/roadmaps/blockchain/content/109-dapps/100-testing.md new file mode 100644 index 000000000..04360d660 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/100-testing.md @@ -0,0 +1,11 @@ +# Testing + +A key to building software that meets requirements without defects is testing. Software testing helps developers know they are building the right software. When tests are run as part of the development process (often with continuous integration tools), they build confidence and prevent regressions in the code. + +Like traditional software, testing dApps involves testing the entire stack that makes up the dApp (backend, frontend, db, etc.). + +{% resources %} + {% Blog "https://www.guru99.com/software-testing-introduction-importance.html", "What is Software Testing?" %} + {% Blog "https://www.browserstack.com/guide/testing-pyramid-for-test-automation", "Testing Pyramid" %} + {% Blog "https://rhian-is.medium.com/how-to-test-dapps-decentralized-applications-4662cf61db90", "How to test dApps (decentralized applications)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/101-deployment.md b/src/roadmaps/blockchain/content/109-dapps/101-deployment.md new file mode 100644 index 000000000..6daf9ac58 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/101-deployment.md @@ -0,0 +1,8 @@ +# Deployment + +Deploying a dApp involves deployment of all of its layers, generally through a management framework. + +{% resources %} + {% Blog "https://www.moesif.com/blog/blockchain/ethereum/Tutorial-for-building-Ethereum-Dapp-with-Integrated-Error-Monitoring/", "Tutorial for building an Ethereum DApp with Integrated Web3 Monitoring" %} + {% Blog "https://youtu.be/Wn_Kb3MR_cU", "Build and Deploy a Modern Web 3.0 Blockchain App" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/102-maintenance.md b/src/roadmaps/blockchain/content/109-dapps/102-maintenance.md new file mode 100644 index 000000000..12f6da561 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/102-maintenance.md @@ -0,0 +1,3 @@ +# Maintenance + +dApps can be harder to maintain because the code and data published to the blockchain is harder to modify. It’s hard for developers to make updates to their dapps (or the underlying data stored by a dapp) once they are deployed, even if bugs or security risks are identified in an old version. diff --git a/src/roadmaps/blockchain/content/109-dapps/103-architecture.md b/src/roadmaps/blockchain/content/109-dapps/103-architecture.md new file mode 100644 index 000000000..8f6aad6e9 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/103-architecture.md @@ -0,0 +1,9 @@ +# Architecture + +Unlike Web2 applications, in Web3 there’s no centralized database that stores the application state or user identity, and there’s no centralized web server where the backend logic resides. + +{% resources %} + {% Blog "https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application", "The Architecture of a Web 3.0 application" %} + {% Blog "https://www.freecodecamp.org/news/how-to-design-a-secure-backend-for-your-decentralized-application-9541b5d8bddb/", "Decentralized Applications Architecture: Back End, Security and Design Patterns" %} + {% Blog "https://youtu.be/KBSq8-LnUDI?t=286", "Blockchain Development: Dapp Architecture" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/104-security.md b/src/roadmaps/blockchain/content/109-dapps/104-security.md new file mode 100644 index 000000000..4faf9d49f --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/104-security.md @@ -0,0 +1,9 @@ +# Security + +dApps face unique security challenges as they run on immutable blockchains. dApps are harder to maintain, and developers cannot modify or update their codes once deployed. Therefore, special consideration must be taken before putting it on the blockchain. + +{% resources %} + {% Blog "https://github.com/Dexaran/DAPP-security-standards/blob/master/README.md", "DAPP Security Standards" %} + {% Blog "https://livebook.manning.com/book/building-ethereum-dapps/chapter-14/", "dApp Security Considerations" %} + {% Blog "https://www.immunebytes.com/blog/dapp-security/#Benefits_of_DApps_Security", "dApp Security:All You Need to Know" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/105-applicability/100-defi.md b/src/roadmaps/blockchain/content/109-dapps/105-applicability/100-defi.md new file mode 100644 index 000000000..828117b3d --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/105-applicability/100-defi.md @@ -0,0 +1,9 @@ +# DeFi + +Decentralized finance offers financial instruments without relying on intermediaries such as brokerages, exchanges, or banks by using smart contracts on a blockchain. + +{% resources %} + {% Blog "https://www.investopedia.com/decentralized-finance-defi-5113835", "Decentralized Finance (DeFi) Definition" %} + {% Blog "https://www.coinbase.com/learn/crypto-basics/what-is-defi", "What is DeFi?" %} + {% Blog "https://www.youtube.com/watch?v=17QRFlml4pA", "What is DeFi? (Decentralized Finance Animated)" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/105-applicability/101-daos.md b/src/roadmaps/blockchain/content/109-dapps/105-applicability/101-daos.md new file mode 100644 index 000000000..c077fe3df --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/105-applicability/101-daos.md @@ -0,0 +1,8 @@ +# DAOs + +A decentralized autonomous organization (DAO) is an emerging form of legal structure. With no central governing body, every member within a DAO typically shares a common goal and attempt to act in the best interest of the entity. Popularized through cryptocurrency enthusiasts and blockchain technology, DAOs are used to make decisions in a bottoms-up management approach. + +{% resources %} + {% Blog "https://consensys.net/blog/blockchain-explained/what-is-a-dao-and-how-do-they-work/", "What Is A DAO And How Do They Work?" %} + {% Blog "https://www.investopedia.com/tech/what-dao/", "Decentralized Autonomous Organization (DAO)" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/105-applicability/102-nfts.md b/src/roadmaps/blockchain/content/109-dapps/105-applicability/102-nfts.md new file mode 100644 index 000000000..79bb7ac87 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/105-applicability/102-nfts.md @@ -0,0 +1,9 @@ +# NFTs + +A non-fungible token (NFT) is a financial security consisting of digital data stored in a blockchain, a form of distributed ledger. The ownership of an NFT is recorded in the blockchain, and can be transferred by the owner, allowing NFTs to be sold and traded. + +{% resources %} + {% Blog "https://www.investopedia.com/non-fungible-tokens-nft-5115211", "Non-Fungible Token (NFT)" %} + {% Blog "https://www.theverge.com/22310188/nft-explainer-what-is-blockchain-crypto-art-faq", "NFTs, explained" %} + {% Blog "https://youtu.be/NNQLJcJEzv0", "NFT Explained In 5 Minutes | What Is NFT? - Non Fungible Token" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/105-applicability/103-payments.md b/src/roadmaps/blockchain/content/109-dapps/105-applicability/103-payments.md new file mode 100644 index 000000000..05576b1e8 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/105-applicability/103-payments.md @@ -0,0 +1,8 @@ +# Payments + +Blockchain technology has the ability to eliminate all the tolls exacted by centralized organization when transferring payments. + +{% resources %} + {% Blog "https://consensys.net/blockchain-use-cases/finance/#payments", "How does blockchain impact global payments and remittances?" %} + {% Blog "https://blog.chain.link/smart-contract-use-cases/#external-payments", "Smart Contract Use Cases - Payments" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/105-applicability/104-insurance.md b/src/roadmaps/blockchain/content/109-dapps/105-applicability/104-insurance.md new file mode 100644 index 000000000..61c696dcb --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/105-applicability/104-insurance.md @@ -0,0 +1,8 @@ +# Insurance + +Blockchain technology has the ability to automate claims functions by verifying real-world data through the use of an oracle. It also automates payments between parties for claims and thus lower administrative costs for insurance companies. + +{% resources %} + {% Blog "https://blog.chain.link/smart-contract-use-cases/#insurance", "Smart Contract Use Cases - Insurance" %} + {% Blog "https://imaginovation.net/blog/blockchain-insurance-industry-examples/", "Top 7 Use Cases of Blockchain in the Insurance Industry" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/105-applicability/index.md b/src/roadmaps/blockchain/content/109-dapps/105-applicability/index.md new file mode 100644 index 000000000..674f93bea --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/105-applicability/index.md @@ -0,0 +1,9 @@ +# Applicability + +dApps can be used for just about anything that requires two or more parties to agree on something. When the appropriate conditions are met, the smart contract will execute automatically. An important differentiation is that these transactions are no longer based on trust but they are rather based on cryptographically-backed smart contracts. + +{% resources %} + {% Blog "https://www.sofi.com/learn/content/what-is-a-dapp/", "What Is a dApp? A Guide to Decentralized Applications" %} + {% Blog "https://consensys.net/blockchain-use-cases/", "Blockchain Use Cases and Applications by Industry" %} + {% Blog "https://roboticsandautomationnews.com/2022/05/20/the-real-world-use-cases-for-blockchain-technology/", "The real-world use cases for blockchain technology" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/100-alchemy.md b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/100-alchemy.md new file mode 100644 index 000000000..7bb15b9e9 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/100-alchemy.md @@ -0,0 +1,7 @@ +# Alchemy + +Alchemy is a developer platform that empowers companies to build scalable and reliable decentralized applications without the hassle of managing blockchain infrastructure in-house. + +{% resources %} + {% Blog "https://www.alchemy.com/", "Alchemy official site" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/101-infura.md b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/101-infura.md new file mode 100644 index 000000000..9cea612d0 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/101-infura.md @@ -0,0 +1,7 @@ +# Infura + +Infura provides the tools and infrastructure that allow developers to easily take their blockchain application from testing to scaled deployment - with simple, reliable access to Ethereum and IPFS. + +{% resources %} + {% Blog "https://infura.io/", "Infura official site" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/102-moralis.md b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/102-moralis.md new file mode 100644 index 000000000..d00db7e5a --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/102-moralis.md @@ -0,0 +1,7 @@ +# Moralis + +Moralis provides a single workflow for building high performance dapps. Fully compatible with your favorite web3 tools and services. + +{% resources %} + {% Blog "https://moralis.io/", "Moralis official site" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/103-quicknode.md b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/103-quicknode.md new file mode 100644 index 000000000..31806eaa3 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/103-quicknode.md @@ -0,0 +1,7 @@ +# Quicknode + +QuickNode is a Web3 developer platform used to build and scale blockchain applications. + +{% resources %} + {% Blog "https://www.quicknode.com/", "Quicknode official site" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/index.md b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/index.md new file mode 100644 index 000000000..639c59a80 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/106-node-as-a-service/index.md @@ -0,0 +1,8 @@ +# Node as a Service (NaaS) + +Running your own blockchain node can be challenging, especially when getting started or while scaling fast. There are a number of services that run optimized node infrastructures for you, so you can focus on developing your application or product instead. + +{% resources %} + {% Blog "https://www.infoq.com/articles/blockchain-as-a-service-get-block/", "Blockchain Node Providers and How They Work" %} + {% Blog "https://ethereum.org/en/developers/docs/nodes-and-clients/nodes-as-a-service/", "Node as a Service - Ethereum" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/100-javascript.md b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/100-javascript.md new file mode 100644 index 000000000..d36be3b51 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/100-javascript.md @@ -0,0 +1,14 @@ +# JavaScript + +JavaScript, often abbreviated JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. It lets us add interactivity to pages e.g. you might have seen sliders, alerts, click interactions, and popups etc on different websites -- all of that is built using JavaScript. Apart from being used in the browser, it is also used in other non-browser environments as well such as Node.js for writing server-side code in JavaScript, Electron for writing desktop applications, React Native for mobile applications and so on. + +{% resources %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} + {% Blog "https://javascript.info/", "The Modern JavaScript Tutorial" %} + {% Blog "https://eloquentjavascript.net/", "Eloquent Javascript - Book" %} + {% Blog "https://github.com/getify/You-Dont-Know-JS", "You Dont Know JS Yet (book series) " %} + {% Blog "https://youtu.be/hdI2bqOjy3c", "JavaScript Crash Course for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=fBNz5xF-Kx4", "Node.js Crash Course" %} + {% Blog "https://www.youtube.com/watch?v=TlB_eWDSMt4", "Node.js Tutorial for Beginners" %} + {% Course "https://www.codecademy.com/learn/introduction-to-javascript", "Codecademy - Learn JavaScript" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/101-python.md b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/101-python.md new file mode 100644 index 000000000..3563722e0 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/101-python.md @@ -0,0 +1,14 @@ +{% Roadmap "/python", "Python" %} + +# Python + +Python is a well known programming language which is both a strongly typed and a dynamically typed language. Being an interpreted language, code is executed as soon as it is written and the Python syntax allows for writing code in functional, procedural or object-oriented programmatic ways. + +{% resources %} + {% Blog "https://www.python.org/", "Python Website" %} + {% Blog "https://www.python.org/about/gettingstarted/", "Python Getting Started" %} + {% Course "https://www.w3schools.com/python/", "W3Schools - Python Tutorial " %} + {% Course "https://ehmatthes.github.io/pcc/", "Python Crash Course" %} + {% Blog "https://automatetheboringstuff.com/", "Automate the Boring Stuff" %} + {% Course "https://www.codecademy.com/learn/learn-python", "Codecademy - Learn Python 2" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md new file mode 100644 index 000000000..b1e99b582 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md @@ -0,0 +1,14 @@ +{% Roadmap "/golang", "Go" %} + + +# Go + +Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more. + +{% resources %} + {% Blog "https://go.dev/tour/welcome/1", "A Tour of Go – Go Basics" %} + {% Blog "https://go.dev/doc/", "Go Reference Documentation" %} + {% Blog "https://gobyexample.com/", "Go by Example - annotated example programs" %} + {% Course "https://www.codecademy.com/learn/learn-go", "Learn Go | Codecademy" %} + {% Course "https://www.w3schools.com/go/", "W3Schools Go Tutorial " %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/index.md b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/index.md new file mode 100644 index 000000000..ec749399c --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/107-supporting-languages/index.md @@ -0,0 +1,4 @@ +# Supporting Languages + +While the bulk of the logic in blockchain applications is handled by smart contracts, all the surrounding services that support those smart contracts (frontend, monitoring, etc.) are often written in other languages. + diff --git a/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/100-ethers-js.md b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/100-ethers-js.md new file mode 100644 index 000000000..3d5692e0a --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/100-ethers-js.md @@ -0,0 +1,7 @@ +# Ethers.js + +The ethers.js library aims to be a complete and compact library for interacting with the Ethereum Blockchain and its ecosystem. It was originally designed for use with ethers.io and has since expanded into a more general-purpose library. + +{% resources %} + {% Blog "https://docs.ethers.io/", "Ethers.js Documentation" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/101-web3-js.md b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/101-web3-js.md new file mode 100644 index 000000000..4304c9cca --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/101-web3-js.md @@ -0,0 +1,7 @@ +# Web3.js + +web3.js is a collection of libraries that allow you to interact with a local or remote ethereum node using HTTP, IPC or WebSocket. + +{% resources %} + {% Blog "https://web3js.readthedocs.io/", "web3.js Documentation" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/102-moralis.md b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/102-moralis.md new file mode 100644 index 000000000..c0d48e930 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/102-moralis.md @@ -0,0 +1,7 @@ +# Moralis SDK + +A library that gives you access to the powerful Moralis Server backend from your JavaScript app. + +{% resources %} + {% Blog "https://github.com/MoralisWeb3/Moralis-JS-SDK/blob/main/README.md", "Moralis SDK" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/index.md b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/index.md new file mode 100644 index 000000000..ebf21185c --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/108-client-libraries/index.md @@ -0,0 +1,3 @@ +# Client libraries + +You don't need to write every smart contract in your project from scratch. There are many open source smart contract libraries available that provide reusable building blocks for your project that can save you from having to reinvent the wheel. diff --git a/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/100-geth.md b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/100-geth.md new file mode 100644 index 000000000..1dbea8073 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/100-geth.md @@ -0,0 +1,7 @@ +# Geth + +Go Ethereum (Geth) is one of the three original implementations (along with C++ and Python) of the Ethereum protocol. It is written in Go, fully open source and licensed under the GNU LGPL v3. + +{% resources %} + {% Blog "https://geth.ethereum.org/docs/", "Geth Documentation" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/101-besu.md b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/101-besu.md new file mode 100644 index 000000000..fadc0465a --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/101-besu.md @@ -0,0 +1,7 @@ +# Besu + +Besu is an Apache 2.0 licensed, MainNet compatible, Ethereum client written in Java. + +{% resources %} + {% Blog "https://github.com/hyperledger/besu", "Besu Ethereum Client" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/102-nethermind.md b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/102-nethermind.md new file mode 100644 index 000000000..b980c4979 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/102-nethermind.md @@ -0,0 +1,7 @@ +# Nethermind + +Nethermind is a high-performance, highly configurable full Ethereum protocol client built on .NET that runs on Linux, Windows, and macOS, and supports Clique, Aura, Ethash, and Proof-of-Stake consensus algorithms. + +{% resources %} + {% Blog "https://docs.nethermind.io/nethermind/", "Nethermind Documentation" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/103-substrate.md b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/103-substrate.md new file mode 100644 index 000000000..0b51ff86a --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/103-substrate.md @@ -0,0 +1,7 @@ +# Substrate + +Substrate is a Software Development Kit (SDK) specifically designed to provide you with all of the fundamental components s blockchain requires so you can focus on crafting the logic that makes your chain unique and innovative. + +{% resources %} + {% Blog "https://docs.substrate.io/quick-start/", "Substrate Documentation" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/index.md b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/index.md new file mode 100644 index 000000000..82c765bbc --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/109-client-nodes/index.md @@ -0,0 +1,4 @@ +# Client Nodes + +A blockchain is a distributed network of computers (known as nodes) running software that can verify blocks and transaction data. The software application, known as a client, must be run on your computer to turn it into a blockchain node. + diff --git a/src/roadmaps/blockchain/content/109-dapps/index.md b/src/roadmaps/blockchain/content/109-dapps/index.md new file mode 100644 index 000000000..db9f02e92 --- /dev/null +++ b/src/roadmaps/blockchain/content/109-dapps/index.md @@ -0,0 +1,8 @@ +# dApps + +A decentralised application (dApp) is an application that can operate autonomously, through the use of smart contracts that run on a blockchain. Like traditional applications, dApps provide some function or utility to its users. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/dapps/", "Introduction to dApps" %} + {% Blog "https://www.coindesk.com/learn/what-is-a-dapp-decentralized-apps-explained/", "What Is a Dapp? Decentralized Apps Explained" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/100-state-and-payment-channels.md b/src/roadmaps/blockchain/content/110-building-for-scale/100-state-and-payment-channels.md new file mode 100644 index 000000000..4d116d9f3 --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/100-state-and-payment-channels.md @@ -0,0 +1,8 @@ +# State and Payment Channels + +State channels refer to the process in which users transact with one another directly outside of the blockchain, or ‘off-chain,’ and greatly minimize their use of ‘on-chain’ operations. + +{% resources %} + {% Blog "https://education.district0x.io/general-topics/understanding-ethereum/basics-state-channels/", "The Basics of State Channels" %} + {% Blog "https://www.talentica.com/blogs/state-channels-an-introduction-to-off-chain-transactions/", "State Channels: An Introduction to Off-chain Transactions" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/101-optimistic-rollups-and-fraud-proofs.md b/src/roadmaps/blockchain/content/110-building-for-scale/101-optimistic-rollups-and-fraud-proofs.md new file mode 100644 index 000000000..bf429c766 --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/101-optimistic-rollups-and-fraud-proofs.md @@ -0,0 +1,9 @@ +# Optimistic Rollups and Fraud Proofs + +‍Optimistic rollups are a layer 2 (L2) construction that improves throughput and latency on Ethereum’s base layer by moving computation and data storage off-chain. An optimistic rollup processes transactions outside of Ethereum Mainnet, reducing congestion on the base layer and improving scalability. + +Optimistic rollups allow anyone to publish blocks without providing proofs of validity. However, to ensure the chain remains safe, optimistic rollups specify a time window during which anyone can dispute a state transition. + +{% resources %} + {% Blog "https://www.alchemy.com/overviews/optimistic-rollups", "How Do Optimistic Rollups Work (The Complete Guide)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/102-zero-knowledge-rollups-and-zero-knowledge-proof.md b/src/roadmaps/blockchain/content/110-building-for-scale/102-zero-knowledge-rollups-and-zero-knowledge-proof.md new file mode 100644 index 000000000..7938c3ccf --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/102-zero-knowledge-rollups-and-zero-knowledge-proof.md @@ -0,0 +1,7 @@ +# Zero Knowledge Rollups and Zero Knowledge Proof + +Zero-knowledge rollups (ZK-rollups) are layer 2 scaling solutions that increase the throughput of a blockchain by moving computation and state-storage off-chain. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/scaling/zk-rollups", "Zero-Knowledge Rollups - Ethereum" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/103-validium.md b/src/roadmaps/blockchain/content/110-building-for-scale/103-validium.md new file mode 100644 index 000000000..f174e6947 --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/103-validium.md @@ -0,0 +1,7 @@ +# Validium + +Validium is a scaling solution that enforces integrity of transactions using validity proofs like ZK-rollups, but doesn’t store transaction data on the Ethereum Mainnet. While off-chain data availability introduces trade-offs, it can lead to massive improvements in scalability + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/scaling/validium/", "Validium - Ethereum" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/104-plasma.md b/src/roadmaps/blockchain/content/110-building-for-scale/104-plasma.md new file mode 100644 index 000000000..efcc6457f --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/104-plasma.md @@ -0,0 +1,7 @@ +# Plasma + +Plasma is a framework that allows the creation of child blockchains that use the main Ethereum chain as a layer of trust and arbitration. In Plasma, child chains can be designed to meet the requirements of specific use cases, specifically those that are not currently feasible on Ethereum. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/scaling/plasma/", "Plasma Chains - Ethereum" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/105-sidechains.md b/src/roadmaps/blockchain/content/110-building-for-scale/105-sidechains.md new file mode 100644 index 000000000..d35423b82 --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/105-sidechains.md @@ -0,0 +1,8 @@ +# Sidechains + +A sidechain is a separate blockchain network that connects to another blockchain – called a parent blockchain or mainnet – via a two-way peg. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/scaling/sidechains/", "Sidechains - Ethereum" %} + {% Blog "https://www.coindesk.com/learn/an-introduction-to-sidechains", "An Introduction to Sidechains" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/106-ethereum-2.md b/src/roadmaps/blockchain/content/110-building-for-scale/106-ethereum-2.md new file mode 100644 index 000000000..1cbec6383 --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/106-ethereum-2.md @@ -0,0 +1,8 @@ +# Ethereum 2 + +Ethereum 2.0 marks a long-anticipated upgrade to the Ethereum public mainnet. Designed to accelerate Ethereum’s usage and adoption by improving its performance, Ethereum 2.0 implements Proof of Stake. + +{% resources %} + {% Blog "https://consensys.net/blog/blockchain-explained/what-is-ethereum-2/", "What Is Ethereum 2.0?" %} + {% Blog "https://www.forbes.com/advisor/investing/cryptocurrency/ethereum-2/", "What Is Ethereum 2.0? Understanding The Merge" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/107-on-chain-scaling.md b/src/roadmaps/blockchain/content/110-building-for-scale/107-on-chain-scaling.md new file mode 100644 index 000000000..d73bc8300 --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/107-on-chain-scaling.md @@ -0,0 +1,7 @@ +# On-Chain Scaling + +On-chain scaling refers to any direct modification made to a blockchain, like data sharding and execution sharding in the incoming version of Ethereum 2.0. Another type of on-chain scaling would be a sidechain with two-way bridge to Ethereum, like Polygon. + +{% resources %} + {% Blog "https://ethereum.org/en/developers/docs/scaling/", "Scaling - Ethereum" %} +{% endresources %} diff --git a/src/roadmaps/blockchain/content/110-building-for-scale/index.md b/src/roadmaps/blockchain/content/110-building-for-scale/index.md new file mode 100644 index 000000000..269b76084 --- /dev/null +++ b/src/roadmaps/blockchain/content/110-building-for-scale/index.md @@ -0,0 +1,3 @@ +# Building for Scale + +Due to the limited number of transactions-per-second (TPS) built-in to blockchains, a number of alternative mechanism and technologies have emerged to aid the scaling of blockchain dApps. diff --git a/src/roadmaps/computer-science/computer-science.md b/src/roadmaps/computer-science/computer-science.md new file mode 100644 index 000000000..2f6a919c9 --- /dev/null +++ b/src/roadmaps/computer-science/computer-science.md @@ -0,0 +1,47 @@ +--- +jsonUrl: "/jsons/computer-science.json" +pdfUrl: "/pdfs/computer-science.pdf" +order: 1 +featuredTitle: "Computer Science" +featuredDescription: "Curriculum with free resources for a self-taught developer." +title: "Computer Science" +description: "Computer Science curriculum with free resources for a self-taught developer." +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 3009.05 +seo: + title: "Computer Science Roadmap: Curriculum for the self taught developer" + description: "Computer Science study plan with free resources for the self-taught and bootcamp grads wanting to learn Computer Science." + keywords: + - "computer science roadmap" + - "computer science" + - "computer science roadmap 2022" + - "guide to computer science" + - "software engineer roadmap" + - "software engineer roadmap 2022" + - "self-taught computer science roadmap" + - "computer science skills" + - "computer science skills test" + - "cs roadmap" + - "computer science curriculum" + - "cs curriculum" + - "skills for computer science" + - "what is computer science" + - "computer science quiz" + - "computer science interview questions" +relatedRoadmaps: + - "frontend" + - "backend" + - "devops" + - "software-design-architecture" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/computer-science/content/100-roadmap-note.md b/src/roadmaps/computer-science/content/100-roadmap-note.md new file mode 100644 index 000000000..2660b7fa5 --- /dev/null +++ b/src/roadmaps/computer-science/content/100-roadmap-note.md @@ -0,0 +1,8 @@ +# Readme + +Please note that this is a study plan for software engineering, not web development, we have [separate roadmaps for web development](/), if you are interested. + +It's not an exhaustive list and is a highly opinionated list of topics. The roadmap is still a work in progress and we will continue to improve it further. I would love to hear your feedback and suggestions for improving this roadmap. + +Please [create an issue with your suggestions](https://github.com/kamranahmedse/developer-roadmap/issues) or [reach out to me on twitter](https://twitter.com/kamranahmedse) with your feedback and suggestions for improving this roadmap further. + diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/100-c-plus-plus.md b/src/roadmaps/computer-science/content/101-pick-a-language/100-c-plus-plus.md new file mode 100644 index 000000000..cc04816f8 --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/100-c-plus-plus.md @@ -0,0 +1,8 @@ +# C++ + +C++ is a powerful general-purpose programming language. It can be used to develop operating systems, browsers, games, and so on. C++ supports different ways of programming like procedural, object-oriented, functional, and so on. This makes C++ powerful as well as flexible. + +{% resources %} + {% Blog "https://learncpp.com/", "Learn Cpp" %} + {% Blog "https://en.cppreference.com/", "C++ Reference" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/101-c.md b/src/roadmaps/computer-science/content/101-pick-a-language/101-c.md new file mode 100644 index 000000000..9e55abce3 --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/101-c.md @@ -0,0 +1,10 @@ +# C + +C is a general-purpose computer programming language. It was created in the 1970s by Dennis Ritchie, and remains very widely used and influential. By design, C's features cleanly reflect the capabilities of the targeted CPUs. + +{% resources %} + {% Blog "https://www.w3schools.com/c/", "Learn C - W3Schools" %} + {% Blog "https://www.tutorialspoint.com/cprogramming/index.htm", "Learn C - Tutorials Point" %} + {% Blog "https://www.youtube.com/watch?v=KJgsSFOSQv0", "C Programming Tutorial for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=j-_s8f5K30I", "Learn C Programming with Dr. Chuck" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/102-java.md b/src/roadmaps/computer-science/content/101-pick-a-language/102-java.md new file mode 100644 index 000000000..7eaa324c0 --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/102-java.md @@ -0,0 +1,13 @@ +{% Roadmap "/java", "Java" %} + +# Java + +Java is general-purpose language, primarily used for Internet-based applications. +It was created in 1995 by James Gosling at Sun Microsystems and is one of the most popular options for backend developers. + +{% resources %} + {% Official "https://www.java.com/", "Java Website" %} + {% Blog "https://www.codecademy.com/learn/learn-java", "Codeacademy - Free Course" %} + {% Blog "https://www.w3schools.com/java/", "W3 Schools Tutorials" %} + {% Blog "https://www.youtube.com/watch?v=eIrMbAQSU34", "Java Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/103-python.md b/src/roadmaps/computer-science/content/101-pick-a-language/103-python.md new file mode 100644 index 000000000..1d4d8a591 --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/103-python.md @@ -0,0 +1,18 @@ +{% Roadmap "/python", "Python" %} + +# Python + +Python is a well known programming language which is both a strongly typed and a dynamically typed language. Being an interpreted language, code is executed as soon as it is written and the Python syntax allows for writing code in functional, procedural or object-oriented programmatic ways. + +{% resources %} + {% Official "https://www.python.org/", "Python Website" %} + {% Blog "https://www.python.org/about/gettingstarted/", "Python Getting Started" %} + {% Blog "https://automatetheboringstuff.com/", "Automate the Boring Stuff" %} + {% Blog "https://www.freecodecamp.org/news/how-to-learn-python/", "FreeCodeCamp.org - How to Learn Python ? " %} + {% Course "https://pythonprinciples.com/", "Python principles - Python basics" %} + {% Course "https://www.w3schools.com/python/", "W3Schools - Python Tutorial " %} + {% Course "https://ehmatthes.github.io/pcc/", "Python Crash Course" %} + {% Course "https://www.codecademy.com/learn/learn-python", "Codecademy - Learn Python 2" %} + {% Blog "https://thenewstack.io/an-introduction-to-python-for-non-programmers/", "An Introduction to Python for Non-Programmers" %} + {% Blog "https://thenewstack.io/getting-started-with-python-and-influxdb/", "Getting Started with Python and InfluxDB" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/104-go.md b/src/roadmaps/computer-science/content/101-pick-a-language/104-go.md new file mode 100644 index 000000000..d8efe85a5 --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/104-go.md @@ -0,0 +1,16 @@ +{% Roadmap "/golang", "Go" %} + + +# Go + +Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more. + +{% resources %} + {% Blog "https://go.dev/tour/welcome/1", "A Tour of Go – Go Basics" %} + {% Blog "https://go.dev/doc/", "Go Reference Documentation" %} + {% Blog "https://gobyexample.com/", "Go by Example - annotated example programs" %} + {% Course "https://www.codecademy.com/learn/learn-go", "Learn Go | Codecademy" %} + {% Course "https://www.w3schools.com/go/", "W3Schools Go Tutorial " %} + {% Blog "https://thenewstack.io/make-a-restful-json-api-go/", "Making a RESTful JSON API in Go" %} + {% Blog "https://thenewstack.io/go-the-programming-language-of-the-cloud/", "Go, the Programming Language of the Cloud" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/105-c-sharp.md b/src/roadmaps/computer-science/content/101-pick-a-language/105-c-sharp.md new file mode 100644 index 000000000..2d0b5c73d --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/105-c-sharp.md @@ -0,0 +1,10 @@ +# C# + +C# (pronounced "C sharp") is a general purpose programming language made by Microsoft. It is used to perform different tasks and can be used to create web apps, games, mobile apps, etc. + +{% resources %} + {% Blog "https://docs.microsoft.com/en-us/learn/paths/csharp-first-steps/?WT.mc_id=dotnet-35129-website", "C# Learning Path" %} + {% Blog "https://www.w3schools.com/cs/index.php", "C# on W3 schools" %} + {% Blog "https://docs.microsoft.com/en-us/shows/CSharp-101/?WT.mc_id=Educationalcsharp-c9-scottha", "Introduction to C#" %} + {% Blog "https://www.youtube.com/watch?v=gfkTfcpWqAY&list=PLTjRvDozrdlz3_FPXwb6lX_HoGXa09Yef", "C# tutorials" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/106-rust.md b/src/roadmaps/computer-science/content/101-pick-a-language/106-rust.md new file mode 100644 index 000000000..b3601aab6 --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/106-rust.md @@ -0,0 +1,10 @@ +# Rust + +Rust is a modern systems programming language focusing on safety, speed, and concurrency. It accomplishes these goals by being memory safe without using garbage collection. + +{% resources %} + {% Blog "https://doc.rust-lang.org/book/", "The Rust Programming Language - online book" %} + {% Blog "https://doc.rust-lang.org/stable/rust-by-example/index.html", "Rust by Example - collection of runnable examples" %} + {% Blog "https://thenewstack.io/rust-vs-go-why-theyre-better-together/", "Rust vs. Go: Why They’re Better Together" %} + {% Blog "https://thenewstack.io/rust-by-the-numbers-the-rust-programming-language-in-2021/", "Rust by the Numbers: The Rust Programming Language in 2021" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/101-pick-a-language/index.md b/src/roadmaps/computer-science/content/101-pick-a-language/index.md new file mode 100644 index 000000000..807a56fc4 --- /dev/null +++ b/src/roadmaps/computer-science/content/101-pick-a-language/index.md @@ -0,0 +1,19 @@ +# Pick a Language + +You need to pick a programming language to learn the Computer Science concepts. My personal recommendation would be to pick C++ or C and the reason for that is: + +* They allow you to deal with pointers and memory allocation/deallocation, so you feel the data structures and algorithms in your bones. In higher level languages like Python or Java, these are hidden from you. In day to day work, that's terrific, but when you're learning how these low-level data structures are built, it's great to feel close to the metal. +* You will be able to find a lot of resources for the topics listed in this roadmap using C or C++. You can find a lot of resources for Python and Java, but they are not as abundant as C++ and C. + +Given below is the list of resources; pick ones relevant to the language of your choice. + +{% resources %} + {% Blog "https://www.w3schools.com/cpp/", "Learn C++ - W3Schools" %} + {% Blog "https://www.tutorialspoint.com/cplusplus/index.htm", "Learn C++ - Tutorials Point" %} + {% Blog "https://www.youtube.com/watch?v=8jLOx1hD3_o", "C++ Programming Course - Beginner to Advanced" %} + {% Blog "https://www.youtube.com/watch?v=vLnPwxZdW4Y", "C++ Tutorial for Beginners - Full Course" %} + {% Blog "https://www.w3schools.com/c/", "Learn C - W3Schools" %} + {% Blog "https://www.tutorialspoint.com/cprogramming/index.htm", "Learn C - Tutorials Point" %} + {% Blog "https://www.youtube.com/watch?v=KJgsSFOSQv0", "C Programming Tutorial for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=j-_s8f5K30I", "Learn C Programming with Dr. Chuck" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/100-array.md b/src/roadmaps/computer-science/content/102-data-structures/100-array.md new file mode 100644 index 000000000..c52103049 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/100-array.md @@ -0,0 +1,11 @@ +# Array + +Arrays store elements in contiguous memory locations, resulting in easily calculable addresses for the elements stored and this allows faster access to an element at a specific index. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=QJNwK2uJyGs", "Array Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.coursera.org/lecture/data-structures/arrays-OsBSF", "Array Data Structure - Coursera" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE", "UC Berkeley CS61B - Linear and Multi-Dim Arrays (Start watching from 15m 32s)" %} + {% Blog "https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV", "Dynamic Arrays - Coursera" %} + {% Blog "https://www.youtube.com/watch?v=1jtrQqYpt7g", "Jagged Arrays" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/101-linked-list.md b/src/roadmaps/computer-science/content/102-data-structures/101-linked-list.md new file mode 100644 index 000000000..ba099f41c --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/101-linked-list.md @@ -0,0 +1,15 @@ +# Linked Lists + +Arrays store elements in contiguous memory locations, resulting in easily calculable addresses for the elements stored and this allows faster access to an element at a specific index. Linked lists are less rigid in their storage structure and elements are usually not stored in contiguous locations, hence they need to be stored with additional tags giving a reference to the next element. This difference in the data storage scheme decides which data structure would be more suitable for a given situation. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=odW9FU8jPRQ", "Linked List Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.youtube.com/watch?v=F8AbOfQwl1c", "Linked Lists in 4 minutes" %} + {% Blog "https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK", "Singly Linked Lists" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0", "CS 61B Lecture 7: Linked Lists I" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w", "CS 61B Lecture 7: Linked Lists II" %} + {% Blog "https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9", "Core: Linked Lists vs Arrays" %} + {% Blog "https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd", "In the Real World: Linked Lists vs Arrays" %} + {% Blog "https://www.youtube.com/watch?v=YQs6IC-vgmo", "Why you should avoid Linked Lists?" %} + {% Blog "https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD", "Doubly Linked Lists" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/102-stack.md b/src/roadmaps/computer-science/content/102-data-structures/102-stack.md new file mode 100644 index 000000000..d45d362ee --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/102-stack.md @@ -0,0 +1,12 @@ +# Stack + +Stack is a linear collection of items where items are inserted and removed in a particular order. Stack is also called a LIFO Data Structure because it follows the "Last In First Out" principle i.e. the item that is inserted in the last is the one that is taken out first. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=I5lq6sCuABE", "Stack Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.youtube.com/watch?v=KcT3aVgrrpU", "Stack in 3 minutes" %} + {% Blog "https://www.coursera.org/lecture/data-structures/stacks-UdKzQ", "Stack Data Structure" %} +{% endresources %} + + + diff --git a/src/roadmaps/computer-science/content/102-data-structures/103-queue.md b/src/roadmaps/computer-science/content/102-data-structures/103-queue.md new file mode 100644 index 000000000..df26ad765 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/103-queue.md @@ -0,0 +1,12 @@ +# Queue + +Queue is a linear collection of items where items are inserted and removed in a particular order. The queue is also called a FIFO Data Structure because it follows the "First In, First Out" principle i.e., the item that is inserted in the first is the one that is taken out first. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=mDCi1lXd9hc", "Queue Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.youtube.com/watch?v=D6gu-_tmEpQ", "Queue in 3 Minutes" %} + {% Blog "https://www.coursera.org/lecture/data-structures/queues-EShpq", "Queues - Coursera" %} + {% Blog "https://en.wikipedia.org/wiki/Circular_buffer", "Circular Buffer - Wikipedia" %} +{% endresources %} + + diff --git a/src/roadmaps/computer-science/content/102-data-structures/104-hash-table.md b/src/roadmaps/computer-science/content/102-data-structures/104-hash-table.md new file mode 100644 index 000000000..8d9176b38 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/104-hash-table.md @@ -0,0 +1,15 @@ +# Hash Table + +Hash Table, Map, HashMap, Dictionary or Associative are all the names of the same data structure. It is one of the most commonly used data structures. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=jalSiaIi8j4", "Hash Table | Illustrated Data Structures" %} + {% Blog "https://youtu.be/knV86FlSXJ8", "Hash Table in 4 Minutes" %} + {% Blog "https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9", "Hashing with Chaining" %} + {% Blog "https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=10", "Table Doubling, Karp-Rabin" %} + {% Blog "https://www.youtube.com/watch?v=rvdJDijO2Ro&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=11", "Open Addressing, Cryptographic Hashing" %} + {% Blog "https://www.youtube.com/watch?v=C4Kc8xzcA68", "PyCon 2010: The Mighty Dictionary" %} + {% Blog "https://www.youtube.com/watch?v=66P5FMkWoVU", "PyCon 2017: The Dictionary Even Mightier" %} + {% Blog "https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11", "(Advanced) Randomization: Universal & Perfect Hashing" %} + {% Blog "https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4", "(Advanced) Perfect hashing" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/105-tree/100-binary-tree.md b/src/roadmaps/computer-science/content/102-data-structures/105-tree/100-binary-tree.md new file mode 100644 index 000000000..7e7da8490 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/105-tree/100-binary-tree.md @@ -0,0 +1,8 @@ +# Binary Tree + +A binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=76dhtgZt38A&list=PLUl4u3cNGP63EdVPNLG3ToM6LaEUuStEY&index=9", "Binary Trees - Part 1" %} + {% Blog "https://www.youtube.com/watch?v=U1JYwHcFfso&list=PLUl4u3cNGP63EdVPNLG3ToM6LaEUuStEY&index=10", "Binary Trees - Part 2" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/105-tree/101-binary-search-tree.md b/src/roadmaps/computer-science/content/102-data-structures/105-tree/101-binary-search-tree.md new file mode 100644 index 000000000..da9abb864 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/105-tree/101-binary-search-tree.md @@ -0,0 +1,15 @@ +# Binary Search Tree + +A binary search tree, also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and less than the ones in its right subtree. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=S2W3SXGPVyU", "Tree | Illustrated Data Structures" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction", "Binary Search Trees - Coursera" %} + {% Blog "https://www.youtube.com/watch?v=76dhtgZt38A", "Binary Search Trees - MIT" %} + {% Blog "https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29", "Binary Search Tree Implementation in C++" %} + {% Blog "https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=30", "BST implementation - memory allocation in stack and heap" %} + {% Blog "https://www.youtube.com/watch?v=Ut90klNN264&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31", "Find Min and Max Element in Binary Search Tree" %} + {% Blog "https://www.youtube.com/watch?v=yEwSGhSsT0U&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36", "Check if Given Tree is Binary Search Tree or Not" %} + {% Blog "https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=37", "Delete an Element from Binary Search Tree" %} + {% Blog "https://www.youtube.com/watch?v=5cPbNCrdotA&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=38", "Inorder Successor in a binary search tree" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/105-tree/102-full-binary-tree.md b/src/roadmaps/computer-science/content/102-data-structures/105-tree/102-full-binary-tree.md new file mode 100644 index 000000000..1602129dc --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/105-tree/102-full-binary-tree.md @@ -0,0 +1,8 @@ +# Full Binary Tree + +A full Binary tree is a special type of binary tree in which every parent node/internal node has either two or no children. It is also known as a proper binary tree. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/full-binary-tree", "Full Binary Tree" %} + {% Blog "https://www.geeksforgeeks.org/types-of-binary-tree/", "Types of Binary Tree" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/105-tree/103-complete-binary-tree.md b/src/roadmaps/computer-science/content/102-data-structures/105-tree/103-complete-binary-tree.md new file mode 100644 index 000000000..becd7814e --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/105-tree/103-complete-binary-tree.md @@ -0,0 +1,8 @@ +# Complete Binary Tree + +A complete binary tree is a special type of binary tree where all the levels of the tree are filled completely except the lowest level nodes which are filled from as left as possible. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/complete-binary-tree", "Complete Binary Tree - Geeks for Geeks" %} + {% Blog "https://www.programiz.com/dsa/complete-binary-tree", "Complete Binary Tree - Programiz" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/105-tree/104-balanced-tree.md b/src/roadmaps/computer-science/content/102-data-structures/105-tree/104-balanced-tree.md new file mode 100644 index 000000000..bdd76197d --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/105-tree/104-balanced-tree.md @@ -0,0 +1,7 @@ +# Balanced Tree + +A balanced binary tree, also referred to as a height-balanced binary tree, is defined as a binary tree in which the height of the left and right subtree of any node differ by not more than 1. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/balanced-binary-tree", "Balanced Binary Tree" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/105-tree/105-unbalanced-tree.md b/src/roadmaps/computer-science/content/102-data-structures/105-tree/105-unbalanced-tree.md new file mode 100644 index 000000000..603d1e640 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/105-tree/105-unbalanced-tree.md @@ -0,0 +1,7 @@ +# Unbalanced Tree + +An unbalanced binary tree is one that is not balanced. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/balanced-binary-tree", "Balanced Binary Tree" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/105-tree/index.md b/src/roadmaps/computer-science/content/102-data-structures/105-tree/index.md new file mode 100644 index 000000000..961b9f9f7 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/105-tree/index.md @@ -0,0 +1,8 @@ +# Tree + +A tree is non-linear and a hierarchical data structure consisting of a collection of nodes such that each node of the tree stores a value and a list of references to other nodes (the “children”). + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/introduction-to-tree-data-structure-and-algorithm-tutorials/", "Tree Data Structure - Geeks for Geeks" %} + {% Blog "https://www.youtube.com/watch?v=S2W3SXGPVyU", "Tree | Illustrated Data Structures" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/106-graph/100-directed-graph.md b/src/roadmaps/computer-science/content/102-data-structures/106-graph/100-directed-graph.md new file mode 100644 index 000000000..cf312b337 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/106-graph/100-directed-graph.md @@ -0,0 +1,7 @@ +# Directed Graph + +A directed graph is graph, i.e., a set of objects (called vertices or nodes) that are connected together, where all the edges are directed from one vertex to another. A directed graph is sometimes called a digraph or a directed network. In contrast, a graph where the edges are bidirectional is called an undirected graph. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Directed_graph", "Directed Graph" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/106-graph/101-undirected-graph.md b/src/roadmaps/computer-science/content/102-data-structures/106-graph/101-undirected-graph.md new file mode 100644 index 000000000..05f3d7cd7 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/106-graph/101-undirected-graph.md @@ -0,0 +1,7 @@ +# Undirected Graph + +An undirected graph is graph, i.e., a set of objects (called vertices or nodes) that are connected together, where all the edges are bidirectional. An undirected graph is sometimes called an undirected network. In contrast, a graph where the edges point in a direction is called a directed graph. + +{% resources %} + {% Blog "https://mathinsight.org/definition/undirected_graph", "Undirected Graph" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/106-graph/102-spanning-tree.md b/src/roadmaps/computer-science/content/102-data-structures/106-graph/102-spanning-tree.md new file mode 100644 index 000000000..69cd87954 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/106-graph/102-spanning-tree.md @@ -0,0 +1,10 @@ +# Spanning Tree + +A spanning tree is a subset of Graph G, which has all the vertices covered with minimum possible number of edges. Hence, a spanning tree does not have cycles and it cannot be disconnected.. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/data_structures_algorithms/spanning_tree.htm", "Spanning Tree" %} + {% Blog "https://www.youtube.com/watch?v=oolm2VnJUKw&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=13", "CSE373 2020 - Lecture 13 - Minimum Spanning Trees" %} + {% Blog "https://www.youtube.com/watch?v=RktgPx0MarY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=14", "CSE373 2020 - Lecture 14 - Minimum Spanning Trees (cont)" %} + {% Blog "https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Greedy Algorithms: Minimum Spanning Tree" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/106-graph/103-graph-representation.md b/src/roadmaps/computer-science/content/102-data-structures/106-graph/103-graph-representation.md new file mode 100644 index 000000000..33cc0e7e8 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/106-graph/103-graph-representation.md @@ -0,0 +1,12 @@ +# Graph Representation + +A graph can either be represented as an adjacency matrix or an adjacency list. + +The adjacency matrix is a 2D array of size `V x V` where `V` is the number of vertices in a graph. Let the 2D array be `adj[][]`, a slot `adj[i][j] = 1` indicates that there is an edge from vertex `i` to vertex `j`. + +Adjacency list is an array of vectors. Size of the array is equal to the number of vertices. Let the array be `array[]`. An entry `array[i]` represents the list of vertices adjacent to the ith vertex. This representation can also be used to represent a weighted graph. The weights of edges can be represented as lists of pairs. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/graph-adjacency-matrix", "Adjacency Matrix - Graph Representation" %} + {% Blog "https://www.programiz.com/dsa/graph-adjacency-list", "Adjacency List - Graph Representation" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/106-graph/index.md b/src/roadmaps/computer-science/content/102-data-structures/106-graph/index.md new file mode 100644 index 000000000..fa421f2e7 --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/106-graph/index.md @@ -0,0 +1,16 @@ +# Graph + +Graphs in data structures are non-linear data structures made up of a finite number of nodes or vertices and the edges that connect them. Graphs in data structures are used to address real-world problems in which it represents the problem area as a network like telephone networks, circuit networks, and social networks. + +{% resources %} + {% Blog "https://www.simplilearn.com/tutorials/data-structure-tutorial/graphs-in-data-structure", "Graph Data Structure" %} + {% Blog "https://www.youtube.com/watch?v=0sQE8zKhad0", "Graph Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.youtube.com/watch?v=Sjk0xqWWPCc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=10", "CSE373 2020 - Lecture 10 - Graph Data Structures" %} + {% Blog "https://www.youtube.com/watch?v=ZTwjXj81NVY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=11", "CSE373 2020 - Lecture 11 - Graph Traversal" %} + {% Blog "https://www.youtube.com/watch?v=KyordYB3BOs&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=12", "CSE373 2020 - Lecture 12 - Depth First Search" %} + {% Blog "https://www.youtube.com/watch?v=oolm2VnJUKw&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=13", "CSE373 2020 - Lecture 13 - Minimum Spanning Trees" %} + {% Blog "https://www.youtube.com/watch?v=RktgPx0MarY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=14", "CSE373 2020 - Lecture 14 - Minimum Spanning Trees (cont)" %} + {% Blog "https://www.youtube.com/watch?v=MUe5DXRhyAo&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=15", "CSE373 2020 - Lecture 15 - Graph Algorithms (cont 2)" %} + {% Blog "https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb", "6.006 Single-Source Shortest Paths Problem" %} +{% endresources %} + diff --git a/src/roadmaps/computer-science/content/102-data-structures/107-heap.md b/src/roadmaps/computer-science/content/102-data-structures/107-heap.md new file mode 100644 index 000000000..c3bfabe6c --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/107-heap.md @@ -0,0 +1,10 @@ +# Heap + +Heap is a tree-based data structure that follows the properties of a complete binary tree and is either a Min Heap or a Max Heap. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=F_r0sJ1RqWk", "Heap | Illustrated Data Structures" %} + {% Blog "https://www.coursera.org/lecture/data-structures/introduction-2OpTs", "Priority Queue - Introduction" %} + {% Blog "https://www.youtube.com/watch?v=B7hVxCmfPtM&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=5", "Heaps and Heap Sort" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE", "CS 61B Lecture 24: Priority Queues" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/102-data-structures/index.md b/src/roadmaps/computer-science/content/102-data-structures/index.md new file mode 100644 index 000000000..c77df44af --- /dev/null +++ b/src/roadmaps/computer-science/content/102-data-structures/index.md @@ -0,0 +1,9 @@ +# Data Structures + +As the name indicates itself, a **Data Structure** is a way of organizing the data in the **memory** so that it can be used efficiently. Some common data structures are array, linked list, stack, hashtable, queue, tree, heap, and graph. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/data-structures", "What are Data Structures?" %} + {% Blog "https://www.javatpoint.com/data-structure-tutorial", " Data Structures and Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=9rhT3P1MDHk&list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY", "Data Structures Illustrated" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/100-big-o-notation.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/100-big-o-notation.md new file mode 100644 index 000000000..d183b8f63 --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/100-big-o-notation.md @@ -0,0 +1,11 @@ +# Big O Notation + +Big O Notation describes, how well an algorithm scales with the input size. It is used to describe the worst case scenario of an algorithm. It is used to compare algorithms and to determine which algorithm is better. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=V6mKVRU1evU", "Big O Notations" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98", "moviesCS 61B Lecture 19: Asymptotic Analysis" %} + {% Blog "https://www.youtube.com/watch?v=ei-A_wy5Yxw&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN&index=3", "Big Oh Notation (and Omega and Theta)" %} +{% endresources %} + diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/101-big-theta-notation.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/101-big-theta-notation.md new file mode 100644 index 000000000..590013a83 --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/101-big-theta-notation.md @@ -0,0 +1,8 @@ +# Big Theta Notation + +While Big O Notation refers to the upper bound of a function, Big Theta Notation refers to the exact bound of a function. Big Theta Notation is used to describe the exact growth rate of a function. It is denoted by the symbol Θ. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=ei-A_wy5Yxw&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN&index=3", "Big Oh Notation (and Omega and Theta)" %} + {% Blog "https://www.youtube.com/watch?v=iOq5kSKqeR4", "Asymptotic Notation - CS50" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/102-big-omega-notation.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/102-big-omega-notation.md new file mode 100644 index 000000000..9c5206daf --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/102-big-omega-notation.md @@ -0,0 +1,8 @@ +# Big Omega Notation + +Big Omega notation is used to describe the lower bound of a function. It is the opposite of Big O notation. While Big O is used to describe the worst case scenario of an algorithm, Big Omega is used to describe the best case scenario of an algorithm. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=ei-A_wy5Yxw&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN&index=3", "Big Oh Notation (and Omega and Theta)" %} + {% Blog "https://www.youtube.com/watch?v=iOq5kSKqeR4", "Asymptotic Notation - CS50" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/100-constant.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/100-constant.md new file mode 100644 index 000000000..49a2bd236 --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/100-constant.md @@ -0,0 +1,8 @@ +# Constant + +Constant time algorithms are the simplest and most efficient algorithms. They are algorithms that always take the same amount of time to run, regardless of the size of the input. This is the best case scenario for an algorithm, and is the goal of all algorithms. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=V6mKVRU1evU", "Big O Notations" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/101-logarithmic.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/101-logarithmic.md new file mode 100644 index 000000000..c380c79ce --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/101-logarithmic.md @@ -0,0 +1,8 @@ +# Logarithmic + +Logarithmic complexity algorithms are the second fastest algorithms. They are faster than linear algorithms, but slower than constant algorithms. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=V6mKVRU1evU", "Big O Notations" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/102-linear.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/102-linear.md new file mode 100644 index 000000000..eb8f308f2 --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/102-linear.md @@ -0,0 +1,8 @@ +# Linear + +Linear algorithms are algorithms that have a runtime that is directly proportional to the size of the input. This means that the runtime of the algorithm will increase linearly with the size of the input. For example, if the input size is 10, the runtime will be 10 times the runtime of the algorithm when the input size is 1. If the input size is 100, the runtime will be 100 times the runtime of the algorithm when the input size is 1. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=V6mKVRU1evU", "Big O Notations" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/103-polynomial.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/103-polynomial.md new file mode 100644 index 000000000..fc4fb051b --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/103-polynomial.md @@ -0,0 +1,15 @@ +# Polynomial + +Polynomial algorithms are algorithms that have a runtime that is a polynomial function of the input size. This means that the runtime is a function of the form `n^k` where `k` is a constant. For example, the runtime of the following algorithm is `n^2`: + +```python +def polynomial_algorithm(n): + for i in range(n): + for j in range(n): + print(i, j) +``` + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=V6mKVRU1evU", "Big O Notations" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/104-exponential.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/104-exponential.md new file mode 100644 index 000000000..2751445ea --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/104-exponential.md @@ -0,0 +1,17 @@ +# Exponential + +Exponential algorithms are those that grow at a rate of 2^n. This means that for each additional input, the algorithm will take twice as long to run. The following function is an example of an exponential algorithm: + +```python +def exponential(n): + if n == 0: + return 1 + return 2 * exponential(n - 1) +``` + +As you can see, the algorithm's runtime grows exponentially. For each additional input, the algorithm will take twice as long to run. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=V6mKVRU1evU", "Big O Notations" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/105-factorial.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/105-factorial.md new file mode 100644 index 000000000..df4743887 --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/105-factorial.md @@ -0,0 +1,11 @@ +# Factorial + +Factorial complexity algorithms have a runtime of `O(n!)`. This is the worst case scenario for an algorithm. Factorial complexity algorithms are very inefficient and should be avoided. + +```python +def factorial(n): + if n == 0: + return 1 + else: + return n * factorial(n-1) +``` diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/index.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/index.md new file mode 100644 index 000000000..84373d7c2 --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/103-common-runtimes/index.md @@ -0,0 +1,18 @@ +# Common Runtimes + +Given below is the list of common algorithmic runtimes. The runtimes are listed in ascending order of their complexity. + +* O(1) - Constant +* O(log n) - Logarithmic +* O(n) - Linear +* O(n log n) - Linearithmic +* O(n^2) - Quadratic +* O(n^3) - Cubic +* O(2^n) - Exponential +* O(n!) - Factorial +* O(n^n) - Polynomial + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=V6mKVRU1evU", "Big O Notations" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/103-asymptotic-notation/index.md b/src/roadmaps/computer-science/content/103-asymptotic-notation/index.md new file mode 100644 index 000000000..83e69cf23 --- /dev/null +++ b/src/roadmaps/computer-science/content/103-asymptotic-notation/index.md @@ -0,0 +1,16 @@ +# Asymptotic Notation + +The efficiency of an algorithm depends on the amount of time, storage and other resources required to execute the algorithm. The efficiency is measured with the help of asymptotic notations. + +An algorithm may not have the same performance for different types of inputs. With the increase in the input size, the performance will change. + +The study of change in performance of the algorithm with the change in the order of the input size is defined as asymptotic analysis. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/asymptotic-notations", "Asymptotic Analysis: Big-O Notation and More" %} + {% Blog "https://www.youtube.com/watch?v=Z0bH0cMY0E8", "Big O Notation — Calculating Time Complexity" %} + {% Blog "https://www.youtube.com/watch?v=__vX2sjlpXU", "Big O Notation in 5 Minutes" %} + {% Blog "https://www.youtube.com/watch?v=iOq5kSKqeR4", "Asymptotic Notation - CS50" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98", "CS 61B Lecture 19: Asymptotic Analysis" %} + {% Blog "https://www.bigocheatsheet.com/", "Big-O Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/100-bubble-sort.md b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/100-bubble-sort.md new file mode 100644 index 000000000..81648ae1d --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/100-bubble-sort.md @@ -0,0 +1,9 @@ +# Bubble Sort + +Bubble sort is a simple sorting algorithm that repeatedly steps through the list, compares adjacent elements and swaps them if they are in the wrong order. The pass through the list is repeated until the list is sorted. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB", "Bubble Sort" %} + {% Blog "https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB", "Analyzing Bubble Sort" %} + {% Blog "https://youtu.be/xli_FI7CuzA", "Bubble sort in 2 minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/101-selection-sort.md b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/101-selection-sort.md new file mode 100644 index 000000000..8659ad39e --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/101-selection-sort.md @@ -0,0 +1,8 @@ +# Selection Sort + +Selection sort is a sorting algorithm that selects the smallest unsorted item in the list and swaps it with index 0, then finds the next smallest and places it into index 1 and so on. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=g-PGLbMth_g", "Selection Sort in 3 Minutes" %} + {% Blog "https://www.coursera.org/lecture/algorithms-part1/selection-UQxFT", "Selection Sort" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/102-insertion-sort.md b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/102-insertion-sort.md new file mode 100644 index 000000000..107bbf2d0 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/102-insertion-sort.md @@ -0,0 +1,9 @@ +# Insertion Sort + +Insertion sort is a simple sorting algorithm that builds the final sorted array one item at a time by comparisons. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Kg4bqzAqRBM&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=4", "Insertion Sort — MIT" %} + {% Blog "https://www.youtube.com/watch?v=JU767SDMDvA", "Insertion Sort in 3 Minutes" %} + {% Blog "https://www.programiz.com/dsa/insertion-sort", "Insertion Sort Algorithm" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/103-heap-sort.md b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/103-heap-sort.md new file mode 100644 index 000000000..a5fb0e01e --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/103-heap-sort.md @@ -0,0 +1,17 @@ +# Heap Sort + +Heap sort is a comparison based sorting algorithm. It is similar to selection sort where we first find the maximum element and place the maximum element at the end. We repeat the same process for remaining element. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/heap-sort", "Heap Sort Algorithm" %} + {% Blog "https://www.geeksforgeeks.org/heap-sort/", "Heap Sort Algorithm - Geeks for Geeks" %} + {% Blog "https://www.youtube.com/watch?v=2DmK_H7IdTo", "Heap Sort in 4 Minutes" %} + {% Blog "https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291s", "Heap Sort Algorithm - MIT" %} + {% Blog "https://www.coursera.org/lecture/data-structures/heap-sort-hSzMO", "Heap Sort Algorithm" %} + {% Blog "https://www.youtube.com/watch?v=B7hVxCmfPtM&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=5", "Lecture 4 - Heaps and Heap Sort" %} +{% endresources %} + + + + + diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/104-quick-sort.md b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/104-quick-sort.md new file mode 100644 index 000000000..43f9293ab --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/104-quick-sort.md @@ -0,0 +1,11 @@ +# Quick Sort + +Quick Sort is a divide and conquer algorithm. It picks an element as pivot and partitions the given array around the picked pivot. There are many different versions of quickSort that pick pivot in different ways. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/quick-sort", "Quick Sort Algorithm" %} + {% Blog "https://www.geeksforgeeks.org/quick-sort/", "Quick Sort Algorithm - Geeks for Geeks" %} + {% Blog "https://www.youtube.com/watch?v=Hoixgm4-P4M&feature=youtu.be", "Quick Sort in 4 Minutes" %} + {% Blog "http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c", "Quick Sort Implementaiton in C" %} + {% Blog "https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py", "Quick Sort Implementation in Python" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/105-merge-sort.md b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/105-merge-sort.md new file mode 100644 index 000000000..adc27f097 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/105-merge-sort.md @@ -0,0 +1,10 @@ +# Merge Sort + +Merge sort is a divide and conquer algorithm. It divides the input array into two halves, calls itself for the two halves, and then merges the two sorted halves. The `merge()` function is used for merging two halves. The `merge(arr, l, m, r)` is key process that assumes that `arr[l..m]` and `arr[m+1..r]` are sorted and merges the two sorted sub-arrays into one. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/merge-sort/", "Merge Sort - Geeks for Geeks" %} + {% Blog "https://www.programiz.com/dsa/merge-sort", "Merge Sort Algorithm" %} + {% Blog "https://www.geeksforgeeks.org/merge-sort-for-linked-list/", "Merge Sort for Linked Lists" %} + {% Blog "https://www.youtube.com/watch?v=4VqmGXwpLqc", "Merge Sort in 3 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/index.md new file mode 100644 index 000000000..30366d702 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/100-sorting-algorithms/index.md @@ -0,0 +1,12 @@ +# Sorting Algorithms + +Sorting algorithms are used to sort data in a collection. Sorting is a very common task in computer science, and it is also a very common interview question. There are many different ways to sort data, and different algorithms have different advantages and disadvantages. + +Learn about the sorting algorithms and know the best case/worst case, average complexity of each. Also, learn about the stability of sorting algorithms. + +{% resources %} + {% Blog "https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I", "CS 61B Lecture 29: Sorting I" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk", "CS 61B Lecture 30: Sorting II" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc", "CS 61B Lecture 32: Sorting III" %} + {% Blog "https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4", "CS 61B Lecture 33: Sorting V" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/100-pre-order-traversal.md b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/100-pre-order-traversal.md new file mode 100644 index 000000000..1488c113a --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/100-pre-order-traversal.md @@ -0,0 +1,8 @@ +# Pre-Order Traversal + +Pre-order traversal is a tree traversal algorithm that visits the root node first, then recursively traverses the left subtree, followed by the right subtree. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=S2W3SXGPVyU", "Tree | Illustrated Data Structures" %} + {% Blog "https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/", "Tree Traversals (Inorder, Preorder and Postorder)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/101-in-order-traversal.md b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/101-in-order-traversal.md new file mode 100644 index 000000000..056dd795d --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/101-in-order-traversal.md @@ -0,0 +1,8 @@ +# In-Order Traversal + +In-order traversal is a tree traversal algorithm that visits the left subtree, the root, and then the right subtree. This is the most common way to traverse a binary search tree. It is also used to create a sorted list of nodes in a binary search tree. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=S2W3SXGPVyU", "Tree | Illustrated Data Structures" %} + {% Blog "https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/", "Tree Traversals (Inorder, Preorder and Postorder)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/102-post-order-traversal.md b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/102-post-order-traversal.md new file mode 100644 index 000000000..6c95f9e6b --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/102-post-order-traversal.md @@ -0,0 +1,8 @@ +# Post-Order Traversal + +Post-order traversal is a type of tree traversal that visits the left subtree, then the right subtree, and finally the root node. This is the opposite of pre-order traversal, which visits the root node first, then the left subtree, and finally the right subtree. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=S2W3SXGPVyU", "Tree | Illustrated Data Structures" %} + {% Blog "https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/", "Tree Traversals (Inorder, Preorder and Postorder)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/103-breadth-first-search.md b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/103-breadth-first-search.md new file mode 100644 index 000000000..02cbd30c2 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/103-breadth-first-search.md @@ -0,0 +1,9 @@ +# Breadth First Search + +Breadth first search is a graph traversal algorithm that starts at the root node and explores all of the neighbor nodes at the present depth prior to moving on to the nodes at the next depth level. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=uWL6FJhq5fM", "BFS and DFS in a Binary Tree" %} + {% Blog "https://www.digitalocean.com/community/tutorials/breadth-first-search-depth-first-search-bfs-dfs", "Breadth-First Search (BFS) and Depth-First Search (DFS) for Binary Trees in Java" %} + {% Blog "https://www.youtube.com/watch?v=HZ5YTanv5QE", "Breadth-first search in 4 minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/104-depth-first-search.md b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/104-depth-first-search.md new file mode 100644 index 000000000..eb4cdd792 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/104-depth-first-search.md @@ -0,0 +1,9 @@ +# Depth First Search + +Depth first search is a graph traversal algorithm that starts at a root node and explores as far as possible along each branch before backtracking. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=uWL6FJhq5fM", "BFS and DFS in a Binary Tree" %} + {% Blog "https://www.digitalocean.com/community/tutorials/breadth-first-search-depth-first-search-bfs-dfs", "Breadth-First Search (BFS) and Depth-First Search (DFS) for Binary Trees in Java" %} + {% Blog "https://www.youtube.com/watch?v=Urx87-NMm6c", "Depth First Search in 4 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/index.md new file mode 100644 index 000000000..f5debc81f --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/101-tree-algorithms/index.md @@ -0,0 +1,12 @@ +# Tree Algorithms + +A tree is non-linear and a hierarchical data structure consisting of a collection of nodes such that each node of the tree stores a value and a list of references to other nodes (the “children”). + +Here is the list of common tree algorithms: + +- Tree Traversal: + - Pre-Order Traversal + - In-Order Traversal + - Post-Order Traversal +- Breadth First Search +- Depth First Search diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md new file mode 100644 index 000000000..4a33fd47d --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md @@ -0,0 +1,9 @@ +# Breadth First Search + +Breadth first search for a graph is a way to traverse the graph. It starts at the root node and explores all of the neighbor nodes at the present depth prior to moving on to the nodes at the next depth level. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/", "Breadth First Search or BFS for a Graph" %} + {% Blog "https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7", "Graph Algorithms II - DFS, BFS, Kruskals Algorithm, Union Find Data Structure - Lecture 7" %} +{% endresources %} + diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/101-depth-first-search.md b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/101-depth-first-search.md new file mode 100644 index 000000000..d8b0e1505 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/101-depth-first-search.md @@ -0,0 +1,7 @@ +# Depth First Search + +Depth first search is a graph traversal algorithm that starts at a root node and explores as far as possible along each branch before backtracking. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/depth-first-search-or-dfs-for-a-graph/?ref=lbp", "Depth First Search or DFS for a Graph" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/102-bellman-fords-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/102-bellman-fords-algorithm.md new file mode 100644 index 000000000..d6ac906f6 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/102-bellman-fords-algorithm.md @@ -0,0 +1,8 @@ +# Bellman Ford's Algorithm + +Bellman ford's algorithm is a graph algorithm that finds the shortest path from a source vertex to all other vertices in a graph. It is a dynamic programming algorithm that uses a bottom-up approach to find the shortest path. It is similar to Dijkstra's algorithm but it can handle negative weights. It is also similar to Floyd-Warshall's algorithm but it can handle negative weights and it is faster than Floyd-Warshall's algorithm. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=f9cVS_URPc0&ab_channel=MITOpenCourseWare", "Bellman-Ford - MIT" %} + {% Blog "https://www.youtube.com/watch?v=9PHkk0UavIM", "Bellman-Ford in 4 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/103-dijkstras-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/103-dijkstras-algorithm.md new file mode 100644 index 000000000..27069e02b --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/103-dijkstras-algorithm.md @@ -0,0 +1,8 @@ +# Dijkstra's Algorithm + +Dijkstra's algorithm is a graph traversal algorithm that finds the shortest path between two nodes in a graph. It is a weighted graph algorithm, meaning that each edge in the graph has a weight associated with it. The algorithm works by finding the shortest path from the starting node to all other nodes in the graph. It does this by keeping track of the distance from the starting node to each node, and then choosing the node with the shortest distance from the starting node to visit next. It then updates the distance of each node from the starting node, and repeats the process until all nodes have been visited. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare", "Dijkstras Algorithm - MIT" %} + {% Blog "https://www.youtube.com/watch?v=_lHSawdgXpI", "Dijkstras Algorithm in 3 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/104-a-star-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/104-a-star-algorithm.md new file mode 100644 index 000000000..d3c981a0b --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/104-a-star-algorithm.md @@ -0,0 +1,8 @@ +# A* Algorithm + +A* is a graph traversal algorithm that is used to find the shortest path between two nodes in a graph. It is a modified version of Dijkstra's algorithm that uses heuristics to find the shortest path. It is used in pathfinding and graph traversal. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/A*_search_algorithm", "A* Search Algorithm - Wikipedia" %} + {% Blog "https://www.youtube.com/watch?v=-L-WgKMFuhE", "A* Pathfinding (E01: algorithm explanation)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/index.md new file mode 100644 index 000000000..e11e3afa1 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/index.md @@ -0,0 +1,14 @@ +# Graph Algorithms + +Graphs in data structures are non-linear data structures made up of a finite number of nodes or vertices and the edges that connect them. Graphs in data structures are used to address real-world problems in which it represents the problem area as a network like telephone networks, circuit networks, and social networks. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prims Algorithm - Lecture 6" %} + {% Blog "https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7", "Graph Algorithms II - DFS, BFS, Kruskals Algorithm, Union Find Data Structure - Lecture 7" %} + {% Blog "https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8", "Graph Algorithms III: Shortest Path - Lecture 8" %} + {% Blog "https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9", "Graph Alg. IV: Intro to geometric algorithms - Lecture 9" %} + {% Blog "https://www.youtube.com/watch?v=RpgcYiky7uw", "Strongly Connected Components Kosarajus Algorithm Graph Algorithm" %} + {% Blog "https://www.youtube.com/playlist?list=PL9xmBV_5YoZO-Y-H3xIC9DGSfVYJng9Yw", "Shortest Path Algorithms (playlist) in 16 minutes" %} + {% Blog "https://www.youtube.com/playlist?list=PL9xmBV_5YoZObEi3Hf6lmyW-CBfs7nkOV", "Minimum Spanning Trees (playlist) in 4 minutes" %} + {% Course "https://www.coursera.org/learn/algorithms-on-graphs", "Algorithms on Graphs - Coursera" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/100-dijkstras-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/100-dijkstras-algorithm.md new file mode 100644 index 000000000..a28cac645 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/100-dijkstras-algorithm.md @@ -0,0 +1,9 @@ +# Dijkstra's Algorithm + +Dijkstra's algorithm is a greedy algorithm that finds the shortest path between two nodes in a graph. It is a very common algorithm used in computer science and is used in many applications such as GPS navigation, network routing, and finding the shortest path in a maze. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=_lHSawdgXpI", "Dijkstras Algorithm in 3 Minutes" %} + {% Blog "https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare", "Dijkstras Algorithm - MIT" %} + {% Blog "https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18", "Speeding Up Dijkstras Algorithm - MIT" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/101-huffman-coding.md b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/101-huffman-coding.md new file mode 100644 index 000000000..7bb1decd1 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/101-huffman-coding.md @@ -0,0 +1,9 @@ +# Huffman Coding + +Huffman coding is a lossless data compression algorithm. The idea is to assign variable-length codes to input characters, lengths of the assigned codes are based on the frequencies of corresponding characters. The most frequent character gets the smallest code and the least frequent character gets the largest code. + +{% resources %} + {% Blog "https://www.programiz.com/dsa/huffman-coding", "Huffman Coding" %} + {% Blog "https://www.geeksforgeeks.org/huffman-coding-greedy-algo-3/", "Huffman Coding | Greedy Algo-3" %} + {% Blog "https://www.youtube.com/watch?v=co4_ahEDCho", "Huffman Coding - Greedy Method" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/102-kruskas-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/102-kruskas-algorithm.md new file mode 100644 index 000000000..20c890bb7 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/102-kruskas-algorithm.md @@ -0,0 +1,8 @@ +# Kruskal's algorithm + +Kruskal's algorithm is a greedy algorithm that finds a minimum spanning tree for a connected weighted graph. It is a minimum spanning tree algorithm that takes a graph as input and finds the subset of the edges of that graph which form a tree that includes every vertex, where the total weight of all the edges in the tree is minimized. If the graph is not connected, then it finds a minimum spanning forest (a minimum spanning tree for each connected component). + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=71UQH7Pr9kU", "Kruskals Algorithm in 2 Minutes" %} + {% Blog "https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8", "Graph Algorithms II - DFS, BFS, Kruskals Algorithm, Union Find Data Structure - Lecture 7" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/103-ford-fulkerson-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/103-ford-fulkerson-algorithm.md new file mode 100644 index 000000000..bd16f829c --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/103-ford-fulkerson-algorithm.md @@ -0,0 +1,9 @@ +# Ford Fulkerson Algorithm + +Ford Fulkerson Algorithm is a greedy algorithm that is used to find the maximum flow in a flow network. It is also known as the Edmonds-Karp Algorithm. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Tl90tNtKvxs", "Ford-Fulkerson in 5 minutes" %} + {% Blog "https://www.geeksforgeeks.org/ford-fulkerson-algorithm-for-maximum-flow-problem/", "Ford-Fulkerson Algorithm for Maximum Flow Problem" %} + {% Blog "https://www.programiz.com/dsa/ford-fulkerson-algorithm", "Ford-Fulkerson Algorithm" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/104-prims-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/104-prims-algorithm.md new file mode 100644 index 000000000..6f2358d43 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/104-prims-algorithm.md @@ -0,0 +1,9 @@ +# Prim's Algorithm + +Prim's algorithm is a greedy algorithm that finds a minimum spanning tree for a weighted undirected graph. A minimum spanning tree is a subset of the edges of a connected, edge-weighted undirected graph that connects all the vertices together, without any cycles and with the minimum possible total edge weight. A minimum spanning tree for a weighted undirected graph is also called a minimum weight spanning tree or minimum cost spanning tree. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=i_AQT_XfvD8&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7", "Graph Algorithms I - Topological Sorting, Prims Algorithm - Lecture 6" %} + {% Blog "https://www.geeksforgeeks.org/prims-minimum-spanning-tree-mst-greedy-algo-5/", "Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5" %} + {% Blog "https://www.programiz.com/dsa/prim-algorithm", "Prims Algorithm" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/index.md new file mode 100644 index 000000000..ac8fa1058 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/104-greedy-algorithms/index.md @@ -0,0 +1,11 @@ +# Greedy Algorithms + +Greedy algorithms are a type of algorithm that always makes the choice that seems to be the best at that moment. This means that it makes a locally-optimal choice in the hope that this choice will lead to a globally-optimal solution. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/greedy-algorithms/", "Greedy Algorithms - Geeks for Geeks" %} + {% Blog "https://www.programiz.com/dsa/greedy-algorithm", "Greedy Algorithms - Programiz" %} + {% Blog "https://www.youtube.com/watch?v=bC7o8P_Ste4", "Greedy Algorithms Tutorial – Solve Coding Challenges" %} +{% endresources %} + + diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/100-finding-hamiltonian-paths.md b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/100-finding-hamiltonian-paths.md new file mode 100644 index 000000000..9a2c494de --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/100-finding-hamiltonian-paths.md @@ -0,0 +1,10 @@ +# Finding Hamiltonian Paths + +Hamiltonian paths are paths that visit every node in a graph exactly once. They are named after the famous mathematician [Hamilton](https://en.wikipedia.org/wiki/William_Rowan_Hamilton). Hamiltonian paths are a special case of [Hamiltonian cycles](https://en.wikipedia.org/wiki/Hamiltonian_cycle), which are cycles that visit every node in a graph exactly once. + +{% resources %} + {% Blog "https://www.hackerearth.com/practice/algorithms/graphs/hamiltonian-path/tutorial/", "Hamiltonian Path" %} + {% Blog "https://www.geeksforgeeks.org/hamiltonian-cycle-backtracking-6/", "Hamiltonian Cycle | Backtracking-6" %} + {% Blog "https://medium.com/stamatics-iit-kanpur/hamiltonian-paths-and-cycles-4f233bfbc53a", "Hamiltonian Paths and Cycles" %} + {% Blog "https://people.csail.mit.edu/virgi/6.s078/lecture17.pdf", "Hamiltonian Paths - Lecture 7" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/101-solving-n-queen-problem.md b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/101-solving-n-queen-problem.md new file mode 100644 index 000000000..0133539d0 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/101-solving-n-queen-problem.md @@ -0,0 +1,9 @@ +# Solving n Queen Problem + +N Queen Problem is a famous problem in Computer Science. It is a problem of placing n queens on an n x n chessboard such that no two queens attack each other. The problem is to find all possible solutions to the problem. + +{% resources %} + {% Blog "https://www.digitalocean.com/community/tutorials/n-queens-problem-java-c-plus-plus", "N-Queens problem using backtracking in Java/C++" %} + {% Blog "https://www.geeksforgeeks.org/n-queen-problem-backtracking-3/", "N Queen Problem | Backtracking-3" %} + {% Blog "https://www.youtube.com/watch?v=xFv_Hl4B83A", "6.1 N Queens Problem using Backtracking" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/102-maze-solving-problem.md b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/102-maze-solving-problem.md new file mode 100644 index 000000000..d0e40decf --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/102-maze-solving-problem.md @@ -0,0 +1,10 @@ +# Maze Solving Problem + +Maze solving problem is a classic problem in computer science. It is a problem where we have to find a path from a starting point to an end point in a maze. The maze is represented as a grid of cells. Each cell can be either a wall or a path. The path cells are connected to each other. The starting point and the end point are also given. The goal is to find a path from the starting point to the end point. The path can only be made up of path cells. The path cannot go through the wall cells. + +{% resources %} + {% Blog "https://github.com/john-science/mazelib/blob/main/docs/MAZE_SOLVE_ALGOS.md", "Maze Solving Algorithms" %} + {% Blog "https://kidscodecs.com/maze-solving-algorithms/", "Maze Solving Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=rop0W4QDOUI", "Maze Solving - Computerphile" %} + {% Blog "https://www.youtube.com/watch?v=XP94WC_XnZc", "Python Maze Solving Tutorial (Using Recursion)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/103-knights-tour-problem.md b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/103-knights-tour-problem.md new file mode 100644 index 000000000..572d47aa2 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/103-knights-tour-problem.md @@ -0,0 +1,10 @@ +# Knight's Tour Problem + +Knight's Tour Problem is a problem where we have to find a path for a knight to visit all the cells of a chessboard without visiting any cell twice. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/the-knights-tour-problem-backtracking-1/", "The Knight’s tour problem | Backtracking-1" %} + {% Blog "https://bradfieldcs.com/algos/graphs/knights-tour/", "Knights Tour" %} + {% Blog "https://www.codesdope.com/course/algorithms-knights-tour-problem/", "Knights Tour Proble" %} + {% Blog "https://www.codingninjas.com/codestudio/library/backtracking-the-knights-tour-problem", "Backtracking: The Knight’s Tour Problem" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/index.md new file mode 100644 index 000000000..58ef69c3c --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/105-back-tracking-algorithms/index.md @@ -0,0 +1,8 @@ +# Back Tracking Algorithm + +Back tracking algorithms are used to solve problems that can be broken down into smaller sub-problems. The algorithm tries to solve each sub-problem and if it fails, it backtracks and tries to solve the sub-problem in a different way. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/backtracking-algorithms", "Backtracking Algorithms" %} + {% Blog "https://www.programiz.com/dsa/backtracking-algorithm", "Backtracking Algorithm" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/106-robin-karp-algorithm.md b/src/roadmaps/computer-science/content/104-common-algorithms/106-robin-karp-algorithm.md new file mode 100644 index 000000000..2cda7eb1d --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/106-robin-karp-algorithm.md @@ -0,0 +1,11 @@ +# Rabin-Karp's algorithm + +Rabin-Karp algorithm is a string searching algorithm that uses hashing to find any one of a set of pattern strings in a text. For strings of average length `n`, it performs in `O(n+m)` time with `O(m)` space, where `m` is the length of the pattern. It is often used in bioinformatics to search for DNA patterns. + +{% resources %} + {% Blog "https://www.coursera.org/lecture/data-structures/rabin-karps-algorithm-c0Qkw", "Rabin Karps Algorithm" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation", "Optimization: Precomputation" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis", "Optimization: Implementation and Analysis" %} + {% Blog "https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9", "Lecture 9: Table Doubling, Karp-Rabin" %} + {% Blog "https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=33", "Rolling Hashes, Amortized Analysis" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/100-tail-recursion.md b/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/100-tail-recursion.md new file mode 100644 index 000000000..e80399043 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/100-tail-recursion.md @@ -0,0 +1,8 @@ +# Tail Recursion + +Tail recursion is a special kind of recursion where the recursive call is the very last thing in the function. It's a function that does not do anything at all after recursing. + +{% resources %} + {% Blog "https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad", "What is tail recursion? Why is it so bad?" %} + {% Blog "https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1", "Tail Recursion" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/101-non-tail-recursion.md b/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/101-non-tail-recursion.md new file mode 100644 index 000000000..2ae9340ac --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/101-non-tail-recursion.md @@ -0,0 +1,12 @@ +# Non-tail recursion + +Tail recursion is when a function can directly return the result of a recursive call - there are no outstanding operations, and there is no need for the call stack frame to be preserved. So it can be translated to a “goto with arguments”, and the stack usage will be constant. + +In “non-tail recursion”, there are outstanding operations after the recursive call, and the stack frame cannot be nuked. + +{% resources %} + {% Blog "https://www.quora.com/What-is-non-tail-recursion", "What is non-tail recursion?" %} + {% Blog "https://www.baeldung.com/cs/tail-vs-non-tail-recursion", "Tail vs Non-Tail Recursion" %} + {% Blog "https://www.youtube.com/watch?v=IVLUGb_gDDE", "Recursion (Solved Problem 1)" %} + {% Blog "https://www.youtube.com/watch?v=HIt_GPuD7wk", "Types of Recursion (Part 2) | Tail & Non-tail Recursion" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/index.md new file mode 100644 index 000000000..815c06454 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/107-recursion/index.md @@ -0,0 +1,12 @@ +# Recursion + +Recursion is a method of solving problems where the solution depends on solutions to smaller instances of the same problem. A recursive algorithm must have a base case. A recursive algorithm calls itself, recursively. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=rf60MejMz3E", "Recursion in 100 Seconds" %} + {% Blog "https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=9", "Lecture 8 | Programming Abstractions (Stanford)" %} + {% Blog "https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=10", "Lecture 9 | Programming Abstractions (Stanford)" %} + {% Blog "https://www.youtube.com/watch?v=NdF1QDTRkck&list=PLFE6E58F856038C69&index=11", "Lecture 10 | Programming Abstractions (Stanford)" %} + {% Blog "https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=12", "Lecture 11 | Programming Abstractions (Stanford)" %} + {% Blog "https://www.youtube.com/watch?v=ngCos392W4w", "5 Simple Steps for Solving Any Recursive Problem" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/100-binary-search.md b/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/100-binary-search.md new file mode 100644 index 000000000..7df4121c7 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/100-binary-search.md @@ -0,0 +1,10 @@ +# Binary Search + +Binary search is a search algorithm that finds the position of a target value within a sorted array. Binary search compares the target value to the middle element of the array. If they are not equal, the half in which the target cannot lie is eliminated and the search continues on the remaining half, again taking the middle element to compare to the target value, and repeating this until the target value is found. If the search ends with the remaining half being empty, the target is not in the array. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=fDKIpRe8GW4&feature=youtu.be", "Binary Search in 4 Minutes" %} + {% Blog "https://www.youtube.com/watch?v=D5SrAga1pno", "Binary Search - CS50" %} + {% Blog "https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search", "Binary Search - Khan Academy" %} + {% Blog "https://www.topcoder.com/thrive/articles/Binary%20Search", "Binary Search" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/101-linear-search.md b/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/101-linear-search.md new file mode 100644 index 000000000..0230925c6 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/101-linear-search.md @@ -0,0 +1,7 @@ +# Linear Search + +Linear search is a very simple algorithm that is used to search for a value in an array. It sequentially checks each element of the array until a match is found or until all the elements have been searched. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/linear-search/", "Linear Search Algorithm" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/index.md new file mode 100644 index 000000000..785e7e57a --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/108-search-algorithms/index.md @@ -0,0 +1,8 @@ +# Search Algorithms + +Search algorithms are used to find a specific item in a collection of items. For example, if you have a list of names and you want to find a specific name, you can use a search algorithm to find that name. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/searching-algorithms/", "Searching Algorithms" %} + {% Blog "https://www.freecodecamp.org/news/search-algorithms-linear-and-binary-search-explained/", "Search Algorithms – Linear Search and Binary Search" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/100-lru-cache.md b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/100-lru-cache.md new file mode 100644 index 000000000..fd4b3b1ba --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/100-lru-cache.md @@ -0,0 +1,9 @@ +# LRU Cache + +LRU cache is a cache that evicts the least recently used item first. It is a very common cache algorithm. It is used in many places, such as in the browser cache, the database cache, and the cache of the operating system. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=R5ON3iwx78M", "The Magic of LRU Cache (100 Days of Google Dev)" %} + {% Blog "https://www.youtube.com/watch?v=bq6N7Ym81iI", "Implementing LRU - Udacity" %} + {% Blog "https://www.youtube.com/watch?v=8-FZRAjR7qU", "LeetCode | 146 LRU Cache | C++ | Explanation" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/101-lfu-cache.md b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/101-lfu-cache.md new file mode 100644 index 000000000..9572ef93b --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/101-lfu-cache.md @@ -0,0 +1,8 @@ +# LFU Cache + +LFU Cache is a data structure that stores key-value pairs. It has a fixed size and when it is full, it removes the least frequently used key-value pair. It is a variation of the LRU Cache and is used in many applications such as caching web pages, caching database queries, and caching images. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/least-frequently-used-lfu-cache-implementation/", "Least Frequently Used (LFU) Cache Implementation" %} + {% Blog "https://jojozhuang.github.io/algorithm/data-structure-lfu-cache/", "1117. Data Structure - LFU Cache" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/102-mfu-cache.md b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/102-mfu-cache.md new file mode 100644 index 000000000..7b1daa169 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/102-mfu-cache.md @@ -0,0 +1,8 @@ +# MFU Cache + +MFU Cache is a variation of the LRU Cache. The difference is that instead of deleting the least recently used entry, the MFU Cache deletes the least frequently used entry. + +{% resources %} + {% Blog "https://stackoverflow.com/questions/13597246/comparison-of-mfu-and-lru-page-replacement-algorithms", "Comparison of MFU and LRU page replacement algorithms" %} + {% Blog "https://stackoverflow.com/questions/5088128/why-does-cache-use-most-recently-used-mru-algorithm-as-evict-policy", "Why does cache use Most Recently Used (MRU) algorithm as evict policy?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/index.md new file mode 100644 index 000000000..d8b74c097 --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/109-cache-algorithms/index.md @@ -0,0 +1,8 @@ +# Cache Algorithms + +Cache algorithms are used to manage the cache memory of a computer. Cache memory is a small amount of memory that is used to store data that is frequently accessed. This allows the computer to access the data faster than if it had to go to the main memory. Cache algorithms are used to determine which data should be stored in the cache memory and which data should be removed from the cache memory. + +{% resources %} + {% Blog "https://dev.to/satrobit/cache-replacement-algorithms-how-to-efficiently-manage-the-cache-storage-2ne1", "Cache Replacement Algorithms: How To Efficiently Manage The Cache Storage" %} + {% Blog "https://www.youtube.com/watch?v=xDKnMXtZKq8", "14. Caching and Cache-Efficient Algorithms" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/104-common-algorithms/index.md b/src/roadmaps/computer-science/content/104-common-algorithms/index.md new file mode 100644 index 000000000..7f757582f --- /dev/null +++ b/src/roadmaps/computer-science/content/104-common-algorithms/index.md @@ -0,0 +1,15 @@ +# Common Algorithms + +Here are some common algorithms that you should know. You can find more information about them in the [Algorithms](https://www.khanacademy.org/computing/computer-science/algorithms) section of the Computer Science course. + +* Sorting +* Recursion +* Searching +* Cache Algorithms +* Tree Algorithms +* Graph Algorithms +* Greedy Algorithms +* Backtracking +* Substring Search +* Suffix Arrays +* Dynamic Programming diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/100-suffix-arrays.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/100-suffix-arrays.md new file mode 100644 index 000000000..0607b1aa6 --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/100-suffix-arrays.md @@ -0,0 +1,11 @@ +# Suffix Arrays + +Suffix arrays are a data structure that allows us to quickly find all the suffixes of a string in lexicographical order. This is useful for many problems, such as finding the longest common substring between two strings, or finding the number of distinct substrings of a string. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/suffix-array-set-1-introduction/", "Suffix Array | Set 1 (Introduction)" %} + {% Blog "https://www.youtube.com/watch?v=zqKlL3ZpTqs", "Suffix array introduction" %} + {% Blog "https://www.youtube.com/watch?v=IzMxbboPcqQ", "Advanced Data Structures: Suffix Arrays" %} + {% Blog "https://www.youtube.com/watch?v=ZWlbhBjjwyA", "Suffix arrays: building" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays", "Suffix Arrays - Coursera" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/101-search-pattern-in-text.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/101-search-pattern-in-text.md new file mode 100644 index 000000000..3560156cf --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/101-search-pattern-in-text.md @@ -0,0 +1,7 @@ +# Search Pattern in Text + +Searching pattern in text is a very common task in computer science. It is used in many applications like spell checkers, text editors, and many more. + +{% resources %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text", "Search Pattern in Text" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/100-brute-force-search.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/100-brute-force-search.md new file mode 100644 index 000000000..eb4bccfc8 --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/100-brute-force-search.md @@ -0,0 +1,9 @@ +# Brute Force Search + +Brute force search is a simple algorithm that checks for a pattern in a string by comparing each character of the string with the first character of the pattern. If the first character matches, it then compares the next character of the string with the next character of the pattern and so on. If all the characters of the pattern match, then the pattern is found. If the first character does not match, then the algorithm compares the second character of the string with the first character of the pattern and so on. + +{% resources %} + {% Blog "https://nulpointerexception.com/2019/02/10/a-beginner-guide-to-brute-force-algorithm-for-substring-search/", "A beginner guide to Brute Force Algorithm for substring search" %} + {% Blog "https://www.baeldung.com/cs/brute-force-cybersecurity-string-search", "Brute Force Algorithm in Cybersecurity and String Search" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search", "Brute-Force Substring Search" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/101-knuth-morris-pratt.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/101-knuth-morris-pratt.md new file mode 100644 index 000000000..c82585a05 --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/101-knuth-morris-pratt.md @@ -0,0 +1,15 @@ +# Knuth Morris Pratt + +Knuth morris pratt is a string searching algorithm that uses a precomputed array to find the substring in a string. This array is known as the prefix function. The prefix function is the longest prefix that is also a suffix of a substring. The prefix function is used to skip the characters that are already matched. The algorithm is as follows: + +* Compute the prefix function of the substring. +* Traverse through the string and substring simultaneously. +* If the characters match, increment the index of both the string and substring. +* If the characters don't match, increment the index of the string by the value of the prefix function at the index of the substring. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/kmp-algorithm-for-pattern-searching/", "KMP Algorithm for Pattern Searching" %} + {% Blog "https://www.javatpoint.com/daa-knuth-morris-pratt-algorithm", "The Knuth-Morris-Pratt (KMP)Algorithm" %} + {% Blog "https://www.youtube.com/watch?v=V5-7GzOfADQ", "9.1 Knuth-Morris-Pratt KMP String Matching Algorithm" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt", "Knuth-Morris Pratt" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/102-boyer-moore.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/102-boyer-moore.md new file mode 100644 index 000000000..e886f22cc --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/102-boyer-moore.md @@ -0,0 +1,9 @@ +# Boyer Moore Algorithm + +Boyer Moore algorithm is a string searching algorithm that is used to find the index of a substring in a string. It is a very efficient algorithm that is used in many applications. It is used in text editors, compilers, and many other applications. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/boyer-moore-algorithm-for-pattern-searching/", "Boyer Moore Algorithm for Pattern Searching" %} + {% Blog "https://www.javatpoint.com/daa-boyer-moore-algorithm", "The Boyer-Moore Algorithm" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore", "Boyer Moore Algorithm" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/103-rabin-karp.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/103-rabin-karp.md new file mode 100644 index 000000000..2cda7eb1d --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/103-rabin-karp.md @@ -0,0 +1,11 @@ +# Rabin-Karp's algorithm + +Rabin-Karp algorithm is a string searching algorithm that uses hashing to find any one of a set of pattern strings in a text. For strings of average length `n`, it performs in `O(n+m)` time with `O(m)` space, where `m` is the length of the pattern. It is often used in bioinformatics to search for DNA patterns. + +{% resources %} + {% Blog "https://www.coursera.org/lecture/data-structures/rabin-karps-algorithm-c0Qkw", "Rabin Karps Algorithm" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation", "Optimization: Precomputation" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis", "Optimization: Implementation and Analysis" %} + {% Blog "https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9", "Lecture 9: Table Doubling, Karp-Rabin" %} + {% Blog "https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=33", "Rolling Hashes, Amortized Analysis" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/index.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/index.md new file mode 100644 index 000000000..e3e720aff --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/102-substring-search/index.md @@ -0,0 +1,12 @@ +# Substring Search + +Substring search is the problem of finding a substring in a string. This is a very common problem in computer science, and there are many algorithms for solving it. + +{% resources %} + {% Blog "https://www.coursera.org/lecture/algorithms-part2/introduction-to-substring-search-n3ZpG", "Introduction to Substring Search" %} + {% Blog "https://stackoverflow.com/questions/3183582/what-is-the-fastest-substring-search-algorithm", "What is the fastest substring search algorithm?" %} + {% Blog "https://www.geeksforgeeks.org/check-string-substring-another/", "Check if a string is substring of another" %} + {% Blog "https://www.geeksforgeeks.org/anagram-substring-search-search-permutations/", "Anagram Substring Search (Or Search for all permutations)" %} + {% Blog "https://algs4.cs.princeton.edu/53substring/", "Substring Search - Exercises" %} +{% endresources %} + diff --git a/src/roadmaps/computer-science/content/105-string-search-and-manipulations/index.md b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/index.md new file mode 100644 index 000000000..f25b268bb --- /dev/null +++ b/src/roadmaps/computer-science/content/105-string-search-and-manipulations/index.md @@ -0,0 +1,9 @@ +# String Search and Manipulations + +String search and manipulation is a very important topic in computer science. It is used in many different applications, such as searching or replacing a specific pattern, word or character in a string. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/String-searching_algorithm", "String-searching algorithm" %} + {% Blog "https://www.geeksforgeeks.org/algorithms-gq/pattern-searching/", "Pattern Searching" %} + {% Blog "https://www.geeksforgeeks.org/applications-of-string-matching-algorithms/", "Applications of String Matching Algorithms" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/106-bitwise-operators.md b/src/roadmaps/computer-science/content/106-bitwise-operators.md new file mode 100644 index 000000000..597021bb8 --- /dev/null +++ b/src/roadmaps/computer-science/content/106-bitwise-operators.md @@ -0,0 +1,9 @@ +# Bitwise Operators + +Bitwise operators are used to perform operations on individual bits of a number. They are used in cryptography, image processing, and other applications. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=7jkIUgLC29I", "Bit Manipulation" %} + {% Blog "https://www.youtube.com/watch?v=lKTsv6iVxV4", "Binary: Plusses & Minuses (Why We Use Twos Complement) - Computerphile" %} + {% Blog "https://www.youtube.com/watch?v=NLKQEOgBAnw", "Algorithms: Bit Manipulation" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/107-floating-point-numbers.md b/src/roadmaps/computer-science/content/107-floating-point-numbers.md new file mode 100644 index 000000000..40de62ef8 --- /dev/null +++ b/src/roadmaps/computer-science/content/107-floating-point-numbers.md @@ -0,0 +1,8 @@ +# Floating Point Numbers + +Floating point numbers are numbers that have a decimal point in them. They are used to represent real numbers. For example, 3.14 is a floating point number. 3 is not a floating point number because it does not have a decimal point in it. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=ji3SfClm8TU", "Representation of Floating Point Numbers - 1" %} + {% Blog "https://www.youtube.com/watch?v=RIiq4tTt6rI", "Why 0.1 + 0.2 != 0.3? | Floating Point Math" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/108-endianess/100-big-endian.md b/src/roadmaps/computer-science/content/108-endianess/100-big-endian.md new file mode 100644 index 000000000..9cc22cdaf --- /dev/null +++ b/src/roadmaps/computer-science/content/108-endianess/100-big-endian.md @@ -0,0 +1,8 @@ +# Big Endian + +Big endian is the most common type of endianness. In this type, the most significant byte is stored at the lowest memory address. This means that the most significant byte is stored first and the least significant byte is stored last. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/little-and-big-endian-mystery/", "Little and Big Endian Mystery" %} + {% Blog "https://www.youtube.com/watch?v=T1C9Kj_78ek", "Lecture 22. Big Endian and Little Endian" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/108-endianess/101-little-endian.md b/src/roadmaps/computer-science/content/108-endianess/101-little-endian.md new file mode 100644 index 000000000..77124f941 --- /dev/null +++ b/src/roadmaps/computer-science/content/108-endianess/101-little-endian.md @@ -0,0 +1,9 @@ +# Little Endian + +Little Endian is a way of storing data in memory. It is the opposite of Big Endian. In Little Endian, the least significant byte is stored first. In Big Endian, the most significant byte is stored first. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/what-is-endianness-big-endian-vs-little-endian/", "What is Endianness? Big-Endian vs Little-Endian Explained with Examples" %} + {% Blog "https://www.youtube.com/watch?v=JrNF0KRAlyo", "Big Endian vs Little Endian.mp4" %} + {% Blog "https://www.youtube.com/watch?v=NcaiHcBvDR4", "Endianness Explained With an Egg - Computerphile" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/108-endianess/index.md b/src/roadmaps/computer-science/content/108-endianess/index.md new file mode 100644 index 000000000..756d6f1b6 --- /dev/null +++ b/src/roadmaps/computer-science/content/108-endianess/index.md @@ -0,0 +1,9 @@ +# Endianess + +Endianess is the order in which bytes are stored in memory. The two most common types of endianess are big endian and little endian. Big endian stores the most significant byte first, while little endian stores the least significant byte first. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/what-is-endianness-big-endian-vs-little-endian/", "What is Endianness? Big-Endian vs Little-Endian Explained with Examples" %} + {% Blog "https://www.youtube.com/watch?v=JrNF0KRAlyo", "Big Endian vs Little Endian.mp4" %} + {% Blog "https://www.youtube.com/watch?v=NcaiHcBvDR4", "Endianness Explained With an Egg - Computerphile" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/109-character-encodings/100-unicode.md b/src/roadmaps/computer-science/content/109-character-encodings/100-unicode.md new file mode 100644 index 000000000..5f2b97c9a --- /dev/null +++ b/src/roadmaps/computer-science/content/109-character-encodings/100-unicode.md @@ -0,0 +1,8 @@ +# Unicode + +Unicode is a standard for encoding characters. It is a superset of ASCII, which means that ASCII is a subset of Unicode. Unicode is a 16-bit encoding, which means that it can encode 2^16 = 65536 characters. This is a lot more than ASCII, which can only encode 128 characters. + +{% resources %} + {% Blog "https://deliciousbrains.com/how-unicode-works/", "How Unicode Works: What Every Developer Needs to Know About Strings and 🦄" %} + {% Blog "https://www.youtube.com/watch?v=MijmeoH9LT4", "Characters, Symbols and the Unicode Miracle - Computerphile" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/109-character-encodings/101-ascii.md b/src/roadmaps/computer-science/content/109-character-encodings/101-ascii.md new file mode 100644 index 000000000..e23a185da --- /dev/null +++ b/src/roadmaps/computer-science/content/109-character-encodings/101-ascii.md @@ -0,0 +1,8 @@ +# ASCII + +ASCII is a character encoding standard for electronic communication. It was developed from telegraph code and uses 7 bits to represent 128 different characters. The first 32 characters are non-printable control characters used to control devices like printers and typewriters. The remaining 96 characters are printable and include the letters of the English alphabet, numbers, punctuation, and various symbols. + +{% resources %} + {% Blog "https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/", "Must Know about Character Encodings" %} + {% Blog "https://cs.lmu.edu/~ray/notes/charenc/", "Character Encoding" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/109-character-encodings/index.md b/src/roadmaps/computer-science/content/109-character-encodings/index.md new file mode 100644 index 000000000..a5059bcd5 --- /dev/null +++ b/src/roadmaps/computer-science/content/109-character-encodings/index.md @@ -0,0 +1,8 @@ +# Character Encodings + +Character encodings are a way of representing characters as numbers. They are used to store and transmit text. The most common character encoding is ASCII, which is a 7-bit encoding. This means that each character is represented by a number between 0 and 127. The ASCII character set contains 128 characters, including letters, numbers, punctuation, and control characters. The ASCII character set is a subset of the Unicode character set, which is a 16-bit encoding. Unicode is a superset of ASCII, so ASCII characters can be represented by Unicode. Unicode is the most common character encoding used on the web. + +{% resources %} + {% Blog "https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/", "Must Know about Character Encodings" %} + {% Blog "https://cs.lmu.edu/~ray/notes/charenc/", "Character Encoding" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/110-common-uml-diagrams/100-class-diagrams.md b/src/roadmaps/computer-science/content/110-common-uml-diagrams/100-class-diagrams.md new file mode 100644 index 000000000..f37d68796 --- /dev/null +++ b/src/roadmaps/computer-science/content/110-common-uml-diagrams/100-class-diagrams.md @@ -0,0 +1,9 @@ +# Class Diagrams + +Class Diagrams are used to model the static structure of a system. They are used to show the classes, their attributes, operations (or methods), and the relationships between objects. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=UI6lqHOVHic", "UML Class Diagram Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLfoY2ARMh0hC2FcJKP5voAKCpk6PZXSd5&index=2", "UML Class Diagram Tutorial" %} +{% endresources %} + diff --git a/src/roadmaps/computer-science/content/110-common-uml-diagrams/102-usecase-diagrams.md b/src/roadmaps/computer-science/content/110-common-uml-diagrams/102-usecase-diagrams.md new file mode 100644 index 000000000..50626b172 --- /dev/null +++ b/src/roadmaps/computer-science/content/110-common-uml-diagrams/102-usecase-diagrams.md @@ -0,0 +1,15 @@ +# Usecase Diagrams + +Usecase diagrams are a type of diagram that are used to model the interactions between the **actors** and the **usecases** of the system. + +An actor is a person or a system that interacts with the system. Actors are represented by a rectangle with the name of the actor written inside it. + +A usecase is a task that the system performs. Usecases are represented by an ellipse with the name of the usecase written inside it. + +A usecase diagram is a diagram that shows the actors and the usecases of the system. The diagram is represented by a rectangle that contains the name of the system inside it. The actors are represented by rectangles and the usecases are represented by ellipses. + +{% resources %} + {% Blog "https://www.lucidchart.com/pages/uml-use-case-diagram", "UML Use Case Diagram Tutorial" %} + {% Blog "https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-use-case-diagram/", "What is Use Case Diagram?" %} + {% Blog "https://www.youtube.com/watch?v=zid-MVo7M-E", "UML Use Case Diagram Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/110-common-uml-diagrams/103-activity-diagrams.md b/src/roadmaps/computer-science/content/110-common-uml-diagrams/103-activity-diagrams.md new file mode 100644 index 000000000..04baeec33 --- /dev/null +++ b/src/roadmaps/computer-science/content/110-common-uml-diagrams/103-activity-diagrams.md @@ -0,0 +1,8 @@ +# Activity Diagrams + +Activity diagrams are used to model the flow of control in a system. They are used in conjunction with use case diagrams to model the behavior of the system for each use case. They are also used to model the behavior of a single class. + +{% resources %} + {% Blog "https://www.lucidchart.com/pages/uml-activity-diagram", "UML Activity Diagram Tutorial" %} + {% Blog "https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-activity-diagram/", "What is Activity Diagram?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/110-common-uml-diagrams/104-statemachine-diagrams.md b/src/roadmaps/computer-science/content/110-common-uml-diagrams/104-statemachine-diagrams.md new file mode 100644 index 000000000..e123b1fdc --- /dev/null +++ b/src/roadmaps/computer-science/content/110-common-uml-diagrams/104-statemachine-diagrams.md @@ -0,0 +1,9 @@ +# State Machine Diagrams + +State machine diagrams are used to show the different states an object can be in at a given time. The object can be in one and only one state at a given time. State machine diagrams are similar to activity diagrams, but they are more focused on the flow of an object's state rather than the flow of the object itself. + +{% resources %} + {% Blog "https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-state-machine-diagram/", "What is State Machine Diagram?" %} + {% Blog "https://www.lucidchart.com/pages/uml-state-machine-diagram", "State Machine Diagram Tutorial" %} + {% Blog "https://www.sciencedirect.com/topics/computer-science/state-machine-diagram", "State Machine Diagram" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/110-common-uml-diagrams/105-sequence-diagrams.md b/src/roadmaps/computer-science/content/110-common-uml-diagrams/105-sequence-diagrams.md new file mode 100644 index 000000000..ea91ae00b --- /dev/null +++ b/src/roadmaps/computer-science/content/110-common-uml-diagrams/105-sequence-diagrams.md @@ -0,0 +1,8 @@ +# Sequence Diagrams + +Sequence diagrams are a way to show how objects or systems interact with each other over time. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=pCK6prSq8aw", "How to Make a UML Sequence Diagram" %} + {% Blog "https://www.youtube.com/watch?v=cxG-qWthxt4&list=PLfoY2ARMh0hBthB9VqsQzogSouTjzkMHe&index=2", "Sequence Diagrams Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/110-common-uml-diagrams/index.md b/src/roadmaps/computer-science/content/110-common-uml-diagrams/index.md new file mode 100644 index 000000000..1d4d96310 --- /dev/null +++ b/src/roadmaps/computer-science/content/110-common-uml-diagrams/index.md @@ -0,0 +1,7 @@ +# UML + +UML is a standard way of visualizing a software system. It is a general-purpose, developmental, modeling language in the field of software engineering that is intended to provide a standard way to visualize the design of a system. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=WnMQ8HlmeXc", "UML Diagrams Full Course (Unified Modeling Language)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/111-design-patterns/100-gof-design-patterns.md b/src/roadmaps/computer-science/content/111-design-patterns/100-gof-design-patterns.md new file mode 100644 index 000000000..55b6af3f2 --- /dev/null +++ b/src/roadmaps/computer-science/content/111-design-patterns/100-gof-design-patterns.md @@ -0,0 +1,7 @@ +# GoF Design Patterns + +Gang of Four (GoF) design patterns are a set of 23 design patterns that were first described in the book "Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. The book is commonly referred to as the "Gang of Four book". + +{% resources %} + {% Blog "https://github.com/kamranahmedse/design-patterns-for-humans", "Design Patterns for Humans" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/111-design-patterns/101-architectural-patterns.md b/src/roadmaps/computer-science/content/111-design-patterns/101-architectural-patterns.md new file mode 100644 index 000000000..ae7fefa52 --- /dev/null +++ b/src/roadmaps/computer-science/content/111-design-patterns/101-architectural-patterns.md @@ -0,0 +1,8 @@ +# Architectural Patterns + +Architectural patterns are a high-level design pattern that focuses on the overall structure of the system. They are similar to design patterns, but they are more concerned with the structure of the system. They are used to solve problems that are common to many software systems. + +{% resources %} + {% Blog "https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013", "10 Common Software Architectural Patterns in a nutshell" %} + {% Blog "https://en.wikipedia.org/wiki/Architectural_pattern", "Architectural Pattern - Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/111-design-patterns/102-dependency-injection.md b/src/roadmaps/computer-science/content/111-design-patterns/102-dependency-injection.md new file mode 100644 index 000000000..9ef89a014 --- /dev/null +++ b/src/roadmaps/computer-science/content/111-design-patterns/102-dependency-injection.md @@ -0,0 +1,8 @@ +# Dependency Injection + +Dependency injection is a software design pattern that allows us to decouple the dependencies of a class from the class itself. This allows us to write more flexible and testable code. + +{% resources %} + {% Blog "https://stackoverflow.com/questions/130794/what-is-dependency-injection", "Dependency Injection - StackOverflow" %} + {% Blog "https://www.youtube.com/watch?v=0yc2UANSDiw", "What is Dependency Injection?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/111-design-patterns/103-null-object-pattern.md b/src/roadmaps/computer-science/content/111-design-patterns/103-null-object-pattern.md new file mode 100644 index 000000000..21ddc4aba --- /dev/null +++ b/src/roadmaps/computer-science/content/111-design-patterns/103-null-object-pattern.md @@ -0,0 +1,8 @@ +# Null Object Pattern + +Null object pattern is a design pattern that is used to represent a null value with an object. It is a way to avoid null reference exceptions by providing a default object that does nothing. It is a way to provide a default behavior in case data is not available. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/design_pattern/null_object_pattern.htm", "Design Patterns - Null Object Pattern" %} + {% Blog "https://www.geeksforgeeks.org/null-object-design-pattern/", "Null Object Design Pattern - Geeks for Geeks" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/111-design-patterns/104-type-object-pattern.md b/src/roadmaps/computer-science/content/111-design-patterns/104-type-object-pattern.md new file mode 100644 index 000000000..60e8d1348 --- /dev/null +++ b/src/roadmaps/computer-science/content/111-design-patterns/104-type-object-pattern.md @@ -0,0 +1,7 @@ +# Type Object Pattern + +Type object pattern is a creational design pattern that allows us to create a new object of a type without exposing the object creation logic to the client. It is used when we need to create a new object of a type, but we don't know which type we need to create until runtime. It is like a factory pattern, but instead of returning a new object of a type, it returns a new object of a type that is already created. + +{% resources %} + {% Blog "https://gameprogrammingpatterns.com/type-object.html", "Type Object Pattern" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/111-design-patterns/index.md b/src/roadmaps/computer-science/content/111-design-patterns/index.md new file mode 100644 index 000000000..a3d361469 --- /dev/null +++ b/src/roadmaps/computer-science/content/111-design-patterns/index.md @@ -0,0 +1,7 @@ +# Design Patterns + +Design patterns are solutions to common problems in software design. They are formalized best practices that the programmer can use to solve common problems when designing an application or system. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Software_design_pattern", "Design Patterns - Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/112-basic-math-skills/100-probability.md b/src/roadmaps/computer-science/content/112-basic-math-skills/100-probability.md new file mode 100644 index 000000000..9d2731c0e --- /dev/null +++ b/src/roadmaps/computer-science/content/112-basic-math-skills/100-probability.md @@ -0,0 +1,14 @@ +# Probability + +Probability is the study of how likely an event is to occur. It is a measure of how certain we are that an event will happen. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B", "MIT 6.042J - Probability Introduction" %} + {% Blog "https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B", "MIT 6.042J - Conditional Probability" %} + {% Blog "https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B", "MIT 6.042J - Independence" %} + {% Blog "https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21", "MIT 6.042J - Random Variables" %} + {% Blog "https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B", "MIT 6.042J - Expectation I" %} + {% Blog "https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B", "MIT 6.042J - Expectation II" %} + {% Blog "https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B", "MIT 6.042J - Large Deviations" %} + {% Blog "https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25", "MIT 6.042J - Random Walks" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/112-basic-math-skills/101-combinatorics.md b/src/roadmaps/computer-science/content/112-basic-math-skills/101-combinatorics.md new file mode 100644 index 000000000..42da5a64f --- /dev/null +++ b/src/roadmaps/computer-science/content/112-basic-math-skills/101-combinatorics.md @@ -0,0 +1,10 @@ +# Combinatorics + +Combinatorics is the study of counting. It is a branch of mathematics that is used to solve problems in a variety of fields, including computer science, statistics, and physics. In computer science, combinatorics is used to solve problems related to counting the number of possible outcomes of a given problem. For example, if you are given a set of 10 objects, how many different ways can you arrange them? Or, if you are given a set of 10 objects, how many different ways can you choose 3 objects from that set? These are examples of combinatorial problems. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=8RRo6Ti9d0U", "Math Skills: How to find Factorial, Permutation and Combination" %} + {% Blog "https://www.youtube.com/watch?v=sZkAAk9Wwa4", "Make School: Probability" %} + {% Blog "https://www.youtube.com/watch?v=dNaJg-mLobQ", "Make School: More Probability and Markov Chains" %} + {% Blog "https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic", "Probability and Combinatorics Topic" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/112-basic-math-skills/index.md b/src/roadmaps/computer-science/content/112-basic-math-skills/index.md new file mode 100644 index 000000000..214aafb4d --- /dev/null +++ b/src/roadmaps/computer-science/content/112-basic-math-skills/index.md @@ -0,0 +1,20 @@ +# Basic Math Skills + +Math is a fundamental skill for computer science. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B", "Lec 1 | MIT 6.042J Mathematics for Computer Science, Fall 2010" %} + {% Blog "https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb", "Integer Arithmetic, Karatsuba Multiplication" %} + {% Blog "https://www.youtube.com/watch?v=ru7mWZJlRQg", "The Chinese Remainder Theorem (used in cryptography)" %} + {% Blog "http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html", "Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory" %} + {% Blog "https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t", "Discrete Mathematics by Shai Simonson (19 videos)" %} + {% Blog "https://nptel.ac.in/courses/106/106/106106183/", "Discrete Mathematics By IIT Ropar NPTEL" %} + {% Blog "https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B", "MIT 6.042J - Probability Introduction" %} + {% Blog "https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B", "MIT 6.042J - Conditional Probability" %} + {% Blog "https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B", "MIT 6.042J - Independence" %} + {% Blog "https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21", "MIT 6.042J - Random Variables" %} + {% Blog "https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B", "MIT 6.042J - Expectation I" %} + {% Blog "https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B", "MIT 6.042J - Expectation II" %} + {% Blog "https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B", "MIT 6.042J - Large Deviations" %} + {% Blog "https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25", "MIT 6.042J - Random Walks" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/100-p.md b/src/roadmaps/computer-science/content/113-complexity-classes/100-p.md new file mode 100644 index 000000000..e6964f3ba --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/100-p.md @@ -0,0 +1,20 @@ +# P + +The P in the P class stands for Polynomial Time. It is the collection of decision problems(problems with a “yes” or “no” answer) that can be solved by a deterministic machine in polynomial time. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/types-of-complexity-classes-p-np-conp-np-hard-and-np-complete/", "Types of Complexity Classes | P, NP, CoNP, NP hard and NP complete" %} + {% Blog "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard", "Trying to understand P vs NP vs NP Complete vs NP Hard" %} + {% Blog "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22", "Complexity: P, NP, NP-completeness, Reductions" %} + {% Blog "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24", "Complexity: Approximation Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Complexity: Fixed-Parameter Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24", "Lecture 23: Computational Complexity" %} + {% Blog "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939", "Greedy Algs. II & Intro to NP Completeness" %} + {% Blog "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness II & Reductions" %} + {% Blog "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness III" %} + {% Blog "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18", "NP Completeness IV" %} + {% Blog "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23", "CSE373 2020 - Lecture 23 - NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24", "CSE373 2020 - Lecture 24 - Satisfiability" %} + {% Blog "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25", "CSE373 2020 - Lecture 25 - More NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26", "CSE373 2020 - Lecture 26 - NP-Completeness Challenge" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/101-np.md b/src/roadmaps/computer-science/content/113-complexity-classes/101-np.md new file mode 100644 index 000000000..b77f90194 --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/101-np.md @@ -0,0 +1,20 @@ +# NP + +The NP in NP class stands for Non-deterministic Polynomial Time. It is the collection of decision problems that can be solved by a non-deterministic machine in polynomial time. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/types-of-complexity-classes-p-np-conp-np-hard-and-np-complete/", "Types of Complexity Classes | P, NP, CoNP, NP hard and NP complete" %} + {% Blog "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard", "Trying to understand P vs NP vs NP Complete vs NP Hard" %} + {% Blog "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22", "Complexity: P, NP, NP-completeness, Reductions" %} + {% Blog "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24", "Complexity: Approximation Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Complexity: Fixed-Parameter Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24", "Lecture 23: Computational Complexity" %} + {% Blog "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939", "Greedy Algs. II & Intro to NP Completeness" %} + {% Blog "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness II & Reductions" %} + {% Blog "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness III" %} + {% Blog "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18", "NP Completeness IV" %} + {% Blog "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23", "CSE373 2020 - Lecture 23 - NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24", "CSE373 2020 - Lecture 24 - Satisfiability" %} + {% Blog "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25", "CSE373 2020 - Lecture 25 - More NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26", "CSE373 2020 - Lecture 26 - NP-Completeness Challenge" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/102-co-np.md b/src/roadmaps/computer-science/content/113-complexity-classes/102-co-np.md new file mode 100644 index 000000000..3d664f69d --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/102-co-np.md @@ -0,0 +1,20 @@ +# Co-NP + +Co-NP stands for the complement of NP Class. It means if the answer to a problem in Co-NP is No, then there is proof that can be checked in polynomial time. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/types-of-complexity-classes-p-np-conp-np-hard-and-np-complete/", "Types of Complexity Classes | P, NP, CoNP, NP hard and NP complete" %} + {% Blog "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard", "Trying to understand P vs NP vs NP Complete vs NP Hard" %} + {% Blog "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22", "Complexity: P, NP, NP-completeness, Reductions" %} + {% Blog "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24", "Complexity: Approximation Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Complexity: Fixed-Parameter Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24", "Lecture 23: Computational Complexity" %} + {% Blog "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939", "Greedy Algs. II & Intro to NP Completeness" %} + {% Blog "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness II & Reductions" %} + {% Blog "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness III" %} + {% Blog "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18", "NP Completeness IV" %} + {% Blog "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23", "CSE373 2020 - Lecture 23 - NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24", "CSE373 2020 - Lecture 24 - Satisfiability" %} + {% Blog "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25", "CSE373 2020 - Lecture 25 - More NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26", "CSE373 2020 - Lecture 26 - NP-Completeness Challenge" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/103-np-hard.md b/src/roadmaps/computer-science/content/113-complexity-classes/103-np-hard.md new file mode 100644 index 000000000..0bfa12010 --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/103-np-hard.md @@ -0,0 +1,20 @@ +# NP-Hard + +An NP-hard problem is at least as hard as the hardest problem in NP and it is the class of the problems such that every problem in NP reduces to NP-hard. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/types-of-complexity-classes-p-np-conp-np-hard-and-np-complete/", "Types of Complexity Classes | P, NP, CoNP, NP hard and NP complete" %} + {% Blog "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard", "Trying to understand P vs NP vs NP Complete vs NP Hard" %} + {% Blog "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22", "Complexity: P, NP, NP-completeness, Reductions" %} + {% Blog "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24", "Complexity: Approximation Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Complexity: Fixed-Parameter Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24", "Lecture 23: Computational Complexity" %} + {% Blog "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939", "Greedy Algs. II & Intro to NP Completeness" %} + {% Blog "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness II & Reductions" %} + {% Blog "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness III" %} + {% Blog "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18", "NP Completeness IV" %} + {% Blog "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23", "CSE373 2020 - Lecture 23 - NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24", "CSE373 2020 - Lecture 24 - Satisfiability" %} + {% Blog "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25", "CSE373 2020 - Lecture 25 - More NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26", "CSE373 2020 - Lecture 26 - NP-Completeness Challenge" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/100-travelling-salesman-problem.md b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/100-travelling-salesman-problem.md new file mode 100644 index 000000000..89d7d327b --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/100-travelling-salesman-problem.md @@ -0,0 +1,10 @@ +# Travelling Salesman Problem + +The Travelling Salesman Problem (TSP) is a classic problem in computer science. It is a problem that is NP-complete, which means that it is a problem that is hard to solve. It is also a problem that is used to test the efficiency of algorithms. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/travelling-salesman-problem-set-1/", "Travelling Salesman Problem | Set 1 (Naive and Dynamic Programming)" %} + {% Blog "https://www.youtube.com/watch?v=1pmBjIZ20pE", "What is the Traveling Salesman Problem?" %} + {% Blog "https://www.youtube.com/watch?v=XaXsJJh-Q5Y", "4.7 Traveling Salesperson Problem - Dynamic Programming" %} + {% Blog "https://www.youtube.com/watch?v=cY4HiiFHO1o", "Traveling Salesman Problem | Dynamic Programming | Graph Theory" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/101-knapsack-problem.md b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/101-knapsack-problem.md new file mode 100644 index 000000000..270a8cfa1 --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/101-knapsack-problem.md @@ -0,0 +1,9 @@ +# Knapsack Problem + +KnapSack Problem is a classic problem in computer science. It is a problem in which we are given a set of items, each with a weight and a value, and we need to determine which items to include in a collection so that the total weight is less than or equal to a given limit and the total value is as large as possible. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/0-1-knapsack-problem-dp-10/", "0-1 Knapsack Problem | DP-10" %} + {% Blog "https://medium.com/@fabianterh/how-to-solve-the-knapsack-problem-with-dynamic-programming-eb88c706d3cf", "How to solve the Knapsack Problem with dynamic programming" %} + {% Blog "https://www.youtube.com/watch?v=oTTzNMHM05I", "3.1 Knapsack Problem - Greedy Method" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/102-longest-path-problem.md b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/102-longest-path-problem.md new file mode 100644 index 000000000..9ebb9ffe9 --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/102-longest-path-problem.md @@ -0,0 +1,9 @@ +# Longest Path Problem + +Longest path problem is a problem that asks us to find the longest path in a graph. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/", "Longest Path in a Directed Acyclic Graph" %} + {% Blog "https://www.youtube.com/watch?v=TXkDpqjDMHA", "Shortest/Longest path on a Directed Acyclic Graph (DAG) | Graph Theory" %} + {% Blog "https://www.youtube.com/watch?v=lRH0tax5dFA", "Longest Simple Path - Intro to Algorithms" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/index.md b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/index.md new file mode 100644 index 000000000..28651952d --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/104-np-complete/index.md @@ -0,0 +1,20 @@ +# NP Complete + +A problem is NP-complete if it is both NP and NP-hard. NP-complete problems are the hard problems in NP. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/types-of-complexity-classes-p-np-conp-np-hard-and-np-complete/", "Types of Complexity Classes | P, NP, CoNP, NP hard and NP complete" %} + {% Blog "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard", "Trying to understand P vs NP vs NP Complete vs NP Hard" %} + {% Blog "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22", "Complexity: P, NP, NP-completeness, Reductions" %} + {% Blog "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24", "Complexity: Approximation Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Complexity: Fixed-Parameter Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24", "Lecture 23: Computational Complexity" %} + {% Blog "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939", "Greedy Algs. II & Intro to NP Completeness" %} + {% Blog "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness II & Reductions" %} + {% Blog "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness III" %} + {% Blog "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18", "NP Completeness IV" %} + {% Blog "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23", "CSE373 2020 - Lecture 23 - NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24", "CSE373 2020 - Lecture 24 - Satisfiability" %} + {% Blog "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25", "CSE373 2020 - Lecture 25 - More NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26", "CSE373 2020 - Lecture 26 - NP-Completeness Challenge" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/105-p-equals-np.md b/src/roadmaps/computer-science/content/113-complexity-classes/105-p-equals-np.md new file mode 100644 index 000000000..f383ff607 --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/105-p-equals-np.md @@ -0,0 +1,7 @@ +# P = NP + +The P = NP problem is one of the most famous problems in computer science. It asks if the problem of determining if a given input belongs to a certain class of problems is as hard as the problem of solving the given input. In other words, it asks if the problem of determining if a given input belongs to a certain class of problems is as hard as the problem of determining if a given input belongs to a certain class of problems. This problem is also known as the Halting Problem. + +{% resources %} + {% Blog "https://stackoverflow.com/questions/111307/whats-p-np-and-why-is-it-such-a-famous-question", "Whats P=NP?, and why is it such a famous question?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/113-complexity-classes/index.md b/src/roadmaps/computer-science/content/113-complexity-classes/index.md new file mode 100644 index 000000000..c4282f463 --- /dev/null +++ b/src/roadmaps/computer-science/content/113-complexity-classes/index.md @@ -0,0 +1,27 @@ +# Complexity Classes + +In computer science, there exist some problems whose solutions are not yet found, the problems are divided into classes known as Complexity Classes. In complexity theory, a Complexity Class is a set of problems with related complexity. These classes help scientists to groups problems based on how much time and space they require to solve problems and verify the solutions. It is the branch of the theory of computation that deals with the resources required to solve a problem. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/types-of-complexity-classes-p-np-conp-np-hard-and-np-complete/", "Types of Complexity Classes | P, NP, CoNP, NP hard and NP complete" %} + {% Blog "https://softwareengineering.stackexchange.com/questions/308178/trying-to-understand-p-vs-np-vs-np-complete-vs-np-hard", "Trying to understand P vs NP vs NP Complete vs NP Hard" %} + {% Blog "https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22", "Complexity: P, NP, NP-completeness, Reductions" %} + {% Blog "https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24", "Complexity: Approximation Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Complexity: Fixed-Parameter Algorithms" %} + {% Blog "https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=24", "Lecture 23: Computational Complexity" %} + {% Blog "https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939", "Greedy Algs. II & Intro to NP Completeness" %} + {% Blog "https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness II & Reductions" %} + {% Blog "https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm", "NP Completeness III" %} + {% Blog "https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18", "NP Completeness IV" %} + {% Blog "https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23", "CSE373 2020 - Lecture 23 - NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24", "CSE373 2020 - Lecture 24 - Satisfiability" %} + {% Blog "https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25", "CSE373 2020 - Lecture 25 - More NP-Completeness" %} + {% Blog "https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26", "CSE373 2020 - Lecture 26 - NP-Completeness Challenge" %} +{% endresources %} + + + + + + + diff --git a/src/roadmaps/computer-science/content/114-tries.md b/src/roadmaps/computer-science/content/114-tries.md new file mode 100644 index 000000000..1f2db607c --- /dev/null +++ b/src/roadmaps/computer-science/content/114-tries.md @@ -0,0 +1,15 @@ +# Tries + +Tries are a data structure that can be used to store strings. The idea is to store the characters of the string in a tree-like structure, where each node of the tree represents a single character. We can use this structure to store strings in a way that allows us to quickly search for strings with a common prefix. + +{% resources %} + {% Blog "http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries", "Tries - DataStructure Notes" %} + {% Blog "https://www.toptal.com/java/the-trie-a-neglected-data-structure", "The Trie: A Neglected Data Structure" %} + {% Blog "https://www.topcoder.com/thrive/articles/Using%20Tries", "TopCoder - Using Tries" %} + {% Blog "https://www.youtube.com/watch?v=TJ8SkcUSdbU", "Stanford Lecture (real world use case)" %} + {% Blog "https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf", "MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through)" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/home/week/4", "0. Tries - Coursera" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries", "1. R Way Tries" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries", "2. Ternary Search Tries" %} + {% Blog "https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations", "3. Character Based Operations" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/115-balanced-search-trees/100-avl-trees.md b/src/roadmaps/computer-science/content/115-balanced-search-trees/100-avl-trees.md new file mode 100644 index 000000000..90ae30fb3 --- /dev/null +++ b/src/roadmaps/computer-science/content/115-balanced-search-trees/100-avl-trees.md @@ -0,0 +1,12 @@ +# AVL Trees + +AVL trees are a type of self-balancing binary search tree. They are named after their inventors, Adelson-Velskii and Landis. AVL trees are the most popular self-balancing binary search tree. + +In practice: From what I can tell, these aren't used much in practice, but I could see where they would be: The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it attractive for data structures that may be built once and loaded without reconstruction, such as language dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter) + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6", "MIT AVL Trees / AVL Sort" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees", "AVL Trees" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation", "AVL Tree Implementation" %} + {% Blog "https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge", "Split And Merge" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/115-balanced-search-trees/101-red-black-trees.md b/src/roadmaps/computer-science/content/115-balanced-search-trees/101-red-black-trees.md new file mode 100644 index 000000000..1d0695e7c --- /dev/null +++ b/src/roadmaps/computer-science/content/115-balanced-search-trees/101-red-black-trees.md @@ -0,0 +1,15 @@ +# Red/Black Trees + +In computer science, a red–black tree is a kind of self-balancing binary search tree. Each node stores an extra bit representing "color", used to ensure that the tree remains balanced during insertions and deletions. + +These are a translation of a 2-3 tree (see below). + +In practice: Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. Not only does this make them valuable in time-sensitive applications such as real-time applications, but it makes them valuable building blocks in other data structures which provide worst-case guarantees; for example, many data structures used in computational geometry can be based on red–black trees, and the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java, the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor hashcodes, a Red-Black tree is used. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Red%E2%80%93black_tree", "Red-Black Tree - Wikipedia" %} + {% Blog "https://www.topcoder.com/thrive/articles/An%20Introduction%20to%20Binary%20Search%20and%20Red-Black%20Trees", "An Introduction To Binary Search And Red Black Tree" %} + {% Blog "https://www.youtube.com/playlist?list=PL9xmBV_5YoZNqDI8qfOZgzbqahCUmUEin", "Red-Black Trees (playlist) in 30 minutes" %} + {% Blog "https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871", "Aduni - Algorithms - Lecture 4 (link jumps to starting point)" %} + {% Blog "https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5", "Aduni - Algorithms - Lecture 5" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/115-balanced-search-trees/102-the-2-3-search-trees.md b/src/roadmaps/computer-science/content/115-balanced-search-trees/102-the-2-3-search-trees.md new file mode 100644 index 000000000..ef66112d6 --- /dev/null +++ b/src/roadmaps/computer-science/content/115-balanced-search-trees/102-the-2-3-search-trees.md @@ -0,0 +1,11 @@ +# 2-3 Search Trees + +In practice: 2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees). + +You would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2", "23-Tree Intuition and Definition" %} + {% Blog "https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6", "Binary View of 23-Tree" %} + {% Blog "https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "2-3 Trees (student recitation)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/115-balanced-search-trees/103-the-2-3-4-trees.md b/src/roadmaps/computer-science/content/115-balanced-search-trees/103-the-2-3-4-trees.md new file mode 100644 index 000000000..5c74a5799 --- /dev/null +++ b/src/roadmaps/computer-science/content/115-balanced-search-trees/103-the-2-3-4-trees.md @@ -0,0 +1,9 @@ +# 2-3-4 Search Trees + +In practice: For every 2-4 tree, there are corresponding red–black trees with data elements in the same order. The insertion and deletion operations on 2-4 trees are also equivalent to color-flipping and rotations in red–black trees. This makes 2-4 trees an important tool for understanding the logic behind red–black trees, and this is why many introductory algorithm texts introduce 2-4 trees just before red–black trees, even though 2-4 trees are not often used in practice. + +{% resources %} + {% Blog "https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q", "CS 61B Lecture 26: Balanced Search Trees" %} + {% Blog "https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6", "Bottom Up 234-Trees" %} + {% Blog "https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5", "Top Down 234-Trees" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/115-balanced-search-trees/104-n-ary-trees.md b/src/roadmaps/computer-science/content/115-balanced-search-trees/104-n-ary-trees.md new file mode 100644 index 000000000..e4f029d54 --- /dev/null +++ b/src/roadmaps/computer-science/content/115-balanced-search-trees/104-n-ary-trees.md @@ -0,0 +1,11 @@ +# N-ary (K-ary, M-ary) Trees + +Note: the N or K is the branching factor (max branches) + +Binary trees are a 2-ary tree, with branching factor = 2 + +2-3 trees are 3-ary + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/K-ary_tree", "K-Ary Tree" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/115-balanced-search-trees/105-b-tree.md b/src/roadmaps/computer-science/content/115-balanced-search-trees/105-b-tree.md new file mode 100644 index 000000000..d7506265d --- /dev/null +++ b/src/roadmaps/computer-science/content/115-balanced-search-trees/105-b-tree.md @@ -0,0 +1,15 @@ +# B-Trees + +Fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor). + +In Practice: B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary block in a particular file. The basic problem is turning the file block i address into a disk block (or perhaps to a cylinder-head-sector) address + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/B-tree", "B-Tree - Wikipedia" %} + {% Blog "http://btechsmartclass.com/data_structures/b-trees.html", "B-Tree Datastructure" %} + {% Blog "https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6", "Introduction to B-Trees" %} + {% Blog "https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6", "B-Tree Definition and Insertion" %} + {% Blog "https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6", "B-Tree Deletion" %} + {% Blog "https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf", "MIT 6.851 - Memory Hierarchy Models" %} + {% Blog "https://www.youtube.com/playlist?list=PL9xmBV_5YoZNFPPv98DjTdD9X6UI9KMHz", "B-Trees (playlist) in 26 minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/115-balanced-search-trees/index.md b/src/roadmaps/computer-science/content/115-balanced-search-trees/index.md new file mode 100644 index 000000000..3fef14a36 --- /dev/null +++ b/src/roadmaps/computer-science/content/115-balanced-search-trees/index.md @@ -0,0 +1,10 @@ +# Balanced Search Trees + +Balanced search trees are a type of data structure that allow for fast insertion, deletion, and lookup of data. They are a type of self-balancing binary search tree, which means that they are a binary tree that maintains the binary search tree property while also keeping the tree balanced. This means that the tree is always approximately balanced, which allows for fast insertion, deletion, and lookup of data. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree", "Self-balancing binary search tree - Wikipedia" %} + {% Blog "https://www.youtube.com/watch?v=IbNZ-x1I2IM", "Balanced Search Trees Operations and Applications 11 min" %} + {% Blog "https://www.youtube.com/watch?v=q4fnJZr8ztY", "Balanced binary search tree rotations" %} +{% endresources %} + diff --git a/src/roadmaps/computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md b/src/roadmaps/computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md new file mode 100644 index 000000000..62dc0b029 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md @@ -0,0 +1,9 @@ +# Horizontal vs Vertical Scaling + +Horizontal scaling is the process of adding more machines to your system. This is also known as scaling out. Vertical scaling is the process of adding more power to a single machine. This is also known as scaling up. + +{% resources %} + {% Blog "https://www.section.io/blog/scaling-horizontally-vs-vertically/", "Scaling Horizontally vs. Scaling Vertically" %} + {% Blog "https://www.youtube.com/watch?v=xpDnVSmNFX0", "System Design Basics: Horizontal vs. Vertical Scaling" %} + {% Blog "https://www.youtube.com/watch?v=R99R-SNbo9g", "Vertical vs. Horizontal Scaling for Database Servers" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/101-clustering.md b/src/roadmaps/computer-science/content/116-system-design/101-clustering.md new file mode 100644 index 000000000..4c2b3f75f --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/101-clustering.md @@ -0,0 +1,7 @@ +# Clustering + +At a high level, a computer cluster is a group of two or more computers, or nodes, that run in parallel to achieve a common goal. This allows workloads consisting of a high number of individual, parallelizable tasks to be distributed among the nodes in the cluster. As a result, these tasks can leverage the combined memory and processing power of each computer to increase overall performance. + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-clustering-3726", "System Design: Clustering" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/101-load-balancing.md b/src/roadmaps/computer-science/content/116-system-design/101-load-balancing.md new file mode 100644 index 000000000..c7f424fa3 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/101-load-balancing.md @@ -0,0 +1,8 @@ +# Load Balancing + +Load balancing is the process of distributing network or application traffic across a cluster of servers. Load balancing is used to improve responsiveness and reliability of applications, maximize throughput, minimize response time, and avoid overload of any single server. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=galcDRNd5Ow", "Load Balancers 101" %} + {% Blog "https://www.youtube.com/watch?v=gGLophKzJs8", "What is Load Balancing?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/102-caching.md b/src/roadmaps/computer-science/content/116-system-design/102-caching.md new file mode 100644 index 000000000..056956a1b --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/102-caching.md @@ -0,0 +1,9 @@ +# Caching + +Caching is a way of storing data in a temporary storage to make future requests faster. It is one of the most important tools in the computer science toolbox. + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#caching", "System Design - Caching" %} + {% Blog "https://www.youtube.com/watch?v=joifNgoXXFk", "What is Caching | System Design Basics" %} +{% endresources %} + diff --git a/src/roadmaps/computer-science/content/116-system-design/103-cdn.md b/src/roadmaps/computer-science/content/116-system-design/103-cdn.md new file mode 100644 index 000000000..6bd2e8ff5 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/103-cdn.md @@ -0,0 +1,8 @@ +# Content Delivery Network (CDN) + +A CDN is a network of servers that are distributed geographically. The servers are connected to each other and to the internet. The servers are used to deliver content to users. The content is delivered to the user from the server that is closest to the user. This is done to reduce latency and improve the performance of the content delivery. + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#content-delivery-network-cdn", "Content Delivery Network (CDN) - System Design" %} + {% Blog "https://www.youtube.com/watch?v=6DXEPcXKQNY", "Content Delivery Networks" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/104-proxy.md b/src/roadmaps/computer-science/content/116-system-design/104-proxy.md new file mode 100644 index 000000000..03c11e32a --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/104-proxy.md @@ -0,0 +1,8 @@ +# Proxy + +A proxy server is an intermediary piece of hardware/software sitting between the client and the backend server. It receives requests from clients and relays them to the origin servers. Typically, proxies are used to filter requests, log requests, or sometimes transform requests (by adding/removing headers, encrypting/decrypting, or compression). + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#proxy", "Proxy - System Design" %} + {% Blog "https://roadmap.sh/guides/proxy-servers", "Proxy Servers" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/105-cap-theorem.md b/src/roadmaps/computer-science/content/116-system-design/105-cap-theorem.md new file mode 100644 index 000000000..ce60cd376 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/105-cap-theorem.md @@ -0,0 +1,8 @@ +# CAP Theorem + +The CAP theorem states that it is impossible for a distributed data store to simultaneously provide more than two out of Consistency, Availability and Partition Tolerance. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=_RbsFXWRZ10", "What is CAP Theorem?" %} + {% Blog "https://en.wikipedia.org/wiki/CAP_theorem", "CAP Theorem - Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/106-queues.md b/src/roadmaps/computer-science/content/116-system-design/106-queues.md new file mode 100644 index 000000000..bcf4b1dfb --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/106-queues.md @@ -0,0 +1,9 @@ +# Queues + +Messaging queues are a common way to decouple systems. They are used to decouple the producer of a message from the consumer of a message. This allows the producer to send a message and not have to wait for the consumer to process it. It also allows the consumer to process the message at their own pace. + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#message-queues", "Message Queues - System Design" %} + {% Blog "https://www.youtube.com/watch?v=xErwDaOc-Gs", "What is a Message Queue?" %} + {% Blog "https://www.youtube.com/watch?v=oUJbuFMyBDk", "What is a Message Queue and Where is it used?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/107-architectural-styles.md b/src/roadmaps/computer-science/content/116-system-design/107-architectural-styles.md new file mode 100644 index 000000000..cb6f0f6e9 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/107-architectural-styles.md @@ -0,0 +1,7 @@ +# Architectural Styles + +Architectural patterns are the fundamental organization of a system, defining how the system is composed and how its components interact. Architectural patterns are identified by their name, like client-server, peer-to-peer, and layered. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/List_of_software_architecture_styles_and_patterns", "List of software architecture styles and patterns" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/108-rest.md b/src/roadmaps/computer-science/content/116-system-design/108-rest.md new file mode 100644 index 000000000..3d1aa94c8 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/108-rest.md @@ -0,0 +1,10 @@ +# REST + +REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. + +{% resources %} + {% Blog "https://www.codecademy.com/article/what-is-rest", "What is REST?" %} + {% Blog "https://www.redhat.com/en/topics/api/what-is-a-rest-api", "What is a REST API?" %} + {% Blog "https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm", "Roy Fieldings dissertation chapter, Representational State Transfer (REST)" %} + {% Course "https://restapitutorial.com/", "Learn REST: A RESTful Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/109-graphql.md b/src/roadmaps/computer-science/content/116-system-design/109-graphql.md new file mode 100644 index 000000000..c7c7a4e1f --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/109-graphql.md @@ -0,0 +1,7 @@ +# GraphQL + +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. + +{% resources %} + {% Blog "https://www.apollographql.com/tutorials/", "Apollo GraphQL Tutorials" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/110-grpc.md b/src/roadmaps/computer-science/content/116-system-design/110-grpc.md new file mode 100644 index 000000000..3947fc510 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/110-grpc.md @@ -0,0 +1,14 @@ +# gPRC + +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. + +It'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 + +{% resources %} + {% Official "https://grpc.io/", "gRPC Website" %} + {% Official "https://grpc.io/docs/what-is-grpc/introduction/", "gRPC Introduction" %} + {% Official "https://grpc.io/docs/what-is-grpc/core-concepts/", "gRPC Core Concepts" %} + {% Blog "https://youtu.be/XRXTsQwyZSU", "Stephane Maarek - gRPC Introduction" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/111-cloud-design-patterns.md b/src/roadmaps/computer-science/content/116-system-design/111-cloud-design-patterns.md new file mode 100644 index 000000000..718e7f8ce --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/111-cloud-design-patterns.md @@ -0,0 +1,9 @@ +# Cloud Design Patterns + +These design patterns are useful for building reliable, scalable, secure applications in the cloud. + +The 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. + +{% resources %} + {% Blog "https://learn.microsoft.com/en-us/azure/architecture/patterns/", "Cloud Design Patterns" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/112-long-polling.md b/src/roadmaps/computer-science/content/116-system-design/112-long-polling.md new file mode 100644 index 000000000..4def10088 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/112-long-polling.md @@ -0,0 +1,8 @@ +# Long Polling + +Long polling is a technique used to implement server push functionality over HTTP. It is a method of opening a request on the server and keeping it open until an event occurs, at which point the server responds. This is in contrast to a regular HTTP request, where the server responds immediately with whatever data is available at the time. + +{% resources %} + {% Blog "https://javascript.info/long-polling", "Long polling" %} + {% Blog "https://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet", "What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/113-short-polling.md b/src/roadmaps/computer-science/content/116-system-design/113-short-polling.md new file mode 100644 index 000000000..ce8388f41 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/113-short-polling.md @@ -0,0 +1,7 @@ +# Short Polling + +In short polling, the client requests information from the server. The server processes the request. If data is available for the request, server responds to the request with the required information. However, if the server has no data available for the client, server returns an empty response. In both the situation, the connection will be closed after returning the response. Clients keep issuing new requests even after server sends the empty responses. This mechanism increases the network cost on the server. + +{% resources %} + {% Blog "https://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet", "What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/114-web-sockets.md b/src/roadmaps/computer-science/content/116-system-design/114-web-sockets.md new file mode 100644 index 000000000..3680a03f5 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/114-web-sockets.md @@ -0,0 +1,7 @@ +# Web Sockets + +Web sockets are a bidirectional communication protocol between a client and a server. They are used for real-time applications like chat, multiplayer games, and live data updates. Web sockets are also used to establish a connection between a server and a client. This connection is then used to send data in both directions. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/what-is-web-socket-and-how-it-is-different-from-the-http/", "What is web socket and how it is different from the HTTP?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/115-sse.md b/src/roadmaps/computer-science/content/116-system-design/115-sse.md new file mode 100644 index 000000000..77a15db66 --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/115-sse.md @@ -0,0 +1,8 @@ +# Server Sent Events + +Server-Sent Events is a server push technology enabling a client to receive automatic updates from a server via an HTTP connection, and describes how servers can initiate data transmission towards clients once an initial client connection has been established. + +{% resources %} + {% Blog "https://medium.com/yemeksepeti-teknoloji/what-is-server-sent-events-sse-and-how-to-implement-it-904938bffd73", "What is Server-Sent Events (SSE) and how to implement it?" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events", "Using server-sent events" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/116-system-design/index.md b/src/roadmaps/computer-science/content/116-system-design/index.md new file mode 100644 index 000000000..fb71f291f --- /dev/null +++ b/src/roadmaps/computer-science/content/116-system-design/index.md @@ -0,0 +1,11 @@ +# System Design + +System design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements. It is a very broad topic, and there are many ways to approach it. + +{% resources %} + {% Blog "https://github.com/donnemartin/system-design-primer", "System Design Primer" %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo", "System Design: The complete course" %} + {% Blog "https://www.youtube.com/watch?v=Y-Gl4HEyeUQ", "System Design 101" %} + {% Blog "https://www.youtube.com/watch?v=a2rcgzludDU", "Scaling the Unscalable" %} + {% Blog "https://www.youtube.com/watch?v=YkGHxOg9d3M", "System design interview: Scale to 1 million users" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/100-sql-vs-nosql-databases.md b/src/roadmaps/computer-science/content/117-databases/100-sql-vs-nosql-databases.md new file mode 100644 index 000000000..0b8405c06 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/100-sql-vs-nosql-databases.md @@ -0,0 +1,11 @@ +# SQL vs NoSQL databases + +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. Some examples are PostgreSQL, MySQL, MariaDB etc. + +NoSQL stands for Not Only SQL. It's used for non-relational databases. A NoSQL database is a collection of collections that stores a specific set of unstructured data. Some examples are MongoDB, CouchDB, Redis etc. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Q5aTUc7c4jg", "SQL vs. NoSQL: Whats the difference?" %} + {% Blog "https://www.youtube.com/watch?v=cODCpXtPHbQ&t=22s", "Database Design Tips | Choosing the Best Database in a System Design Interview" %} + {% Blog "https://www.youtube.com/watch?v=FzlpwoeSrE0", "NoSQL vs SQL – Which Type of Database Should You Use?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/101-normalization-denormalization.md b/src/roadmaps/computer-science/content/117-databases/101-normalization-denormalization.md new file mode 100644 index 000000000..899cb16fd --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/101-normalization-denormalization.md @@ -0,0 +1,10 @@ +# Normalization vs Denormalization + +Database normalization is a process used to organize a database into tables and columns. The idea is that a table should be about a specific topic and that only those columns which support that topic are included. This limits the number of duplicate data contained within your database. This makes the database more flexible by eliminating issues stemming from database modifications. + +Denormalization is the opposite of normalization. It is the process of adding redundant data to a database to improve read performance. This is done by adding duplicate data into multiple tables to avoid expensive joins. This is done at the expense of increased storage and decreased write performance. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=sDU94hraq8g", "Normalization vs. Denormalization | Events and Event Streaming" %} + {% Blog "https://www.youtube.com/watch?v=UrYLYV7WSHM", "Normalization - 1NF, 2NF, 3NF and 4NF" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/102-entity-relationship-model.md b/src/roadmaps/computer-science/content/117-databases/102-entity-relationship-model.md new file mode 100644 index 000000000..72da814eb --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/102-entity-relationship-model.md @@ -0,0 +1,8 @@ +# Entity Relationship Model + +Entity relationship model is a high-level data model that describes the logical structure of a database. It is a graphical representation of entities and their relationships to each other, typically used in modeling the organization of data within databases or information systems. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=QpdhBUYk7Kk", "Entity Relationship Diagram (ERD) Tutorial - Part 1" %} + {% Blog "https://www.youtube.com/watch?v=-CuY5ADwn24", "Entity Relationship Diagram (ERD) Tutorial - Part 2" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/103-ddl.md b/src/roadmaps/computer-science/content/117-databases/103-ddl.md new file mode 100644 index 000000000..31a1647f6 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/103-ddl.md @@ -0,0 +1,7 @@ +# DDL (Data Definition Language) + +DDL or Data Definition Language actually consists of the SQL commands that can be used to define the database schema. It simply deals with descriptions of the database schema and is used to create and modify the structure of database objects in the database. DDL is a set of SQL commands used to create, modify, and delete database structures but not data. These commands are normally not used by a general user, who should be accessing the database via an application. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/", "SQL | DDL, DQL, DML, DCL and TCL Commands" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/104-dml.md b/src/roadmaps/computer-science/content/117-databases/104-dml.md new file mode 100644 index 000000000..c0084dba0 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/104-dml.md @@ -0,0 +1,7 @@ +# DML (Data Manipulation Language) + +The SQL commands that deals with the manipulation of data present in the database belong to DML or Data Manipulation Language and this includes most of the SQL statements. It is the component of the SQL statement that controls access to data and to the database. Basically, DCL statements are grouped with DML statements. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/", "SQL | DDL, DQL, DML, DCL and TCL Commands" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/105-dql.md b/src/roadmaps/computer-science/content/117-databases/105-dql.md new file mode 100644 index 000000000..6276f289c --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/105-dql.md @@ -0,0 +1,7 @@ +# DQL (Data Query Language) + +DQL statements are used for performing queries on the data within schema objects. The purpose of the DQL Command is to get some schema relation based on the query passed to it. We can define DQL as follows it is a component of SQL statement that allows getting data from the database and imposing order upon it. It includes the SELECT statement. This command allows getting the data out of the database to perform operations with it. When a SELECT is fired against a table or tables the result is compiled into a further temporary table, which is displayed or perhaps received by the program i.e. a front-end. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/", "SQL | DDL, DQL, DML, DCL and TCL Commands" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/106-dcl.md b/src/roadmaps/computer-science/content/117-databases/106-dcl.md new file mode 100644 index 000000000..7b5712392 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/106-dcl.md @@ -0,0 +1,7 @@ +DCL (Data Control Language): + +DCL includes commands such as GRANT and REVOKE which mainly deal with the rights, permissions, and other controls of the database system. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/", "SQL | DDL, DQL, DML, DCL and TCL Commands" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/107-locking.md b/src/roadmaps/computer-science/content/117-databases/107-locking.md new file mode 100644 index 000000000..04616d7a2 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/107-locking.md @@ -0,0 +1,9 @@ +# Locking + +Locks are used to prevent data from being modified by multiple processes at the same time. This is important because if two processes are modifying the same data at the same time, the data can become corrupted. Locks are used to prevent this from happening. + +{% resources %} + {% Blog "https://medium.com/inspiredbrilliance/what-are-database-locks-1aff9117c290", "Locking in Databases and Isolation Mechanisms" %} + {% Blog "https://www.dbta.com/Columns/DBA-Corner/Understanding-Database-Lock-Timeouts-and-Deadlocks-148659.aspx", "Understanding Database Lock Timeouts and Deadlocks" %} + {% Blog "https://www.youtube.com/watch?v=nuBi2XbHH18", "Row-Level Database Locks Explained - (Read vs Exclusive)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/109-acid-model.md b/src/roadmaps/computer-science/content/117-databases/109-acid-model.md new file mode 100644 index 000000000..d2cfcb4a5 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/109-acid-model.md @@ -0,0 +1,9 @@ +# ACID + +ACID are the four properties of any database system that help in making sure that we are able to perform the transactions in a reliable manner. It's an acronym which refers to the presence of four properties: atomicity, consistency, isolation and durability + +{% resources %} + {% Blog "https://retool.com/blog/whats-an-acid-compliant-database/", "What is ACID Compliant Database?" %} + {% Blog "https://fauna.com/blog/what-is-acid-compliance-atomicity-consistency-isolation", "What is ACID Compliance?: Atomicity, Consistency, Isolation" %} + {% Blog "https://www.youtube.com/watch?v=yaQ5YMWkxq4", "ACID Explained: Atomic, Consistent, Isolated & Durable" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/110-base-model.md b/src/roadmaps/computer-science/content/117-databases/110-base-model.md new file mode 100644 index 000000000..5b1dc80ea --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/110-base-model.md @@ -0,0 +1,11 @@ +# BASE Model + +The rise in popularity of NoSQL databases provided a flexible and fluidity with ease to manipulate data and as a result, a new database model was designed, reflecting these properties. The acronym BASE is slightly more confusing than ACID but however, the words behind it suggest ways in which the BASE model is different and acronym BASE stands for:- + +- **B**asically **A**vailable +- **S**oft state +- **E**ventual consistency + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/acid-model-vs-base-model-for-database/", "ACID Model vs BASE Model For Database" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/111-cap-theorem.md b/src/roadmaps/computer-science/content/117-databases/111-cap-theorem.md new file mode 100644 index 000000000..0043a6dcf --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/111-cap-theorem.md @@ -0,0 +1,11 @@ +# CAP Theorem + +CAP is an acronym for Consistency, Availability, and Partition Tolerance. According to the CAP theorem, any distributed system can only guarantee two of the three properties at any time. You can't guarantee all three properties at once. + +{% resources %} + {% Blog "https://www.bmc.com/blogs/cap-theorem/", "What is CAP Theorem?" %} + {% Blog "https://en.wikipedia.org/wiki/CAP_theorem", "CAP Theorem - Wikipedia" %} + {% Blog "https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/", "An Illustrated Proof of the CAP Theorem" %} + {% Blog "https://www.ibm.com/uk-en/cloud/learn/cap-theorem", "CAP Theorem and its applications in NoSQL Databases" %} + {% Blog "https://www.youtube.com/watch?v=_RbsFXWRZ10", "What is CAP Theorem?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/112-pacelc-theorem.md b/src/roadmaps/computer-science/content/117-databases/112-pacelc-theorem.md new file mode 100644 index 000000000..4bd525390 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/112-pacelc-theorem.md @@ -0,0 +1,8 @@ +# PACELC Theorem + +The PACELC Theorem is an extension of the CAP Theorem. One of the questions that CAP Theorem wasn’t able to answer was “what happens when there is no Partition, What Logical Combination then a Distributed System have?“. So to answer this, In addition to Consistency, Availability, and Partition Tolerance it also includes Latency as one of the desired properties of a Distributed System. The acronym PACELC stands for Partitioned, Availability, Consistency Else Latency, Consistency. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/pacelc-theorem/", "PACELC Theorem - Geeks for Geeks" %} + {% Blog "https://www.scylladb.com/glossary/pacelc-theorem/", "PACELC Theorem" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/113-indexes.md b/src/roadmaps/computer-science/content/117-databases/113-indexes.md new file mode 100644 index 000000000..2b07898f1 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/113-indexes.md @@ -0,0 +1,8 @@ +# Database Indexes + +An index is a data structure that you build and assign on top of an existing table that basically looks through your table and tries to analyze and summarize so that it can create shortcuts. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/database-indexing-at-a-glance-bb50809d48bd/", "An in-depth look at Database Indexing" %} + {% Blog "https://www.youtube.com/watch?v=-qNSXK7s7_w", "Database Indexing Explained" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/114-views.md b/src/roadmaps/computer-science/content/117-databases/114-views.md new file mode 100644 index 000000000..b9993b6c0 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/114-views.md @@ -0,0 +1,9 @@ +# Views + +Views in SQL are kind of virtual tables. A view also has rows and columns as they are in a real table in the database. We can create a view by selecting fields from one or more tables present in the database. A View can either have all the rows of a table or specific rows based on certain condition. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sql-views/", "SQL | Views" %} + {% Blog "https://www.ibm.com/docs/en/eamfoc/7.6.0?topic=structure-views", "Datbase Views" %} + {% Blog "https://en.wikipedia.org/wiki/View_(SQL)", "SQL Views - Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/115-transactions.md b/src/roadmaps/computer-science/content/117-databases/115-transactions.md new file mode 100644 index 000000000..093e68a4e --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/115-transactions.md @@ -0,0 +1,7 @@ +# Transactions + +In short, a database transaction is a sequence of multiple operations performed on a database, and all served as a single logical unit of work — taking place wholly or not at all. In other words, there's never a case where only half of the operations are performed and the results saved. + +{% resources %} + {% Blog "https://fauna.com/blog/database-transaction", "What are Transactions?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/116-stored-procedures.md b/src/roadmaps/computer-science/content/117-databases/116-stored-procedures.md new file mode 100644 index 000000000..e3b743a22 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/116-stored-procedures.md @@ -0,0 +1,8 @@ +# Stored Procedures + +Stored Procedures are created to perform one or more DML operations on Database. It is nothing but the group of SQL statements that accepts some input in the form of parameters and performs some task and may or may not returns a value. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/what-is-stored-procedures-in-sql/", "What is Stored Procedures in SQL ?" %} + {% Blog "https://www.programiz.com/sql/stored-procedures", "SQL Stored Procedures" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/117-database-federation.md b/src/roadmaps/computer-science/content/117-databases/117-database-federation.md new file mode 100644 index 000000000..1256ec491 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/117-database-federation.md @@ -0,0 +1,7 @@ +# Database Federation + +Federation (or functional partitioning) splits up databases by function. The federation architecture makes several distinct physical databases appear as one logical database to end-users. + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#database-federation", "Database Federation" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/118-replication.md b/src/roadmaps/computer-science/content/117-databases/118-replication.md new file mode 100644 index 000000000..6313ce409 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/118-replication.md @@ -0,0 +1,8 @@ +# Replication + +Replication is a process that involves sharing information to ensure consistency between redundant resources such as multiple databases, to improve reliability, fault-tolerance, or accessibility. + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#database-replication", "Database Replication" %} + {% Blog "https://en.wikipedia.org/wiki/Replication_(computing)", "Replication (computing)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/119-sharding.md b/src/roadmaps/computer-science/content/117-databases/119-sharding.md new file mode 100644 index 000000000..c9abab154 --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/119-sharding.md @@ -0,0 +1,10 @@ +# Sharding + +Database sharding is a method of distributing data across multiple machines. It is a horizontal scaling technique, as opposed to vertical scaling, which is scaling by adding more power to a single machine. Sharding is a common way to scale a database. + +{% resources %} + {% Blog "https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#sharding", "Sharding" %} + {% Blog "https://www.youtube.com/watch?v=RynPj8C0BXA", "Sharding & Database Partitioning | System Design Basics" %} + {% Blog "https://www.youtube.com/watch?v=hdxdhCpgYo8", "Database Sharding - Watch" %} + {% Blog "https://www.youtube.com/watch?v=kSH4bt8ypOQ", "Database Sharding in 5 minutes" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/117-databases/index.md b/src/roadmaps/computer-science/content/117-databases/index.md new file mode 100644 index 000000000..e33d51c2b --- /dev/null +++ b/src/roadmaps/computer-science/content/117-databases/index.md @@ -0,0 +1,9 @@ +# Databases + +A database is a collection of useful data of one or more related organizations structured in a way to make data an asset to the organization. A database management system is a software designed to assist in maintaining and extracting large collections of data in a timely fashion. + +{% resources %} + {% Blog "https://www.oracle.com/database/what-is-database/", "Oracle: What is a Database?" %} + {% Blog "https://www.prisma.io/dataguide/intro/what-are-databases", "Prisma.io: What are Databases?" %} + {% Blog "https://www.youtube.com/watch?v=D-k-h0GuFmE&list=PL9ysvtVnryGpnIj9rcIqNDxakUn6v72Hm", "DBMS by Stanford" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/118-networking/100-sockets.md b/src/roadmaps/computer-science/content/118-networking/100-sockets.md new file mode 100644 index 000000000..649121db9 --- /dev/null +++ b/src/roadmaps/computer-science/content/118-networking/100-sockets.md @@ -0,0 +1,8 @@ +# Sockets + +A socket is an interface for network communication. It is a way for two programs to communicate with each other over a network. It is a way for a client to send a request to a server and for the server to send a response back to the client. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=8ARodQ4Wlf4", "A Beginners Guide to WebSockets" %} + {% Blog "https://www.youtube.com/watch?v=1BfCnjr_Vjg", "WebSockets in 100 Seconds & Beyond with Socket.io" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/118-networking/101-tls-https.md b/src/roadmaps/computer-science/content/118-networking/101-tls-https.md new file mode 100644 index 000000000..49cc7b3df --- /dev/null +++ b/src/roadmaps/computer-science/content/118-networking/101-tls-https.md @@ -0,0 +1,8 @@ +# TLS / HTTPS + +TLS (Transport Layer Security) is a cryptographic protocol that provides privacy and data integrity between two communicating applications. It is widely used to secure HTTP, although it can be used with any protocol. TLS is often used in combination with HTTPS, which is HTTP over TLS. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=S2iBR2ZlZf0", "SSL and HTTPS" %} + {% Blog "https://www.youtube.com/watch?v=Rp3iZUvXWlM", "SSL/TLS - Cristina Formaini" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/118-networking/102-http.md b/src/roadmaps/computer-science/content/118-networking/102-http.md new file mode 100644 index 000000000..84eb5405d --- /dev/null +++ b/src/roadmaps/computer-science/content/118-networking/102-http.md @@ -0,0 +1,12 @@ +# HTTP? + +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. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/", "What is HTTP?" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview", "An overview of HTTP" %} + {% Blog "https://kamranahmed.info/blog/2016/08/13/http-in-depth", "Journey to HTTP/2" %} + {% Blog "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", "HTTP/3 From A To Z: Core Concepts" %} + {% Blog "https://www.youtube.com/watch?v=a-sBfyiXysI", "HTTP/1 to HTTP/2 to HTTP/3" %} + {% Blog "https://www.youtube.com/watch?v=iYM2zFP3Zn0", "HTTP Crash Course & Exploration" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/118-networking/103-dns.md b/src/roadmaps/computer-science/content/118-networking/103-dns.md new file mode 100644 index 000000000..81ecfdf5b --- /dev/null +++ b/src/roadmaps/computer-science/content/118-networking/103-dns.md @@ -0,0 +1,11 @@ +# DNS + +The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/", "What is DNS?" %} + {% Blog "https://howdns.works/", "How DNS works (comic)" %} + {% Blog "https://www.youtube.com/watch?v=Wj0od2ag5sk", "DNS and How does it Work?" %} + {% Blog "https://www.youtube.com/watch?v=7lxgpKh_fRY", "DNS Records" %} + {% Blog "https://www.youtube.com/watch?v=zEmUuNFBgN8&list=PLTk5ZYSbd9MhMmOiPhfRJNW7bhxHo4q-K", "Complete DNS mini-series" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/118-networking/104-tcp-ip-model.md b/src/roadmaps/computer-science/content/118-networking/104-tcp-ip-model.md new file mode 100644 index 000000000..4d117f685 --- /dev/null +++ b/src/roadmaps/computer-science/content/118-networking/104-tcp-ip-model.md @@ -0,0 +1,10 @@ +# OSI and TCP/IP Models + +The OSI and TCP/IP model is used to help the developer to design their system for interoperability. The OSI model has 7 layers while the TCP/IP model has a more summarized form of the OSI model only consisting 4 layers. This is important if you're are trying to design a system to communicate with other systems. + +{% resources %} + {% Blog "https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/", "Cloudflare - What is the OSI model" %} + {% Blog "https://www.geeksforgeeks.org/layers-of-osi-model/", "Geeksforgeeks - Layers of OSI model" %} + {% Blog "https://www.geeksforgeeks.org/tcp-ip-model/", "Geeksforgeeks - TCP/IP model" %} + {% Blog "https://www.youtube.com/watch?v=e5DEVa9eSN0", "TCP/IP and the OSI Model Explained!" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/118-networking/105-osi-model.md b/src/roadmaps/computer-science/content/118-networking/105-osi-model.md new file mode 100644 index 000000000..4d117f685 --- /dev/null +++ b/src/roadmaps/computer-science/content/118-networking/105-osi-model.md @@ -0,0 +1,10 @@ +# OSI and TCP/IP Models + +The OSI and TCP/IP model is used to help the developer to design their system for interoperability. The OSI model has 7 layers while the TCP/IP model has a more summarized form of the OSI model only consisting 4 layers. This is important if you're are trying to design a system to communicate with other systems. + +{% resources %} + {% Blog "https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/", "Cloudflare - What is the OSI model" %} + {% Blog "https://www.geeksforgeeks.org/layers-of-osi-model/", "Geeksforgeeks - Layers of OSI model" %} + {% Blog "https://www.geeksforgeeks.org/tcp-ip-model/", "Geeksforgeeks - TCP/IP model" %} + {% Blog "https://www.youtube.com/watch?v=e5DEVa9eSN0", "TCP/IP and the OSI Model Explained!" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/118-networking/index.md b/src/roadmaps/computer-science/content/118-networking/index.md new file mode 100644 index 000000000..4b5133800 --- /dev/null +++ b/src/roadmaps/computer-science/content/118-networking/index.md @@ -0,0 +1,11 @@ +# Networking + +Networking is the process of connecting two or more computing devices together for the purpose of sharing data. In a data network, shared data may be as simple as a printer or as complex as a global financial transaction. + +If you have networking experience or want to be a reliability engineer or operations engineer, expect questions from these topics. Otherwise, this is just good to know. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=qiQR5rTSshw", "Computer Networking Course - Network Engineering" %} + {% Blog "https://www.khanacademy.org/computing/code-org/computers-and-the-internet", "Khan Academy - Networking" %} + {% Blog "https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j", "Networking Video Series (21 videos)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/119-security/100-public-key-cryptography.md b/src/roadmaps/computer-science/content/119-security/100-public-key-cryptography.md new file mode 100644 index 000000000..6b6e0d249 --- /dev/null +++ b/src/roadmaps/computer-science/content/119-security/100-public-key-cryptography.md @@ -0,0 +1,9 @@ +# Public Key Cryptography + +Public-key cryptography, or asymmetric cryptography, is the field of cryptographic systems that use pairs of related keys. Each key pair consists of a public key and a corresponding private key. Key pairs are generated with cryptographic algorithms based on mathematical problems termed one-way functions. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Public-key_cryptography", "Public-key cryptography - Wikipedia" %} + {% Blog "https://www.youtube.com/watch?v=GSIDS_lvRv4", "Public Key Cryptography - Computerphile" %} + {% Blog "https://www.youtube.com/watch?v=wXB-V_Keiu8", "Public Key Cryptography: RSA Encryption Algorithm" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/119-security/101-hashing-encryption-encoding.md b/src/roadmaps/computer-science/content/119-security/101-hashing-encryption-encoding.md new file mode 100644 index 000000000..efe6684f9 --- /dev/null +++ b/src/roadmaps/computer-science/content/119-security/101-hashing-encryption-encoding.md @@ -0,0 +1,11 @@ +# Hashing/Ecncryption/Encoding + +Hashing is a one-way function that takes an input and produces a fixed-length output. The output is called a hash. The hash is a unique representation of the input. The hash is deterministic, meaning that the same input will always produce the same hash. The hash is irreversible, meaning that it is impossible to go from the hash back to the original input. The hash is collision-resistant, meaning that it is impossible to find two different inputs that produce the same hash. + +Encryption is a two-way function that takes an input and produces an output. The output is called ciphertext. The ciphertext is a unique representation of the input. The ciphertext is deterministic, meaning that the same input will always produce the same ciphertext. The ciphertext is reversible, meaning that it is possible to go from the ciphertext back to the original input. The ciphertext is collision-resistant, meaning that it is impossible to find two different inputs that produce the same ciphertext. + +Encoding is a two-way function that takes an input and produces an output. The output is called encoded text. The encoded text is a unique representation of the input. The encoded text is deterministic, meaning that the same input will always produce the same encoded text. The encoded text is reversible, meaning that it is possible to go from the encoded text back to the original input. The encoded text is not collision-resistant, meaning that it is possible to find two different inputs that produce the same encoded text. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=-bAnBzvMLig", "Encoding, Encryption and Hashing -- Whats the Difference?" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/119-security/102-hashing-algorithms.md b/src/roadmaps/computer-science/content/119-security/102-hashing-algorithms.md new file mode 100644 index 000000000..531d00d0b --- /dev/null +++ b/src/roadmaps/computer-science/content/119-security/102-hashing-algorithms.md @@ -0,0 +1,9 @@ +# Hashing Algorithms + +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. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=b4b8ktEV4Bg", "Hashing Algorithms and Security - Computerphile" %} + {% Blog "https://www.youtube.com/watch?v=Plp4F3ZfC7A", "Top Hashing Algorithms In Cryptography | MD5 and SHA 256 Algorithms Expalined | Simplilearn" %} + {% Blog "https://www.youtube.com/watch?v=DMtFhACPnTY", "SHA: Secure Hashing Algorithm - Computerphile" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/119-security/103-owasp-top-10.md b/src/roadmaps/computer-science/content/119-security/103-owasp-top-10.md new file mode 100644 index 000000000..4cd897c3b --- /dev/null +++ b/src/roadmaps/computer-science/content/119-security/103-owasp-top-10.md @@ -0,0 +1,10 @@ +# OWASP + +OWASP or Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/OWASP", "Wikipedia - OWASP" %} + {% Blog "https://github.com/0xRadi/OWASP-Web-Checklist", "OWASP Web Application Security Testing Checklist" %} + {% Blog "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/", "OWASP Top 10 Security Risks" %} + {% Blog "https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html", "OWASP Cheatsheets" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/119-security/index.md b/src/roadmaps/computer-science/content/119-security/index.md new file mode 100644 index 000000000..89b3dfae7 --- /dev/null +++ b/src/roadmaps/computer-science/content/119-security/index.md @@ -0,0 +1,13 @@ +# Security + +Web security refers to the protective measures taken by the developers to protect the web applications from threats that could affect the business. + +{% resources %} + {% Blog "https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh", "MIT 6.858 Computer Systems Security, Fall 2014" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https", "Why HTTPS Matters" %} + {% Blog "https://en.wikipedia.org/wiki/OWASP", "Wikipedia - OWASP" %} + {% Blog "https://github.com/0xRadi/OWASP-Web-Checklist", "OWASP Web Application Security Testing Checklist" %} + {% Blog "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/", "OWASP Top 10 Security Risks" %} + {% Blog "https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html", "OWASP Cheatsheets" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP", "Content Security Policy (CSP)" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/120-how-computers-work/100-how-cpu-executes-programs.md b/src/roadmaps/computer-science/content/120-how-computers-work/100-how-cpu-executes-programs.md new file mode 100644 index 000000000..b617240c7 --- /dev/null +++ b/src/roadmaps/computer-science/content/120-how-computers-work/100-how-cpu-executes-programs.md @@ -0,0 +1,5 @@ +# How CPU Executes Programs? + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=XM4lGflQFvA", "How CPU executes a program" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/120-how-computers-work/101-how-computers-calculate.md b/src/roadmaps/computer-science/content/120-how-computers-work/101-how-computers-calculate.md new file mode 100644 index 000000000..cdc34be77 --- /dev/null +++ b/src/roadmaps/computer-science/content/120-how-computers-work/101-how-computers-calculate.md @@ -0,0 +1,5 @@ +# How Computers Calculate? + +{% resources %} + {% Blog "https://youtu.be/1I5ZMmrOfnA", "How computers calculate - ALU" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/120-how-computers-work/102-registers-and-ram.md b/src/roadmaps/computer-science/content/120-how-computers-work/102-registers-and-ram.md new file mode 100644 index 000000000..bbdc1cb34 --- /dev/null +++ b/src/roadmaps/computer-science/content/120-how-computers-work/102-registers-and-ram.md @@ -0,0 +1,5 @@ +# Registers and RAMs + +{% resources %} + {% Blog "https://youtu.be/fpnE6UAfbtU", "Registers and RAM" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/120-how-computers-work/103-instructions-and-programs.md b/src/roadmaps/computer-science/content/120-how-computers-work/103-instructions-and-programs.md new file mode 100644 index 000000000..9d6f8fa85 --- /dev/null +++ b/src/roadmaps/computer-science/content/120-how-computers-work/103-instructions-and-programs.md @@ -0,0 +1,5 @@ +# Instructions and Programs + +{% resources %} + {% Blog "https://youtu.be/zltgXvg6r3k", "Instructions and Programs" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/120-how-computers-work/104-cpu-cache.md b/src/roadmaps/computer-science/content/120-how-computers-work/104-cpu-cache.md new file mode 100644 index 000000000..b4aaddeb8 --- /dev/null +++ b/src/roadmaps/computer-science/content/120-how-computers-work/104-cpu-cache.md @@ -0,0 +1,6 @@ +# CPU Cache + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24", "MIT 6.004 L15: The Memory Hierarchy" %} + {% Blog "https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-", "MIT 6.004 L16: Cache Issues" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/120-how-computers-work/index.md b/src/roadmaps/computer-science/content/120-how-computers-work/index.md new file mode 100644 index 000000000..cb707b426 --- /dev/null +++ b/src/roadmaps/computer-science/content/120-how-computers-work/index.md @@ -0,0 +1,11 @@ +# How Computers Work? + +Computers are everywhere. They are in our phones, our cars, our homes, and even in our pockets. But how do they actually work? How do they take in information, and how do they output information? + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=XM4lGflQFvA", "How CPU executes a program" %} + {% Blog "https://youtu.be/1I5ZMmrOfnA", "How computers calculate - ALU" %} + {% Blog "https://youtu.be/fpnE6UAfbtU", "Registers and RAM" %} + {% Blog "https://youtu.be/FZGugFqdr60", "The Central Processing Unit (CPU)" %} + {% Blog "https://youtu.be/zltgXvg6r3k", "Instructions and Programs" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/100-process-forking.md b/src/roadmaps/computer-science/content/121-processes-and-threads/100-process-forking.md new file mode 100644 index 000000000..8eee59e4d --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/100-process-forking.md @@ -0,0 +1,9 @@ +# Process Forking + +Process forking is a way to create a new process from an existing process. The new process is a copy of the existing process. The new process is called a child process and the existing process is called a parent process. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=PwxTbksJ2fo", "Understanding fork() system call for new process creation" %} + {% Blog "https://www.youtube.com/watch?v=IFEFVXvjiHY", "fork() and exec() System Calls" %} + {% Blog "https://www.youtube.com/watch?v=cex9XrZCU14", "The fork() function in C" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/101-memory-management.md b/src/roadmaps/computer-science/content/121-processes-and-threads/101-memory-management.md new file mode 100644 index 000000000..e7b0d17f0 --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/101-memory-management.md @@ -0,0 +1,8 @@ +# Memory Management + +Memory management is the process of allocating and deallocating memory. It is a very important part of any programming language. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24", "MIT 6.004 L15: The Memory Hierarchy" %} + {% Blog "https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-", "MIT 6.004 L16: Cache Issues" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/102-lock-mutex-semaphore.md b/src/roadmaps/computer-science/content/121-processes-and-threads/102-lock-mutex-semaphore.md new file mode 100644 index 000000000..5a496f4f9 --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/102-lock-mutex-semaphore.md @@ -0,0 +1,13 @@ +# Lock / Mutex / Semaphore + +A lock allows only one thread to enter the part that's locked and the lock is not shared with any other processes. + +A mutex is the same as a lock but it can be system wide (shared by multiple processes). + +A semaphore does the same as a mutex but allows x number of threads to enter, this can be used for example to limit the number of cpu, io or ram intensive tasks running at the same time. + +{% resources %} + {% Blog "https://stackoverflow.com/questions/2332765/what-is-the-difference-between-lock-mutex-and-semaphore", "What is the difference between lock, mutex and semaphore?" %} + {% Blog "https://stackoverflow.com/questions/34519/what-is-a-semaphore/40238#40238", "What is a Semaphore" %} + {% Blog "https://www.geeksforgeeks.org/mutex-vs-semaphore/", "Mutex vs Semaphore" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/103-concurrency-in-multiple-cores.md b/src/roadmaps/computer-science/content/121-processes-and-threads/103-concurrency-in-multiple-cores.md new file mode 100644 index 000000000..cbc0a72bd --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/103-concurrency-in-multiple-cores.md @@ -0,0 +1,6 @@ +# Concurrency in Multiple Cores + +{% resources %} + {% Blog "https://stackoverflow.com/questions/5372861/what-is-the-difference-between-multicore-and-concurrent-programming", "What is the difference between multicore and concurrent programming?" %} + {% Blog "https://cs.stackexchange.com/questions/140793/concurrency-in-multiple-core", "Concurrency in Multicore systems" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/103-scheduling-algorithms.md b/src/roadmaps/computer-science/content/121-processes-and-threads/103-scheduling-algorithms.md new file mode 100644 index 000000000..babe0e880 --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/103-scheduling-algorithms.md @@ -0,0 +1,15 @@ +# Scheduling Algorithms + +CPU Scheduling is the process of selecting a process from the ready queue and allocating the CPU to it. The selection of a process is based on a particular scheduling algorithm. The scheduling algorithm is chosen depending on the type of system and the requirements of the processes. + +Here is the list of some of the most commonly used scheduling algorithms: + +- **First Come First Serve (FCFS):** The process that arrives first is allocated the CPU first. It is a non-preemptive algorithm. +- **Shortest Job First (SJF):** The process with the smallest execution time is allocated the CPU first. It is a non-preemptive algorithm. +- **Shortest Remaining Time First (SRTF):** The process with the smallest remaining execution time is allocated the CPU first. It is a preemptive algorithm. +- **Round Robin (RR):** The process is allocated the CPU for a fixed time slice. The time slice is usually 10 milliseconds. It is a preemptive algorithm. +- **Priority Scheduling:** The process with the highest priority is allocated the CPU first. It is a preemptive algorithm. +- **Multi-level Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. It is a preemptive algorithm. +- **Multi-level Feedback Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. If a process is preempted, it is moved to the next queue. It is a preemptive algorithm. +- **Lottery Scheduling:** The process is allocated the CPU based on a lottery system. It is a preemptive algorithm. +- **Multilevel Feedback Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. If a process is preempted, it is moved to the next queue. It is a preemptive algorithm. diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/104-cpu-interrupts.md b/src/roadmaps/computer-science/content/121-processes-and-threads/104-cpu-interrupts.md new file mode 100644 index 000000000..b2b2c41e3 --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/104-cpu-interrupts.md @@ -0,0 +1,7 @@ +# CPU Interrupts + +CPU Interrupts are a way for the CPU to communicate with the rest of the computer. They are a way for the CPU to tell the rest of the computer that it needs to do something. For example, if the CPU is running a program and it needs to read from the keyboard, it will send an interrupt to the keyboard to tell it to send the data to the CPU. The CPU will then wait for the keyboard to send the data and then continue running the program. + +{% resources %} + {% Blog "https://youtu.be/iKlAWIKEyuw", "Video on Interrupts" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/105-processes-vs-threads.md b/src/roadmaps/computer-science/content/121-processes-and-threads/105-processes-vs-threads.md new file mode 100644 index 000000000..604095a4f --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/105-processes-vs-threads.md @@ -0,0 +1,8 @@ +# Processes and Threads + +Processes and threads are the basic building blocks of a computer program. They are the smallest units of execution in a program. A process is an instance of a program that is being executed. A thread is a sequence of instructions within a process that can be executed independently of other code. + +{% resources %} + {% Blog "https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread", "Whats the difference between Process and a Thread?" %} + {% Blog "https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c", "Operating Systems and System Programming" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/121-processes-and-threads/index.md b/src/roadmaps/computer-science/content/121-processes-and-threads/index.md new file mode 100644 index 000000000..604095a4f --- /dev/null +++ b/src/roadmaps/computer-science/content/121-processes-and-threads/index.md @@ -0,0 +1,8 @@ +# Processes and Threads + +Processes and threads are the basic building blocks of a computer program. They are the smallest units of execution in a program. A process is an instance of a program that is being executed. A thread is a sequence of instructions within a process that can be executed independently of other code. + +{% resources %} + {% Blog "https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread", "Whats the difference between Process and a Thread?" %} + {% Blog "https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c", "Operating Systems and System Programming" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/122-kd-trees.md b/src/roadmaps/computer-science/content/122-kd-trees.md new file mode 100644 index 000000000..41ee9ba06 --- /dev/null +++ b/src/roadmaps/computer-science/content/122-kd-trees.md @@ -0,0 +1,8 @@ +# K-D Trees + +K-D Trees are a data structure that allow for fast nearest neighbor search in high dimensional spaces. They are a generalization of binary search trees, and are used in a variety of applications, including computer vision and computational geometry. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Y4ZgLlDfKDg", "K-D Tree Algorithm" %} + {% Blog "https://www.youtube.com/watch?v=BK5x7IUTIyU", "K-d Trees - Computerphile" %} +{% endresources %} diff --git a/src/roadmaps/computer-science/content/123-skip-lists.md b/src/roadmaps/computer-science/content/123-skip-lists.md new file mode 100644 index 000000000..b49a3ef78 --- /dev/null +++ b/src/roadmaps/computer-science/content/123-skip-lists.md @@ -0,0 +1,8 @@ +# Skip Lists + +Skip lists are a data structure that allows you to perform operations on a sorted list in O(log n) time. Skip lists are a probabilistic data structure, which means that the probability of a certain operation taking a certain amount of time is a certain value. In the case of skip lists, the probability of an operation taking O(log n) time is 1. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp", "Randomization: Skip Lists" %} + {% Blog "https://en.wikipedia.org/wiki/Skip_list", "Skip Lists - Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/cyber-security/cyber-security.md b/src/roadmaps/cyber-security/cyber-security.md new file mode 100644 index 000000000..e8ce384e9 --- /dev/null +++ b/src/roadmaps/cyber-security/cyber-security.md @@ -0,0 +1,45 @@ +--- +jsonUrl: "/jsons/cyber-security.json" +pdfUrl: "/pdfs/cyber-security.pdf" +order: 12 +featuredTitle: "Cyber Security" +featuredDescription: "Step by step guide to becoming a Cyber Security Expert in 2022" +title: "Cyber Security Expert" +description: "Step by step guide to becoming a Cyber Security developer in 2022" +isUpcoming: true +seo: + title: "Cyber Security Roadmap" + description: "Community driven, articles, resources, guides, interview questions, quizzes for cyber security. Learn to become a modern Cyber Security developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a cyber security expert" + - "guide to becoming a cyber security expert" + - "cyber security expert" + - "cyber security skills" + - "guide to cyber security" + - "cyber security roadmap" + - "cyber security skills" + - "cyber security skills test" + - "skills for cyber security" + - "what is cyber security" + - "cyber security quiz" + - "cyber security interview questions" + - "cyber security engineer roadmap" + - "cyber security expert roadmap" + - "become a cyber security expert" + - "cyber security expert career path" + - "cyber security expert" + - "modern cyber security expert" +relatedRoadmaps: + - "backend" + - "devops" + - "java" + - "python" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- diff --git a/src/roadmaps/design-system/content/100-design-system-basics/100-what-is-design-system.md b/src/roadmaps/design-system/content/100-design-system-basics/100-what-is-design-system.md new file mode 100644 index 000000000..bfe100620 --- /dev/null +++ b/src/roadmaps/design-system/content/100-design-system-basics/100-what-is-design-system.md @@ -0,0 +1,10 @@ +# What is Design System + +A Design System is the single source of truth which groups all the elements that will allow the teams to design, realize and develop a product. + +{% resources %} + {% Blog "https://uxdesign.cc/everything-you-need-to-know-about-design-systems-54b109851969", "Everything you need to know about Design Systems" %} + {% Blog "https://www.nngroup.com/articles/design-systems-101/", "Design Systems 101" %} + {% Blog "https://www.invisionapp.com/inside-design/guide-to-design-systems/", "A comprehensive guide to design systems" %} +{% endresources %} + diff --git a/src/roadmaps/design-system/content/100-design-system-basics/101-need-of-design-system.md b/src/roadmaps/design-system/content/100-design-system-basics/101-need-of-design-system.md new file mode 100644 index 000000000..358d6e3e0 --- /dev/null +++ b/src/roadmaps/design-system/content/100-design-system-basics/101-need-of-design-system.md @@ -0,0 +1,11 @@ +# Need of design system + +Having a solid design system speeds up your work by making the product team more efficient, and it creates consistency and harmony within the product and brand ecosystem. A strong design system takes the burden off individual designers to think through commonly recurring design problems. With a full library of pre-approved elements, designers can focus on bigger problems like creating seamless, intuitive flows that delight users. That kind of efficiency pays huge dividends over time. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Hx02SaL_IH0", "Design Systems, when and how much?" %} + {% Blog "https://www.drawbackwards.com/blog/why-you-need-a-strong-design-system-and-how-to-build-one", "Why You Need a Strong Design System (and How to Build One)" %} + {% Blog "https://www.smashingmagazine.com/2016/05/design-systems-responsive-design-sell-output-not-workflow/", "On Design Systems: Sell The Output, Not The Workflow" %} +{% endresources %} + + diff --git a/src/roadmaps/design-system/content/100-design-system-basics/102-design-system-vs-component-library.md b/src/roadmaps/design-system/content/100-design-system-basics/102-design-system-vs-component-library.md new file mode 100644 index 000000000..b63889303 --- /dev/null +++ b/src/roadmaps/design-system/content/100-design-system-basics/102-design-system-vs-component-library.md @@ -0,0 +1,11 @@ +# Design System vs Component Library + +A component library is just a collection of visuals i.e. colours, button stylings, fonts, etc. A Design System takes it to the next level by including standards and documentation around the look and usage of each component. The Design System acts as the single-source of truth. + +{% resources %} + {% Blog "https://www.architech.ca/a-design-system-so-much-more-than-a-component-library", "A Design System: So Much More Than A Component Library" %} + {% Blog "https://prototype.net/blog/design-system-component-library-style-guide", "Design System vs UI Component Library vs Brand Style Guide" %} + {% Blog "https://www.uxpin.com/studio/blog/design-systems-vs-pattern-libraries-vs-style-guides-whats-difference/", "Design Systems vs Pattern Libraries vs Style Guides vs Component Libraries" %} +{% endresources %} + + diff --git a/src/roadmaps/design-system/content/100-design-system-basics/103-atomic-design.md b/src/roadmaps/design-system/content/100-design-system-basics/103-atomic-design.md new file mode 100644 index 000000000..b40a71c05 --- /dev/null +++ b/src/roadmaps/design-system/content/100-design-system-basics/103-atomic-design.md @@ -0,0 +1,10 @@ +# Atomic Design + +Atomic design (by Brad Frost) is a mental model to help you think of user interfaces as a cohesive whole and a collection of parts at the same time. Through the comparison to atoms, molecules, and organisms, we can think of the design of our UI as a composition of self-containing modules put together. + +{% resources %} + {% Blog "https://xd.adobe.com/ideas/process/ui-design/atomic-design-principles-methodology-101/", "Atomic Design Principles & Methodology 101" %} + {% Blog "https://atomicdesign.bradfrost.com/chapter-2/", "Atomic Design Methodology" %} + {% Blog "https://blog.bitsrc.io/atomic-design-and-ui-components-theory-to-practice-f200db337c24", "Atomic Design and UI Components: Theory to Practice" %} +{% endresources %} + diff --git a/src/roadmaps/design-system/content/100-design-system-basics/105-stakeholders-involved.md b/src/roadmaps/design-system/content/100-design-system-basics/105-stakeholders-involved.md new file mode 100644 index 000000000..5e4caf4df --- /dev/null +++ b/src/roadmaps/design-system/content/100-design-system-basics/105-stakeholders-involved.md @@ -0,0 +1,17 @@ +# Stakeholders + +Building an effective design system is not an individual responsibility, you need more than just designers. Here’s a quick list of the disciplines that can be represented in your team to create an effective design system: + +- **Designers:** to define the visual elements of the system +- **Frontend Developers:** To create modular efficient code +- **Accessibility Experts:** Accessibility experts to ensure your system conforms to standards like WCAG +- **Performance Experts:** who can ensure your system loads quickly on all devices +- **Content Strategists:** who can help the team nail the voice and tone of the system +- **Researchers:** who can help you understand customer needs +- **Product Managers:** to ensure the system is aligning to customer needs +- **Leaders:** (VPs and directors) to champion and align the vision throughout the company including up to executive leadership + + +{% resources %} + {% Blog "https://www.designbetter.co/design-systems-handbook/designing-design-system", "Designing the Design System" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/100-design-system-basics/106-design-system-examples.md b/src/roadmaps/design-system/content/100-design-system-basics/106-design-system-examples.md new file mode 100644 index 000000000..3d7dbcd7d --- /dev/null +++ b/src/roadmaps/design-system/content/100-design-system-basics/106-design-system-examples.md @@ -0,0 +1,11 @@ +# Design System Examples + + +{% resources %} + {% Blog "https://material.io/", "Material Design (Google)" %} + {% Blog "https://carbondesignsystem.com/", "Carbon Design System (IBM)" %} + {% Blog "https://atlassian.design/", "Atlassian Design System" %} + {% Blog "https://polaris.shopify.com/", "Polaris Design System (Shopify)" %} + {% Blog "https://design-system.service.gov.uk/", "Gov.uk Design System" %} + {% Blog "https://github.com/alexpate/awesome-design-systems", "Collection of Open Source Design Systems" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/100-design-system-basics/index.md b/src/roadmaps/design-system/content/100-design-system-basics/index.md new file mode 100644 index 000000000..29c0c8f63 --- /dev/null +++ b/src/roadmaps/design-system/content/100-design-system-basics/index.md @@ -0,0 +1,13 @@ +# Design System Basics + +A design system is a set of standards to manage design at scale by reducing redundancy while creating a shared language and visual consistency across different pages and channels. + +{% resources %} + {% Blog "https://www.nngroup.com/articles/design-systems-101/", "Design Systems 101" %} + {% Blog "https://www.youtube.com/watch?v=wc5krC28ynQ", "What is a Design System? Design Systems 101 for Designers" %} + {% Blog "https://www.invisionapp.com/inside-design/guide-to-design-systems/", "A comprehensive guide to design systems" %} + {% Blog "https://uxdesign.cc/everything-you-need-to-know-about-design-systems-54b109851969", "Everything you need to know about Design Systems" %} +{% endresources %} + + + diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/100-component.md b/src/roadmaps/design-system/content/101-design-system-terminology/100-component.md new file mode 100644 index 000000000..7a6d94140 --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/100-component.md @@ -0,0 +1,5 @@ +# Component + +Components are the reusable building blocks of a design system. Each component meets a specific interaction or UI needs, and is specifically created to work together to create patterns and intuitive user experiences. + + diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/101-component-library.md b/src/roadmaps/design-system/content/101-design-system-terminology/101-component-library.md new file mode 100644 index 000000000..3de585040 --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/101-component-library.md @@ -0,0 +1,9 @@ +# Component Library + +A component library is a collection of all the components used in a website, software or app. Some of the common tools to showcase and browse components in a component library include are given below: + +{% resources %} + {% Blog "https://patternlab.io/", "Pattern Lab" %} + {% Blog "https://fractal.build/", "Fractal" %} + {% Blog "https://storybook.js.org/", "Storybook" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/102-design-language.md b/src/roadmaps/design-system/content/101-design-system-terminology/102-design-language.md new file mode 100644 index 000000000..657b75425 --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/102-design-language.md @@ -0,0 +1,14 @@ +# Design Language + +A design language or design vocabulary is an overarching scheme or style that guides the design of a complement of products or architectural settings, creating a coherent design system for styling. + +{% resources %} + {% Blog "https://medium.com/thinking-design/what-is-a-design-language-really-cd1ef87be793", "What is a Design Language.. really?" %} + {% Blog "https://xd.adobe.com/ideas/principles/web-design/how-to-develop-design-language/", "How to Develop a Design Language" %} + {% Blog "https://www.uxpin.com/studio/blog/design-language/", "What Actually Constitutes Design Language?" %} + {% Blog "https://www.smashingmagazine.com/2020/03/visual-design-language-building-blocks/", "Visual Design Language: The Building Blocks Of Design" %} +{% endresources %} + + + + diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/103-governance.md b/src/roadmaps/design-system/content/101-design-system-terminology/103-governance.md new file mode 100644 index 000000000..6cc755c3c --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/103-governance.md @@ -0,0 +1,14 @@ +# Governance + +Governance is a framework for clarifying roles, responsibilities, and authority over decisions. Having that clarity ensures that decisions for the design system funnel smoothly through the governance process + +{% resources %} + {% Blog "https://zeroheight.com/blog/governance-is-a-design-systems-friend", "Governance is a design system’s friend" %} + {% Blog "https://www.uxpin.com/studio/blog/design-system-governance/", "Design System Governance – Scale Your Design" %} + {% Blog "https://rangle.io/blog/governance-by-design-building-successful-design-systems/", "Governance by design: Building successful design systems" %} + {% Blog "https://medium.com/eightshapes-llc/team-models-for-scaling-a-design-system-2cf9d03be6a0", "Team Models for Scaling a Design System" %} +{% endresources %} + + + + diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/104-guidelines.md b/src/roadmaps/design-system/content/101-design-system-terminology/104-guidelines.md new file mode 100644 index 000000000..054388e61 --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/104-guidelines.md @@ -0,0 +1,7 @@ +# Guidelines + +Design guidelines are sets of recommendations on how to apply design principles to provide a positive user experience. Designers use such guidelines to judge how to adopt principles such as intuitiveness, learnability, efficiency and consistency so they can create compelling designs and meet and exceed user needs. + +{% resources %} + {% Blog "https://www.interaction-design.org/literature/topics/design-guidelines", "Design Guidelines" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/105-pattern.md b/src/roadmaps/design-system/content/101-design-system-terminology/105-pattern.md new file mode 100644 index 000000000..5c4b76805 --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/105-pattern.md @@ -0,0 +1,3 @@ +# Pattern + +Patterns are best practice design solutions for specific user-focused tasks and page types. Patterns often use one or more components and explain how to adapt them to the context. Some sample patterns could be user signing in to the application or performing the checkout operation. diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/106-pilot.md b/src/roadmaps/design-system/content/101-design-system-terminology/106-pilot.md new file mode 100644 index 000000000..49f4457fc --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/106-pilot.md @@ -0,0 +1,7 @@ +# Pilot + +Pilots are one of the best ways to put your design system through its paces, especially before the design system even gets to a v1. Like television pilots help test audience reactions to a series concept without investing significant resources to create the whole thing, application pilots are a good foundation for ensuring your design system’s design and code are battle-tested. + +{% resources %} + {% Blog "https://superfriendly.com/design-systems/articles/design-systems-pilots-scorecards/", "Design Systems: Pilots & Scorecards" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/107-token.md b/src/roadmaps/design-system/content/101-design-system-terminology/107-token.md new file mode 100644 index 000000000..22655f60b --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/107-token.md @@ -0,0 +1,8 @@ +# Token + +Design system tokens are the style values of UI elements such as color, typography, spacing, shadows, etc., that are used across products and capable of being converted to a format for any platform (web, mobile, desktop). Tokens are building blocks of the design system—think of them as sub atoms, the smallest pieces of style values that allow designers to create styles for a product. + +{% resources %} + {% Blog "https://xd.adobe.com/ideas/principles/design-systems/what-are-design-tokens/", "What Are Design Tokens?" %} +{% endresources %} + diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/108-ui-kit.md b/src/roadmaps/design-system/content/101-design-system-terminology/108-ui-kit.md new file mode 100644 index 000000000..29d82a7ca --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/108-ui-kit.md @@ -0,0 +1,9 @@ +# UI Kit + +As it relates to a design system, a UI Kit is a representation of coded components created in a way that designers who don’t know code can create interface mockups. Examples of UI kits are Sketch libraries and [Figma design systems](https://www.figma.com/blog/how-to-build-your-design-system-in-figma/). + + +{% resources %} + {% Blog "https://uigstudio.com/insights/design-system-vs-ui-kit", "Design System vs UI Kit" %} + {% Blog "http://bradfrost.com/blog/post/your-sketch-library-is-not-a-design-system/", "Your sketch library is not a design system" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/101-design-system-terminology/index.md b/src/roadmaps/design-system/content/101-design-system-terminology/index.md new file mode 100644 index 000000000..85b902e3f --- /dev/null +++ b/src/roadmaps/design-system/content/101-design-system-terminology/index.md @@ -0,0 +1,8 @@ +# Terminology + +Design systems can be tricky if you don’t know what certain words mean. Have a look at the roadmap nodes as well as follow the link below to read the glossary. + +{% resources %} + {% Blog "https://superfriendly.com/design-systems/glossary/", "Design Systems Glossary" %} +{% endresources %} + diff --git a/src/roadmaps/design-system/content/102-making-a-design-system/100-from-scratch.md b/src/roadmaps/design-system/content/102-making-a-design-system/100-from-scratch.md new file mode 100644 index 000000000..88d665df7 --- /dev/null +++ b/src/roadmaps/design-system/content/102-making-a-design-system/100-from-scratch.md @@ -0,0 +1,8 @@ +# From Scratch + +If you are building a Design System from Scratch, you may skip the "Existing Design Analysis" node of the roadmap and start with "Creating Design Language". + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=RYDiDpW2VkM", "Create a Design System with Figma - Full Course" %} +{% endresources %} + diff --git a/src/roadmaps/design-system/content/102-making-a-design-system/101-from-existing-design.md b/src/roadmaps/design-system/content/102-making-a-design-system/101-from-existing-design.md new file mode 100644 index 000000000..9ae540316 --- /dev/null +++ b/src/roadmaps/design-system/content/102-making-a-design-system/101-from-existing-design.md @@ -0,0 +1,7 @@ +# From Existing Design + +If you are creating a Design System from pre-existing product design, there is an additional step to perform the existing design analysis, understand the existing design process, perform a visual audit, identify design elements and components and so on. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=RYDiDpW2VkM", "Create a Design System with Figma - Full Course" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/102-making-a-design-system/index.md b/src/roadmaps/design-system/content/102-making-a-design-system/index.md new file mode 100644 index 000000000..1e25401d0 --- /dev/null +++ b/src/roadmaps/design-system/content/102-making-a-design-system/index.md @@ -0,0 +1,11 @@ +# Making a Design System + +First step in building a design system is identifying [if you even need a design system](https://sparkbox.com/foundry/when_not_to_use_a_design_system). + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=FZSi1bK-BRM", "Introducing Design Systems Into Chaos - Diana Mounter, GitHub" %} + {% Blog "https://www.youtube.com/watch?v=Hx02SaL_IH0", "Design Systems, when and how much?" %} + {% Blog "https://www.uxpin.com/create-design-system-guide/", "Design Systems: Step-by-Step Guide to Creating Your Own" %} + {% Blog "https://www.method.com/insights/does-my-organization-need-a-design-system/", "Does My Organization Need a Design System?" %} + {% Blog "https://www.youtube.com/watch?v=RYDiDpW2VkM", "Create a Design System with Figma - Full Course" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/100-existing-design-process.md b/src/roadmaps/design-system/content/103-existing-design-analysis/100-existing-design-process.md new file mode 100644 index 000000000..da2e0b500 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/100-existing-design-process.md @@ -0,0 +1,8 @@ +# Existing Design Process + +To better understand the kind of design system you would like to implement, you need to start by reviewing and analyzing the current approach for design at your company. Find the answers to the following questions: + +* What is the design process that your company follows? +* What are the existing tools that your company uses? + +It’s also recommended to evaluate the level of design maturity of the product teams. This knowledge will help you estimate the time required to introduce the system to your organization. diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/101-visual-audit.md b/src/roadmaps/design-system/content/103-existing-design-analysis/101-visual-audit.md new file mode 100644 index 000000000..1e9d8c986 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/101-visual-audit.md @@ -0,0 +1,5 @@ +# Visual Audit + +Take screenshots of your current product with the help of your team. You can use any presentation software like Google Slides or print and pin them on foam-core boards. Group the screenshots into categories like buttons, navigation, forms, tables, charts, lists etc. + +Now, review each category to find inconsistencies and note areas for improvement with your team. Use a tool like [CSS Stats](https://cssstats.com/) to see how many unique colors, typefaces you have in your style sheets. diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/102-identify-design-elements.md b/src/roadmaps/design-system/content/103-existing-design-analysis/102-identify-design-elements.md new file mode 100644 index 000000000..0922426d7 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/102-identify-design-elements.md @@ -0,0 +1,3 @@ +# Identify Design Elements + +Use the results of visual audit and prepare a comprehensive list of design elements such as Colors, Typography, Sizes, Spaces, Grid, Layouts etc. These elements will be the building blocks of your components. diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/103-identify-components.md b/src/roadmaps/design-system/content/103-existing-design-analysis/103-identify-components.md new file mode 100644 index 000000000..bcb2d19e6 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/103-identify-components.md @@ -0,0 +1,3 @@ +# Identify Components + +Components of the application are created using a composition of design elements gathered in the previous step. Identify the list of components required for the application, which could include buttons, dropdowns, carousels, tabs, icons, alerts, toasts etc. Also, make sure to keep track of the different states of these components as well as different variants and actions. diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/104-ab-tests-and-experiments.md b/src/roadmaps/design-system/content/103-existing-design-analysis/104-ab-tests-and-experiments.md new file mode 100644 index 000000000..ee9719998 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/104-ab-tests-and-experiments.md @@ -0,0 +1,3 @@ +# A/B Tests and Experiments + +Understand how the team implements A/B tests and experiments on different screens and if the new design system should accommodate any necessary requirements. diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/105-regional-requirements.md b/src/roadmaps/design-system/content/103-existing-design-analysis/105-regional-requirements.md new file mode 100644 index 000000000..97d2d51d6 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/105-regional-requirements.md @@ -0,0 +1,3 @@ +# Regional Requirements + +Understand any regional requirements such as LTR or any other UX variations that your design system should accommodate. diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/106-documentation.md b/src/roadmaps/design-system/content/103-existing-design-analysis/106-documentation.md new file mode 100644 index 000000000..de82918b0 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/106-documentation.md @@ -0,0 +1,3 @@ +# Documentation + +Organize and document the results of visual audit, design elements, components with variations, states, patterns found, any existing documentation, current design process, and considerations. This documentation will be shared across the team and act as a guide when building the new design system. diff --git a/src/roadmaps/design-system/content/103-existing-design-analysis/index.md b/src/roadmaps/design-system/content/103-existing-design-analysis/index.md new file mode 100644 index 000000000..58231da14 --- /dev/null +++ b/src/roadmaps/design-system/content/103-existing-design-analysis/index.md @@ -0,0 +1,11 @@ +# Existing Design Analysis + +First step in creating a design system from an existing design is performing a design analysis and understanding what you will be working with to identify the requirements and prepare a plan. Performing the analysis may consist of: + +* Understanding the Existing Design Process +* Performing Visual Audit +* Identifying Design Elements +* Identify Common Components +* Understanding the A/B Testing and Experimentation Needs +* Understanding any Locale or regional requirements (such as LTR/RTL). +* Documenting your findings diff --git a/src/roadmaps/design-system/content/104-design-language/100-brand/100-vision.md b/src/roadmaps/design-system/content/104-design-language/100-brand/100-vision.md new file mode 100644 index 000000000..88d7b8314 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/100-brand/100-vision.md @@ -0,0 +1,3 @@ +# Vision + +Identify why you exist, what your values are and how they’ll help guide the future of your product. diff --git a/src/roadmaps/design-system/content/104-design-language/100-brand/101-design-principles.md b/src/roadmaps/design-system/content/104-design-language/100-brand/101-design-principles.md new file mode 100644 index 000000000..4502b5a6f --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/100-brand/101-design-principles.md @@ -0,0 +1,3 @@ +# Design Principles + +The considerations that guide the basis of your practice. They outline how you approach design from a philosophical perspective and help with everyday decisions. diff --git a/src/roadmaps/design-system/content/104-design-language/100-brand/102-terminology.md b/src/roadmaps/design-system/content/104-design-language/100-brand/102-terminology.md new file mode 100644 index 000000000..4fd4ab6b7 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/100-brand/102-terminology.md @@ -0,0 +1,3 @@ +# Terminology + +Create the standard terms and phrases that need to be kept the same throughout the user experience, speeding up the design process and unifying your voice. diff --git a/src/roadmaps/design-system/content/104-design-language/100-brand/103-tone-of-voice.md b/src/roadmaps/design-system/content/104-design-language/100-brand/103-tone-of-voice.md new file mode 100644 index 000000000..299b3a1fd --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/100-brand/103-tone-of-voice.md @@ -0,0 +1,3 @@ +# Tone of Voice + +A clear tone of voice defines how you speak to your audience at every moment in their journey, helping them get wherever they want to go. diff --git a/src/roadmaps/design-system/content/104-design-language/100-brand/104-writing-guidelines.md b/src/roadmaps/design-system/content/104-design-language/100-brand/104-writing-guidelines.md new file mode 100644 index 000000000..b7788e3f5 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/100-brand/104-writing-guidelines.md @@ -0,0 +1,3 @@ +# Writing Guidelines + +Every consistent experience needs watertight writing. Laying down the foundations for your house style early keeps everything in line with consistent grammar, style choices and action-oriented language to help your design. diff --git a/src/roadmaps/design-system/content/104-design-language/100-brand/index.md b/src/roadmaps/design-system/content/104-design-language/100-brand/index.md new file mode 100644 index 000000000..e5bd814af --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/100-brand/index.md @@ -0,0 +1,3 @@ +# Brand + +Brand drives every single decision you make when building new products or features. A good brand is much more than a name and a logo. It’s the values that define your unique identity and what makes you stand out from others. diff --git a/src/roadmaps/design-system/content/104-design-language/101-guidelines/100-accessibility.md b/src/roadmaps/design-system/content/104-design-language/101-guidelines/100-accessibility.md new file mode 100644 index 000000000..52351fdee --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/101-guidelines/100-accessibility.md @@ -0,0 +1,11 @@ +# Accessibility + +Guidelines for how you approach accessibility and how you leverage colour, hierarchy and assistive technologies to help your users. + +{% resources %} + {% Blog "https://www.w3.org/WAI/fundamentals/accessibility-intro/", "Introduction to Web Accessibility" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/Accessibility/What_is_accessibility", "What is Accessibility? by Mozilla" %} + {% Blog "https://www.w3.org/WAI/fundamentals/accessibility-principles/", "Accessibility Principles" %} + {% Blog "https://webaim.org/", "WebAIMs Website (Web Accessibility In Mind)" %} + {% Blog "https://wave.webaim.org/", "WAVE Web Accessibility Evaluation Tool" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/104-design-language/101-guidelines/101-user-onboarding.md b/src/roadmaps/design-system/content/104-design-language/101-guidelines/101-user-onboarding.md new file mode 100644 index 000000000..dabe3f48a --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/101-guidelines/101-user-onboarding.md @@ -0,0 +1,3 @@ +# User Onboarding + +How you onboard your users to your product or a new feature and give them a great experience from the start. diff --git a/src/roadmaps/design-system/content/104-design-language/101-guidelines/102-microcopy-guidelines.md b/src/roadmaps/design-system/content/104-design-language/101-guidelines/102-microcopy-guidelines.md new file mode 100644 index 000000000..2fddb8879 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/101-guidelines/102-microcopy-guidelines.md @@ -0,0 +1,3 @@ +# Microcopy Guidelines + +The standard way to write for the components in your design system. These take platform conventions and best practices for writing all into consideration. diff --git a/src/roadmaps/design-system/content/104-design-language/101-guidelines/index.md b/src/roadmaps/design-system/content/104-design-language/101-guidelines/index.md new file mode 100644 index 000000000..8ed6df502 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/101-guidelines/index.md @@ -0,0 +1,3 @@ +# Guidelines + +Providing guidance on how to approach common UX patterns will allow your organisation to establish a consistent approach and a consistent user experience on any platform. diff --git a/src/roadmaps/design-system/content/104-design-language/102-logo/100-monochrome-version.md b/src/roadmaps/design-system/content/104-design-language/102-logo/100-monochrome-version.md new file mode 100644 index 000000000..00f98013e --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/102-logo/100-monochrome-version.md @@ -0,0 +1,3 @@ +# Monochrome Version + +A monochrome version of your logo that looks good on top of photography or when it’s printed with a poor quality printer. diff --git a/src/roadmaps/design-system/content/104-design-language/102-logo/101-small-use-guidance.md b/src/roadmaps/design-system/content/104-design-language/102-logo/101-small-use-guidance.md new file mode 100644 index 000000000..c1df5aa41 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/102-logo/101-small-use-guidance.md @@ -0,0 +1,3 @@ +# Small Use Guidance + +Your logo must perform well and be recognisable at all sizes. Tips for using your logo in these cases will minimise the risk of it being misused. diff --git a/src/roadmaps/design-system/content/104-design-language/102-logo/102-placement-and-clearance-guidance.md b/src/roadmaps/design-system/content/104-design-language/102-logo/102-placement-and-clearance-guidance.md new file mode 100644 index 000000000..34cb152fe --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/102-logo/102-placement-and-clearance-guidance.md @@ -0,0 +1,3 @@ +# Placement and Clearance Guidance + +Your logo must come with clear guidance on how to place it and how to preserve its space since it lives along with other content. diff --git a/src/roadmaps/design-system/content/104-design-language/102-logo/103-usage-guidance.md b/src/roadmaps/design-system/content/104-design-language/102-logo/103-usage-guidance.md new file mode 100644 index 000000000..bb2634b72 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/102-logo/103-usage-guidance.md @@ -0,0 +1,3 @@ +# Usage Guidance + +These are the logo crimes, providing contextual examples of what to (not) do with your logo. diff --git a/src/roadmaps/design-system/content/104-design-language/102-logo/104-different-file-formats.md b/src/roadmaps/design-system/content/104-design-language/102-logo/104-different-file-formats.md new file mode 100644 index 000000000..d82185516 --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/102-logo/104-different-file-formats.md @@ -0,0 +1,3 @@ +# Different File Formats + +Providing a variety of formats for the vector version of your logo will make it easier for others to work and prevent anyone from redrawing it. diff --git a/src/roadmaps/design-system/content/104-design-language/102-logo/index.md b/src/roadmaps/design-system/content/104-design-language/102-logo/index.md new file mode 100644 index 000000000..e293f00de --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/102-logo/index.md @@ -0,0 +1,3 @@ +# Logo + +Most customers form an opinion about a product in seconds. In most cases, your logo will be the first brand asset someone sees. It’s all about making the right first impression. A distinctive logo helps users recognise a product immediately and gives them the essence of your branding. diff --git a/src/roadmaps/design-system/content/104-design-language/index.md b/src/roadmaps/design-system/content/104-design-language/index.md new file mode 100644 index 000000000..754b6002a --- /dev/null +++ b/src/roadmaps/design-system/content/104-design-language/index.md @@ -0,0 +1,10 @@ +# Design Language + +Like any language, a design language is a methodical way of communicating with your audience through your approach to product design. It’s the cornerstone of consistent customer experiences. + +{% resources %} + {% Blog "https://medium.com/thinking-design/what-is-a-design-language-really-cd1ef87be793", "What is a Design Language.. really?" %} + {% Blog "https://xd.adobe.com/ideas/principles/web-design/how-to-develop-design-language/", "How to Develop a Design Language" %} + {% Blog "https://www.uxpin.com/studio/blog/design-language/", "What Actually Constitutes Design Language?" %} + {% Blog "https://www.smashingmagazine.com/2020/03/visual-design-language-building-blocks/", "Visual Design Language: The Building Blocks Of Design" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/105-design-tokens/100-layout/100-spacing.md b/src/roadmaps/design-system/content/105-design-tokens/100-layout/100-spacing.md new file mode 100644 index 000000000..b6d627da5 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/100-layout/100-spacing.md @@ -0,0 +1,3 @@ +# Spacing + +Horizontal and vertical rhythm plays a big role in a layout. You should provide easy methods for adding space between interface elements independent of your grid. diff --git a/src/roadmaps/design-system/content/105-design-tokens/100-layout/101-breakpoints.md b/src/roadmaps/design-system/content/105-design-tokens/100-layout/101-breakpoints.md new file mode 100644 index 000000000..aa5c14a11 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/100-layout/101-breakpoints.md @@ -0,0 +1,3 @@ +# Breakpoints + +Predefine the screen sizes and orientations your grid will adapt to. diff --git a/src/roadmaps/design-system/content/105-design-tokens/100-layout/102-grid.md b/src/roadmaps/design-system/content/105-design-tokens/100-layout/102-grid.md new file mode 100644 index 000000000..2c9a586cf --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/100-layout/102-grid.md @@ -0,0 +1,3 @@ +# Grid + +Every layout should sit on a grid that brings order and hierarchy to the interface. Define a grid separately for mobile, tablet and desktop devices with columns, gutters, and margins so your interface can adapt to any platform easily. diff --git a/src/roadmaps/design-system/content/105-design-tokens/100-layout/103-units.md b/src/roadmaps/design-system/content/105-design-tokens/100-layout/103-units.md new file mode 100644 index 000000000..3a27c04ee --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/100-layout/103-units.md @@ -0,0 +1,3 @@ +# Units + +Units are the most granular building blocks for layout. Defining a set of values with consistent increments (such as 4, 8, 12 and 16 for a 4-point system) will provide you with the foundation when you’re designing your grid and spacing values. diff --git a/src/roadmaps/design-system/content/105-design-tokens/100-layout/index.md b/src/roadmaps/design-system/content/105-design-tokens/100-layout/index.md new file mode 100644 index 000000000..7f84d0e0f --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/100-layout/index.md @@ -0,0 +1,3 @@ +# Layout + +A well thought out layout goes a long way. Consistent use of a grid and spacing makes it easier for your users to scan the user interface and grasp the content. diff --git a/src/roadmaps/design-system/content/105-design-tokens/101-color/100-guidelines.md b/src/roadmaps/design-system/content/105-design-tokens/101-color/100-guidelines.md new file mode 100644 index 000000000..b955969a1 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/101-color/100-guidelines.md @@ -0,0 +1,3 @@ +# Guidelines + +Provide guidelines on how and when to use the colours in your palette, what to keep in mind when working with them and how not to use them. diff --git a/src/roadmaps/design-system/content/105-design-tokens/101-color/101-dark-mode.md b/src/roadmaps/design-system/content/105-design-tokens/101-color/101-dark-mode.md new file mode 100644 index 000000000..fadd76fb7 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/101-color/101-dark-mode.md @@ -0,0 +1,3 @@ +# Dark Mode + +Preparing a dark mode version of your colour palette will allow your design system to adapt to dark mode and respect what your user wants to see. diff --git a/src/roadmaps/design-system/content/105-design-tokens/101-color/102-functional-colors.md b/src/roadmaps/design-system/content/105-design-tokens/101-color/102-functional-colors.md new file mode 100644 index 000000000..b70c418ac --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/101-color/102-functional-colors.md @@ -0,0 +1,3 @@ +# Functional Colors + +Besides your brand colours, make sure to have colours defined and made into variables for functions like disabled states, backgrounds, actions and high contrast text. diff --git a/src/roadmaps/design-system/content/105-design-tokens/101-color/103-accessibility.md b/src/roadmaps/design-system/content/105-design-tokens/101-color/103-accessibility.md new file mode 100644 index 000000000..c22052b0e --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/101-color/103-accessibility.md @@ -0,0 +1,3 @@ +# Accessibility + +Make sure to have accessible pairings between the main colours in your palette. More importantly, make sure that your background and text colours have at least an AA standard contrast ratio between them. diff --git a/src/roadmaps/design-system/content/105-design-tokens/101-color/index.md b/src/roadmaps/design-system/content/105-design-tokens/101-color/index.md new file mode 100644 index 000000000..cd000a1f2 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/101-color/index.md @@ -0,0 +1,3 @@ +# Color + +Not only an efficient way to showcase your brand, but also an efficient way to communicate with your users. Colour palettes created with purpose over aesthetics in mind can help you create intuitive design patterns by adding meaning to your interface. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/100-accessibility.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/100-accessibility.md new file mode 100644 index 000000000..6c49809ac --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/100-accessibility.md @@ -0,0 +1,3 @@ +# Accessibility + +For icons that convey a meaning or serve a function, add the necessary support for screen readers. You can skip this for decorative icons. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/101-style.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/101-style.md new file mode 100644 index 000000000..5660f0739 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/101-style.md @@ -0,0 +1,3 @@ +# Style + +Make sure that your icon family makes visual sense as a whole. Picking an outlined or filled style and sticking with it will lead to better visual consistency and predictability. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/102-naming.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/102-naming.md new file mode 100644 index 000000000..90962280b --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/102-naming.md @@ -0,0 +1,3 @@ +# Naming + +Name your icons based on what they are, not what they represent. For instance, a trash icon should be named trash, not delete. You can still add related keywords to improve discoverability. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/103-grid-relation.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/103-grid-relation.md new file mode 100644 index 000000000..68d9eb73e --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/103-grid-relation.md @@ -0,0 +1,3 @@ +# Grid Relation + +Draw your icons in a bounding box that plays well with your grid. This makes for a better pairing with other UI elements. A good example of this would be icons with bounding boxes paired with text. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/104-sizes.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/104-sizes.md new file mode 100644 index 000000000..402710288 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/104-sizes.md @@ -0,0 +1,3 @@ +# Sizes + +Provide different sizes for icons that correlate to your grid. Provide a minimum size and remove unnecessary detail for your icons for smaller sizes. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/105-keywords.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/105-keywords.md new file mode 100644 index 000000000..298aef705 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/105-keywords.md @@ -0,0 +1,3 @@ +# Keywords + +Adding keywords will improve the discoverability of each icon and provide a better user experience for anyone using your system. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/106-reserved-icons.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/106-reserved-icons.md new file mode 100644 index 000000000..1f0b38055 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/106-reserved-icons.md @@ -0,0 +1,3 @@ +# Reserved Icons + +Reserving icons that represent common actions will prevent their use in any other context. System icons for navigation or adding and deleting are a good example. This leads to a more intuitive user experience. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/107-guidelines.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/107-guidelines.md new file mode 100644 index 000000000..7bed2e698 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/107-guidelines.md @@ -0,0 +1,3 @@ +# Guidelines + +Provide guidelines on how and when to use icons, what to keep in mind when working with them and how not to use them. diff --git a/src/roadmaps/design-system/content/105-design-tokens/102-iconography/index.md b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/index.md new file mode 100644 index 000000000..fe8ed0d18 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/102-iconography/index.md @@ -0,0 +1,3 @@ +# Iconography + +Icons are symbols that represent functionality or content. They’re especially recognisable and helpful in user interfaces since their meaning can be understood at a glance. hough they can be used just for decoration, their full potential can be realised when they’re used meaningfully and consistently. diff --git a/src/roadmaps/design-system/content/105-design-tokens/103-typography/100-responsiveness.md b/src/roadmaps/design-system/content/105-design-tokens/103-typography/100-responsiveness.md new file mode 100644 index 000000000..b3b4d3aaa --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/103-typography/100-responsiveness.md @@ -0,0 +1,3 @@ +# Responsiveness + +Desktop devices can usually afford to have bigger font sizes compared to mobile devices. Creating a typography scale that adapts to the viewport size will help with a more meaningful hierarchy and layout. diff --git a/src/roadmaps/design-system/content/105-design-tokens/103-typography/101-grid-relation.md b/src/roadmaps/design-system/content/105-design-tokens/103-typography/101-grid-relation.md new file mode 100644 index 000000000..f07fe8f56 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/103-typography/101-grid-relation.md @@ -0,0 +1,3 @@ +# Grid Relation + +Font sizes and leading should match your grid to allow better pairing between text and other UI elements. A good example of this is text paired with icons with bounding boxes. diff --git a/src/roadmaps/design-system/content/105-design-tokens/103-typography/102-readability.md b/src/roadmaps/design-system/content/105-design-tokens/103-typography/102-readability.md new file mode 100644 index 000000000..f26bf427f --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/103-typography/102-readability.md @@ -0,0 +1,3 @@ +# Readability + +Optimising the letter spacing (tracking), line height (leading) and line length for your typography scale will help with the readability of text. diff --git a/src/roadmaps/design-system/content/105-design-tokens/103-typography/103-performance.md b/src/roadmaps/design-system/content/105-design-tokens/103-typography/103-performance.md new file mode 100644 index 000000000..b6fdac37d --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/103-typography/103-performance.md @@ -0,0 +1,3 @@ +# Performance + +Custom fonts need to be downloaded before they can be displayed, especially on the web. Make sure that you have sensible fallbacks and fast loading time for your typography assets. Using system fonts solves this performance problem. diff --git a/src/roadmaps/design-system/content/105-design-tokens/103-typography/104-guidelines.md b/src/roadmaps/design-system/content/105-design-tokens/103-typography/104-guidelines.md new file mode 100644 index 000000000..e17cfc249 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/103-typography/104-guidelines.md @@ -0,0 +1,3 @@ +# Guidelines + +Provide guidelines on how and when to use the pairings in your typography scale, what to keep in mind when working with them and how not to use them. diff --git a/src/roadmaps/design-system/content/105-design-tokens/103-typography/index.md b/src/roadmaps/design-system/content/105-design-tokens/103-typography/index.md new file mode 100644 index 000000000..9a690fec9 --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/103-typography/index.md @@ -0,0 +1,3 @@ +# Typography + +Typography is one of the main ways you surface content in products. A clear hierarchy and contrasting styles in your typography scale will make things easier to read and help with the overall structure of your product. It’s also an opportunity to visualise your brand character and presence. diff --git a/src/roadmaps/design-system/content/105-design-tokens/index.md b/src/roadmaps/design-system/content/105-design-tokens/index.md new file mode 100644 index 000000000..64cfbd9bd --- /dev/null +++ b/src/roadmaps/design-system/content/105-design-tokens/index.md @@ -0,0 +1,7 @@ +# Design Tokens + +Variables that store values for the base layer of your design system, like colour and typography. They’re used in components, so changes on this level will resonate throughout the whole system. + +{% resources %} + {% Blog "https://xd.adobe.com/ideas/principles/design-systems/what-are-design-tokens/", "What Are Design Tokens?" %} +{% endresources %} diff --git a/src/roadmaps/design-system/content/106-core-components/100-avatar.md b/src/roadmaps/design-system/content/106-core-components/100-avatar.md new file mode 100644 index 000000000..de56aa211 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/100-avatar.md @@ -0,0 +1,10 @@ +# Avatar + +Avatars are used to show a thumbnail of a user photo or a visual representation of any other type of content. + +- **Image:** Avatars should mask an image into their shape and work with any image size since they may get this image from unknown data sources. +- **Image Fallback:** There should be fallbacks when there’s no image available. This can be done with placeholder images or initials. +- **Accessibility:** Always provide a description for screen readers describing what’s displayed on the avatar image instead of just naming its role. +- **Sizes:** There are many contexts to use avatars and they all require different sizes for the component. For average projects use at least 2-3 different sizes and make sure there’s at least a small size available. +- **Icon:** Avatars can be used with an icon instead of an image to emphasize areas that don’t necessarily have (or need) an image associated with it. +- **Background Colors:** When used with icons or text, there has to be a background colour from the design system colour tokens applied to the avatar shape. Make sure that icons and text have enough contrast ratio with the background according to the WCAG AA standard. diff --git a/src/roadmaps/design-system/content/106-core-components/101-banner.md b/src/roadmaps/design-system/content/106-core-components/101-banner.md new file mode 100644 index 000000000..5e019c8b9 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/101-banner.md @@ -0,0 +1,10 @@ +# Banner + +Banners display an actionable message used as a prominent way of communicating with your users. + +- **Appearance:** Banners are used to display different types of messages and it’s important to differentiate their visual appearance based on the role they’re playing. If you’re using background colours for role differentiation, make sure there’s enough contrast ratio with the content according to the WCAG AA standard. +- **Area for icons or images:** Banners can supplement their message using a supporting icon or image. They shouldn’t be used instead of text content. +- **Actions:** Actions in banners should relate to its text and provide a way to react to the message sent to the user. +- **Dismissible Action:** Don’t overwhelm the user with banners on the page and include a dismissable action. That may be either a separate close button or one of the actions provided. +- **Accessibility:** If a banner dynamically appears on the page, it should be announced to the user by their assistive technology. +- **Responsiveness:** Banners should adapt to the viewport size. This usually means that they become full-width for mobile to save some space. diff --git a/src/roadmaps/design-system/content/106-core-components/102-badge.md b/src/roadmaps/design-system/content/106-core-components/102-badge.md new file mode 100644 index 000000000..6833f7e6b --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/102-badge.md @@ -0,0 +1,6 @@ +# Badge + +Badges are elements that represent the status of an object or user input value. + +- **Appearance:** Badges may play various roles in your product and having a predefined colour for each role should help users understand their meaning. When changing colours, make sure the text has enough contrast ratio with the background according to the WCAG AA standard. +- **Dismissible Action:** Badges can be used as a dynamic way to display selected values and there should be a way to dismiss them. diff --git a/src/roadmaps/design-system/content/106-core-components/103-button.md b/src/roadmaps/design-system/content/106-core-components/103-button.md new file mode 100644 index 000000000..bf55990b5 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/103-button.md @@ -0,0 +1,13 @@ +# Button + +Buttons are interactive elements used for single-step actions. + +- **Hover State:** Clearly show that the button is interactive when it gets hovered with a mouse cursor. +- **Active State:** Used when a button gets pressed. The same state can be used to represent the button responsible for toggling another element on the page while that element is visibly opened. +- **Focused State:** Used when a button gets selected through keyboard navigation. +- **Icon Support:** Icons easily communicate the purpose of the button when used next to its label or can be used without text when there’s not enough space. Make sure that the accessibility label is provided when used with an icon only. +- **Disabled:** Visually shows that a button is not interactive and restricts it from being pressed. +- **Loading:** Used when users have to wait for the result of their action after they press a button. If a spinner is used to display this state make sure that it’s not changing the original button width or height. +- **Full Width:** By default buttons take the width of their content, but they should also come with a full width variant that works well in mobile devices. +- **Variants:** When using multiple buttons, there should be a way to differentiate between primary and secondary actions. Buttons may play different roles for the user or be used on different types of surfaces and they have to change the way they look. +- **Sizes:** Buttons can be used in different areas of the website and may have multiple predefined sizes. On mobile, tappable areas have to be a minimum of 48px to be accessible according to iOS and Android accessibility guidelines. diff --git a/src/roadmaps/design-system/content/106-core-components/104-card.md b/src/roadmaps/design-system/content/106-core-components/104-card.md new file mode 100644 index 000000000..fb839daa7 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/104-card.md @@ -0,0 +1,9 @@ +# Card + +Cards are used to group information about subjects and their related actions. + +- **Supports any type of content:** Cards are one of the most used components in the product, so they have to be flexible enough to support any other components placed in them. +- **Information structure:** No matter how flexible cards are, it’s important for cards to have a specific structure for its elements for product consistency. +- **Supports media sections:** One of the most popular scenarios for using cards is mixing them with media content. The most popular options are having a full-width area on top of the content or full-height area at one of the card’s sides. +- **Supplementary actions:** Cards can be used with actions usually placed at the bottom of the card, or the card itself can be tappable and represent an action. +- **Responsiveness:** On mobile viewports cards are usually full-width in order to save space for the content. diff --git a/src/roadmaps/design-system/content/106-core-components/105-carousel.md b/src/roadmaps/design-system/content/106-core-components/105-carousel.md new file mode 100644 index 000000000..a62dc3605 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/105-carousel.md @@ -0,0 +1,10 @@ +# Carousel + +Carousels stack the same type of items and allows scrolling through them horizontally. + +- **Navigation Controls:** Carousels should have easy-to-find navigation controls for scrolling through content. +- **Supports any content:** Carousels can be used in different contexts and shouldn’t be limited to a specific child component. In some scenarios you might want items within the same carousel to differ from each other. +- **Items width customisation:** For simple products, it might be fine to use multiple predefined sizes for carousel items. For more flexibility, it’s good to provide a way to define a custom width. +- **Touch events support:** Carousels should be scrollable on touch devices. Some of the best practices are to use native scrolling and to make sure you’re supporting the same behaviour for all touch devices, not just mobile phones. +- **Keyboard navigation:** It should be possible to scroll through content with keyboard arrows when focused on navigation controls. +- **Responsiveness:** It’s good practice to hide or reduce the size of navigation controls for mobile viewports to improve the visibility of the content. diff --git a/src/roadmaps/design-system/content/106-core-components/106-dropdown.md b/src/roadmaps/design-system/content/106-core-components/106-dropdown.md new file mode 100644 index 000000000..a64d9d4c4 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/106-dropdown.md @@ -0,0 +1,11 @@ +# Dropdown + +Dropdowns are used to display a contextual subview with a list of actions or content related to the area where the dropdown is. + +- **Supports any type of content:** Dropdowns may be used in a lot of contexts like date pickers, language selection or other product features. +- **Action Menu:** One of the most used scenarios for dropdowns is providing an action menu for the user, so it’s useful to have this layout defined. +- **Focus Trapping:** Once the dropdown’s opened, the focus should work only for elements inside the dropdown. When it’s closed, the focus should move to the dropdown trigger. +- **Close Action:** Either some actions inside the dropdown should close it or there should be a separate close button. Also, it’s good practice to close the dropdown when a user clicks outside. +- **Keyboard Navigation:** It should be possible to navigate through dropdown children elements with the keyboard and close it with an Esc key. +- **Dynamic Position:** Dropdown content should be displayed based on the current position of the trigger element on the screen and always visible to the user. +- **Responsiveness:** Dropdown content should be adapted for mobile viewpoints as it may take a lot of space on desktops. diff --git a/src/roadmaps/design-system/content/106-core-components/107-icon.md b/src/roadmaps/design-system/content/106-core-components/107-icon.md new file mode 100644 index 000000000..a01f32d29 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/107-icon.md @@ -0,0 +1,6 @@ +# Icon + +The icon component is a way to align the way iconography static assets are displayed in the product. + +- **Sizes:** Icons should have a number of predefined sizes to provide a holistic experience across the product. Typography pairings may be used for these size values to ensure that they are aligned with the text sizes. +- **Colors:** Icons should be using values from the design system colour palette. Using parent element text colour for icon fill colour can make this automatic. diff --git a/src/roadmaps/design-system/content/106-core-components/108-input-checkbox.md b/src/roadmaps/design-system/content/106-core-components/108-input-checkbox.md new file mode 100644 index 000000000..bc548967b --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/108-input-checkbox.md @@ -0,0 +1,11 @@ +# Input Checkbox + +An input checkbox is a form element used for selecting one or multiple options. + +- **Checked State:** Used when the checkbox is selected and will use its value for the form submission. +- **Disabled State:** Prevents checkbox interactions and removes its value from the form submission. +- **Intermediate State:** Used when the checkbox has children selectable elements and only some of them are selected. +- **Label:** There should be a text label linked with the checkbox field. Clicking the label should also trigger the checkbox selection. +- **Error State:** The error state is used for form validation errors when the error is related to the checkbox field only. Always use a text error along with changing the colour of the field. +- **Keyboard State:** Checkbox selections should be triggered with the Space key. Using native elements for this should provide this kind of interaction out of the box. +- **Checkbox Group:** Checkboxes can be grouped to work with multiple values at the same time. diff --git a/src/roadmaps/design-system/content/106-core-components/109-input-radio.md b/src/roadmaps/design-system/content/106-core-components/109-input-radio.md new file mode 100644 index 000000000..dcfc34418 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/109-input-radio.md @@ -0,0 +1,10 @@ +# Input Radio + +An input radio is a form element used for selecting one option from a list. + +- **Checked State:** Used when the radio is selected and will use its value for the form submission. A radio input can’t be unselected by pressing it again. +- **Disabled State:** Prevents radio interactions and removes its value from the form submission. +- **Label:** There should be a text label linked with the radio field. Clicking the label should also trigger the radio selection. +- **Error State:** The error state is used for form validation errors when the error is related to the radio field only. Always use a text error along with changing the colour of the field. +- **Keyboard State:** A radio selection should be triggered when the Space key is pressed. Using native elements for this should provide this kind of interaction out of the box. +- **Radio Group:** Radio inputs should always be used in a group. If one of them is selected, it can be deselected only by choosing another radio. diff --git a/src/roadmaps/design-system/content/106-core-components/110-input-text.md b/src/roadmaps/design-system/content/106-core-components/110-input-text.md new file mode 100644 index 000000000..6b3692a83 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/110-input-text.md @@ -0,0 +1,11 @@ +# Input Text + +Input text lets users enter and edit text. + +- **Disabled State:** Prevents input interactions and removes its value from the form submission. +- **Placeholder:** When there’s no value entered, show a placeholder with a potential value example. Don’t use placeholders as labels for the inputs. +- **Label:** There should be a text label linked with the text field. Clicking the label should move the focus to the field. +- **Error State:** The error state is used for form validation errors when the error is related to the text field only. Always use a text error along with changing the colour of the field. +- **Focused State:** The focused state should highlight the text field when users start to interact with it. There is always only one focused field in the form. +- **Autocomplete:** When applicable, adding support for the HTML autocomplete attribute will allow users to easily enter different data types. +- **Icon Support:** Icons are used to describe input methods, express a text field state or provide additional functionality. diff --git a/src/roadmaps/design-system/content/106-core-components/111-input-switch.md b/src/roadmaps/design-system/content/106-core-components/111-input-switch.md new file mode 100644 index 000000000..71761f225 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/111-input-switch.md @@ -0,0 +1,8 @@ +# Input Switch + +Input switches toggle the state of a single item. Compared to the input checkbox, their changes usually apply without any additional submission. + +- **Checked State:** Used when an input switch is turned on. It’s better to provide an additional way to indicate the checked state besides changing its colour when applicable. +- **Disabled State:** Prevents interacting with an input switch. +- **Label:** There should be a text label linked with the switch field. Clicking the label should also trigger the input selection. +- **Keyboard State:** A switch selection should be triggered when the Space key is pressed. diff --git a/src/roadmaps/design-system/content/106-core-components/112-select.md b/src/roadmaps/design-system/content/106-core-components/112-select.md new file mode 100644 index 000000000..0b0fc8c5c --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/112-select.md @@ -0,0 +1,11 @@ +# Select + +Select lets user select a value from a list of values in a form context: + +- **Disabled State:** Prevents input interactions and removes its value from the form submission. +- **Placeholder:** When there’s no value entered, show a placeholder with a potential value example. Don’t use placeholders as labels for the inputs. +- **Label:** There should be a text label linked with the text field. Clicking the label should move the focus to the field. +- **Error State:** The error state is used for form validation errors when the error is related to the text field only. Always use a text error along with changing the colour of the field. +- **Focused State:** The focused state should highlight the text field when users start to interact with it. There is always only one focused field in the form. +- **Autocomplete:** When applicable, adding support for the HTML autocomplete attribute will allow users to easily enter different data types. +- **Icon Support:** Icons are used to describe input methods, express a text field state or provide additional functionality. diff --git a/src/roadmaps/design-system/content/106-core-components/113-textarea.md b/src/roadmaps/design-system/content/106-core-components/113-textarea.md new file mode 100644 index 000000000..5e45d1cfc --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/113-textarea.md @@ -0,0 +1,9 @@ +# Textarea + +Text area lets users enter and edit text. + +- **Disabled State:** Prevents input interactions and removes its value from the form submission. +- **Placeholder:** When there’s no value entered, show a placeholder with a potential value example. Don’t use placeholders as labels for the inputs. +- **Label:** There should be a text label linked with the text field. Clicking the label should move the focus to the field. +- **Error State:** The error state is used for form validation errors when the error is related to the text field only. Always use a text error along with changing the colour of the field. +- **Focused State:** The focused state should highlight the text field when users start to interact with it. There is always only one focused field in the form. diff --git a/src/roadmaps/design-system/content/106-core-components/114-list.md b/src/roadmaps/design-system/content/106-core-components/114-list.md new file mode 100644 index 000000000..ddfe8f1a5 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/114-list.md @@ -0,0 +1,8 @@ +# List + +Lists define the layout of the page content or groups of elements stacking them vertically or horizontally. + +- **Support any type of content:** Lists can be used in any context from page-level layout to managing offsets between granular components. hey should work with any component used inside. +- **Horizontal Stacking:** Lists can be used for inline elements and they have to manage how they’re stacked horizontally, including handling offsets between multiple rows of elements. +- **Divided Variant:** Lists with dividers are the best practice advised by many platform guidelines (especially on mobile). +- **Supports Actionable Content:** Sometimes lists are used for grouping tappable components, where the whole area of the list item should be clickable. diff --git a/src/roadmaps/design-system/content/106-core-components/115-loading-indicator.md b/src/roadmaps/design-system/content/106-core-components/115-loading-indicator.md new file mode 100644 index 000000000..89a50d763 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/115-loading-indicator.md @@ -0,0 +1,8 @@ +# Loading Indicator + +The loading indicator shows that an operation’s being performed and how long the process will take. + +- **Linear and non-linear Variants:** Depending on the context and the component it’s used for, the loading indicator can be represented either with linear or with a non-linear (e.g. circular) variant. +- **Determinate or indeterminate wait time:** In some cases, the wait time can’t be determined. The loading indicator should be shown until the loading finishes or an error happens. In other cases, it’s better to indicate how much time’s left until the loading is done. +- **Light Variant:** The loading indicator should respect its parent element background and provide a variant to be used on darker background colours. +- **Reduced Motion:** The loading indicator should be synced with the system motion settings and reduce its animation speed when reduced motion settings are turned on. diff --git a/src/roadmaps/design-system/content/106-core-components/116-modal.md b/src/roadmaps/design-system/content/106-core-components/116-modal.md new file mode 100644 index 000000000..c7153fd26 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/116-modal.md @@ -0,0 +1,10 @@ +# Modal + +Modals are containers appearing in front of the main content to provide critical information or an actionable piece of content. + +- **Supports any type of Content:** Like any other container, modals can be used in different scenarios and you should be able to use it with any other component inside. +- **Supplementary Actions:** Since content in the modal may be actionable, it’s important to have an area for action elements. This area is usually located at the bottom of the modal container. +- **Close Action:** Modals should provide a clear way to be closed as they’re blocking content when open. This may be either a separate close button or one of the supplementary actions. +- **Information Structure:** Even though modals can be used as an empty container for the content, they need a defined information structure to provide a holistic experience. It may include defining how titles and subtitles look by default or where an action element’s area is. +- **Keyboard Navigation Support:** It should be possible to close a modal by pressing the Esc key and all the focusable elements inside the modal container should be accessible with keyboard navigation. +- **Focus Trapping:** Once a modal is opened, the focus should be moved to the first element inside the modal and should be looped within the modal container. Closing the modal should return the focus to the last focused element on the page. diff --git a/src/roadmaps/design-system/content/106-core-components/117-tabs.md b/src/roadmaps/design-system/content/106-core-components/117-tabs.md new file mode 100644 index 000000000..708d1f0ca --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/117-tabs.md @@ -0,0 +1,9 @@ +# Tabs + +Tabs organise navigation between multiple pages or content sections. + +- **Active Button State:** There should be a clear differentiation between selected and unselected tab buttons. +- **Button Icon Support:** Icons help show the purpose of the tab buttons when used next to its label. +- **Equally-sized tab buttons:** Tabs can be used in a relatively small-sized container where you need to switch between a definite number of sections. For such scenarios, it’s better to support a variant where the button’s area is divided equally. +- **Keyboard Navigation:** All tab buttons should be focusable and navigation between the tab’s component should be accessible from the keyboard. +- **Responsiveness:** If all tabs on mobile don’t fit into the viewport, users should still have access to all tab buttons. Ways to solve this can be making the button area scrollable for mobile or showing a More button containing a dropdown with the rest of the buttons. diff --git a/src/roadmaps/design-system/content/106-core-components/118-toast.md b/src/roadmaps/design-system/content/106-core-components/118-toast.md new file mode 100644 index 000000000..fafa7c242 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/118-toast.md @@ -0,0 +1,9 @@ +# Toast + +Toasts provide short meaningful feedback messages about the action results. + +- **Dismissed Automatically:** Toast messages shouldn’t interrupt the user flow, block the screen for a long time or require additional action from the user. +- **Action Support:** Besides displaying the message, toasts may also provide an action related to the message like undoing an action. +- **Handles Multiple Instances:** Even though it doesn’t happen often, toasts can be called from multiple sources at the same time and all resulting toasts should be queued. It’s good practice not to show all the messages at the same time. +- **Accessibility:** Toast messages should be announced by the voice assistive technology and their action should be easily accessible from the keyboard. +- **Responsivenss:** Toasts should be aligned with the mobile viewport and their action should be easily reachable for tapping. diff --git a/src/roadmaps/design-system/content/106-core-components/119-tooltip.md b/src/roadmaps/design-system/content/106-core-components/119-tooltip.md new file mode 100644 index 000000000..77fd14943 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/119-tooltip.md @@ -0,0 +1,9 @@ +# Tooltip + +Tooltips are desktop-only components that display additional information when hovering over or focusing on an element. + +- **Keyboard Hover Support:** Tooltips should be accessible when an element is focused using the keyboard. +- **Dynamic Positioning:** Tooltip content should be displayed based on the current position of the trigger element on the screen and always visible to the user. +- **Hover Timeout:** Having a small timeout before triggering a tooltip will help to prevent occasionally showing tooltips while users move their mouse cursor. +- **Light Variant:** The tooltip should respect its parent element background and provide a variant to be used on darker background colours. +- **Instant Transition for Element Groups:** If there’s a group of elements using tooltips, hovering over another element while a tooltip’s already active shouldn’t trigger the animation. diff --git a/src/roadmaps/design-system/content/106-core-components/index.md b/src/roadmaps/design-system/content/106-core-components/index.md new file mode 100644 index 000000000..81397fa34 --- /dev/null +++ b/src/roadmaps/design-system/content/106-core-components/index.md @@ -0,0 +1,3 @@ +# Core Components + +Components are the main building blocks for user interfaces. Building a reusable component library enhances your product development workflow by reducing design and tech debt and speeding up the process. Core components can’t be broken down into granular pieces without losing their meaning. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/100-component-catalog.md b/src/roadmaps/design-system/content/107-tooling/100-development/100-component-catalog.md new file mode 100644 index 000000000..6450a95a5 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/100-component-catalog.md @@ -0,0 +1,3 @@ +# Component Catalog + +Isolate your UI components’ environment outside of your product codebase to make sure they’re not dependent on any global dependencies and can be easily reused. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/101-documentation.md b/src/roadmaps/design-system/content/107-tooling/100-development/101-documentation.md new file mode 100644 index 000000000..c4befcff6 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/101-documentation.md @@ -0,0 +1,3 @@ +# Documentation + +Having your code documented is key to driving adoption and reducing the load on the contributors. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/102-code-style.md b/src/roadmaps/design-system/content/107-tooling/100-development/102-code-style.md new file mode 100644 index 000000000..1d5a8d627 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/102-code-style.md @@ -0,0 +1,3 @@ +# Code Style + +Having a defined code style helps align the way code’s written in the system and increases development velocity. It should be automated with the tools provided for each platform. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/103-unit-testing.md b/src/roadmaps/design-system/content/107-tooling/100-development/103-unit-testing.md new file mode 100644 index 000000000..77bbb64bf --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/103-unit-testing.md @@ -0,0 +1,3 @@ +# Unit Testing + +Every part of the design system should be covered with unit tests. Once your system’s adopted, any change in the isolated environment may affect how the product works. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/104-accessibility-testing.md b/src/roadmaps/design-system/content/107-tooling/100-development/104-accessibility-testing.md new file mode 100644 index 000000000..5ec7e1447 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/104-accessibility-testing.md @@ -0,0 +1,3 @@ +# Accessibility Testing + +Design systems should cover accessibility as much as possible. Making this automatic reduces the risk of inaccessible components or user flows in the product. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/105-semantic-versioning.md b/src/roadmaps/design-system/content/107-tooling/100-development/105-semantic-versioning.md new file mode 100644 index 000000000..855d3d375 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/105-semantic-versioning.md @@ -0,0 +1,3 @@ +# Semantic Versioning + +Version your code with semantic versioning that dictates how version numbers are assigned and incremented. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/106-release-strategy.md b/src/roadmaps/design-system/content/107-tooling/100-development/106-release-strategy.md new file mode 100644 index 000000000..96af66503 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/106-release-strategy.md @@ -0,0 +1,3 @@ +# Release Strategy + +Design system releases should be automated and ideally use scripts ran locally or in remote CI pipelines to prevent broken releases. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/107-commit-guidelines.md b/src/roadmaps/design-system/content/107-tooling/100-development/107-commit-guidelines.md new file mode 100644 index 000000000..ddf8169bb --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/107-commit-guidelines.md @@ -0,0 +1,3 @@ +# Commit Guidelines + +Automate the generation of your changelog by adopting a commit message guidelines that categorise and define the changes being made. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/108-pr-templates.md b/src/roadmaps/design-system/content/107-tooling/100-development/108-pr-templates.md new file mode 100644 index 000000000..ffe21acff --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/108-pr-templates.md @@ -0,0 +1,3 @@ +# Pull Request Templates + +Create pull request templates that outline the change being proposed to facilitate productive discussions. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/109-contribution-guidelines.md b/src/roadmaps/design-system/content/107-tooling/100-development/109-contribution-guidelines.md new file mode 100644 index 000000000..56612e5e4 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/109-contribution-guidelines.md @@ -0,0 +1,3 @@ +# Contribution Guidelines + +Define the process of contributing to the code of the design system. Document everything in a discoverable place to make it easier for everyone to contribute. diff --git a/src/roadmaps/design-system/content/107-tooling/100-development/index.md b/src/roadmaps/design-system/content/107-tooling/100-development/index.md new file mode 100644 index 000000000..78864b924 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/100-development/index.md @@ -0,0 +1,3 @@ +# Development + +One of the main challenges in developing a design system isn’t building the components. It’s making your code stable, easy to read and contribute to. diff --git a/src/roadmaps/design-system/content/107-tooling/101-design/100-design-editor.md b/src/roadmaps/design-system/content/107-tooling/101-design/100-design-editor.md new file mode 100644 index 000000000..1c8a45fc3 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/101-design/100-design-editor.md @@ -0,0 +1,3 @@ +# Design Editor + +There are many design editors available in the market today with the most popular names being Sketch, Figma and Adobe XD. If you're unsure which route to go down it's often best to speak with your team. diff --git a/src/roadmaps/design-system/content/107-tooling/101-design/101-plugins.md b/src/roadmaps/design-system/content/107-tooling/101-design/101-plugins.md new file mode 100644 index 000000000..b3acf1552 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/101-design/101-plugins.md @@ -0,0 +1,3 @@ +# Plugins + +Most popular Design Editors (Sketch and Figma, especially) come with third-party plugin support. Whilst it's best to use the editors in-built tools for laying out your components, plugins can bring in a range of useful data to populate them. diff --git a/src/roadmaps/design-system/content/107-tooling/101-design/102-version-control.md b/src/roadmaps/design-system/content/107-tooling/101-design/102-version-control.md new file mode 100644 index 000000000..f6979a47d --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/101-design/102-version-control.md @@ -0,0 +1,3 @@ +# Version Control + +Having your design versioned with semantic versioning will allow you to easily align design with development, roll back faulty changes and release changes in code and design at the same time. diff --git a/src/roadmaps/design-system/content/107-tooling/101-design/103-contribution-guidelines.md b/src/roadmaps/design-system/content/107-tooling/101-design/103-contribution-guidelines.md new file mode 100644 index 000000000..a7b9d5833 --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/101-design/103-contribution-guidelines.md @@ -0,0 +1,3 @@ +# Contribution Guidelines + +Define the process of contributing to the UI and UX of the design system and document it in a discoverable place to make it easier for everyone to contribute. diff --git a/src/roadmaps/design-system/content/107-tooling/101-design/index.md b/src/roadmaps/design-system/content/107-tooling/101-design/index.md new file mode 100644 index 000000000..9bcdf2b0a --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/101-design/index.md @@ -0,0 +1,4 @@ +# Design + +The UI and UX in a design system need to be tied to development as much as possible. The tools in this checklist should help designers and developers work better together. + diff --git a/src/roadmaps/design-system/content/107-tooling/index.md b/src/roadmaps/design-system/content/107-tooling/index.md new file mode 100644 index 000000000..9a7ec64db --- /dev/null +++ b/src/roadmaps/design-system/content/107-tooling/index.md @@ -0,0 +1,4 @@ +# Tooling + +To make things efficient for anyone using your design system, make tooling essential. Find the workflows where you can integrate things with the tools people use. This helps organically spread your design system and make it crucial to people’s daily work. + diff --git a/src/roadmaps/design-system/content/108-project-management/100-task-management/100-ticketing.md b/src/roadmaps/design-system/content/108-project-management/100-task-management/100-ticketing.md new file mode 100644 index 000000000..898fa0929 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/100-task-management/100-ticketing.md @@ -0,0 +1,3 @@ +# Ticketing + +Make it easier to track your day-to-day progress by using ticketing software like Jira, Trello or GitHub. This’ll make it easier for others to submit feature proposals or bug reports. diff --git a/src/roadmaps/design-system/content/108-project-management/100-task-management/101-milestones.md b/src/roadmaps/design-system/content/108-project-management/100-task-management/101-milestones.md new file mode 100644 index 000000000..65b423af7 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/100-task-management/101-milestones.md @@ -0,0 +1,3 @@ +# Milestones + +Define milestones that act as bigger epics in your project management with the help of your roadmap. These will help you understand your progress. diff --git a/src/roadmaps/design-system/content/108-project-management/100-task-management/102-roadmap.md b/src/roadmaps/design-system/content/108-project-management/100-task-management/102-roadmap.md new file mode 100644 index 000000000..3f1ca6141 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/100-task-management/102-roadmap.md @@ -0,0 +1,3 @@ +# Roadmap + +Setting your short and long term vision and mapping things out helps you decide the steps to take, understand your place in the bigger picture and prioritise day-to-day tasks. diff --git a/src/roadmaps/design-system/content/108-project-management/100-task-management/index.md b/src/roadmaps/design-system/content/108-project-management/100-task-management/index.md new file mode 100644 index 000000000..4f4557062 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/100-task-management/index.md @@ -0,0 +1,3 @@ +# Task Management + +Solid task management and workflows are a crucial step in executing any project. Adopting a methodology like Agile or Kanban helps you cover a lot of ground. diff --git a/src/roadmaps/design-system/content/108-project-management/101-communications/100-community-meetings.md b/src/roadmaps/design-system/content/108-project-management/101-communications/100-community-meetings.md new file mode 100644 index 000000000..c857aa648 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/101-communications/100-community-meetings.md @@ -0,0 +1,3 @@ +# Community Meetings + +Arrange community meetings with everyone who uses the design system. Share your knowledge and make proposals to improve the sense of community. diff --git a/src/roadmaps/design-system/content/108-project-management/101-communications/101-communication-channel.md b/src/roadmaps/design-system/content/108-project-management/101-communications/101-communication-channel.md new file mode 100644 index 000000000..dc5457f12 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/101-communications/101-communication-channel.md @@ -0,0 +1,3 @@ +# Communication Channel + +Most product development work happens digitally, so create a digital channel where people can reach out and ask questions. diff --git a/src/roadmaps/design-system/content/108-project-management/101-communications/102-open-hours.md b/src/roadmaps/design-system/content/108-project-management/101-communications/102-open-hours.md new file mode 100644 index 000000000..a5636f4bf --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/101-communications/102-open-hours.md @@ -0,0 +1,3 @@ +# Open Hours + +Create open hours in which you can engage your audience in a more private setting where you can discuss things in more detail. You can also use these as peer coding or peer design opportunities. diff --git a/src/roadmaps/design-system/content/108-project-management/101-communications/103-faqs.md b/src/roadmaps/design-system/content/108-project-management/101-communications/103-faqs.md new file mode 100644 index 000000000..1781a15d6 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/101-communications/103-faqs.md @@ -0,0 +1,3 @@ +# FAQs + +To save everyone time, define which questions are asked frequently by your audience and document them in a discoverable place. diff --git a/src/roadmaps/design-system/content/108-project-management/101-communications/index.md b/src/roadmaps/design-system/content/108-project-management/101-communications/index.md new file mode 100644 index 000000000..9654e65ce --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/101-communications/index.md @@ -0,0 +1,3 @@ +# Communications + +Your users play a great role in shaping your design system. Creating communication channels where they can raise their voices helps you keep track of how they’re using your system. It’ll also improve their sense of ownership and the adoption of your system. diff --git a/src/roadmaps/design-system/content/108-project-management/102-analytics/100-component-analytics.md b/src/roadmaps/design-system/content/108-project-management/102-analytics/100-component-analytics.md new file mode 100644 index 000000000..4c709b4b2 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/102-analytics/100-component-analytics.md @@ -0,0 +1,3 @@ +# Component Analytics + +Track the usage of your components. For development you can use built-in tools like Figma’s Design System Analytics. For the end product you can have a separate way of tracking per platform depending on the technology. diff --git a/src/roadmaps/design-system/content/108-project-management/102-analytics/101-error-logging.md b/src/roadmaps/design-system/content/108-project-management/102-analytics/101-error-logging.md new file mode 100644 index 000000000..1c3a64a18 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/102-analytics/101-error-logging.md @@ -0,0 +1,3 @@ +# Error Logging + +Implement a way to track and pinpoint component-related outages in your product. diff --git a/src/roadmaps/design-system/content/108-project-management/102-analytics/102-tooling-analytics.md b/src/roadmaps/design-system/content/108-project-management/102-analytics/102-tooling-analytics.md new file mode 100644 index 000000000..57fd505b0 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/102-analytics/102-tooling-analytics.md @@ -0,0 +1,3 @@ +# Tooling Analytics + +Track what tools are being used for your design system. Find out which ones are used the most and which features are the most popular. diff --git a/src/roadmaps/design-system/content/108-project-management/102-analytics/103-service-and-health-metrics.md b/src/roadmaps/design-system/content/108-project-management/102-analytics/103-service-and-health-metrics.md new file mode 100644 index 000000000..e88239a34 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/102-analytics/103-service-and-health-metrics.md @@ -0,0 +1,3 @@ +# Service and Health Metrics + +Define service and health metrics for your design system to set a benchmark on how well you’re doing. Common examples can be the number of tickets closed, improvements made or bugs fixed. diff --git a/src/roadmaps/design-system/content/108-project-management/102-analytics/index.md b/src/roadmaps/design-system/content/108-project-management/102-analytics/index.md new file mode 100644 index 000000000..49e48e31f --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/102-analytics/index.md @@ -0,0 +1,3 @@ +# Analytics + +Data isn’t the only driving factor when it comes to the development of design systems. Keeping a sharp eye on how your system’s used in the development process and the end product can inform your go-forward strategy. diff --git a/src/roadmaps/design-system/content/108-project-management/index.md b/src/roadmaps/design-system/content/108-project-management/index.md new file mode 100644 index 000000000..80afd0a66 --- /dev/null +++ b/src/roadmaps/design-system/content/108-project-management/index.md @@ -0,0 +1,3 @@ +# Project Management + +Design systems are no different than any other project your team might take on. In order to successfully build and maintain one, you need a clear strategy that’s well executed daily, and you‘ll need to create opportunities for your colleagues to give feedback to help share your design system together. diff --git a/src/roadmaps/design-system/design-system.md b/src/roadmaps/design-system/design-system.md new file mode 100644 index 000000000..a7871008d --- /dev/null +++ b/src/roadmaps/design-system/design-system.md @@ -0,0 +1,52 @@ +--- +jsonUrl: "/jsons/design-system.json" +pdfUrl: "/pdfs/design-system.pdf" +order: 10 +featuredTitle: "Design System" +featuredDescription: "Step by step guide to building a modern Design System" +title: "Design System" +description: "Learn how to create a design system with this step by step guide" +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 2309.7 +seo: + title: "How to Create a Design System" + description: "Learn how to create a design system or become a design system engineer with this step by step guide with resources." + keywords: + - "guide to create a design system" + - "guide to becoming a design system engineer" + - "design system engineer" + - "design system engineer" + - "design system skills" + - "guide to design system" + - "design system roadmap" + - "design system skills" + - "design system skills test" + - "skills for design system" + - "what is design system" + - "design system quiz" + - "design system interview questions" + - "design system engineer roadmap" + - "design system engineer roadmap" + - "become a design system engineer" + - "design system engineer career path" + - "design system engineer" + - "modern design system engineer" +relatedRoadmaps: + - "frontend" + - "javascript" + - "react" + - "vue" + - "angular" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/devops/content/100-language/100-python.md b/src/roadmaps/devops/content/100-language/100-python.md new file mode 100644 index 000000000..266081d35 --- /dev/null +++ b/src/roadmaps/devops/content/100-language/100-python.md @@ -0,0 +1,14 @@ +{% Roadmap "/python", "Python" %} + +# Python + +Python is a multi-paradigm language. Being an interpreted language, code is executed as soon as it is written and the Python syntax allows for writing code in functional, procedural or object-oriented programmatic ways. Python is frequently recommended as the first language new coders should learn, because of its focus on readability, consistency, and ease of use. This comes with some downsides, as the language is not especially performant in most production tasks. + +{% resources %} + {% Official "https://www.python.org/", "Python Website" %} + {% Blog "https://www.python.org/about/gettingstarted/", "Python Getting Started" %} + {% Blog "https://automatetheboringstuff.com/", "Automate the Boring Stuff" %} + {% Course "https://www.w3schools.com/python/", "W3Schools - Python Tutorial " %} + {% Course "https://ehmatthes.github.io/pcc/", "Python Crash Course" %} + {% Course "https://www.codecademy.com/learn/learn-python-3", "Codecademy - Learn Python 3" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/100-language/101-ruby.md b/src/roadmaps/devops/content/100-language/101-ruby.md new file mode 100644 index 000000000..1c5940a9d --- /dev/null +++ b/src/roadmaps/devops/content/100-language/101-ruby.md @@ -0,0 +1,9 @@ +# Ruby + +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. + +{% resources %} + {% Official "https://www.ruby-lang.org/en/", "Ruby Website" %} + {% Course "https://www.ruby-lang.org/en/documentation/quickstart/", "Learn Ruby in 20 minutes" %} + {% Course "https://www.codecademy.com/learn/learn-ruby", "Learn Ruby | Codecademy" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/100-language/102-javascript.md b/src/roadmaps/devops/content/100-language/102-javascript.md new file mode 100644 index 000000000..7d109358c --- /dev/null +++ b/src/roadmaps/devops/content/100-language/102-javascript.md @@ -0,0 +1,17 @@ +{% Roadmap "/javascript", "JavaScript" %} + +# JavaScript + +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. + +{% resources %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} + {% Blog "https://javascript.info/", "The Modern JavaScript Tutorial" %} + {% Course "https://www.codecademy.com/learn/introduction-to-javascript", "Codecademy - Learn JavaScript" %} + {% Blog "https://youtu.be/hdI2bqOjy3c", "JavaScript Crash Course for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=fBNz5xF-Kx4", "Node.js Crash Course" %} + {% Blog "https://www.youtube.com/watch?v=TlB_eWDSMt4", "Node.js Tutorial for Beginners" %} + {% Blog "https://www.w3schools.com/nodejs/", "W3Schools – Node.js Tutorial" %} + {% Blog "https://www.w3schools.com/nodejs/nodejs_npm.asp", "What is NPM?" %} + {% Blog "https://nodejs.dev/en/learn/", "Official Documentation" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/100-language/103-go.md b/src/roadmaps/devops/content/100-language/103-go.md new file mode 100644 index 000000000..cfd7eddb2 --- /dev/null +++ b/src/roadmaps/devops/content/100-language/103-go.md @@ -0,0 +1,14 @@ +{% Roadmap "/golang", "Go" %} + +# Go + +Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more. + +{% resources %} + {% Blog "https://go.dev/tour/welcome/1", "A Tour of Go – Go Basics" %} + {% Blog "https://go.dev/doc/", "Go Reference Documentation" %} + {% Blog "https://gobyexample.com/", "Go by Example - annotated example programs" %} + {% Course "https://www.codecademy.com/learn/learn-go", "Learn Go | Codecademy" %} + {% Course "https://www.w3schools.com/go/", "W3Schools Go Tutorial " %} + {% Blog "https://thenewstack.io/make-a-restful-json-api-go/", "Making a RESTful JSON API in Go" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/100-language/104-rust.md b/src/roadmaps/devops/content/100-language/104-rust.md new file mode 100644 index 000000000..be5d25fa7 --- /dev/null +++ b/src/roadmaps/devops/content/100-language/104-rust.md @@ -0,0 +1,8 @@ +# Rust + +Rust is a modern systems programming language focusing on safety, speed, and concurrency. It accomplishes these goals by being memory safe without using garbage collection. + +{% resources %} + {% Blog "https://doc.rust-lang.org/book/", "The Rust Programming Language - online book" %} + {% Blog "https://doc.rust-lang.org/stable/rust-by-example/index.html", "Rust by Example - collection of runnable examples" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/100-language/105-c.md b/src/roadmaps/devops/content/100-language/105-c.md new file mode 100644 index 000000000..aea8c8354 --- /dev/null +++ b/src/roadmaps/devops/content/100-language/105-c.md @@ -0,0 +1,8 @@ +# C + +C is a powerful general-purpose programming language. It can be used to develop software like operating systems, databases, compilers, and so on. + +{% resources %} + {% Blog "https://www.programiz.com/c-programming", "Learn C Language" %} + {% Blog "https://docs.microsoft.com/en-us/cpp/c-language/c-language-reference?view=msvc-170", "C Reference" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/100-language/106-cpp.md b/src/roadmaps/devops/content/100-language/106-cpp.md new file mode 100644 index 000000000..cc04816f8 --- /dev/null +++ b/src/roadmaps/devops/content/100-language/106-cpp.md @@ -0,0 +1,8 @@ +# C++ + +C++ is a powerful general-purpose programming language. It can be used to develop operating systems, browsers, games, and so on. C++ supports different ways of programming like procedural, object-oriented, functional, and so on. This makes C++ powerful as well as flexible. + +{% resources %} + {% Blog "https://learncpp.com/", "Learn Cpp" %} + {% Blog "https://en.cppreference.com/", "C++ Reference" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/100-language/index.md b/src/roadmaps/devops/content/100-language/index.md new file mode 100644 index 000000000..abe87364f --- /dev/null +++ b/src/roadmaps/devops/content/100-language/index.md @@ -0,0 +1,3 @@ +# Learn a Language + +It doesn't matter what language you pick, but it is important to learn at least one. You will be able to use that language to write automation scripts. diff --git a/src/roadmaps/devops/content/101-os-concepts/100-networking.md b/src/roadmaps/devops/content/101-os-concepts/100-networking.md new file mode 100644 index 000000000..17bb9fbf6 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/100-networking.md @@ -0,0 +1,11 @@ +# Networking + +Computer networking refers to interconnected computing devices that can exchange data and share resources with each other. These networked devices use a system of rules, called communications protocols, to transmit information over physical or wireless technologies. + +Begin by studying the [OSI Model](https://en.wikipedia.org/wiki/OSI_model). This model will assist in constructing an understanding of the linked topics, and help you contextualize the items linked to the Networking, Security, and Protocols node. Higher level networking concepts may be implemented and named differently across cloud providers. Don't let this confuse you - the basics of TCP/IP are useful and used in the same ways across all implementations. + +{% resources %} + {% Blog "https://aws.amazon.com/what-is/computer-networking/", "What is Computer Networking?" %} + {% Blog "https://youtu.be/IPvYjXCsTg8", "Full Networking Course" %} + {% Blog "https://www.youtube.com/watch?v=dV8mjZd1OtU", "OSI Model Explained" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/101-os-concepts/101-io-management.md b/src/roadmaps/devops/content/101-os-concepts/101-io-management.md new file mode 100644 index 000000000..4a732b63f --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/101-io-management.md @@ -0,0 +1,9 @@ +# I/O Management + +One of the important jobs of an Operating System is to manage various I/O devices including mouse, keyboards, touchpad, disk drives, display adapters, USB devices, Bit-mapped screens, LED, Analog-to-digital converter, On/off switch, network connections, audio I/O, printers, etc. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/operating_system/os_io_hardware.htm", "Operating System - I/O Hardware" %} + {% Blog "https://www.omscs-notes.com/operating-systems/io-management/", "IO Management" %} + {% Blog "https://www.youtube.com/watch?v=F18RiREDkwE", "Basics of OS (I/O Structure)" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/101-os-concepts/102-virtualization.md b/src/roadmaps/devops/content/101-os-concepts/102-virtualization.md new file mode 100644 index 000000000..eaad78f49 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/102-virtualization.md @@ -0,0 +1,10 @@ +# Virtualization + +Virtualization is the creation of a virtual -- rather than actual -- version of something, such as an operating system (OS), a server, a storage device or network resources. It uses software that simulates hardware functionality to create a virtual system. This practice allows IT organizations to operate multiple operating systems, more than one virtual system and various applications on a single server. + + +{% resources %} + {% Blog "https://www.techtarget.com/searchitoperations/definition/virtualization", "What is Virtualization? and its types?" %} + {% Blog "https://opensource.com/resources/virtualization", "What is Hypervisor and VM?" %} + {% Blog "https://www.atlassian.com/microservices/cloud-computing/containers-vs-vms", "Containers vs VM" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/101-os-concepts/103-memory-storage.md b/src/roadmaps/devops/content/101-os-concepts/103-memory-storage.md new file mode 100644 index 000000000..d090df311 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/103-memory-storage.md @@ -0,0 +1,10 @@ +# Memory Management + +The term Memory can be defined as a collection of data in a specific format. It is used to store instructions and process data. The memory comprises a large array or group of words or bytes, each with its own location. The primary motive of a computer system is to execute programs. These programs, along with the information they access, should be in the main memory during execution. The CPU fetches instructions from memory according to the value of the program counter. + +To achieve a degree of multiprogramming and proper utilization of memory, memory management is important. There are several memory management methods, reflecting various approaches, and the effectiveness of each algorithm depends on the situation. + +{% resources %} + {% Blog "https://dev.to/deepu105/demystifying-memory-management-in-modern-programming-languages-ddd", "Demystifying memory management in modern programming languages" %} + {% Blog "https://www.geeksforgeeks.org/memory-management-in-operating-system/", "Memory Management in Operating System" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/101-os-concepts/104-file-system.md b/src/roadmaps/devops/content/101-os-concepts/104-file-system.md new file mode 100644 index 000000000..64f4f41b5 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/104-file-system.md @@ -0,0 +1,7 @@ +# File System + +A file is a named collection of related information recorded on secondary storage such as magnetic disks, magnetic tapes, and optical disks. Generally, a file is a sequence of bits, bytes, lines, or records whose meaning is defined by the file's creator and user. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/operating_system/os_file_system.htm", "Operating System - File System" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/101-os-concepts/105-sockets.md b/src/roadmaps/devops/content/101-os-concepts/105-sockets.md new file mode 100644 index 000000000..1338e33dd --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/105-sockets.md @@ -0,0 +1,12 @@ +# Sockets + +Socket is an endpoint of a two way **communication** link between **two different processes** on the network (same or different machines). The socket mechanism provides a means of inter-process communication (IPC) by establishing named contact points between client and server. It is the combination of IP Address and Port Number. + +e.g. `http://192.168.0.1:8080` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/socket-in-computer-network/", "What are Sockets?" %} + {% Blog "https://www.tutorialspoint.com/unix_sockets/what_is_socket.htm", "Types of Sockets" %} + {% Blog "https://www.baeldung.com/cs/port-vs-socket", "Port vs Socket" %} + {% Blog "https://socket.io/", "Socket.io Library Bidirectional and low-latency communication for every platform" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/101-os-concepts/106-posix.md b/src/roadmaps/devops/content/101-os-concepts/106-posix.md new file mode 100644 index 000000000..a173a8af5 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/106-posix.md @@ -0,0 +1,15 @@ +# POSIX Basics + +POSIX (Portable Operating System Interface) is a family of standards for maintaining compatibility between operating systems. It describes utilities, APIs, and services that a compliant OS should provide to software, thus making it easier to port programs from one system to another. + +A practical example: in a Unix-like operating system, there are three *standard streams*, `stdin`, `stdout` and `stderr` - they are I/O connections that you will probably come across when using a terminal, as they manage the flow from the **standard input** (stdin), **standard output** (stdout) and **standard error** (stderr). + +So, in this case, when we want to interact with any of these streams (through a process, for example), the POSIX operating system API makes it easier - for example, in the `` C header where the stdin, stderr, and stdout are defined as `STDIN_FILENO`, `STDERR_FILENO` and `STDOUT_FILENO`. + +POSIX also adds a standard for exit codes, filesystem semantics, and several other command line utility API conventions. + +{% resources %} + {% Official "https://pubs.opengroup.org/onlinepubs/9699919799/", "POSIX standard by IEEE" %} + {% Blog "https://unix.stackexchange.com/a/220877", "Summary of some POSIX implementations" %} + {% Blog "https://www.baeldung.com/linux/posix", "A guide to POSIX" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/101-os-concepts/107-processes.md b/src/roadmaps/devops/content/101-os-concepts/107-processes.md new file mode 100644 index 000000000..c628301db --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/107-processes.md @@ -0,0 +1,14 @@ +# Processes + +A process means program in execution. It generally takes an input, processes it and gives us the appropriate output. `ps` command can be used in linux to get the list of processes running in foreground. Each process will have a unique identifier called **PID**, which can be used to track it or `kill` it through shell. + +**Types of processes:** +* Foreground processes +* Background processes + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/introduction-of-process-management/", "Intro to Process Management" %} + {% Blog "https://www.geeksforgeeks.org/process-management-in-linux/", "Process Management in Linux" %} + {% Blog "https://www.geeksforgeeks.org/processes-in-linuxunix/", "Process related commands in Linux" %} + {% Blog "https://www.geeksforgeeks.org/difference-between-process-and-thread/", "Process vs Thread" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/101-os-concepts/108-startup-management.md b/src/roadmaps/devops/content/101-os-concepts/108-startup-management.md new file mode 100644 index 000000000..633d58cc3 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/108-startup-management.md @@ -0,0 +1,11 @@ +# Startup Management (init.d) + +`init.d` is a daemon which is the **first process** (PID = 1) of the Linux system. Then other processes, services, daemons, and threads are started by init. One can write their own scripts in *'/etc/init.d'* location to start services automatically on system boot. Services can be started and stopped manually by using `service` command. + +It has following syntax: `$ service [service_name] [action]` e.g. `$ service ssh start` + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/the-linux-booting-process-6-steps-described-in-detail/", "Linux Booting Process" %} + {% Blog "https://www.geeksforgeeks.org/what-is-init-d-in-linux-service-management/", "What is init.d?" %} + {% Blog "https://itsfoss.com/linux-daemons/", "What are Daemons in Linux?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/101-os-concepts/109-service-management.md b/src/roadmaps/devops/content/101-os-concepts/109-service-management.md new file mode 100644 index 000000000..df8256666 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/109-service-management.md @@ -0,0 +1,11 @@ +# Service Management (systemd) + +`systemd` is a **System** Management **D**aemon which replaces the sysvinit process to become the first process with PID = 1, which gets executed in user space during the Linux start-up process. It is a system that is designed specifically for the Linux kernel. It is now being used as a **replacement of init.d** to overcome shortcomings of it. It uses `systemctl` command to perform related operations. + +e.g. `$ systemctl start [service-name]`, `$ systemctl poweroff` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/linux-systemd-and-its-components/", "What is systemd? and its commands" %} + {% Blog "https://uace.github.io/learning/init-vs-systemd-what-is-an-init-daemon", "init.d vs systemd" %} + {% Blog "https://www.tecmint.com/systemd-replaces-init-in-linux/", "Why Systemd as a replacement of init.d?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md b/src/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md new file mode 100644 index 000000000..0fdd7a748 --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md @@ -0,0 +1,18 @@ +# Thread in OS + +`Thread` is an active entity which executes a **part of a process**. It is a sequential flow of tasks within a process. It is also called lightweight process as they **share common resources**. A process can contain multiple threads. Threads are used to increase the performance of the applications. +Each thread has its own program counter, stack, and set of registers. But the threads of a single process might share the same code and data/file. + +**Key Terminologies:** +* `proc` +* `fork` +* `join` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/introduction-of-process-synchronization/", "Process Synchronization" %} + {% Blog "https://www.geeksforgeeks.org/thread-in-operating-system/", "What is Thread in OS?" %} + {% Blog "https://www.scaler.com/topics/operating-system/threads-in-operating-system/", "Process vs Thread & Multi-Threading" %} + {% Blog "https://www.geeksforgeeks.org/concurrency-in-operating-system/", "What Concurrency in OS?" %} + {% Blog "https://medium.com/@azizomarck/how-is-concurrency-different-from-parallelism-334b6d5c869a", "Threads vs Concurrency" %} + {% Blog "https://medium.com/@akhandmishra/operating-system-threads-and-concurrency-aec2036b90f8", "How Concurrency is achieved in Threads" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/101-os-concepts/index.md b/src/roadmaps/devops/content/101-os-concepts/index.md new file mode 100644 index 000000000..5891aba4d --- /dev/null +++ b/src/roadmaps/devops/content/101-os-concepts/index.md @@ -0,0 +1,9 @@ +# Operating System + +An Operating System is a program that manages a computer’s resources, especially the allocation of those resources among other programs. Typical resources include the central processing unit (CPU), computer memory, file storage, input/output (I/O) devices, and network connections. + +{% resources %} + {% Blog "https://edu.gcfglobal.org/en/computerbasics/understanding-operating-systems/1/", "What is an operating system?" %} + {% Blog "https://www.youtube.com/watch?v=26QPDBe-NB8&ab_channel=CrashCourse", "Operating Systems: Crash Course Computer Science #18" %} + {% Blog "https://www.youtube.com/watch?v=vBURTt97EkA&list=PL9hkZBQk8d1zEGbY7ShWCZ2n1gtxqkRrS&index=1", "Introduction to Operating System" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/100-windows.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/100-windows.md new file mode 100644 index 000000000..a19582076 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/100-windows.md @@ -0,0 +1,8 @@ +# Windows + +Windows is a graphical user interface (GUI) based operating system developed by Microsoft. It is a hybrid kernel-based proprietary operating system. According to a survey, till April 2022, windows is the most popular operating system in the world with a 75% market share. + +{% resources %} + {% Official "http://microsoft.com/windows", "Windows Official Site" %} + {% Official "https://learn.microsoft.com/en-us/windows/", "Windows Documentation for Developers" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/101-centos.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/101-centos.md new file mode 100644 index 000000000..10cd2cce9 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/101-centos.md @@ -0,0 +1,9 @@ +# CentOS + +CentOS (short for Community Enterprise Operating System) is a community driven, free and open-source distribution that is functionally compatible with Red Hat Enterprise Linux (RHEL). The CentOS distribution was discontinued in December 2021, however it has now been succeeded by [Rocky Linux](https://rockylinux.org/) and [AlmaLinux](https://almalinux.org/) + +{% resources %} + {% Official "https://www.centos.org/", "CentOS Project Website" %} + {% Official "https://wiki.centos.org/Documentation", "CentOS Documentation" %} + {% Blog "https://wiki.centos.org/HowTos", "CentOS How To Guides" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/102-ubuntu.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/102-ubuntu.md new file mode 100644 index 000000000..5e2d6e7e0 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/102-ubuntu.md @@ -0,0 +1,10 @@ +# Ubuntu + +Ubuntu is a free and open-source Linux distribution based on Debian. Ubuntu is available in three versions Desktop, Server and Core. + +{% resources %} + {% Official "https://ubuntu.com/", "Ubuntu Website" %} + {% Official "https://help.ubuntu.com/", "Ubuntu Documentation" %} + {% Blog "https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview", "Install Ubuntu Desktop Documentation" %} + {% Blog "https://itsfoss.com/getting-started-with-ubuntu/", "Getting Started with Ubuntu Tutorials" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/103-suse-linux.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/103-suse-linux.md new file mode 100644 index 000000000..60094ecf9 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/103-suse-linux.md @@ -0,0 +1,9 @@ +# openSUSE Linux + +openSUSE is a free to use Linux distribution aimed to promote the use of Linux everywhere. openSUSE is released in two versions Leap and Tumbleweed + +{% resources %} + {% Official "https://www.opensuse.org/", "openSUSE Linux Website" %} + {% Official "https://en.opensuse.org/Main_Page", "openSUSE Documentation" %} + {% Blog "https://opensuse-guide.org/", "Unofficial openSUSE Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/104-rhel.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/104-rhel.md new file mode 100644 index 000000000..8720fae6b --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/104-rhel.md @@ -0,0 +1,9 @@ +# RHEL + +Red Hat Enterprise Linux (RHEL) is a commercial open-source Linxus distribution based on Fedora, that is sold as a commercial enterprise operating system. + +{% resources %} + {% Official "https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux", "Red Hat Enterprise Linux Website" %} + {% Official "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/", "RHEL Documentation" %} + {% Blog "https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/get-started", "RHEL Getting Started Guides" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/105-fedora.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/105-fedora.md new file mode 100644 index 000000000..d945a5580 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/105-fedora.md @@ -0,0 +1,9 @@ +# Fedora + +Fedora Linux is a free and open-source Linux distribution developed by the [Fedora Project](https://fedoraproject.org/), an open source focussed community. Fedora Linux releases new versions every six months and is the upstream source for Red Hat Enterprise Linux (RHEL) + +{% resources %} + {% Official "https://fedoraproject.org/", "Fedora Linux Website" %} + {% Official "https://docs.fedoraproject.org/en-US/docs/", "Official Fedora Documentation" %} + {% Blog "https://docs.fedoraproject.org/en-US/quick-docs/getting-started-guide/", "Fedora Linux Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/106-debian.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/106-debian.md new file mode 100644 index 000000000..a09795761 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/106-debian.md @@ -0,0 +1,9 @@ +# Debian + +Debian is a free and open-source Linux distribution developed by the Debian Project, an all volunteer software community organization. Debian is the upstream distribution of Ubuntu. + +{% resources %} + {% Official "https://www.debian.org/", "Debian Website" %} + {% Official "https://www.debian.org/doc/", "Official Debian Documentation" %} + {% Blog "https://www.debian.org/releases/stable/installmanual", "Debian Installation Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/107-free-bsd.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/107-free-bsd.md new file mode 100644 index 000000000..de89aeb84 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/107-free-bsd.md @@ -0,0 +1,10 @@ +# FreeBSD + +FreeBSD is a free and open-source Unix-like operating system including many features such as preemptive multitasking, memory protection, virtual memory, and multi-user facilities. + +{% resources %} + {% Official "https://www.freebsd.org/", "FreeBSD Website" %} + {% Official "https://docs.freebsd.org/en/", "Official FreeBSD Documentation" %} + {% Blog "https://docs.freebsd.org/en/books/handbook/", "FreeBSD Handbook" %} + {% Blog "https://www.freebsd.org/projects/newbies/", "FreeBSD Resources for Newbies " %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/108-open-bsd.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/108-open-bsd.md new file mode 100644 index 000000000..cff23c6f8 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/108-open-bsd.md @@ -0,0 +1,10 @@ +# OpenBSD + +OpenBSD is a free and open-source Unix-like operating system, focussed on portability, standardization, correctness, proactive security and integrated cryptography. The popular software application [OpenSSH](https://www.openssh.com/) is developed by from OpenBSD + +{% resources %} + {% Official "https://www.openbsd.org/", "OpenBSD Website" %} + {% Official "https://man.openbsd.org/search", "Official OpenBSD Documentation" %} + {% Blog "https://www.openbsdhandbook.com/", "OpenBSD Handbook" %} + {% Blog "https://www.openbsd.org/faq/faq4.html", "OpenBSD Installation Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/109-net-bsd.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/109-net-bsd.md new file mode 100644 index 000000000..1c5bd88eb --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/109-net-bsd.md @@ -0,0 +1,9 @@ +# NetBSD + +NetBSD is a free, fast, secure, and highly portable Unix-like Open Source operating system. It is available for a wide range of platforms, from large-scale servers and powerful desktop systems to handheld and embedded devices. + +{% resources %} + {% Official "https://netbsd.org/", "NetBSD Website" %} + {% Official "https://netbsd.org/docs/", "Official NetBSD Documentation" %} + {% Blog "https://netbsd.org/docs/guide/en/index.html", "NetBSD Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/100-operating-system/index.md b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/index.md new file mode 100644 index 000000000..43b1d8d77 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/100-operating-system/index.md @@ -0,0 +1,12 @@ +# Operating system +**An Operating system serves as a bridge between a computer's user and its hardware. An operating system's function is to offer a setting in which a user can conveniently and effectively run programmes.** +In simple terms we can say that and Operating System (OS) is an interface between a computer user and computer hardware. +An OS permits software programmes to communicate with a computer's hardware, The **kernel** is the name of Piece of software that houses the fundamental elements of **Operating System.** + +{% resources %} + {% Blog "https://www.javatpoint.com/os-tutorial", "All you need to know about OS." %} + {% Blog "https://www.tutorialspoint.com/operating_system/os_overview.htm", "Learn Operating Systems" %} + {% Blog "https://www.geeksforgeeks.org/introduction-of-operating-system-set-1/", "Operating Systems tutorials." %} + {% Blog "https://www.youtube.com/watch?v=pVzRTmdd9j0", "What are Operating Systems?" %} + {% Blog "https://www.youtube.com/watch?v=vBURTt97EkA&list=PLBlnK6fEyqRiVhbXDGLXDk_OQAeuVcp2O", "Operating Systems!" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md new file mode 100644 index 000000000..df3e71015 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md @@ -0,0 +1,10 @@ +# Screen + +Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DEC VT100 terminal and, in addition, several control functions from the ISO 6429 (ECMA 48, ANSI X3.64) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows. + +See `man screen` or `screen -h` for further information + +{% resources %} + {% Blog "https://kapeli.com/cheat_sheets/screen.docset/Contents/Resources/Documents/index", "Screen Cheat Sheet" %} + {% Blog "https://www.gnu.org/software/screen/manual/screen.html", "Screen Users Manual" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md new file mode 100644 index 000000000..5c1898a4d --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md @@ -0,0 +1,8 @@ +# Terminal multiplexers + +Terminal multiplexers are programs that allow us to [multiplex](https://en.wikipedia.org/wiki/Multiplexing) a terminal into several sub-processes or terminals inside a single terminal session, this means that we can have multiple open sessions using a single login session to a local or remote machine. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Terminal_multiplexer", "Terminal Multiplexer" %} + {% Blog "https://linuxcommand.org/lc3_adv_termmux.php", "Terminal Multiplexers" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md new file mode 100644 index 000000000..870852d5a --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md @@ -0,0 +1,12 @@ +# Tmux + +Tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. Tmux may be detached from a screen and continue running in the background, then later reattached. + +When tmux is started it creates a new session with a single window and displays it on screen. A status line at the bottom of the screen shows information on the current session and is used to enter interactive commands. + +See `man tmux` further information + +{% resources %} + {% Official "https://tmuxguide.readthedocs.io/en/latest/tmux/tmux.html", "Tmux Documentation" %} + {% Blog "https://tmuxcheatsheet.com/", "Tmux Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md new file mode 100644 index 000000000..cf6b05203 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md @@ -0,0 +1,12 @@ +# ps - process status + +The ps utility displays a header line, followed by lines containing information about all of your processes that have controlling terminals. + +See `man ps` further information + +{% resources %} + {% Official "https://man7.org/linux/man-pages/man1/ps.1.html", "ps Documentation" %} + {% Blog "https://www.sysadmin.md/ps-cheatsheet.html", "ps Cheat Sheet" %} + {% Blog "https://www.youtube.com/watch?v=wYwGNgsfN3I", "Linux Crash Course - The ps Command" %} +{% endresources %} + diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md new file mode 100644 index 000000000..1e9816302 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md @@ -0,0 +1,10 @@ +# top + +The top program periodically displays a sorted list of system processes. The default sorting key is pid, but other keys can be used instead. Various output options are available. + +See `man top` further information. + +{% resources %} + {% Official "https://man7.org/linux/man-pages/man1/top.1.html", "top Documentation" %} + {% Blog "https://gist.github.com/ericandrewlewis/4983670c508b2f6b181703df43438c37", "top Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md new file mode 100644 index 000000000..f87ba3a28 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md @@ -0,0 +1,8 @@ +# htop + +htop is a cross-platform ncurses-based process. It is similar to top, but allows you to scroll vertically and horizontally, and interact using a pointing device (mouse). You can observe all processes running on the system, along with their command line arguments, as well as view them in a tree format, select multiple processes and act on them all at once. + +{% resources %} + {% Official "https://www.man7.org/linux/man-pages/man1/htop.1.html", "htop Documentation" %} + {% Blog "https://www.maketecheasier.com/power-user-guide-htop/", "htop Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md new file mode 100644 index 000000000..194419433 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md @@ -0,0 +1,8 @@ +# atop + +The program atop is an interactive monitor to view the load on a Linux system. It shows the occupation of the most critical hardware resources (from a performance point of view) on system level, i.e. cpu, memory, disk and network. + +{% resources %} + {% Official "https://linux.die.net/man/1/atop", "atop Documentation" %} + {% Blog "https://www.digitalocean.com/community/tutorials/atop-command-in-linux", "atop Command Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md new file mode 100644 index 000000000..c1de46418 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md @@ -0,0 +1,19 @@ +# Bash scripting + +Bash is a command-line interface shell program used extensively in Linux and macOS. The name Bash is an acronym for "Bourne Again Shell," developed in 1989 as a successor to the Bourne Shell. + +"What's a shell?" you ask? A shell is a computer program that allows you to directly control a computer's operating system (OS) with a graphical user interface (GUI) or command-line interface (CLI). + +You actually use GUI shells all the time. For example, Windows 10 is based on the Windows shell that allows you to control your OS with a desktop, taskbar, and menus. + +With a CLI shell like Bash, you type commands into the program to directly control your computer's OS. Opening up the terminal on your Mac or command line in Linux will look similar to consoles and integrated development environments (IDEs) for other programming languages such as R, Ruby, or Python. You can type commands directly in the command line or run Bash scripts to perform longer and more complex tasks. + +{% resources %} + {% Blog "https://www.shellscript.sh/", "The Shell Scripting Tutorial" %} + {% Blog "https://linuxcommand.org/lc3_writing_shell_scripts.php", "Writing Shell Scripts" %} + {% Blog "https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/", "Shell Scripting for Beginners" %} + {% Blog "https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html", "A guide to Bash" %} + {% Blog "https://wiki.bash-hackers.org/", "The Bash Hackers Wiki" %} + {% Blog "https://rudrakshi.hashnode.dev/bash-shell-scripting-guide", "Bash Shell Scripting Guide" %} + {% Course "https://www.codecademy.com/learn/bash-scripting", "Codecademy - Learn Bash Scripting" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-editors.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-editors.md new file mode 100644 index 000000000..ba0d0e1e1 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-editors.md @@ -0,0 +1,21 @@ +# Editors + +Editors are tools that allow you to create or edit files on your file system. + +## Vim + +Vim is a highly configurable text editor built to make creating and changing any kind of text very efficient. It is included as "vi" with most UNIX systems and with Apple OS X. + +Vim ships with `vimtutor` that is a tutor designed to describe enough of the Vim commands that you will be able to easily use Vim as an all-purpose editor. + +{% resources %} + {% Official "https://www.vim.org", "Vim" %} + {% Blog "https://vimhelp.org/", "Vim help files" %} + {% Blog "https://vim.fandom.com/wiki/Vim_Tips_Wiki", "Vim Tips Wiki" %} + {% Blog "https://vim-adventures.com/", "Vim Adventures" %} + {% Official "https://www.nano-editor.org/", "GNU Nano" %} + {% Official "https://www.nano-editor.org/dist/latest/nano.html", "GNU Nano Manual" %} + {% Official "https://learn.microsoft.com/en-us/powershell/", "PowerShell Documentation" %} + {% Official "https://www.gnu.org/software/emacs/", "GNU Emacs" %} + {% Official "https://www.gnu.org/software/emacs/documentation.html", "GNU Emacs Documentation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md new file mode 100644 index 000000000..7395c9449 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md @@ -0,0 +1,10 @@ +# lsof + +Lsof lists on its standard output file information about files opened by processes. + +See `man lsof` or `lsof --help` for further information. + +{% resources %} + {% Blog "https://neverendingsecurity.wordpress.com/2015/04/13/lsof-commands-cheatsheet/", "lsof Cheat Sheet" %} + {% Official "https://man7.org/linux/man-pages/man8/lsof.8.html", "lsof Documentation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md new file mode 100644 index 000000000..b092c585e --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md @@ -0,0 +1,23 @@ +# Compiling Apps + +# gcc + +The GNU Compiler Collection (GCC) is a compiler system produced by the GNU Project supporting various programming languages also known as GCC. GCC is a key component of the GNU tool chain and the standard compiler for most Unix-like operating systems. Compiler Collection is a set of compilers and development tools available for Linux and an array of other operating systems. It includes support primarily for C and C++. It provides all of the infrastructure for building software in those languages from source code to assembly. + +"What is GCC used for?" GCC is a toolchain that compiles code, links it with any library dependencies, converts that code to assembly, and then prepares executable files.It is responsible for the conversion of the “high level” source code in the respective language and ensuring that it is semantically valid, performing well formed optimizations, and converting it to assembly code (which is then handed off to the assembler). + +{% resources %} + {% Blog "https://courses.cs.washington.edu/courses/cse451/99wi/Section/gccintro.html", "Intro to GCC" %} + {% Blog "https://www.javatpoint.com/gcc-linux", "GCC Linux" %} + {% Blog "https://www.geeksforgeeks.org/gcc-command-in-linux-with-examples/", "GCC Commands" %} + {% Blog "https://makefiletutorial.com", "Makefile Tutorial" %} + {% Blog "https://www.gnu.org/software/make/manual/", "Documentation for make" %} + {% Blog "https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html", "Using Make and writing Makefiles" %} + {% Blog "https://www.scala-sbt.org/1.x/docs/", "Sbt Documentation" %} + {% Blog "https://www.scala-sbt.org/1.x/docs/sbt-by-example.html", "Sbt By Example" %} + {% Blog "https://www.tutorialspoint.com/gradle/index.htm", "Gradle Tutorial" %} + {% Blog "https://tomgregory.com/gradle-tutorial-for-complete-beginners/", "Gradle for absolute beginners" %} + {% Blog "https://gradle.org/guides/", "Gradle Guides" %} +{% endresources %} + + diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md new file mode 100644 index 000000000..ebb4a229c --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md @@ -0,0 +1,8 @@ +# Nmon + +Nmon is a fully interactive performance monitoring command-line utility tool for Linux. It is a benchmark tool that displays performance about the cpu, memory, network, disks, file system, nfs, top processes, resources, and power micro-partition. + +{% resources %} + {% Official "https://www.ibm.com/docs/en/aix/7.2?topic=n-nmon-command", "nmon Documentation" %} + {% Blog "https://www.geeksforgeeks.org/linux-nmon/", "nmon Command Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md new file mode 100644 index 000000000..018045038 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md @@ -0,0 +1,8 @@ +# Iostat + +The iostat command in Linux is used for monitoring system input/output statistics for devices and partitions. It monitors system input/output by observing the time the devices are active in relation to their average transfer rates. The iostat produce reports may be used to change the system configuration to raised balance the input/output between the physical disks. + +{% resources %} + {% Official "https://man7.org/linux/man-pages/man1/iostat.1.html", "iostat Documentation" %} + {% Blog "https://www.geeksforgeeks.org/iostat-command-in-linux-with-examples/", "iostat Command Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md new file mode 100644 index 000000000..b78ab9ec6 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md @@ -0,0 +1,10 @@ +# Sar + +Short for **S**ystem **A**ctivity **R**eport, it is a command line tool for Unix and Unix-like operating systems that shows a report of different information about the usage and activity of resources in the operating system. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sar-command-linux-monitor-system-performance/", "SAR command in Linux to monitor system performance" %} + {% Blog "https://man7.org/linux/man-pages/man1/sar.1.html", "SAR Man Page" %} + {% Blog "https://linux.die.net/man/1/sar", "SAR Man Page 2" %} + {% Blog "https://linuxhint.com/sar_linux_tutorial/", "Sar tutorial for beginners" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md new file mode 100644 index 000000000..7161221d9 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md @@ -0,0 +1,10 @@ +# Vmstat + +Short for **V**irtual **m**emory **stat**istic reporter, it is a command line tool for Unix and Unix-like operating systems that reports various information about the operating system such as memory, paging, processes, I/O, CPU and disk usage. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/vmstat-command-in-linux-with-examples/", "vmstat command in Linux with Examples" %} + {% Blog "https://www.redhat.com/sysadmin/linux-commands-vmstat", "Linux commands: exploring virtual memory with vmstat" %} + {% Blog "https://man7.org/linux/man-pages/man8/vmstat.8.html", "VMstat Man Page" %} + {% Blog "https://phoenixnap.com/kb/vmstat-command", "vmstat tutorial" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md new file mode 100644 index 000000000..9780ebed7 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md @@ -0,0 +1,10 @@ +# Traceroute + +`traceroute` command is a command in Linux that prints the route a network packet takes from its source (e.g. your computer) to the destination host (e.g., roadmap.sh). It is quite valuable in investigating slow network connections as it can help us spot the slow leg of the network packet journey through the internet. + +It has the following syntax: `$ traceroute [OPTIONS] DESTINATION` e.g. `$ traceroute roadmap.sh` + +{% resources %} + {% Blog "https://linuxhint.com/run_traceroute_linux/", "How to Run Traceroute in Linux" %} + {% Blog "https://www.geeksforgeeks.org/traceroute-command-in-linux-with-examples/", "Traceroute command in Linux with examples" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md new file mode 100644 index 000000000..8aacd4819 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md @@ -0,0 +1,11 @@ +# mtr + +`mtr` combines the functionality of the traceroute and ping programs in a single network diagnostic tool. + +As `mtr` starts, it investigates the network connection between the host `mtr` runs on and `HOSTNAME` by sending packets with purposely low TTLs. It continues sending packets with low TTL, noting the response time of the intervening routers. This allows `mtr` to print the internet route's response percentage and response times to HOSTNAME. A sudden packet loss or response time increase often indicates a bad (or simply overloaded) link. + +{% resources %} + {% Blog "https://www.javatpoint.com/linux-mtr", "Javatpoint: Linux mtr Command" %} + {% Blog "https://www.tutorialspoint.com/unix_commands/mtr.htm", "mtr Linux command" %} + {% Blog "https://www.devopsroles.com/how-to-traceroute-use-mtr-command-in-linux/", "How to traceroute use mtr command in Linux" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md new file mode 100644 index 000000000..5c4cd8225 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md @@ -0,0 +1,10 @@ +# ping + +`ping` (**P**acket **In**ternet **G**roper) command is used to check the network connectivity between host and server/host. This command takes as input the IP address or the URL and sends a data packet to the specified address with the message “PING” and get a response from the server/host this time is recorded which is called latency. + +It has the following syntax: `$ ping [OPTIONS] DESTINATION` e.g. `$ ping roadmap.sh` + +{% resources %} + {% Blog "https://linuxize.com/post/linux-ping-command/", "What is ping command?" %} + {% Blog "https://www.geeksforgeeks.org/ping-command-in-linux-with-examples/", "ping command with examples" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md new file mode 100644 index 000000000..2993b4192 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md @@ -0,0 +1,8 @@ +# NMAP + +NMAP stands for Network Mapper and is an open-source tool used to explore and audit the network's security, such as checking firewalls and scanning ports. + +{% resources %} + {% Official "https://nmap.org/book/man.html", "NMAP Official Manual Book" %} + {% Blog "https://www.freecodecamp.org/news/what-is-nmap-and-how-to-use-it-a-tutorial-for-the-greatest-scanning-tool-of-all-time/", "What is Nmap and How to Use it" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md new file mode 100644 index 000000000..9269181b3 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md @@ -0,0 +1,11 @@ +# netstat + +Netstat is a command line utility to display all the network connections on a system. It displays all the tcp, udp and unix socket connections. Apart from connected sockets it also displays listening sockets that are waiting for incoming connections. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/unix_commands/netstat.htm", "netstat command in Linux with Examples" %} + {% Blog "http://www.c-jump.com/CIS24/Slides/Networking/html_utils/netstat.html", "Netstat Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=bxFwpm4IobU", "Netstat Commands - Network Administration Tutorial" %} + {% Blog "https://www.youtube.com/watch?v=zGNcvBaN5wE", "Linux Command Line Tutorial For Beginners - netstat command" %} +{% endresources %} + diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/115-airmon.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/115-airmon.md new file mode 100644 index 000000000..ef72bb317 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/115-airmon.md @@ -0,0 +1 @@ +# Airmon \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md new file mode 100644 index 000000000..4c53ffd55 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md @@ -0,0 +1,10 @@ +# Tcpdump + +`tcpdump` is a command line tool used for analysing network traffic passing through your system. It can be used to capture and filter packets and display them in a human-readable format. The captured information can be analysed at a later date as well. + +{% resources %} + {% Official "https://www.tcpdump.org/manpages/tcpdump.1.html", "tcpdump Documentation" %} + {% Blog "https://opensource.com/article/18/10/introduction-tcpdump", "Basic Introduction to Tcpdump" %} + {% Blog "https://danielmiessler.com/study/tcpdump/", "50 ways to isolate traffic with Tcpdump" %} + {% Blog "https://www.youtube.com/watch?v=7bsQP9sKHrs", "Interpreting Tcpdump output and data" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/117-airodump.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/117-airodump.md new file mode 100644 index 000000000..94be21626 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/117-airodump.md @@ -0,0 +1,10 @@ +# Airodump + +It's a packet sniffer used for packet captures such as WEP IVs (Initialization Vector) and WAP Handshake. Even if you have a GPS receiver connected to the computer, you can log the coordinates of the found access points. + +{% resources %} + {% Official "https://www.aircrack-ng.org/", "Official Website" %} + {% Official "https://www.aircrack-ng.org/doku.php", "Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=ftM-Fra90VM", " Airodump ng Tool and Capture WPA WPA2 Handshake" %} + {% Blog "https://www.youtube.com/watch?v=O6jYy421tGw", " Airodump ng Tool and Capture WPA WPA2 Handshake (by MBP Security on YouTube)" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md new file mode 100644 index 000000000..4965ff3ff --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md @@ -0,0 +1,8 @@ +# Iptables + +IPtables is a command-line firewall utility that uses policy chains to allow or block traffic that will be enforced by the linux kernel’s netfilter framework. Iptables packet filtering mechanism is organized into three different kinds of structures: tables, chains and targets. + +{% resources %} + {% Blog "https://www.hostinger.in/tutorials/iptables-tutorial", "Iptables tutorial" %} + {% Blog "https://erravindrapawadia.medium.com/iptables-tutorial-beginners-to-advanced-guide-to-linux-firewall-839e10501759", "Beginners to Advanced Guide Iptables" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md new file mode 100644 index 000000000..ccdbf1af6 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md @@ -0,0 +1,13 @@ +# dig + +`dig` command stands for **D**omain **I**nformation **G**roper. It is used for retrieving information about DNS name servers. It is mostly used by network administrators for verifying and troubleshooting DNS problems and to perform DNS lookups. It replaces older tools such as `nslookup` and the `host`. + +It has the following syntax: `$ dig [server] [name] [type]` e.g. `$ dig roadmap.sh` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/dig-command-in-linux-with-examples/", "What is dig command?" %} + {% Blog "https://linuxize.com/post/how-to-use-dig-command-to-query-dns-in-linux/", "More on dig" %} + {% Blog "https://www.geeksforgeeks.org/host-command-in-linux-with-examples/", "What is host command?" %} + {% Blog "https://www.geeksforgeeks.org/nslookup-command-in-linux-with-examples/", "What is nslookup command?" %} + {% Blog "https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/", "What is DNS?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md new file mode 100644 index 000000000..6e5ceffba --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md @@ -0,0 +1,13 @@ +# awk + +`awk` is a general-purpose scripting language used for manipulating data or text and generating reports in the Linux world. It is mostly used for pattern scanning and processing. It searches one or more files to see if they contain lines that match the specified patterns and then performs the associated actions. + +It has the below syntax: + +`awk options 'selection_criteria {action}' input-file > output-file` e.g. `$ awk '{print}' file.txt` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/awk-command-unixlinux-examples/", "What is AWK? How to use it?" %} + {% Blog "https://linuxize.com/post/awk-command/", "How AWK works?" %} + {% Blog "https://www.youtube.com/watch?v=oPEnvuj9QrI", "Linux Crash Course - awk" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md new file mode 100644 index 000000000..1c2900c39 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md @@ -0,0 +1,14 @@ +# sed + +`sed`(**S**tream **Ed**itor) command in UNIX can perform lots of functions on file like searching, finding and replacing, insertion or deletion. By using SED you can edit files even without opening them in editors like [VI Editor](https://www.redhat.com/sysadmin/introduction-vi-editor). + +It has the following syntax: + +`$ sed [options].. [script] [input-file]` e.g. `$ sed 's/search-regex/replacement-txt/g' file.txt` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sed-command-in-linux-unix-with-examples/", "What is SED? with examples" %} + {% Blog "https://www.gnu.org/software/sed/manual/sed.html", "Detailed Manual" %} + {% Blog "https://www.youtube.com/watch?v=nXLnx8ncZyE&t=218s", "Linux Crash Course - The sed Command" %} +{% endresources %} + diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md new file mode 100644 index 000000000..4494ecedb --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md @@ -0,0 +1,13 @@ +# grep + +The `grep` command (**g**lobal search for **r**egular **e**xpression and **p**rint out) searches file(s) for a particular pattern of characters, and displays all lines that contain that pattern. It can be used with other commands like `ps` making it more useful. + +It has the following syntax: + +`$ grep [options] pattern [files]` e.g. `$ grep "search-regex" file-1.txt` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/grep-command-in-unixlinux/", "What is Grep? with examples" %} + {% Blog "https://www.gnu.org/software/grep/manual/grep.html", "Detailed Manual" %} + {% Blog "https://www.youtube.com/watch?v=Tc_jntovCM0", "Linux Crash Course - The grep Command" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md new file mode 100644 index 000000000..c9fbcf4f0 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md @@ -0,0 +1,14 @@ +# sort + +`sort` command is used to sort the contents of a file in a particular order. By default, it sorts a file assuming the contents are in ASCII. But it also can also be used to sort numerically by using appropriate options. + +It has the following syntax + +`$ sort [options].. input-file` e.g. `$ sort file.txt` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sort-command-linuxunix-examples/", "Sort command with examples" %} + {% Blog "https://en.wikipedia.org/wiki/Sort_(Unix)", "Options" %} + {% Blog "https://www.youtube.com/watch?v=fEx5rnbDKO4", "Linux Tutorials|sort command GeeksforGeeks" %} +{% endresources %} + diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md new file mode 100644 index 000000000..16b5d9428 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md @@ -0,0 +1,10 @@ +# cut + +The cut utility cuts out selected portions of each line (as specified by list) from each file and writes them to the standard output. + +See `man cut` for further information. + +{% resources %} + {% Official "https://man7.org/linux/man-pages/man1/cut.1.html", "cut Documentation" %} + {% Blog "https://bencane.com/2012/10/22/cheat-sheet-cutting-text-with-cut/", "cut Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md new file mode 100644 index 000000000..f2b970920 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md @@ -0,0 +1,10 @@ +# uniq + +The uniq utility reads the specified input_file comparing adjacent lines, and writes a copy of each unique input line to the output_file. + +See `man uniq` for further information. + +{% resources %} + {% Official "https://man7.org/linux/man-pages/man1/uniq.1.html", "uniq Documentation" %} + {% Blog "https://www.geeksforgeeks.org/uniq-command-in-linux-with-examples/", "uniq Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md new file mode 100644 index 000000000..0e63b441c --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md @@ -0,0 +1,18 @@ +# cat + +`cat` (concatenate) command is very frequently used in Linux. It reads data from the file and gives its content as output. It helps us to create, view, and concatenate files. + + +It has the following syntax: + +* View : `$ cat [option] [input-file]` +* Create : `$ cat [content] > [new-file]` +* Append : `$ cat [append_content] >> [existing-file]` + +e.g. `$ cat file.txt` + +{% resources %} + {% Blog "https://www.tecmint.com/13-basic-cat-command-examples-in-linux/", "Cat Command with examples" %} + {% Blog "https://en.wikipedia.org/wiki/Cat_(Unix)", "Options" %} + {% Blog "https://www.youtube.com/watch?v=exj5WMUJ11g", "Linux Tutorials|cat command|GeeksforGeeks" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md new file mode 100644 index 000000000..f0a9a2694 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md @@ -0,0 +1,10 @@ +# echo + +`echo` is a built-in command in Linux used to display lines of text/string that are passed as an argument. It is mostly used in shell scripts and batch files to output status text or `ENV` variables to the screen or a file. + +It has the following syntax: `$ echo [options] [string]` e.g. `$ echo "Hello World!"` + +{% resources %} + {% Blog "https://www.tecmint.com/echo-command-in-linux/", "Echo command with Examples" %} + {% Blog "https://www.youtube.com/watch?v=S_ySzMHxMjw", "Linux Crash Course - The echo Command" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md new file mode 100644 index 000000000..ceb825724 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md @@ -0,0 +1,9 @@ +# fmt + +`fmt` command is for formatting and optimizing contents in text files. It will be really usefull when it comes to beautify large text files by setting uniform column width and spaces. + +It has the following syntax: `$ fmt [-width] [option] [file]` e.g. `$ fmt file.txt` + +{% resources %} + {% Blog "https://www.devopsroles.com/fmt-command-in-linux-with-example/", "Fmt command with Examples" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md new file mode 100644 index 000000000..34590d067 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md @@ -0,0 +1,10 @@ +# tr + +The tr utility copies the standard input to the standard output with substitution or deletion of selected characters. + +See `man tr` for further information. + +{% resources %} + {% Blog "https://linuxcommand.org/lc3_man_pages/tr1.html", "tr Documentation" %} + {% Blog "https://linuxopsys.com/topics/tr-command-in-linux", "tr Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md new file mode 100644 index 000000000..e87b4c157 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md @@ -0,0 +1,10 @@ +# nl + +The nl utility reads lines from the named file or the standard input if the file argument is omitted, applies a configurable line numbering filter operation and writes the result to the standard output. + +See `man nl` for further information. + +{% resources %} + {% Official "https://man7.org/linux/man-pages/man1/nl.1.html", "nl Documentation" %} + {% Blog "https://www.geeksforgeeks.org/nl-command-in-linux-with-examples/", "nl Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md new file mode 100644 index 000000000..08869d9e9 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md @@ -0,0 +1,10 @@ +# wc + +The wc utility displays the number of lines, words, and bytes contained in each input file, or standard input (if no file is specified) to the standard output. + +See `man wc` for further information. + +{% resources %} + {% Official "https://linux.die.net/man/1/wc", "wc Documentation" %} + {% Blog "https://onecompiler.com/cheatsheets/wc", "wc Cheat Sheet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/132-egrep.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/132-egrep.md new file mode 100644 index 000000000..1f85658dd --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/132-egrep.md @@ -0,0 +1,13 @@ +# egrep + +`egrep` (**E**xtended **Grep**) is a pattern searching command which belongs to the family of grep functions. It treats the pattern as an extended **regular expression** and prints out the lines that match the pattern. +It works the same way as `$ grep -E` command + +It has the following syntax: + +`$ egrep [options] pattern [files]` e.g. `$ egrep "search-regex" *.txt` + +{% resources %} + {% Blog "https://linuxhint.com/linux_egrep_command_examples/", "Egrep command with examples" %} + {% Blog "https://www.thegeekdiary.com/fgrep-command-examples-in-linux", "options" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/133-fgrep.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/133-fgrep.md new file mode 100644 index 000000000..2d8d5ba69 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/133-fgrep.md @@ -0,0 +1,14 @@ +# fgrep + +`fgrep` (**F**ixed **Grep**) command is used for searching fixed-character strings in a file. +It treats meta-characters or regular expressions in the search field as strings. For searching any **direct string** or files having meta-characters, this is the version of grep which should be selected. It works the same way as `$ grep -F` command. + +It has the following syntax: + +`$ fgrep [options] [string] [files]` e.g. `$ fgrep "search-string" file.txt` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/fgrep-command-in-linux-with-examples/", "Fgrep command with examples" %} + {% Blog "https://www.thegeekdiary.com/fgrep-command-examples-in-linux/", "options" %} + {% Blog "https://www.tecmint.com/difference-between-grep-egrep-and-fgrep-in-linux/", "Grep vs Egrep vs Fgrep" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md new file mode 100644 index 000000000..b0492f278 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md @@ -0,0 +1,8 @@ +# strace + +`strac` is a useful diagnsotic, debugging tool for unix based operating systems. It traces the system calls and signals a process uses during its lifetime. And usually returns the name of the each system calls , its arguments and what it returned. + +{% resources %} + {% Official "https://strace.io/", "Strace Official Website" %} + {% Official "https://man7.org/linux/man-pages/man1/strace.1.html", "Strace — Linux manual page" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md new file mode 100644 index 000000000..2ab1680ee --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md @@ -0,0 +1,8 @@ +# DTrace + +DTrace is a comprehensive dynamic tracing framework ported from Solaris. DTrace provides a powerful infrastructure that permits administrators, developers, and service personnel to concisely answer arbitrary questions about the behavior of the operating system and user programs. + +{% resources %} + {% Blog "https://man7.org/linux/man-pages/man1/dtrace.1.html", "df manual" %} + {% Blog "https://en.wikipedia.org/wiki/DTrace", "Wikipedia - DTrace" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md new file mode 100644 index 000000000..33fdef223 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md @@ -0,0 +1 @@ +# Systemtap \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md new file mode 100644 index 000000000..42b4ed1c3 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md @@ -0,0 +1,9 @@ +# Uname + +Uname is a short form of Unix name and it helps to print the system information for both hardware and software in the current running system. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/unix_commands/uname.htm", "Uname Command Tutorial" %} + {% Blog "https://www.howtoforge.com/linux-uname-command/", "Uname Tutorial For Beginners" %} + {% Blog "https://linuxize.com/post/uname-command-in-linux/", "Uname Command In Linux" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md new file mode 100644 index 000000000..7be91a0c9 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md @@ -0,0 +1,9 @@ +# df + +`df` is a standard Unix command used to display the amount of available disk space for file systems on which the invoking user has appropriate read access. df is typically implemented using the statfs or statvfs system calls. + +{% resources %} + {% Blog "https://man7.org/linux/man-pages/man1/df.1.html", "df manual" %} + {% Blog "https://www.redhat.com/sysadmin/Linux-df-command", "Redhat - Check your disk space use with the Linux df command" %} + {% Blog "https://www.geeksforgeeks.org/df-command-linux-examples/", "df command with examples" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md new file mode 100644 index 000000000..fdf6a981a --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md @@ -0,0 +1,9 @@ +# history + +`history` command is used to view the **previously executed command**. Every command executed is treated as the event and is associated with an event number using which they can be recalled and changed if required. These commands are saved in a history file. + +It has the below syntax: `$ history` + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/history-command-in-linux-with-examples/", "What is history command? How to recall previous commands?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md new file mode 100644 index 000000000..37e5da47f --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md @@ -0,0 +1,9 @@ +# Du + +The `du` utility, short for disk usage, displays the file system block usage for each file argument and for each directory in the file hierarchy rooted in each directory argument. If no file is specified, the block usage of the hierarchy rooted in the current directory is displayed. + +{% resources %} + {% Blog "https://man7.org/linux/man-pages/man1/du.1.html", "du manual" %} + {% Blog "https://www.redhat.com/sysadmin/du-command-options", "Redhat - du and the options you should be using" %} + {% Blog "https://linuxhint.com/linux-du-command-examples/", "Du command with examples" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md new file mode 100644 index 000000000..bef413334 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md @@ -0,0 +1,10 @@ +# SCP + +`SCP` is an acronym for Secure Copy Protocol.It is a command line utility that allows the user to securely copy files and directories between two locations usually between unix or linux systems.The protocol ensures the transmission of files is encrypted to prevent anyone with suspicious intentions from getting sensitive information.`SCP` uses encryption over an `SSH` (Secure Shell) connection, this ensures that the data being transferred is protected from suspicious attacks. + + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/scp-linux-command-example-how-to-ssh-file-transfer-from-remote-to-local/", "SCP Linux Command" %} + {% Blog "https://www.tecmint.com/scp-commands-examples/", "10 SCP command examples" %} + {% Blog "https://phoenixnap.com/kb/linux-scp-command", "SCP command explained" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md new file mode 100644 index 000000000..1c33330bc --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md @@ -0,0 +1,9 @@ +# UFW + +UFW, or *uncomplicated firewall*, is command-line based utility for managing firewall rules in Arch Linux, Debian and Ubuntu. It's aim is to make firewall configuration as simple as possible. It is a frontend for the `iptables` firewalling tool. + +{% resources %} + {% Official "https://manpages.ubuntu.com/manpages/trusty/man8/ufw.8.html", "ufw Documentation" %} + {% Blog "https://www.linux.com/training-tutorials/introduction-uncomplicated-firewall-ufw/", "Basic Introduction to UFW" %} + {% Blog "https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands", "UFW Essentials" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/index.md b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/index.md new file mode 100644 index 000000000..de44d8143 --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/index.md @@ -0,0 +1,7 @@ +# Live in terminal + +A terminal is simply a text-based interface to the computer, it is use to interact with your computer system via CLI (command line interface) + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Command-line_interface", "What is CLI?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/102-managing-servers/index.md b/src/roadmaps/devops/content/102-managing-servers/index.md new file mode 100644 index 000000000..66d9e483c --- /dev/null +++ b/src/roadmaps/devops/content/102-managing-servers/index.md @@ -0,0 +1,7 @@ +# Managing Servers + +Server management includes all of the monitoring and maintenance required for servers to operate reliably and at optimal performance levels. Server management also involves the management of hardware, software, security, and backups all in service of keeping the IT environment operational and efficient. The primary goals of an effective server management strategy are to: + +- Minimize server slowdowns and downtime while maximizing reliability. +- Build secure server environments. +- Scale servers and related operations to meet the needs of the organization over time. diff --git a/src/roadmaps/devops/content/103-networking-protocols/100-osi-model.md b/src/roadmaps/devops/content/103-networking-protocols/100-osi-model.md new file mode 100644 index 000000000..beb02b05d --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/100-osi-model.md @@ -0,0 +1,10 @@ +# OSI Model + +Open Systems Interconnection (OSI) model is a **conceptual** model consists of 7 layers, that was proposed to standardize the communication between devices over the network. It was the first standard model for network communications, adopted by all major computer and telecommunication companies in the early 1980s. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ddos/glossary/open-systems-interconnection-model-osi/", "What is OSI Model?" %} + {% Blog "https://www.youtube.com/watch?v=dV8mjZd1OtU", "OSI Model" %} + {% Blog "https://www.geeksforgeeks.org/tcp-ip-model/", "What is TCP/IP Model?" %} + {% Blog "https://www.youtube.com/watch?v=F5rni9fr1yE", "OSI vs TCP/IP Model" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/103-networking-protocols/101-dns.md b/src/roadmaps/devops/content/103-networking-protocols/101-dns.md new file mode 100644 index 000000000..c2410c3e0 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/101-dns.md @@ -0,0 +1,10 @@ +# DNS + +DNS (**D**omain **N**ame **S**ystem) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/", "What is DNS?" %} + {% Blog "https://howdns.works/", "HOw DNS works (comic)" %} + {% Blog "https://www.youtube.com/watch?v=Wj0od2ag5sk", "DNS and How does it Work?" %} + {% Blog "https://www.youtube.com/watch?v=7lxgpKh_fRY", "DNS Records" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/102-http.md b/src/roadmaps/devops/content/103-networking-protocols/102-http.md new file mode 100644 index 000000000..eac3d368e --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/102-http.md @@ -0,0 +1,11 @@ +# HTTP + +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. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/", "What is HTTP?" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview", "An overview of HTTP" %} + {% Blog "https://kamranahmed.info/blog/2016/08/13/http-in-depth", "Journey to HTTP/2" %} + {% Blog "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", "HTTP/3 From A To Z: Core Concepts" %} + {% Blog "https://www.youtube.com/watch?v=iYM2zFP3Zn0", "HTTP Crash Course & Exploration" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/100-white-grey-listing.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/100-white-grey-listing.md new file mode 100644 index 000000000..7dddb88f4 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/100-white-grey-listing.md @@ -0,0 +1,10 @@ +# White Listing vs Grey Listing + +White listing is a process of adding an email to an approved sender list, so emails from that sender are never moved to the spam folder. This tells an email server to move messages to the inbox directly. + +`Greylisting` is a method of protecting e-mail users against spam. A mail transfer agent (MTA) using greylisting will "temporarily reject" any email from a sender it does not recognize. If the mail is legitimate, the originating server will try again after a delay, and the email will be accepted if sufficient time has elapsed. + +{% resources %} + {% Blog "https://www.cblohm.com/blog/education-marketing-trends/what-is-email-whitelisting/", "Basic Introduction to whitelisting" %} + {% Blog "https://en.wikipedia.org/wiki/Greylisting_(email)", "Detailed Introduction to greylisting" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/101-smtp.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/101-smtp.md new file mode 100644 index 000000000..66e710238 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/101-smtp.md @@ -0,0 +1,9 @@ +# SMTP + +Email is emerging as one of the most valuable services on the internet today. Most internet systems use SMTP as a method to transfer mail from one user to another. SMTP is a push protocol and is used to send the mail whereas POP (post office protocol) or IMAP (internet message access protocol) are used to retrieve those emails at the receiver’s side. + +SMTP is an application layer protocol. The client who wants to send the mail opens a TCP connection to the SMTP server and then sends the mail across the connection. The SMTP server is an always-on listening mode. As soon as it listens for a TCP connection from any client, the SMTP process initiates a connection through port 25. After successfully establishing a TCP connection the client process sends the mail instantly. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/simple-mail-transfer-protocol-smtp/", "What is Simple Mail Transfer Protocol (SMTP)?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/102-imaps.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/102-imaps.md new file mode 100644 index 000000000..9b688edac --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/102-imaps.md @@ -0,0 +1,9 @@ +# Imaps +IMAP (port 143) or IMAPS (port 993) allows you to access your email wherever you are, from any device. When you read an email message using IMAP, you aren't actually downloading or storing it on your computer; instead, you're reading it from the email service. As a result, you can check your email from different devices, anywhere in the world: your phone, a computer, a friend's computer. + +IMAP only downloads a message when you click on it, and attachments aren't automatically downloaded. This way you're able to check your messages a lot more quickly than POP. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol", "Wikipedia: Internet Message Access Protocol" %} + {% Blog "https://www.youtube.com/watch?v=cfXabGOA2s8", "What is IMAP and How To Use It | Email Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/103-pop3s.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/103-pop3s.md new file mode 100644 index 000000000..4b095e2bc --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/103-pop3s.md @@ -0,0 +1,10 @@ +# Pop3s +POP3 (port 110) or POP3s (port 995) stands for The Post Office Protocol. It's an Internet standard protocol used by local email software clients to retrieve emails from a remote mail server over a TCP/IP connection. + +Email servers hosted by Internet service providers also use POP3 to receive and hold emails intended for their subscribers. Periodically, these subscribers will use email client software to check their mailbox on the remote server and download any emails addressed to them. + +Once the email client has downloaded the emails, they are usually deleted from the server, although some email clients allow users to specify that mails be copied or saved on the server for a period of time. + +{% resources %} + {% Blog "https://www.techtarget.com/whatis/definition/POP3-Post-Office-Protocol-3", "What is POP3?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/104-dmarc.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/104-dmarc.md new file mode 100644 index 000000000..6aaba807c --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/104-dmarc.md @@ -0,0 +1,7 @@ +# DMARC + +DMARC stands for Domain-based Message Authentication, Reporting, and Conformance, is an authentication method on the email that is built to protect domain email from invalid email addresses or commonly known as email spoofing, email attacks, phishing, scams, and other threat activities. + +{% resources %} + {% Blog "https://dmarc.org/", "DMARC Official Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/105-spf.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/105-spf.md new file mode 100644 index 000000000..4eb669a65 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/105-spf.md @@ -0,0 +1,8 @@ +# SPF + +Sender Policy Framework (SPF) is used to authenticate the sender of an email. With an SPF record in place, Internet Service Providers can verify that a mail server is authorized to send email for a specific domain. An SPF record is a DNS TXT record containing a list of the IP addresses that are allowed to send email on behalf of your domain. + +{% resources %} + {% Official "https://www.cloudflare.com/learning/dns/dns-records/dns-spf-record/", "What is a DNS SPF record?" %} + {% Blog "https://www.youtube.com/watch?v=WFPYrAr1boU", "SPF Overview" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/106-domain-keys.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/106-domain-keys.md new file mode 100644 index 000000000..69a5aab7b --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/106-domain-keys.md @@ -0,0 +1,7 @@ +# Domain Keys + +DomainKeys Identified Mail (DKIM) is an email authentication method designed to detect forged sender addresses in email (email spoofing), a technique often used in phishing and email spam. + +{% resources %} + {% Blog "https://www.brainkart.com/article/DomainKeys-Identified-Mail_8493/", "DomainKeys Identified Mail" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-emails/index.md b/src/roadmaps/devops/content/103-networking-protocols/103-emails/index.md new file mode 100644 index 000000000..196c070ff --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-emails/index.md @@ -0,0 +1,7 @@ +# Emails + +Electronic mail, commonly shortened to “email,” is a communication method that uses electronic devices to deliver messages across computer networks. "Email" refers to both the delivery system and individual messages that are sent and received. + +{% resources %} + {% Blog "https://www.cloudflare.com/learning/email-security/what-is-email/", "What is an email?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/103-https.md b/src/roadmaps/devops/content/103-networking-protocols/103-https.md new file mode 100644 index 000000000..2c8852c7c --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/103-https.md @@ -0,0 +1,12 @@ +# HTTPS + +HTTPS (**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. + +`HTTPS = HTTP + SSL/TLS` + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/", "What is HTTPS?" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https", "Why HTTPS Matters" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https", "Enabling HTTPS on Your Servers" %} + {% Blog "https://howhttps.works/", "How HTTPS works (comic)" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/104-ftp.md b/src/roadmaps/devops/content/103-networking-protocols/104-ftp.md new file mode 100644 index 000000000..25df67452 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/104-ftp.md @@ -0,0 +1,8 @@ +# FTP + +File Transfer Protocol(FTP) is `TCP/IP` based application layer communication protocol that helps transferring files between local and remote file systems over the network. To transfer a file, 2 TCP connections(control connection and data connection) are used in parallel. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/file-transfer-protocol-ftp-in-application-layer/", "What is FTP?" %} + {% Blog "https://www.fortinet.com/resources/cyberglossary/file-transfer-protocol-ftp-meaning", "FTP vs SFTP vs FTPS" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/103-networking-protocols/105-ssl-tls.md b/src/roadmaps/devops/content/103-networking-protocols/105-ssl-tls.md new file mode 100644 index 000000000..9f320c6c2 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/105-ssl-tls.md @@ -0,0 +1,10 @@ +# SSL/TLS + +Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols used to provide security in internet communications. These protocols encrypt the data that is transmitted over the web, so anyone who tries to intercept packets will not be able to interpret the data. One difference that is important to know is that SSL is now deprecated due to security flaws, and most modern web browsers no longer support it. But TLS is still secure and widely supported, so preferably use TLS. + +{% resources %} + {% Blog "https://www.cloudflare.com/learning/ssl/what-is-ssl/", "Cloudflare - What is SSL?" %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ssl/transport-layer-security-tls/", "Cloudflare - What is TLS?" %} + {% Blog "https://en.wikipedia.org/wiki/Transport_Layer_Security", "Wikipedia - SSL/TLS" %} + {% Blog "https://www.youtube.com/watch?v=k3rFFLmQCuY", "SSH vs SSL vs TLS" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/103-networking-protocols/106-ssh.md b/src/roadmaps/devops/content/103-networking-protocols/106-ssh.md new file mode 100644 index 000000000..62dd36af8 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/106-ssh.md @@ -0,0 +1,11 @@ +# SSH + +The SSH (**S**ecure **Sh**ell) is a network communication protocol that enables two computers to communicate over an insecure network. It is a secure alternative to the non-protected login protocols (such as telnet, rlogin) and insecure file transfer methods (such as FTP). It is mostly used for secure Remote Login and File Transfer. + +`SFTP = FTP + SSH` + +{% resources %} + {% Blog "https://www.baeldung.com/cs/ssh-intro", "SSH Intro" %} + {% Official "https://www.ssh.com/academy/ssh/protocol", "What is SSH?" %} + {% Blog "https://www.goanywhere.com/blog/how-sftp-works", "SFTP using SSH" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md b/src/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md new file mode 100644 index 000000000..a9d4d6e75 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md @@ -0,0 +1,8 @@ +# Port Forwarding + +Port forwarding, sometimes called **port mapping**, allows computers or services in private networks to connect over the internet with other public or private computers or services. Since firewalls exist to keep unwanted visitors out, the visitors you want to get in are going to need a way to do so. Knowing the IP address isn’t enough, Requests need to be directed to the correct port as well. + +{% resources %} + {% Blog "https://learn.g2.com/port-forwarding", "What is Port Forwarding?" %} + {% Blog "https://cybernews.com/what-is-vpn/port-forwarding/", "Types of Port Forwarding" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/103-networking-protocols/index.md b/src/roadmaps/devops/content/103-networking-protocols/index.md new file mode 100644 index 000000000..7de8c51c6 --- /dev/null +++ b/src/roadmaps/devops/content/103-networking-protocols/index.md @@ -0,0 +1,7 @@ +# Networking Protocols + +A network protocol is an established set of rules that determine how data is transmitted between different devices in the same network. Essentially, it allows connected devices to communicate with each other, regardless of any differences in their internal processes, structure or design. Network protocols are the reason you can easily communicate with people all over the world, and thus play a critical role in modern digital communications. + +{% resources %} + {% Blog "https://www.comptia.org/content/guides/what-is-a-network-protocol", "What Is a Network Protocol, and How Does It Work?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/104-setting-up-x/100-reverse-proxy.md b/src/roadmaps/devops/content/104-setting-up-x/100-reverse-proxy.md new file mode 100644 index 000000000..93acd3ae1 --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/100-reverse-proxy.md @@ -0,0 +1,14 @@ +# Reverse Proxy + +A Reverse Proxy server is a type of proxy server that typically sits behind the firewall in a private network and directs client requests to the appropriate backend server. It provides an additional level of security by hiding the server related details like `IP Address` to clients. It is also known as **server side proxy**. + +**Common Uses:** + +* Load balancing +* Web acceleration +* Security and anonymity + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/cdn/glossary/reverse-proxy/", "What is Reverse Proxy?" %} + {% Blog "https://www.nginx.com/resources/glossary/reverse-proxy-server/", "NGINX documentation" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/104-setting-up-x/101-caching-server.md b/src/roadmaps/devops/content/104-setting-up-x/101-caching-server.md new file mode 100644 index 000000000..8a036e0d5 --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/101-caching-server.md @@ -0,0 +1,9 @@ +# Caching server + +A cache server is a **dedicated network server** or service acting as a server that saves Web pages or other Internet content locally. By placing previously requested information in temporary storage, or cache, a cache server both speeds up access to data and reduces demand on an enterprise's bandwidth. + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/cdn/what-is-caching/", "What is Caching?" %} + {% Blog "https://networkencyclopedia.com/cache-server/", "What is Cache Server?" %} + {% Blog "https://wp-rocket.me/blog/different-types-of-caching/", "Site Cache vs Browser Cache vs Server Cache" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/104-setting-up-x/102-forward-proxy.md b/src/roadmaps/devops/content/104-setting-up-x/102-forward-proxy.md new file mode 100644 index 000000000..1b2b85c67 --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/102-forward-proxy.md @@ -0,0 +1,14 @@ +# Forward Proxy + +Forward Proxy, often called proxy server is a server that sits in front of a group of **client machines**. When those computers make requests to sites and services on the Internet, the proxy server intercepts those requests and then communicates with web servers on behalf of those clients, like a middleman. + +**Common Uses:** + +* To block access to certain content +* To protect client identity online +* To provide restricted internet to organizations + +{% resources %} + {% Blog "https://www.fortinet.com/resources/cyberglossary/proxy-server", "What is Forward Proxy?" %} + {% Blog "https://oxylabs.io/blog/reverse-proxy-vs-forward-proxy", "Forward vs Reverse Proxy" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/104-setting-up-x/103-load-balancer.md b/src/roadmaps/devops/content/104-setting-up-x/103-load-balancer.md new file mode 100644 index 000000000..1ab556a4a --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/103-load-balancer.md @@ -0,0 +1,8 @@ +# Load Balancer + +Load Balancer acts as the **traffic cop** sitting in front of your servers and routing client requests across all servers capable of fulfilling those requests in a manner that maximizes speed and capacity utilization and ensures that no one server is overworked. If a one of the servers goes down, the load balancer redirects traffic to the remaining online servers. + +{% resources %} + {% Blog "https://www.nginx.com/resources/glossary/load-balancing/", "What is Load Balancing?" %} + {% Blog "https://www.cloudflare.com/en-gb/learning/performance/what-is-load-balancing/", "Load Balancing concepts and algorithms" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/content/104-setting-up-x/104-firewall.md b/src/roadmaps/devops/content/104-setting-up-x/104-firewall.md new file mode 100644 index 000000000..f8889be7c --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/104-firewall.md @@ -0,0 +1,12 @@ +# Firewall + +Firewall is a **network security device** that monitors and filters incoming and outgoing network traffic based on an organization’s previously established security policies. It is a barrier that sits between a private internal network and the public Internet. A firewall’s main purpose is to allow non-threatening traffic in and to keep dangerous traffic out. + +{% resources %} + {% Blog "https://www.checkpoint.com/cyber-hub/network-security/what-is-firewall/", "What is Firewall?" %} + {% Blog "https://www.cisco.com/c/en_in/products/security/firewalls/what-is-a-firewall.html", "Types of Firewall" %} + {% Blog "https://www.geeksforgeeks.org/introduction-of-firewall-in-computer-network/", " Introduction of Firewall in Computer Network" %} + {% Blog "https://www.geeksforgeeks.org/introduction-of-firewall-in-computer-network/", " What is Firewall in Computer Network?" %} + {% Blog "https://www.tutorialspoint.com/what-is-a-firewall-and-why-do-you-need-one", "Why do we need Firewalls?" %} + {% Blog "https://www.youtube.com/watch?v=9GZlVOafYTg", " Firewalls and Network Security - SimpliLearn" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/104-setting-up-x/105-nginx.md b/src/roadmaps/devops/content/104-setting-up-x/105-nginx.md new file mode 100644 index 000000000..3e27d0ab3 --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/105-nginx.md @@ -0,0 +1,8 @@ +# Nginx + +NGINX is a powerful web server and uses a non-threaded, event-driven architecture that enables it to outperform Apache if configured correctly. It can also do other important things, such as load balancing, HTTP caching, or be used as a reverse proxy. + +{% resources %} + {% Official "https://nginx.org/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=JKxlsvZXG7c", "NGINX Explained in 100 Seconds" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/104-setting-up-x/106-apache.md b/src/roadmaps/devops/content/104-setting-up-x/106-apache.md new file mode 100644 index 000000000..36a37b022 --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/106-apache.md @@ -0,0 +1,8 @@ +# Apache + +Apache is a free, open-source HTTP server, available on many operating systems, but mainly used on Linux distributions. It is one of the most popular options for web developers, as it accounts for over 30% of all the websites, as estimated by W3Techs. + +{% resources %} + {% Official "https://httpd.apache.org/", "Apache Server Website" %} + {% Blog "https://www.youtube.com/watch?v=kaaenHXO4t4", "What is Apache Web Server?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/104-setting-up-x/106-caddy.md b/src/roadmaps/devops/content/104-setting-up-x/106-caddy.md new file mode 100644 index 000000000..fc368f80c --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/106-caddy.md @@ -0,0 +1,8 @@ +# Caddy + +The Caddy web server is an extensible, cross-platform, open-source web server written in Go. It has some really nice features like automatic SSL/HTTPs and a really easy configuration file. + +{% resources %} + {% Official "https://caddyserver.com/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=t4naLFSlBpQ", "Getting started with Caddy the HTTPS Web Server from scratch" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/104-setting-up-x/107-tomcat.md b/src/roadmaps/devops/content/104-setting-up-x/107-tomcat.md new file mode 100644 index 000000000..a756ad7fa --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/107-tomcat.md @@ -0,0 +1,9 @@ +# Tomcat + +Tomcat is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the Jakarta EE platform. + +{% resources %} + {% Blog "https://tomcat.apache.org/", "Tomcat Website" %} + {% Blog "https://tomcat.apache.org/tomcat-10.0-doc/index.html", "Official Documentation(Tomcat 10.0)" %} + {% Blog "https://www.youtube.com/c/ApacheTomcatOfficial", "Apache Tomcat" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/104-setting-up-x/108-iis.md b/src/roadmaps/devops/content/104-setting-up-x/108-iis.md new file mode 100644 index 000000000..bbaa33da1 --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/108-iis.md @@ -0,0 +1,8 @@ +# MS IIS + +Internet Information Services (IIS) for Windows® Server is a flexible, secure and manageable Web server for hosting anything on the Web. + +{% resources %} + {% Official "https://www.iis.net/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=1VdxPWwtISA", "Learn Windows Web Server IIS" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/104-setting-up-x/index.md b/src/roadmaps/devops/content/104-setting-up-x/index.md new file mode 100644 index 000000000..bcb8db3b2 --- /dev/null +++ b/src/roadmaps/devops/content/104-setting-up-x/index.md @@ -0,0 +1 @@ +# Setting up x \ No newline at end of file diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md b/src/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md new file mode 100644 index 000000000..4a8353854 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md @@ -0,0 +1,10 @@ +# Docker + +Docker is a software platform that allows you to build, test, and deploy applications quickly. Docker packages software into standardized units called containers that have everything the software needs to run including libraries, system tools, code, and runtime. Using Docker, you can quickly deploy and scale applications into any environment and know your code will run. + +{% resources %} + {% Official "https://www.docker.com/", "Docker Website" %} + {% Blog "https://docs.docker.com/", "Docker Documentation" %} + {% Blog "https://www.youtube.com/watch?v=pTFZFxd4hOI", "Docker Tutorial for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=3c-iBn73dDE", "Docker Full Course for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/100-consul.md b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/100-consul.md new file mode 100644 index 000000000..958c37edd --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/100-consul.md @@ -0,0 +1,7 @@ +# Consul + +Consul is a service mesh solution providing a full featured control plane with service discovery, configuration, and segmentation functionality. Each of these features can be used individually as needed, or they can be used together to build a full service mesh. Consul requires a data plane and supports both a proxy and native integration model. Consul ships with a simple built-in proxy so that everything works out of the box, but also supports 3rd party proxy integrations such as Envoy. + +{% resources %} + {% Blog "https://www.consul.io/docs/intro", "What is Consul?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/101-istio.md b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/101-istio.md new file mode 100644 index 000000000..22a6d01ce --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/101-istio.md @@ -0,0 +1,7 @@ +# Istio + +Istio is an open source service mesh platform that provides a way to control how microservices share data with one another. It includes APIs that let Istio integrate into any logging platform, telemetry, or policy system. Istio is designed to run in a variety of environments: on-premise, cloud-hosted, in Kubernetes containers, in services running on virtual machines, and more. + +{% resources %} + {% Blog "https://www.redhat.com/en/topics/microservices/what-is-istio", "What is Istio?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/102-envoy.md b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/102-envoy.md new file mode 100644 index 000000000..d69f42353 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/102-envoy.md @@ -0,0 +1,9 @@ +# Envoy + +Originally created at Lyft, Envoy is a high-performance data plane designed for service mesh architectures. Lyft open sourced it and donated it to the CNCF, where it is now one of the CNCF’s graduated open source projects. Envoy is a self contained process that is designed to run alongside every application server. All of the Envoys form a transparent communication mesh in which each application sends and receives messages to and from localhost and is unaware of the network topology. + +{% resources %} + {% Official "https://www.envoyproxy.io/", "Envoy Website" %} + {% Official "https://www.envoyproxy.io/docs/envoy/latest/start/start", "Envoy Documentation" %} + {% Blog "https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy", "What is Envoy?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/103-linkerd.md b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/103-linkerd.md new file mode 100644 index 000000000..e0d40db05 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/103-linkerd.md @@ -0,0 +1,9 @@ +# Linkerd + +Linkerd is an open source service mesh designed to be deployed into a variety of container schedulers and frameworks such as Kubernetes. It became the original “service mesh” when its creator Buoyant first coined the term in 2016. Like Twitter’s Finagle, on which it was based, Linkerd was first written in Scala and designed to be deployed on a per-host basis. Linkerd is one of the first products to be associated with the term service mesh and supports platforms such as Docker and Kubernetes. + +{% resources %} + {% Official "https://linkerd.io/", "Linkerd Website" %} + {% Blog "https://linkerd.io/2.11/overview/", "Linkerd Documentation" %} + {% Blog "https://www.techtarget.com/searchitoperations/definition/Linkerd", "What is Linkerd?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/index.md b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/index.md new file mode 100644 index 000000000..7bd693ec4 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/index.md @@ -0,0 +1,8 @@ +# Service Mesh + +A service mesh, like the open source project Istio, is a way to control how different parts of an application share data with one another. Unlike other systems for managing this communication, a service mesh is a dedicated infrastructure layer built right into an app. This visible infrastructure layer can document how well (or not) different parts of an app interact, so it becomes easier to optimize communication and avoid downtime as an app grows. + +{% resources %} + {% Blog "https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh", "Whats a service mesh?" %} + {% Blog "https://thenewstack.io/category/service-mesh/", "The latest news about service mesh (TNS)" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/101-containers.md b/src/roadmaps/devops/content/105-infrastructure-as-code/101-containers.md new file mode 100644 index 000000000..951b51b3a --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/101-containers.md @@ -0,0 +1,12 @@ +# Containers + +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. + +These images are designed for portability, allowing for full local testing of a static image, and easy deployment to a container management platform. + +{% resources %} + {% Blog "https://cloud.google.com/learn/what-are-containers", "What are Containers?" %} + {% Blog "https://www.docker.com/resources/what-container/", "What is a Container?" %} + {% Blog "https://www.youtube.com/playlist?list=PLawsLZMfND4nz-WDBZIj8-nbzGFD4S9oz", "What are Containers?" %} + {% Blog "https://thenewstack.io/category/containers/", "Articles about Containers - The New Stack" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/101-lxc.md b/src/roadmaps/devops/content/105-infrastructure-as-code/101-lxc.md new file mode 100644 index 000000000..dc4beaabf --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/101-lxc.md @@ -0,0 +1,9 @@ +# LXC + +LXC is a well-known Linux container runtime that consists of tools, templates, and library and language bindings. It's pretty low level, very flexible and covers just about every containment feature supported by the upstream kernel. + +{% resources %} + {% Official "https://linuxcontainers.org/", "LXC Website" %} + {% Blog "https://linuxcontainers.org/lxc/documentation/", "LXC Documentation" %} + {% Blog "https://www.youtube.com/watch?v=CWmkSj_B-wo", "Getting started with LXC containers" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/100-ansible.md b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/100-ansible.md new file mode 100644 index 000000000..11065909b --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/100-ansible.md @@ -0,0 +1,11 @@ +# Ansible + +Ansible is an open-source configuration management, application deployment and provisioning tool that uses its own declarative language in YAML. Ansible is agentless, meaning you only need remote connections via SSH or Windows Remote Management via Powershell in order to function + + +{% resources %} + {% Official "https://www.ansible.com/", "Ansible Website" %} + {% Official "https://docs.ansible.com/", "Official Documentation" %} + {% Blog "https://www.ansible.com/resources/get-started", "Ansible Getting Started Guide" %} + {% Blog "https://www.youtube.com/watch?v=9Ua2b06oAr4", "Ansible Full Course for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/101-chef.md b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/101-chef.md new file mode 100644 index 000000000..4e9b9efc6 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/101-chef.md @@ -0,0 +1,12 @@ +# Chef + +Emerging in 2009, [Chef](https://en.wikipedia.org/wiki/Progress_Chef) (now known as Progress Chef) is one of the earliest configuration management tools to gain popularity. Chef "Recipes" are written in Ruby, in a primarily [declarative](https://en.wikipedia.org/wiki/Declarative_programming) style. + +Chef requires that a client is installed on a server being managed. This client polls a Chef-Server regularly, to determine what its configuration should be. Chef-Solo is also available, a version of Chef that allows provisioning of a single node by running chef locally. + +A key tenet of Chef recipe design is the concept of [idempotence](https://en.wikipedia.org/wiki/Idempotence). All Chef recipes should be runnable multiple times and produce the same result - this is especially necessary in cases where the client/server model listed above is in use. This pattern of configuration management is highly influential for future declarative tools like Terraform and Cloud Formation. + +{% resources %} + {% Official "https://www.chef.io/products/chef-infra", "Chef Website" %} + {% Blog "https://www.tutorialspoint.com/chef/index.htm", "Chef Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md new file mode 100644 index 000000000..b4f1140b2 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md @@ -0,0 +1,10 @@ +# Salt + +Salt is an open-source event-driven IT automation, remote task execution, and configuration management software service. Built on python, Salt uses simple and human-readable YAML combined with event-driven automation to deploy and configure complex IT systems. + +{% resources %} + {% Official "https://docs.saltproject.io/en/latest/topics/about_salt_project.html", "Salt Project Website" %} + {% Official "https://docs.saltproject.io/en/latest/", "Official Documentation" %} + {% Blog "https://docs.saltproject.io/en/latest/topics/index.html", "Introduction to Salt" %} + {% Blog "https://docs.saltproject.io/en/latest/topics/installation/index.html#installation", "Salt Installation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/103-puppet.md b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/103-puppet.md new file mode 100644 index 000000000..4e5eab1a8 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/103-puppet.md @@ -0,0 +1,9 @@ +# Puppet + +Puppet, an automated administrative engine for your Linux, Unix, and Windows systems, performs administrative tasks (such as adding users, installing packages, and updating server configurations) based on a centralized specification. + +{% resources %} + {% Official "https://puppet.com/", "Puppet Website" %} + {% Official "https://puppet.com/docs", "Official Documentation" %} + {% Blog "https://puppet.com/docs/puppet/6/puppet_overview.html", "Introduction to Puppet" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/index.md b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/index.md new file mode 100644 index 000000000..022c66997 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/index.md @@ -0,0 +1,9 @@ +# Configuration Management + +Configuration management is a systems engineering process for establishing consistency of a product’s attributes throughout its life. In the technology world, configuration management is an IT management process that tracks individual configuration items of an IT system. IT systems are composed of IT assets that vary in granularity. An IT asset may represent a piece of software, or a server, or a cluster of servers. The following focuses on configuration management as it directly applies to IT software assets and software asset CI/CD. + +Software configuration management is a systems engineering process that tracks and monitors changes to a software systems configuration metadata. In software development, configuration management is commonly used alongside version control and CI/CD infrastructure. This post focuses on its modern application and use in agile CI/CD software environments. + +{% resources %} + {% Blog "https://www.atlassian.com/microservices/microservices-architecture/configuration-management", "What is configuration management?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/100-terraform.md b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/100-terraform.md new file mode 100644 index 000000000..c6efe5286 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/100-terraform.md @@ -0,0 +1,15 @@ +# Terraform + +Terraform is an extremely popular open source Infrastructure as Code (IaC) tool that can be used with many different cloud and service provider APIs. Terraform focuses on an immutable approach to infrastructure, with a terraform state file center to tracking the status of your real world infrastructure. + +{% resources %} + {% Official "https://www.terraform.io/", "Terraform Website" %} + {% Official "https://www.terraform.io/docs", "Terraform Documentation" %} + {% Blog "https://learn.hashicorp.com/terraform", "Terraform Tutorials" %} + {% Blog "https://www.youtube.com/watch?v=h970ZBgKINg&ab_channel=HashiCorp", "Intro to Terraform Video" %} + {% Official "https://www.terraform.io/cdktf", "Terraform CDK Website" %} + {% Blog "https://www.terraform.io/cdktf/concepts/cdktf-architecture", "What is the CDKTF?" %} + {% Blog "https://learn.hashicorp.com/tutorials/terraform/cdktf-install?in=terraform/cdktf", "CDKTF Getting Started Guide" %} + {% Blog "https://www.terraform.io/cdktf/examples", "CDKTF Examples" %} + {% Blog "https://thenewstack.io/how-to-scale-your-terraform-infrastructure/", "How to Scale Your Terraform Infrastructure" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/101-aws-cdk.md b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/101-aws-cdk.md new file mode 100644 index 000000000..91210d58b --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/101-aws-cdk.md @@ -0,0 +1,11 @@ +# AWS CDK + +The AWS Cloud Development Kit (AWS CDK) is an open-source software development framework used to provision cloud infrastructure resources in a safe, repeatable manner through AWS CloudFormation. AWS CDK offers the flexibility to write infrastructure as code in popular languages like JavaScript, TypeScript, Python, Java, C#, and Go. + +{% resources %} + {% Official "https://aws.amazon.com/cdk/", "AWS CDK Website" %} + {% Official "https://docs.aws.amazon.com/cdk/index.html", "Official Documentation" %} + {% Blog "https://docs.aws.amazon.com/cdk/v2/guide/home.html", "What is the AWS CDK?" %} + {% Blog "https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html", "AWS SDK Getting Started Guide" %} + {% Blog "https://github.com/aws-samples/aws-cdk-examples", "AWS CDK Examples" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/102-cloudformation.md b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/102-cloudformation.md new file mode 100644 index 000000000..6adc56b33 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/102-cloudformation.md @@ -0,0 +1,10 @@ +# CloudFormation + +CloudFormation is the AWS service that helps to define collections of AWS resources. CloudFormation lets you model, provision, and manage AWS and third-party resources by treating infrastructure as code. + +{% resources %} + {% Official "https://aws.amazon.com/cloudformation/", "AWS CloudFormation Website" %} + {% Official "https://docs.aws.amazon.com/cloudformation/index.html", "Official Documentation" %} + {% Blog "https://aws.amazon.com/cloudformation/getting-started/", "AWS CloudFormation Getting Started Guide" %} + {% Blog "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-sample-templates.html", "CloudFormation Sample Templates" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/103-pulumi.md b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/103-pulumi.md new file mode 100644 index 000000000..187cf43aa --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/103-pulumi.md @@ -0,0 +1,9 @@ +# Pulumi + +Pulumi is an open source Infrastructure as Code tool that can be written in TypeScript, JavaScript, Python, Go, .NET, Java, and YAML to model cloud infrastructure. + +{% resources %} + {% Official "https://www.pulumi.com/", "Pulumi Website" %} + {% Official "https://www.pulumi.com/docs/", "Official Documentation" %} + {% Blog "https://www.pulumi.com/docs/get-started/", "Pulumi Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/index.md b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/index.md new file mode 100644 index 000000000..60da3a7cf --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/index.md @@ -0,0 +1,3 @@ +# Infrastructure Provisioning + +Tools in this category are used to provision infrastructure in cloud providers. This includes DNS, networking, security policies, servers, containers, and a whole host of vendor-specific constructs. In this category, the use of cloud provider-agnostic tooling is strongly encouraged. These skills can be applied across most cloud providers, and the more specific domain-specific languages tend to have less reach. diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/104-docker-swarm.md b/src/roadmaps/devops/content/105-infrastructure-as-code/104-docker-swarm.md new file mode 100644 index 000000000..5e990d2a0 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/104-docker-swarm.md @@ -0,0 +1,11 @@ +# Docker Swarm + +A Docker Swarm is a group of either physical or virtual machines that are running the Docker application and that have been configured to join together in a cluster. Once a group of machines have been clustered together, you can still run the Docker commands that you're used to, but they will now be carried out by the machines in your cluster. The activities of the cluster are controlled by a swarm manager, and machines that have joined the cluster are referred to as nodes. + +{% resources %} + {% Official "https://www.docker.com/", "Official Website" %} + {% Blog "https://docs.docker.com/engine/swarm/", "Docker Swarm Documentation" %} + {% Blog "https://www.youtube.com/watch?v=Tm0Q5zr3FL4", "Docker Swarm Tutorial for Beginners" %} + {% Blog "https://thenewstack.io/tutorial-manage-docker-swarm-with-portainer/", "Tutorial: Manage Docker Swarm with Portainer" %} + {% Blog "https://thenewstack.io/tutorial-create-a-docker-swarm-with-persistent-storage-using-glusterfs/", "Tutorial: Create a Docker Swarm with Persistent Storage Using GlusterFS" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md b/src/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md new file mode 100644 index 000000000..99dc36ec3 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md @@ -0,0 +1,13 @@ +# Kubernetes + +Kubernetes is an [open source](https://github.com/kubernetes/kubernetes) container management platform, and the dominant product in this space. Using Kubernetes, teams can deploy images across multiple underlying hosts, defining their desired availability, deployment logic, and scaling logic in YAML. Kubernetes evolved from Borg, an internal Google platform used to provision and allocate compute resources. (similar to the Autopilot and Aquaman systems of Microsoft Azure) + +The popularity of Kubernetes has made it an increasingly important skill for the DevOps Engineer and has triggered the creation of Platform teams across the industry. These Platform engineering teams often exist with the sole purpose of making Kubernetes approachable and usable for their product development colleagues. + +{% resources %} + {% Official "https://kubernetes.io/", "Kubernetes Website" %} + {% Blog "https://kubernetes.io/docs/home/", "Kubernetes Documentation" %} + {% Blog "https://www.youtube.com/watch?v=s_o8dwzRlu4", "Kubernetes Crash Course for Absolute Beginners" %} + {% Blog "https://thenewstack.io/primer-how-kubernetes-came-to-be-what-it-is-and-why-you-should-care/", "Primer: How Kubernetes Came to Be, What It Is, and Why You Should Care" %} + {% Blog "https://thenewstack.io/kubernetes-an-overview/", "Kubernetes: An Overview" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/104-mesos.md b/src/roadmaps/devops/content/105-infrastructure-as-code/104-mesos.md new file mode 100644 index 000000000..08e0ce8cc --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/104-mesos.md @@ -0,0 +1,9 @@ +# Mesos + +Apache Mesos is an open-source project to manage computer clusters. It was developed at the University of California, Berkeley. + +{% resources %} + {% Official "https://mesos.apache.org/", "Official Website" %} + {% Blog "https://mesos.apache.org/documentation/latest/", "Apache Mesos Documentation" %} + {% Blog "https://www.youtube.com/watch?v=ugmfP-QtgTA", "Getting Started with Apache Mesos" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md b/src/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md new file mode 100644 index 000000000..b7e755e37 --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md @@ -0,0 +1,9 @@ +# Nomad + +[Nomad](https://github.com/hashicorp/nomad) is a simple and flexible scheduler and orchestrator to deploy and manage containers and non-containerized applications across on-prem and clouds at scale. Nomad runs as a single binary with a small resource footprint and supports a wide range of workloads beyond containers, including Windows, Java, VM, Docker, and more. + +{% resources %} + {% Official "https://www.nomadproject.io/", "Nomad Website" %} + {% Blog "https://www.nomadproject.io/docs", "Nomad Documentation" %} + {% Blog "https://learn.hashicorp.com/nomad", "Nomad Tutorials" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/105-infrastructure-as-code/index.md b/src/roadmaps/devops/content/105-infrastructure-as-code/index.md new file mode 100644 index 000000000..c260d04cd --- /dev/null +++ b/src/roadmaps/devops/content/105-infrastructure-as-code/index.md @@ -0,0 +1,12 @@ +# Infrastructure as Code + +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. + +The 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. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=zWw2wuiKd5o", "What is Infrastructure as Code?" %} + {% Blog "https://www.youtube.com/watch?v=POPP2WTJ8es", "What is Infrastructure as Code? Difference of Infrastructure as Code Tools" %} + {% Blog "https://thenewstack.io/guis-cli-apis-learn-basic-terms-of-infrastructure-as-code/", "GUIs, CLI, APIs: Learn Basic Terms of Infrastructure-as-Code" %} + {% Blog "https://www.novatec-gmbh.de/en/blog/understanding-infrastructure-as-code-iac-in-less-than-10-minutes/", "Understanding Infrastructure as Code (IaC) in less than 10 minutes" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/100-gitlab-ci.md b/src/roadmaps/devops/content/106-ci-cd/100-gitlab-ci.md new file mode 100644 index 000000000..7b729f440 --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/100-gitlab-ci.md @@ -0,0 +1,12 @@ +# GitLab CI + +GitLab offers a CI/CD service that can be used as a SaaS offering or self-managed using your own resources. You can use GitLab CI with any GitLab hosted repository, or any BitBucket Cloud or GitHub repository in the GitLab Premium self-managed, GitLab Premium SaaS and higher tiers. + + +{% resources %} + {% Official "https://gitlab.com/", "GitLab Website" %} + {% Official "https://docs.gitlab.com/", "GitLab Documentation" %} + {% Blog "https://docs.gitlab.com/ee/ci/quick_start/", "Get Started with GitLab CI" %} + {% Blog "https://docs.gitlab.com/ee/tutorials/", "Learn GitLab Tutorials" %} + {% Blog "https://docs.gitlab.com/ee/ci/examples/", "GitLab CI/CD Examples" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/101-jenkins.md b/src/roadmaps/devops/content/106-ci-cd/101-jenkins.md new file mode 100644 index 000000000..6e6d15c48 --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/101-jenkins.md @@ -0,0 +1,9 @@ +# Jenkins + +Jenkins is an open-source CI/CD automation server. Jenkins is primarily used for building projects, running tests, static code analysis and deployments. + +{% resources %} + {% Official "https://www.jenkins.io/", "Jenkins Website" %} + {% Official "https://www.jenkins.io/doc/book/", "Official Jenkins Handbook" %} + {% Blog "https://www.jenkins.io/doc/pipeline/tour/getting-started/", "Jenkins Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/102-github-actions.md b/src/roadmaps/devops/content/106-ci-cd/102-github-actions.md new file mode 100644 index 000000000..e68e18b62 --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/102-github-actions.md @@ -0,0 +1,10 @@ +# GitHub Actions + +Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and combine actions in a completely customized workflow. + +{% resources %} + {% Blog "https://docs.github.com/en/actions", "GitHub Actions Documentation" %} + {% Blog "https://docs.github.com/en/actions/learn-github-actions", "Learn GitHub Actions" %} + {% Blog "https://youtu.be/cP0I9w2coGU", "GitHub Actions - Supercharge your GitHub Flow" %} + {% Blog "https://www.youtube.com/watch?v=nyKZTKQS_EQ", "Automate your Workflow with GitHub Actions" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/103-travis-ci.md b/src/roadmaps/devops/content/106-ci-cd/103-travis-ci.md new file mode 100644 index 000000000..4d6ef9821 --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/103-travis-ci.md @@ -0,0 +1,9 @@ +# Travis CI + +Travis CI is a CI/CD service that is primarily used for building and testing projects that are hosted on BitBucket and GitHub. Open source projects can utilize Travis CI for free. + +{% resources %} + {% Official "https://www.travis-ci.com/", "Travis CI Website" %} + {% Official "https://docs.travis-ci.com/", "Travis CI Documentation" %} + {% Blog "https://docs.travis-ci.com/user/tutorial/", "Travis CI Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/104-bamboo.md b/src/roadmaps/devops/content/106-ci-cd/104-bamboo.md new file mode 100644 index 000000000..f7421ff3e --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/104-bamboo.md @@ -0,0 +1,9 @@ +# Bamboo + +Bamboo is a CI/CD service provided by Atlassian. Bamboo is primarily used for automating builds, tests and releases in a single workflow. + +{% resources %} + {% Official "https://www.atlassian.com/software/bamboo", "Bamboo Website" %} + {% Official "https://confluence.atlassian.com/bamboo/bamboo-documentation-289276551.html", "Official Documentation" %} + {% Blog "https://confluence.atlassian.com/bamboo/getting-started-with-bamboo-289277283.html", "Bamboo Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/105-teamcity.md b/src/roadmaps/devops/content/106-ci-cd/105-teamcity.md new file mode 100644 index 000000000..c9fbfc048 --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/105-teamcity.md @@ -0,0 +1,10 @@ +# TeamCity + +TeamCity is a CI/CD service provided by JetBrains. TeamCity can be used as a SaaS offering or self-managed using your own resources. + +{% resources %} + {% Official "https://www.jetbrains.com/teamcity/", "TeamCity Website" %} + {% Official "https://www.jetbrains.com/help/teamcity/teamcity-documentation.html", "Official Documentation" %} + {% Blog "https://www.jetbrains.com/teamcity/tutorials/", "TeamCity Tutorials" %} + {% Blog "https://www.jetbrains.com/teamcity/learn/", "TeamCity Learning Portal" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/106-azure-devops-services.md b/src/roadmaps/devops/content/106-ci-cd/106-azure-devops-services.md new file mode 100644 index 000000000..51dbd83fc --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/106-azure-devops-services.md @@ -0,0 +1,9 @@ +# Azure DevOps + +Azure DevOps is developed by Microsoft as a full scale application lifecycle management and CI/CD service. Azure DevOps provides developer services for allowing teams to plan work, collaborate on code development, and build and deploy applications. + +{% resources %} + {% Official "https://azure.microsoft.com/en-us/services/devops/#overview", "Azure DevOps Website" %} + {% Official "https://docs.microsoft.com/en-us/azure/devops/?view=azure-devops&viewFallbackFrom=vsts", "Official Documentation" %} + {% Blog "https://docs.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops", "Azure DevOps Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/107-circle-ci.md b/src/roadmaps/devops/content/106-ci-cd/107-circle-ci.md new file mode 100644 index 000000000..a8a7bd343 --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/107-circle-ci.md @@ -0,0 +1,9 @@ +# CircleCI + +CircleCI is a CI/CD service that can be integrated with GitHub, BitBucket and GitLab repositories. The service that can be used as a SaaS offering or self-managed using your own resources. + +{% resources %} + {% Official "https://circleci.com/", "CircleCI Website" %} + {% Official "https://circleci.com/docs", "CircleCI Documentation" %} + {% Blog "https://circleci.com/docs/config-intro", "Configuration Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/108-drone.md b/src/roadmaps/devops/content/106-ci-cd/108-drone.md new file mode 100644 index 000000000..273f418ce --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/108-drone.md @@ -0,0 +1,9 @@ +# Drone + +Drone is a CI/CD service offering by [Harness](https://harness.io/). Each build runs on an isolated Docker container, and Drone integrates with many popular source code management repositories like GitHub, BitBucket and GitLab + +{% resources %} + {% Official "https://www.drone.io/", "Drone Website" %} + {% Official "https://docs.drone.io/", "Official Documentation" %} + {% Blog "https://docs.drone.io/server/overview/", "Drone Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/106-ci-cd/index.md b/src/roadmaps/devops/content/106-ci-cd/index.md new file mode 100644 index 000000000..34e96ac2c --- /dev/null +++ b/src/roadmaps/devops/content/106-ci-cd/index.md @@ -0,0 +1,12 @@ +# CI/CD + +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. + +Specifically, CI/CD introduces ongoing automation and continuous monitoring throughout the lifecycle of apps, from integration and testing phases to delivery and deployment. Taken together, these connected practices are often referred to as a "CI/CD pipeline" and are supported by development and operations teams working together in an agile way with either a DevOps or site reliability engineering (SRE) approach. + +{% resources %} + {% Blog "https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment", "CI vs CD" %} + {% Blog "https://www.redhat.com/en/topics/devops/what-is-ci-cd", "What is CI/CD?" %} + {% Blog "https://semaphoreci.com/blog/cicd-pipeline", "CI/CD Pipeline: A Gentle Introduction" %} + {% Blog "https://www.youtube.com/watch?v=scEDHsr3APg", "DevOps CI/CD Explained in 100 Seconds" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/100-prometheus.md b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/100-prometheus.md new file mode 100644 index 000000000..a0b06641e --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/100-prometheus.md @@ -0,0 +1,9 @@ +# Prometheus + +Prometheus is a free software application used for event monitoring and alerting. It records real-time metrics in a time series database built using a HTTP pull model, with flexible queries and real-time alerting. + +{% resources %} + {% Official "https://prometheus.io/", "Prometheus Website" %} + {% Official "https://prometheus.io/docs/introduction/overview/", "Official Documentation" %} + {% Blog "https://prometheus.io/docs/tutorials/getting_started/", "Getting Started with Prometheus" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md new file mode 100644 index 000000000..283c21d4e --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md @@ -0,0 +1,9 @@ +# Nagios + +Nagios is a powerful tool that provides you with instant awareness of your organization’s mission-critical IT infrastructure. Nagios allows you to detect and repair problems and mitigate future issues before they affect end-users and customers. + +{% resources %} + {% Blog "https://www.nagios.org/", "Nagios Website" %} + {% Blog "https://www.nagios.org/documentation/", "Official Documentation" %} + {% Blog "https://support.nagios.com/kb/", "Nagios Support Knowledge Base" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-datadog.md b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-datadog.md new file mode 100644 index 000000000..aee0202a6 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-datadog.md @@ -0,0 +1,8 @@ +# Datadog + +Datadog is a monitoring and analytics platform for large-scale applications. It encompasses infrastructure monitoring, application performance monitoring, log management, and user-experience monitoring. Datadog aggregates data across your entire stack with 400+ integrations for troubleshooting, alerting, and graphing. + +{% resources %} + {% Official "https://www.datadoghq.com/", "Datadog Website" %} + {% Official "https://docs.datadoghq.com/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-grafana.md b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-grafana.md new file mode 100644 index 000000000..998c6c138 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-grafana.md @@ -0,0 +1,10 @@ +# Grafana + +Grafana is the open-source platform for monitoring and observability. It allows you to query, visualize, alert on and understand your metrics no matter where they are stored. + +{% resources %} + {% Blog "https://grafana.com/", "Grafana Website" %} + {% Blog "https://grafana.com/docs/", "Grafana Official Documentation" %} + {% Blog "https://community.grafana.com/", "Grafana Community" %} + {% Course "https://grafana.com/videos/", "Grafana Webinars and Videos" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md new file mode 100644 index 000000000..a32238eb4 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md @@ -0,0 +1,13 @@ +# Monit + +Monit is a small Open Source utility for managing and monitoring Unix systems. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations. + +Monit has the ability to start a process if it is not running, restart a process if not responding, and stop a process if uses high resources. Additionally, you can also use Monit to monitor files, directories, and filesystems for changes, checksum changes, file size changes, or timestamp changes. + +With Monit, you can able to monitor remote hosts’ TCP/IP port, server protocols, and ping. Monit keeps its own log file and alerts about any critical error conditions and recovery status. + +{% resources %} + {% Blog "https://mmonit.com/monit/", "Monit Website" %} + {% Blog "https://mmonit.com/monit/documentation/monit.html", "Monit Official Documentation" %} + {% Blog "https://www.tecmint.com/monit-linux-services-monitoring/", "Monit Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-zabbix.md b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-zabbix.md new file mode 100644 index 000000000..77581021c --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-zabbix.md @@ -0,0 +1,9 @@ +# Zabbix + +Zabbix is an enterprise-class open source monitoring solution for network monitoring and application monitoring of millions of metrics. + +{% resources %} + {% Official "https://www.zabbix.com/", "Zabbix Website" %} + {% Blog "https://www.zabbix.com/manuals", "Official Documentation" %} + {% Blog "https://www.zabbix.com/roadmap", "Zabbix Roadmap" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/index.md b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/index.md new file mode 100644 index 000000000..2922e2643 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/index.md @@ -0,0 +1,10 @@ +# Infrastructure Monitoring + +Monitoring refers to the practice of making the performance and status of infrastructure visible. This section contains common tools used for monitoring. + +This is a very vendor-heavy space - use caution when studying materials exclusively from a given product or project, as there are many conflicting opinions and strategies in use. There is no single solution for the most substantially complex internet-facing applications, so understanding the pros and cons of these tools will be useful in helping you plan how to monitor a system for a given goal. + +{% resources %} + {% Blog "https://thenewstack.io/best-practices-to-optimize-infrastructure-monitoring-within-devops-teams/", "Best Practices to Optimize Infrastructure Monitoring within DevOps Teams" %} + {% Blog "https://thenewstack.io/seven-steps-to-effective-cloud-native-infrastructure-monitoring/", "Seven Steps to Effective Cloud Native Infrastructure Monitoring" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/100-jaeger.md b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/100-jaeger.md new file mode 100644 index 000000000..64ffbb6ed --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/100-jaeger.md @@ -0,0 +1,8 @@ +# Jaeger + +Jaeger is an open source, end-to-end distributed tracing system that enables us to monitor and troubleshoot transactions in complex distributed systems. + +{% resources %} + {% Blog "https://www.jaegertracing.io/", "Jaeger Website" %} + {% Blog "https://www.jaegertracing.io/docs/1.37/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/101-new-relic.md b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/101-new-relic.md new file mode 100644 index 000000000..da1f3c83b --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/101-new-relic.md @@ -0,0 +1,9 @@ +# New Relic + +New Relic is where dev, ops, security and business teams solve software–performance problems with data. + +{% resources %} + {% Blog "https://newrelic.com/", "New Relic Website" %} + {% Blog "https://docs.newrelic.com/", "Official Documentation" %} + {% Blog "https://developer.newrelic.com/", "New Relic Developer Hub" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/102-app-dynamics.md b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/102-app-dynamics.md new file mode 100644 index 000000000..7c968aecb --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/102-app-dynamics.md @@ -0,0 +1,8 @@ +# AppDynamics + +AppDynamics is a full-stack application performance management (APM) and IT operations analytics (ITOA) company based in San Francisco. The company focuses on managing the performance and availability of applications across cloud computing environments, IT infrastructure, network architecture, digital user experience design, application security threat detection, observability, and data centers. + +{% resources %} + {% Blog "https://www.appdynamics.com/", "AppDynamics Website" %} + {% Blog "https://www.appdynamics.com/resources", "Official Resources" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md new file mode 100644 index 000000000..18d94e084 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md @@ -0,0 +1,8 @@ +# Instana + +Instana is particularly used in monitoring and managing the performance of software used in microservice architectures, and permits 3D visualisation of performance through graphs generated using machine learning algorithms, with notifications regarding performance also generated automatically. Instana's Application Performance Monitoring (APM) tool of the same name is especially purposed for monitoring software used in so-called "container orchestration" (a modular method of providing a software service). + +{% resources %} + {% Blog "https://www.instana.com/", "Instana Website" %} + {% Blog "https://www.instana.com/resources/", "Official Resources(White Papers and Ebooks) " %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/104-open-telemetry.md b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/104-open-telemetry.md new file mode 100644 index 000000000..3ffe44a7e --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/104-open-telemetry.md @@ -0,0 +1,8 @@ +# OpenTelemetry + +OpenTelemetry is a collection of tools, APIs, and SDKs. Use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) to help you analyze your software’s performance and behavior. + +{% resources %} + {% Blog "https://opentelemetry.io/", "OpenTelemetry Website" %} + {% Blog "https://opentelemetry.io/docs/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/index.md b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/index.md new file mode 100644 index 000000000..8f102beeb --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/101-application-monitoring/index.md @@ -0,0 +1,8 @@ +# Application Monitoring + +Application monitoring refers to the practice of making the status and performance of a given *application* visible. This may include details such as stacktraces, error logs, and the line of code implicated in a given failure. When combined with Infrastructure monitoring, this can provide a complete picture of what is happening in your system, and why. + +{% resources %} + {% Blog "https://thenewstack.io/applying-basic-vs-advanced-monitoring-techniques/", "Applying Basic vs. Advanced Monitoring Techniques" %} + {% Blog "https://thenewstack.io/why-legacy-apps-need-your-monitoring-love-too/", "Why Legacy Apps Need Your Monitoring Love, Too" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/102-logs-management/100-elastic-stack.md b/src/roadmaps/devops/content/107-monitoring/102-logs-management/100-elastic-stack.md new file mode 100644 index 000000000..0495db8ca --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/102-logs-management/100-elastic-stack.md @@ -0,0 +1,14 @@ +# Elastic Stack + +Elastic Stack is a group of open source products comprised of Elasticsearch, Kibana, Beats, and Logstash and more that help store, search, analyze, and visualize data from various source, in different format, in real-time. + +* `Elastic Search` - Search and analytics engine +* `Logstash/fluentd` - Data processing pipeline +* `Kibana` - Dashboard to visualize data + +{% resources %} + {% Official "https://www.elastic.co/elastic-stack/", "Elastic Stack Website" %} + {% Official "https://www.elastic.co/guide/index.html", "Official Docs" %} + {% Blog "https://www.elastic.co/elastic-stack/features", "Elastic Stack features" %} + {% Blog "https://logz.io/blog/fluentd-logstash/", "Logstash vs Fluentd" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/102-logs-management/101-graylog.md b/src/roadmaps/devops/content/107-monitoring/102-logs-management/101-graylog.md new file mode 100644 index 000000000..4426ed1a2 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/102-logs-management/101-graylog.md @@ -0,0 +1,9 @@ +# Graylog + +Graylog is a leading centralized log management solution for capturing, storing, and enabling real-time analysis of terabytes of machine data. + +{% resources %} + {% Official "https://www.graylog.org/", "Graylog Website" %} + {% Blog "https://docs.graylog.org/", "Official Documentation" %} + {% Blog "https://www.graylog.org/resources-videos", "Product Videos" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/102-logs-management/102-papertrail.md b/src/roadmaps/devops/content/107-monitoring/102-logs-management/102-papertrail.md new file mode 100644 index 000000000..e5fb45fdf --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/102-logs-management/102-papertrail.md @@ -0,0 +1,9 @@ +# Papertrail + +Papertrail is a leading centralized log management solution for capturing, storing, and enabling real-time analysis of terabytes of machine data. + +{% resources %} + {% Official "https://www.papertrail.com/", "Papertrail Website" %} + {% Blog "https://www.papertrail.com/solution/guides/", "Official Guides" %} + {% Blog "https://www.papertrail.com/blog/", "Official Blog" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/102-logs-management/102-splunk.md b/src/roadmaps/devops/content/107-monitoring/102-logs-management/102-splunk.md new file mode 100644 index 000000000..97c4a7b04 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/102-logs-management/102-splunk.md @@ -0,0 +1,9 @@ +# Splunk + +The Splunk platform removes the barriers between data and action, empowering observability, IT and security teams to ensure their organizations are secure, resilient and innovative. + +{% resources %} + {% Blog "https://www.splunk.com/", "Splunk Website" %} + {% Blog "https://docs.splunk.com/Documentation", "Official Documentation" %} + {% Blog "https://www.splunk.com/en_us/resources/videos.html", "Splunk Videos" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/102-logs-management/103-loki.md b/src/roadmaps/devops/content/107-monitoring/102-logs-management/103-loki.md new file mode 100644 index 000000000..12cda3f92 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/102-logs-management/103-loki.md @@ -0,0 +1,8 @@ +# Loki + +Loki is a horizontally scalable, highly available, multi-tenant log aggregation system inspired by Prometheus. It is designed to be very cost-effective and easy to operate. It does not index the contents of the logs, but rather a set of labels for each log stream. + +{% resources %} + {% Blog "https://grafana.com/oss/loki/", "Loki Website" %} + {% Blog "https://grafana.com/docs/loki/latest/?pg=oss-loki&plcmt=quick-links", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/102-logs-management/index.md b/src/roadmaps/devops/content/107-monitoring/102-logs-management/index.md new file mode 100644 index 000000000..71d74b233 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/102-logs-management/index.md @@ -0,0 +1,9 @@ +# Logs Management + +Log management is the process of handling log events generated by all software applications and infrastructure on which they run. It involves log collection, aggregation, parsing, storage, analysis, search, archiving, and disposal, with the ultimate goal of using the data for troubleshooting and gaining business insights, while also ensuring the compliance and security of applications and infrastructure. + +{% resources %} + {% Blog "https://sematext.com/guides/log-management", "Introduction to Logs Management" %} + {% Blog "https://devops.com/log-management-what-devops-teams-need-to-know/", "Log Management: What DevOps Teams Need to Know" %} + {% Blog "https://thenewstack.io/logging-for-kubernetes-what-to-log-and-how-to-log-it/", "Logging for Kubernetes: What to Log and How to Log It" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/107-monitoring/index.md b/src/roadmaps/devops/content/107-monitoring/index.md new file mode 100644 index 000000000..b1ae00ab6 --- /dev/null +++ b/src/roadmaps/devops/content/107-monitoring/index.md @@ -0,0 +1,8 @@ +# Monitoring + +DevOps monitoring entails overseeing the entire development process from planning, development, integration and testing, deployment, and operations. It involves a complete and real-time view of the status of applications, services, and infrastructure in the production environment. Features such as real-time streaming, historical replay, and visualizations are critical components of application and service monitoring. + +{% resources %} + {% Blog "https://www.atlassian.com/devops/devops-tools/devops-monitoring", "DevOps Monitoring" %} + {% Blog "https://thenewstack.io/the-hows-whys-and-whats-of-monitoring-microservices/", "The Hows, Whys and Whats of Monitoring Microservices" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/100-aws.md b/src/roadmaps/devops/content/108-cloud-providers/100-aws.md new file mode 100644 index 000000000..67f09256f --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/100-aws.md @@ -0,0 +1,17 @@ +# AWS + +Amazon Web Services has been the market leading cloud computing platform since 2011, ahead of Azure and Google Cloud. AWS offers over 200 services with data centers located all over the globe. + +AWS service is an online platform that provides scalable and cost-effectove cloud computing solutions. It is broadly adopted cloud platform that offers several on-demand operations like compute power, database storage, content delivery and so on. + +{% resources %} + {% Official "https://aws.amazon.com/", "AWS Website" %} + {% Official "https://docs.aws.amazon.com/", "AWS Documentation" %} + {% Blog "https://portal.aws.amazon.com/billing/signup", "Sign up for AWS" %} + {% Blog "https://d1.awsstatic.com/training-and-certification/ramp-up_guides/Ramp-Up_Guide_CloudPractitioner.pdf", "AWS Ramp Up Guide" %} + {% Blog "https://explore.skillbuilder.aws/learn/course/external/view/elearning/134/aws-cloud-practitioner-essentials", "Cloud Practitioner Essentials" %} + {% Blog "https://www.simplilearn.com/tutorials/aws-tutorial/what-is-aws", "AWS Guide by SimpliLearn" %} + {% Blog "https://www.youtube.com/watch?v=k1RI5locZE4&t=129s", "AWS Tutorial for Beginners" %} + {% Blog "https://www.coursera.org/learn/aws-cloud-technical-essentials?specialization=aws-devops", "AWS Course for Beginners" %} + {% Blog "https://www.coursera.org/specializations/aws-devops?#courses", "DevOps on AWS Course " %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/101-google-cloud.md b/src/roadmaps/devops/content/108-cloud-providers/101-google-cloud.md new file mode 100644 index 000000000..ad78ff2f7 --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/101-google-cloud.md @@ -0,0 +1,12 @@ +# Google Cloud + +Google Cloud is Google's cloud computing service offering, providing over 150 products/services to choose from. It consists of a set of physical assets, such as computers and hard disk drives, and virtual resources, such as virtual machines(VMs), that are contained in Google's data centers. It runs on the same infrastructure that Google uses internally for its end-user products, such as Search, Gmail, Google Drive, and YouTube. + +{% resources %} + {% Official "https://cloud.google.com/", "Google Cloud Website" %} + {% Official "https://cloud.google.com/docs", "Official Documentation" %} + {% Blog "https://cloud.google.com/docs/get-started/", "Google Cloud Get Started Guide" %} + {% Blog "https://www.coursera.org/professional-certificates/cloud-engineering-gcp#courses", "Coursera Complete Course for Google Cloud " %} + {% Blog "https://www.youtube.com/watch?v=IUU6OR8yHCc", "Google Cloud by Edureka on You-Tube" %} + {% Blog "https://thenewstack.io/5-tips-to-become-a-google-cloud-certified-professional-architect/", "5 Tips to Become a Google Cloud Certified Professional Architect" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/102-azure.md b/src/roadmaps/devops/content/108-cloud-providers/102-azure.md new file mode 100644 index 000000000..1e69260dc --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/102-azure.md @@ -0,0 +1,10 @@ +# Azure + +Microsoft Azure is a cloud computing service operated by Microsoft. Azure currently provides more than 200 products and cloud services. + +{% resources %} + {% Official "https://azure.microsoft.com/en-us/", "Azure Website" %} + {% Official "https://docs.microsoft.com/en-us/azure/", "Official Documentation" %} + {% Blog "https://azure.microsoft.com/en-ca/get-started/#explore-azure", "Azure Get Started Guide" %} + {% Blog "https://azure.microsoft.com/en-us/explore/", "Get to know Azure" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/103-heroku.md b/src/roadmaps/devops/content/108-cloud-providers/103-heroku.md new file mode 100644 index 000000000..22974d302 --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/103-heroku.md @@ -0,0 +1,9 @@ +# Heroku + +Heroku is a cloud platform as a service subsidiary of Salesforce. Heroku officially supports Node.js, Ruby, Java, PHP, Python, Go, Scala and Clojure, along with any language that runs on Linux via a third-party build pack. + +{% resources %} + {% Official "https://www.heroku.com/", "Heroku Website" %} + {% Official "https://devcenter.heroku.com/", "Official Documentation" %} + {% Blog "https://devcenter.heroku.com/start", "Heroku Get Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/104-albaba-cloud.md b/src/roadmaps/devops/content/108-cloud-providers/104-albaba-cloud.md new file mode 100644 index 000000000..f8b2c574e --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/104-albaba-cloud.md @@ -0,0 +1,9 @@ +# Alibaba Cloud + +Alibaba Cloud is a cloud computing service, offering over 100 products and services with data centers in 24 regions and 74 availability zones around the world. + +{% resources %} + {% Official "https://www.alibabacloud.com/", "Alibaba Cloud Website" %} + {% Official "https://www.alibabacloud.com/help/en/", "Official Documentation" %} + {% Blog "https://www.alibabacloud.com/getting-started", "Alibaba Cloud Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/104-digital-ocean.md b/src/roadmaps/devops/content/108-cloud-providers/104-digital-ocean.md new file mode 100644 index 000000000..d7ded80fb --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/104-digital-ocean.md @@ -0,0 +1,9 @@ +# DigitalOcean + +DigitalOcean is a cloud computing service offering products and services in Compute, Storage, Managed Databases, Containers & Images and Networking. + +{% resources %} + {% Official "https://www.digitalocean.com/", "DigitalOcean Website" %} + {% Official "https://docs.digitalocean.com/products/", "Official Documentation" %} + {% Blog "https://docs.digitalocean.com/products/getting-started/", "DigitalOcean Get Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/105-linode.md b/src/roadmaps/devops/content/108-cloud-providers/105-linode.md new file mode 100644 index 000000000..e0abe4c8c --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/105-linode.md @@ -0,0 +1,9 @@ +# Linode + +Linode is a cloud computing service owned by Akamai Technologies. Linode positions itself as an alternative to AWS, GCP and Azure by offering core services without complexity for most workloads. + +{% resources %} + {% Official "https://www.linode.com/", "Linode Website" %} + {% Official "https://www.linode.com/docs/", "Official Documentation" %} + {% Blog "https://www.linode.com/docs/guides/getting-started/", "Linode Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/106-vultr.md b/src/roadmaps/devops/content/108-cloud-providers/106-vultr.md new file mode 100644 index 000000000..787169e01 --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/106-vultr.md @@ -0,0 +1,8 @@ +# Vultr + +Vultr is an infrastructure focussed cloud computing service, available in 25 locations worldwide. Vultur compute offers 100% SSD and high performance Intel vCPUs. + +{% resources %} + {% Official "https://www.vultr.com/", "Vultr Website" %} + {% Official "https://www.vultr.com/docs/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md b/src/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md new file mode 100644 index 000000000..6cb8cbea3 --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md @@ -0,0 +1,14 @@ +# IBM Cloud + +IBM cloud computing is a set of cloud computing services that offers both platform as a service (PaaS) and infrastructure as a service (IaaS). IBM Cloud supports various languages and frameworks such as Go, Java™, Node.js, Python and Swift. + +{% resources %} + {% Official "https://www.ibm.com/cloud", "IBM cloud" %} + {% Official "https://cloud.ibm.com/docs", "IBM Cloud Documentation" %} + {% Course "https://www.coursera.org/learn/ibm-cloud-essentials", "IBM Cloud Essentials" %} + {% Course "https://www.ibm.com/training/cloud", "IBM Cloud Training" %} + {% Blog "https://www.youtube.com/watch?v=HzugDzl2cfg", "Introduction to IBM Cloud" %} + {% Blog "https://www.youtube.com/watch?v=Bsy6mhRc7ZA", "Developing in IBM Cloud" %} + {% Blog "https://youtube.com/playlist?list=PLmesOgYt3nKCfsXqx-A5k1bP7t146U4rz", "IBM Cloud Foundation Skills Series" %} + {% Blog "https://developer.ibm.com/components/cloud-ibm/tutorials/", "The Beginners Guide to IBM Cloud" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/108-cloud-providers/index.md b/src/roadmaps/devops/content/108-cloud-providers/index.md new file mode 100644 index 000000000..ed1220bcb --- /dev/null +++ b/src/roadmaps/devops/content/108-cloud-providers/index.md @@ -0,0 +1,8 @@ +# Cloud Providers + +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. + +{% resources %} + {% Blog "https://www.techtarget.com/searchitchannel/definition/cloud-service-provider-cloud-provider", "Cloud service provider" %} + {% Blog "https://www.redhat.com/en/topics/cloud-computing/what-are-cloud-providers", "What are Cloud Providers?" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/109-availability.md b/src/roadmaps/devops/content/109-availability.md new file mode 100644 index 000000000..759ca4eb2 --- /dev/null +++ b/src/roadmaps/devops/content/109-availability.md @@ -0,0 +1,10 @@ +# Availability + +Availability is the percentage of time that a system is functional and working as intended, generally referred to as uptime. Availability can be affected by hardware or software errors, infrastructure problems, malicious attacks, and system load. Many cloud providers typically offer their users a service level agreement (SLA) that specifies the exact percentages of promised uptime/downtime. Availability is related to reliability in this sense. For example, a company might promise 99.99% uptime for their services. + +To achieve high levels of uptime, it is important to eliminate single points of failure so that a single device failure does not disrupt the entire service. High availability in the cloud is often achieved by creating clusters. Clusters are groups of devices (such as servers) that all have access to the same shared storage and function as one single server to provide uninterrupted availability. This way, if one server goes down, the others are able to pick up the load until it comes back online. Clusters can range from two servers to even multiple buildings of servers. + +{% resources %} + {% Course "https://codster.io/en/blog/high-availability-in-the-cloud/", "How High Availability Works in the Cloud" %} + {% Course "https://www.sqlservercentral.com/articles/cloud-computing-basics-achieving-high-availability-2", "Techniques for Achieving High Availability" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/110-data-management.md b/src/roadmaps/devops/content/110-data-management.md new file mode 100644 index 000000000..d07ba3de9 --- /dev/null +++ b/src/roadmaps/devops/content/110-data-management.md @@ -0,0 +1,9 @@ +# Data Management + +Data management is the key element of cloud applications, and influences most of the quality attributes. Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. For example, data consistency must be maintained, and data will typically need to be synchronized across different locations. + +Additionally data should be protected at rest, in transit, and via authorized access mechanisms to maintain security assurances of confidentiality, integrity, and availability. Refer to the Azure Security Benchmark Data Protection Control for more information. + +{% resources %} + {% Blog "https://docs.microsoft.com/en-us/azure/architecture/patterns/category/data-management", "Data management patterns" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/111-design-and-implementation.md b/src/roadmaps/devops/content/111-design-and-implementation.md new file mode 100644 index 000000000..2efb74b9f --- /dev/null +++ b/src/roadmaps/devops/content/111-design-and-implementation.md @@ -0,0 +1,8 @@ +# Design and implementation + +Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify administration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services. + + +{% resources %} + {% Blog "https://docs.microsoft.com/en-us/azure/architecture/patterns/category/design-implementation", "Design and implementation patterns" %} +{% endresources %} diff --git a/src/roadmaps/devops/content/112-management-and-monitoring.md b/src/roadmaps/devops/content/112-management-and-monitoring.md new file mode 100644 index 000000000..d5c44058d --- /dev/null +++ b/src/roadmaps/devops/content/112-management-and-monitoring.md @@ -0,0 +1,7 @@ +# Management and Monitoring + +DevOps management and monitoring entails overseeing the entire development process from planning, development, integration and testing, deployment, and operations. It involves a complete and real-time view of the status of applications, services, and infrastructure in the production environment. Features such as real-time streaming, historical replay, and visualizations are critical components of application and service monitoring. + +{% resources %} + {% Blog "https://www.atlassian.com/devops/devops-tools/devops-monitoring", "Management and Monitoring Get Started Guide" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/devops/devops.md b/src/roadmaps/devops/devops.md new file mode 100644 index 000000000..10585dc8f --- /dev/null +++ b/src/roadmaps/devops/devops.md @@ -0,0 +1,55 @@ +--- +jsonUrl: "/jsons/devops.json" +pdfUrl: "/pdfs/devops.pdf" +order: 3 +featuredTitle: "DevOps" +featuredDescription: "Step by step guide for DevOps or operations role in 2022" +title: "DevOps Roadmap" +description: "Step by step guide for DevOps, SRE or any other Operations Role in 2022" +hasTopics: true +dimensions: + width: 968 + height: 2527.46 +sponsor: + url: "https://www.stormforge.io/ebook/getting-started-kubernetes-resource-management-optimization/?utm_medium=referral&utm_source=roadmap-sh&utm_campaign=ebook_get-started-k8s-resource-mgmt" + imageUrl: "https://i.imgur.com/uNJWl4L.png" + title: "Free Kubernetes eBook" + description: "Learn how to manage and optimize Kubernetes resources with this free eBook." +seo: + title: "DevOps Roadmap: Learn to become a DevOps Engineer or SRE" + description: "Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "devops roadmap 2022" + - "sre roadmap 2022" + - "operations roadmap 2022" + - "guide to becoming a devops engineer" + - "devops roadmap" + - "sre roadmap" + - "site reliability engineer roadmap" + - "operations roles" + - "become devops" + - "devops skills" + - "modern devops skills" + - "devops skills test" + - "skills for devops" + - "learn devops" + - "what is devops" + - "what is sre" + - "devops quiz" + - "devops interview questions" +relatedRoadmaps: + - "backend" + - "python" + - "java" + - "golang" + - "javascript" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + diff --git a/src/roadmaps/flutter/content/100-dart-basics/100-dart-pad.md b/src/roadmaps/flutter/content/100-dart-basics/100-dart-pad.md new file mode 100644 index 000000000..c22b9eca7 --- /dev/null +++ b/src/roadmaps/flutter/content/100-dart-basics/100-dart-pad.md @@ -0,0 +1,7 @@ +# Dart pad + +DartPad is an open source tool that lets you play with the Dart language in any modern browser. + +{% resources %} + {% Official "https://dart.dev/tools/dartpad", "DartPad" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/100-dart-basics/101-variables.md b/src/roadmaps/flutter/content/100-dart-basics/101-variables.md new file mode 100644 index 000000000..f63a2879f --- /dev/null +++ b/src/roadmaps/flutter/content/100-dart-basics/101-variables.md @@ -0,0 +1,5 @@ +# Variables + +{% resources %} + {% Official "https://dart.dev/guides/language/language-tour#variables", "Variables" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/100-dart-basics/102-built-in-types.md b/src/roadmaps/flutter/content/100-dart-basics/102-built-in-types.md new file mode 100644 index 000000000..9a9df28ec --- /dev/null +++ b/src/roadmaps/flutter/content/100-dart-basics/102-built-in-types.md @@ -0,0 +1,5 @@ +# Built in types + +{% resources %} + {% Official "https://dart.dev/guides/language/language-tour#built-in-types", "Built-in types" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/100-dart-basics/103-functions.md b/src/roadmaps/flutter/content/100-dart-basics/103-functions.md new file mode 100644 index 000000000..64c43814c --- /dev/null +++ b/src/roadmaps/flutter/content/100-dart-basics/103-functions.md @@ -0,0 +1,5 @@ +# Functions + +{% resources %} + {% Official "https://dart.dev/guides/language/language-tour#functions", "Functions" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/100-dart-basics/104-operators.md b/src/roadmaps/flutter/content/100-dart-basics/104-operators.md new file mode 100644 index 000000000..7bcc3c625 --- /dev/null +++ b/src/roadmaps/flutter/content/100-dart-basics/104-operators.md @@ -0,0 +1,5 @@ +# Operators + +{% resources %} + {% Official "https://dart.dev/guides/language/language-tour#operators", "Operators" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/100-dart-basics/105-control-flow-statements.md b/src/roadmaps/flutter/content/100-dart-basics/105-control-flow-statements.md new file mode 100644 index 000000000..b590122de --- /dev/null +++ b/src/roadmaps/flutter/content/100-dart-basics/105-control-flow-statements.md @@ -0,0 +1,5 @@ +# Control flow statements + +{% resources %} + {% Official "https://dart.dev/guides/language/language-tour#control-flow-statements", "Control flow statements" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/100-dart-basics/index.md b/src/roadmaps/flutter/content/100-dart-basics/index.md new file mode 100644 index 000000000..ccca08145 --- /dev/null +++ b/src/roadmaps/flutter/content/100-dart-basics/index.md @@ -0,0 +1 @@ +# Dart basics \ No newline at end of file diff --git a/src/roadmaps/flutter/content/101-setup-development-environment/100-flutter-cli.md b/src/roadmaps/flutter/content/101-setup-development-environment/100-flutter-cli.md new file mode 100644 index 000000000..9be0d609c --- /dev/null +++ b/src/roadmaps/flutter/content/101-setup-development-environment/100-flutter-cli.md @@ -0,0 +1,7 @@ +# Flutter cli + +The flutter command-line tool is how developers (or IDEs on behalf of developers) interact with Flutter. + +{% resources %} + {% Official "https://docs.flutter.dev/reference/flutter-cli", "The Flutter command-line tool" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/100-vs-code.md b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/100-vs-code.md new file mode 100644 index 000000000..1a84a3845 --- /dev/null +++ b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/100-vs-code.md @@ -0,0 +1 @@ +# Vs code \ No newline at end of file diff --git a/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/101-android-studio.md b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/101-android-studio.md new file mode 100644 index 000000000..3e47e117f --- /dev/null +++ b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/101-android-studio.md @@ -0,0 +1 @@ +# Android studio \ No newline at end of file diff --git a/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/102-intellij-idea.md b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/102-intellij-idea.md new file mode 100644 index 000000000..d27058a25 --- /dev/null +++ b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/102-intellij-idea.md @@ -0,0 +1 @@ +# Intellij idea \ No newline at end of file diff --git a/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/index.md b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/index.md new file mode 100644 index 000000000..9b5b4f7f3 --- /dev/null +++ b/src/roadmaps/flutter/content/101-setup-development-environment/101-ides/index.md @@ -0,0 +1 @@ +# Ides \ No newline at end of file diff --git a/src/roadmaps/flutter/content/101-setup-development-environment/index.md b/src/roadmaps/flutter/content/101-setup-development-environment/index.md new file mode 100644 index 000000000..b9fd3410b --- /dev/null +++ b/src/roadmaps/flutter/content/101-setup-development-environment/index.md @@ -0,0 +1 @@ +# Setup development environment \ No newline at end of file diff --git a/src/roadmaps/flutter/content/102-widgets/100-stateless-widgets.md b/src/roadmaps/flutter/content/102-widgets/100-stateless-widgets.md new file mode 100644 index 000000000..714d7fba3 --- /dev/null +++ b/src/roadmaps/flutter/content/102-widgets/100-stateless-widgets.md @@ -0,0 +1,7 @@ +# Stateless widgets + +A stateless widget never changes. Icon, IconButton, and Text are examples of stateless widgets. + +{% resources %} + {% Official "https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html", "StatelessWidget class" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/102-widgets/101-stateful-widgets.md b/src/roadmaps/flutter/content/102-widgets/101-stateful-widgets.md new file mode 100644 index 000000000..4c7460878 --- /dev/null +++ b/src/roadmaps/flutter/content/102-widgets/101-stateful-widgets.md @@ -0,0 +1,7 @@ +# Stateful widgets + +A stateful widget is dynamic: for example, it can change its appearance in response to events triggered by user interactions or when it receives data. Checkbox, Radio, Slider, InkWell, Form, and TextField are examples of stateful widgets. + +{% resources %} + {% Official "https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html", "StatefulWidget class" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/100-material-widgets.md b/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/100-material-widgets.md new file mode 100644 index 000000000..c202044ff --- /dev/null +++ b/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/100-material-widgets.md @@ -0,0 +1,7 @@ +# Material widgets + +Visual, behavioral, and motion-rich widgets implementing the Material Design guidelines. + +{% resources %} + {% Official "https://docs.flutter.dev/development/ui/widgets/material", "Material Components widgets" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/101-cupertino-widgets.md b/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/101-cupertino-widgets.md new file mode 100644 index 000000000..811906e76 --- /dev/null +++ b/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/101-cupertino-widgets.md @@ -0,0 +1,7 @@ +# Cupertino widgets + +Beautiful and high-fidelity widgets for current iOS design language. + +{% resources %} + {% Official "https://docs.flutter.dev/development/ui/widgets/cupertino", "Cupertino (iOS-style) widgets" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/index.md b/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/index.md new file mode 100644 index 000000000..16ee28556 --- /dev/null +++ b/src/roadmaps/flutter/content/102-widgets/102-styled-widgets/index.md @@ -0,0 +1 @@ +# Styled widgets \ No newline at end of file diff --git a/src/roadmaps/flutter/content/102-widgets/index.md b/src/roadmaps/flutter/content/102-widgets/index.md new file mode 100644 index 000000000..32b1666b5 --- /dev/null +++ b/src/roadmaps/flutter/content/102-widgets/index.md @@ -0,0 +1 @@ +# Widgets \ No newline at end of file diff --git a/src/roadmaps/flutter/content/103-working-with-assets/100-fonts.md b/src/roadmaps/flutter/content/103-working-with-assets/100-fonts.md new file mode 100644 index 000000000..51e38e27f --- /dev/null +++ b/src/roadmaps/flutter/content/103-working-with-assets/100-fonts.md @@ -0,0 +1,7 @@ +# Fonts + +Flutter works with custom fonts and you can apply a custom font across an entire app or to individual widgets. + +{% resources %} + {% Official "https://docs.flutter.dev/cookbook/design/fonts", "Use a custom font" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/103-working-with-assets/101-images.md b/src/roadmaps/flutter/content/103-working-with-assets/101-images.md new file mode 100644 index 000000000..21f168f8e --- /dev/null +++ b/src/roadmaps/flutter/content/103-working-with-assets/101-images.md @@ -0,0 +1,7 @@ +# Images + +Apps can include both code and assets. Flutter uses the pubspec.yaml file, located at the root of your project, to identify assets required by an app. + +{% resources %} + {% Official "https://docs.flutter.dev/development/ui/assets-and-images", "Adding assets and images" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/103-working-with-assets/102-other-file-types.md b/src/roadmaps/flutter/content/103-working-with-assets/102-other-file-types.md new file mode 100644 index 000000000..0f8d1f6f5 --- /dev/null +++ b/src/roadmaps/flutter/content/103-working-with-assets/102-other-file-types.md @@ -0,0 +1 @@ +# Other file types \ No newline at end of file diff --git a/src/roadmaps/flutter/content/103-working-with-assets/index.md b/src/roadmaps/flutter/content/103-working-with-assets/index.md new file mode 100644 index 000000000..5bb9fe8ec --- /dev/null +++ b/src/roadmaps/flutter/content/103-working-with-assets/index.md @@ -0,0 +1 @@ +# Working with assets \ No newline at end of file diff --git a/src/roadmaps/flutter/content/104-version-control-systems/100-git.md b/src/roadmaps/flutter/content/104-version-control-systems/100-git.md new file mode 100644 index 000000000..65f57e71e --- /dev/null +++ b/src/roadmaps/flutter/content/104-version-control-systems/100-git.md @@ -0,0 +1 @@ +# Git \ No newline at end of file diff --git a/src/roadmaps/flutter/content/104-version-control-systems/index.md b/src/roadmaps/flutter/content/104-version-control-systems/index.md new file mode 100644 index 000000000..5e0249474 --- /dev/null +++ b/src/roadmaps/flutter/content/104-version-control-systems/index.md @@ -0,0 +1 @@ +# Version control systems \ No newline at end of file diff --git a/src/roadmaps/flutter/content/105-repo-hosting-services/100-github.md b/src/roadmaps/flutter/content/105-repo-hosting-services/100-github.md new file mode 100644 index 000000000..1d347d3e4 --- /dev/null +++ b/src/roadmaps/flutter/content/105-repo-hosting-services/100-github.md @@ -0,0 +1 @@ +# Github \ No newline at end of file diff --git a/src/roadmaps/flutter/content/105-repo-hosting-services/index.md b/src/roadmaps/flutter/content/105-repo-hosting-services/index.md new file mode 100644 index 000000000..ca921962f --- /dev/null +++ b/src/roadmaps/flutter/content/105-repo-hosting-services/index.md @@ -0,0 +1 @@ +# Repo hosting services \ No newline at end of file diff --git a/src/roadmaps/flutter/content/106-design-principles/100-dependency-injection.md b/src/roadmaps/flutter/content/106-design-principles/100-dependency-injection.md new file mode 100644 index 000000000..450bde1c7 --- /dev/null +++ b/src/roadmaps/flutter/content/106-design-principles/100-dependency-injection.md @@ -0,0 +1 @@ +# Dependency injection \ No newline at end of file diff --git a/src/roadmaps/flutter/content/106-design-principles/101-design-patterns.md b/src/roadmaps/flutter/content/106-design-principles/101-design-patterns.md new file mode 100644 index 000000000..9dfa41d0d --- /dev/null +++ b/src/roadmaps/flutter/content/106-design-principles/101-design-patterns.md @@ -0,0 +1 @@ +# Design patterns \ No newline at end of file diff --git a/src/roadmaps/flutter/content/106-design-principles/102-solid-principles.md b/src/roadmaps/flutter/content/106-design-principles/102-solid-principles.md new file mode 100644 index 000000000..43294fac3 --- /dev/null +++ b/src/roadmaps/flutter/content/106-design-principles/102-solid-principles.md @@ -0,0 +1 @@ +# Solid principles \ No newline at end of file diff --git a/src/roadmaps/flutter/content/106-design-principles/103-oop.md b/src/roadmaps/flutter/content/106-design-principles/103-oop.md new file mode 100644 index 000000000..70389d826 --- /dev/null +++ b/src/roadmaps/flutter/content/106-design-principles/103-oop.md @@ -0,0 +1 @@ +# Oop \ No newline at end of file diff --git a/src/roadmaps/flutter/content/106-design-principles/index.md b/src/roadmaps/flutter/content/106-design-principles/index.md new file mode 100644 index 000000000..abb0c6c9d --- /dev/null +++ b/src/roadmaps/flutter/content/106-design-principles/index.md @@ -0,0 +1 @@ +# Design principles \ No newline at end of file diff --git a/src/roadmaps/flutter/content/107-package-manager/100-pub-dev.md b/src/roadmaps/flutter/content/107-package-manager/100-pub-dev.md new file mode 100644 index 000000000..a97922634 --- /dev/null +++ b/src/roadmaps/flutter/content/107-package-manager/100-pub-dev.md @@ -0,0 +1,8 @@ +# Pub dev + +Flutter supports using shared packages contributed by other developers to the Flutter and Dart ecosystems. + +{% resources %} + {% Official "https://pub.dev/", "pub.dev" %} + {% Official "https://docs.flutter.dev/development/packages-and-plugins/using-packages", "Using packages" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/107-package-manager/101-flutter-pub-dart-pub.md b/src/roadmaps/flutter/content/107-package-manager/101-flutter-pub-dart-pub.md new file mode 100644 index 000000000..e7a99cb88 --- /dev/null +++ b/src/roadmaps/flutter/content/107-package-manager/101-flutter-pub-dart-pub.md @@ -0,0 +1 @@ +# Flutter pub dart pub \ No newline at end of file diff --git a/src/roadmaps/flutter/content/107-package-manager/index.md b/src/roadmaps/flutter/content/107-package-manager/index.md new file mode 100644 index 000000000..8acc9674a --- /dev/null +++ b/src/roadmaps/flutter/content/107-package-manager/index.md @@ -0,0 +1 @@ +# Package manager \ No newline at end of file diff --git a/src/roadmaps/flutter/content/108-working-with-apis/100-json.md b/src/roadmaps/flutter/content/108-working-with-apis/100-json.md new file mode 100644 index 000000000..b5416c3ea --- /dev/null +++ b/src/roadmaps/flutter/content/108-working-with-apis/100-json.md @@ -0,0 +1,7 @@ +# Json + +JSON (JavaScript Object Notation) is a simple data interchange format used to communicate with server, store and retrieve data from it. + +{% resources %} + {% Official "https://docs.flutter.dev/development/data-and-backend/json", "JSON and serialization" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/108-working-with-apis/101-web-sockets.md b/src/roadmaps/flutter/content/108-working-with-apis/101-web-sockets.md new file mode 100644 index 000000000..93abd94a2 --- /dev/null +++ b/src/roadmaps/flutter/content/108-working-with-apis/101-web-sockets.md @@ -0,0 +1,7 @@ +# Web sockets + +In addition to normal HTTP requests, you can connect to servers using WebSockets. WebSockets allow for two-way communication with a server without polling. + +{% resources %} + {% Official "https://docs.flutter.dev/cookbook/networking/web-sockets", "Work with WebSockets" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/108-working-with-apis/102-graphql.md b/src/roadmaps/flutter/content/108-working-with-apis/102-graphql.md new file mode 100644 index 000000000..92b738b69 --- /dev/null +++ b/src/roadmaps/flutter/content/108-working-with-apis/102-graphql.md @@ -0,0 +1 @@ +# Graphql \ No newline at end of file diff --git a/src/roadmaps/flutter/content/108-working-with-apis/103-restful-apis.md b/src/roadmaps/flutter/content/108-working-with-apis/103-restful-apis.md new file mode 100644 index 000000000..3d1aa94c8 --- /dev/null +++ b/src/roadmaps/flutter/content/108-working-with-apis/103-restful-apis.md @@ -0,0 +1,10 @@ +# REST + +REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. + +{% resources %} + {% Blog "https://www.codecademy.com/article/what-is-rest", "What is REST?" %} + {% Blog "https://www.redhat.com/en/topics/api/what-is-a-rest-api", "What is a REST API?" %} + {% Blog "https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm", "Roy Fieldings dissertation chapter, Representational State Transfer (REST)" %} + {% Course "https://restapitutorial.com/", "Learn REST: A RESTful Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/108-working-with-apis/index.md b/src/roadmaps/flutter/content/108-working-with-apis/index.md new file mode 100644 index 000000000..d17a947bb --- /dev/null +++ b/src/roadmaps/flutter/content/108-working-with-apis/index.md @@ -0,0 +1 @@ +# Working with apis \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/100-sqlite.md b/src/roadmaps/flutter/content/109-storage/100-sqlite.md new file mode 100644 index 000000000..fc6d5f5ee --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/100-sqlite.md @@ -0,0 +1 @@ +# Sqlite \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/101-shared-preferences.md b/src/roadmaps/flutter/content/109-storage/101-shared-preferences.md new file mode 100644 index 000000000..31ee54a19 --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/101-shared-preferences.md @@ -0,0 +1 @@ +# Shared preferences \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/102-firebase/100-authentication.md b/src/roadmaps/flutter/content/109-storage/102-firebase/100-authentication.md new file mode 100644 index 000000000..66a783b30 --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/102-firebase/100-authentication.md @@ -0,0 +1 @@ +# Authentication \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/102-firebase/101-storage.md b/src/roadmaps/flutter/content/109-storage/102-firebase/101-storage.md new file mode 100644 index 000000000..19c72df0c --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/102-firebase/101-storage.md @@ -0,0 +1 @@ +# Storage \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/102-firebase/102-firestore.md b/src/roadmaps/flutter/content/109-storage/102-firebase/102-firestore.md new file mode 100644 index 000000000..451da36b4 --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/102-firebase/102-firestore.md @@ -0,0 +1 @@ +# Firestore \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/102-firebase/103-push-notifications.md b/src/roadmaps/flutter/content/109-storage/102-firebase/103-push-notifications.md new file mode 100644 index 000000000..90f8b6ee9 --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/102-firebase/103-push-notifications.md @@ -0,0 +1 @@ +# Push notifications \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/102-firebase/104-remote-config.md b/src/roadmaps/flutter/content/109-storage/102-firebase/104-remote-config.md new file mode 100644 index 000000000..8da59e4e0 --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/102-firebase/104-remote-config.md @@ -0,0 +1 @@ +# Remote config \ No newline at end of file diff --git a/src/roadmaps/flutter/content/109-storage/102-firebase/index.md b/src/roadmaps/flutter/content/109-storage/102-firebase/index.md new file mode 100644 index 000000000..939da83cf --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/102-firebase/index.md @@ -0,0 +1,7 @@ +# Firebase + +Firebase is a Backend-as-a-Service (BaaS) app development platform that provides hosted backend services such as a realtime database, cloud storage, authentication, crash reporting, machine learning, remote configuration, and hosting for your static files. + +{% resources %} + {% Official "https://docs.flutter.dev/development/data-and-backend/firebase", "Firebase" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/109-storage/index.md b/src/roadmaps/flutter/content/109-storage/index.md new file mode 100644 index 000000000..19c72df0c --- /dev/null +++ b/src/roadmaps/flutter/content/109-storage/index.md @@ -0,0 +1 @@ +# Storage \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/100-core-libraries.md b/src/roadmaps/flutter/content/110-advanced-dart/100-core-libraries.md new file mode 100644 index 000000000..7112349e8 --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/100-core-libraries.md @@ -0,0 +1,7 @@ +# Core libraries + +Dart has a rich set of core libraries that provide essentials for many everyday programming tasks such as working on collections of objects (dart:collection), making calculations (dart:math), and encoding/decoding data (dart:convert). + +{% resources %} + {% Official "https://dart.dev/guides/libraries", "Core libraries" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/110-advanced-dart/101-lists.md b/src/roadmaps/flutter/content/110-advanced-dart/101-lists.md new file mode 100644 index 000000000..96bf734a5 --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/101-lists.md @@ -0,0 +1 @@ +# Lists \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/102-collections.md b/src/roadmaps/flutter/content/110-advanced-dart/102-collections.md new file mode 100644 index 000000000..7aa0e5d6f --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/102-collections.md @@ -0,0 +1 @@ +# Collections \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/103-lambdas.md b/src/roadmaps/flutter/content/110-advanced-dart/103-lambdas.md new file mode 100644 index 000000000..7a387ef1f --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/103-lambdas.md @@ -0,0 +1 @@ +# Lambdas \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/104-functional-programming.md b/src/roadmaps/flutter/content/110-advanced-dart/104-functional-programming.md new file mode 100644 index 000000000..7b47547b9 --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/104-functional-programming.md @@ -0,0 +1 @@ +# Functional programming \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/105-isolates.md b/src/roadmaps/flutter/content/110-advanced-dart/105-isolates.md new file mode 100644 index 000000000..d05085422 --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/105-isolates.md @@ -0,0 +1 @@ +# Isolates \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/106-async-await.md b/src/roadmaps/flutter/content/110-advanced-dart/106-async-await.md new file mode 100644 index 000000000..b0197a63d --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/106-async-await.md @@ -0,0 +1 @@ +# Async await \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/107-streams.md b/src/roadmaps/flutter/content/110-advanced-dart/107-streams.md new file mode 100644 index 000000000..db4757f0c --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/107-streams.md @@ -0,0 +1 @@ +# Streams \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/108-futures.md b/src/roadmaps/flutter/content/110-advanced-dart/108-futures.md new file mode 100644 index 000000000..a15149f0a --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/108-futures.md @@ -0,0 +1 @@ +# Futures \ No newline at end of file diff --git a/src/roadmaps/flutter/content/110-advanced-dart/index.md b/src/roadmaps/flutter/content/110-advanced-dart/index.md new file mode 100644 index 000000000..bf550432b --- /dev/null +++ b/src/roadmaps/flutter/content/110-advanced-dart/index.md @@ -0,0 +1 @@ +# Advanced dart \ No newline at end of file diff --git a/src/roadmaps/flutter/content/111-state-management/100-provider.md b/src/roadmaps/flutter/content/111-state-management/100-provider.md new file mode 100644 index 000000000..5660becf4 --- /dev/null +++ b/src/roadmaps/flutter/content/111-state-management/100-provider.md @@ -0,0 +1,8 @@ +# Provider + +Provider is a wrapper around InheritedWidget (base class for widgets that efficiently propagate information down the tree) to make them easier to use and more reusable. + +{% resources %} + {% Official "https://pub.dev/packages/provider", "provider" %} + {% Official "https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple", "Simple app state management" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/111-state-management/101-bloc.md b/src/roadmaps/flutter/content/111-state-management/101-bloc.md new file mode 100644 index 000000000..07b668da7 --- /dev/null +++ b/src/roadmaps/flutter/content/111-state-management/101-bloc.md @@ -0,0 +1 @@ +# Bloc \ No newline at end of file diff --git a/src/roadmaps/flutter/content/111-state-management/102-flutter-bloc.md b/src/roadmaps/flutter/content/111-state-management/102-flutter-bloc.md new file mode 100644 index 000000000..18c0bd2e9 --- /dev/null +++ b/src/roadmaps/flutter/content/111-state-management/102-flutter-bloc.md @@ -0,0 +1,8 @@ +# Flutter bloc + +State management library exposing widgets which can help handle all possible states of the application. + +{% resources %} + {% Official "https://bloclibrary.dev/#/flutterbloccoreconcepts", "Core Concepts" %} + {% Official "https://pub.dev/packages/flutter_bloc", "flutter_bloc" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/111-state-management/103-velocity-x.md b/src/roadmaps/flutter/content/111-state-management/103-velocity-x.md new file mode 100644 index 000000000..bbab907fc --- /dev/null +++ b/src/roadmaps/flutter/content/111-state-management/103-velocity-x.md @@ -0,0 +1 @@ +# Velocity x \ No newline at end of file diff --git a/src/roadmaps/flutter/content/111-state-management/104-get-x.md b/src/roadmaps/flutter/content/111-state-management/104-get-x.md new file mode 100644 index 000000000..737b5398a --- /dev/null +++ b/src/roadmaps/flutter/content/111-state-management/104-get-x.md @@ -0,0 +1 @@ +# Get x \ No newline at end of file diff --git a/src/roadmaps/flutter/content/111-state-management/105-redux.md b/src/roadmaps/flutter/content/111-state-management/105-redux.md new file mode 100644 index 000000000..87fef8e93 --- /dev/null +++ b/src/roadmaps/flutter/content/111-state-management/105-redux.md @@ -0,0 +1,7 @@ +# Redux + +A set of utilities that allow you to easily consume a Redux Store to build Flutter Widgets. + +{% resources %} + {% Official "https://pub.dev/packages/flutter_redux", "flutter_redux" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/111-state-management/index.md b/src/roadmaps/flutter/content/111-state-management/index.md new file mode 100644 index 000000000..c9ab9d07b --- /dev/null +++ b/src/roadmaps/flutter/content/111-state-management/index.md @@ -0,0 +1 @@ +# State management \ No newline at end of file diff --git a/src/roadmaps/flutter/content/112-animations/100-curved-animations.md b/src/roadmaps/flutter/content/112-animations/100-curved-animations.md new file mode 100644 index 000000000..436fb09de --- /dev/null +++ b/src/roadmaps/flutter/content/112-animations/100-curved-animations.md @@ -0,0 +1 @@ +# Curved animations \ No newline at end of file diff --git a/src/roadmaps/flutter/content/112-animations/101-animation-controller.md b/src/roadmaps/flutter/content/112-animations/101-animation-controller.md new file mode 100644 index 000000000..ede58cc73 --- /dev/null +++ b/src/roadmaps/flutter/content/112-animations/101-animation-controller.md @@ -0,0 +1 @@ +# Animation controller \ No newline at end of file diff --git a/src/roadmaps/flutter/content/112-animations/102-animated-builder.md b/src/roadmaps/flutter/content/112-animations/102-animated-builder.md new file mode 100644 index 000000000..d2fea072d --- /dev/null +++ b/src/roadmaps/flutter/content/112-animations/102-animated-builder.md @@ -0,0 +1 @@ +# Animated builder \ No newline at end of file diff --git a/src/roadmaps/flutter/content/112-animations/103-animated-widget.md b/src/roadmaps/flutter/content/112-animations/103-animated-widget.md new file mode 100644 index 000000000..c79e99a5f --- /dev/null +++ b/src/roadmaps/flutter/content/112-animations/103-animated-widget.md @@ -0,0 +1 @@ +# Animated widget \ No newline at end of file diff --git a/src/roadmaps/flutter/content/112-animations/104-hero.md b/src/roadmaps/flutter/content/112-animations/104-hero.md new file mode 100644 index 000000000..772d6d0ea --- /dev/null +++ b/src/roadmaps/flutter/content/112-animations/104-hero.md @@ -0,0 +1,7 @@ +# Hero + + Flying an image from one screen to another is called a hero animation in Flutter, though the same motion is sometimes referred to as a shared element transition. + +{% resources %} + {% Official "https://docs.flutter.dev/development/ui/animations/hero-animations", "Hero animations" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/112-animations/105-opacity.md b/src/roadmaps/flutter/content/112-animations/105-opacity.md new file mode 100644 index 000000000..a6b4e61c6 --- /dev/null +++ b/src/roadmaps/flutter/content/112-animations/105-opacity.md @@ -0,0 +1,7 @@ +# Opacity + +The AnimatedOpacity widget makes it easy to perform opacity animations. + +{% resources %} + {% Official "https://docs.flutter.dev/cookbook/animation/opacity-animation", "Fade a widget in and out" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/112-animations/index.md b/src/roadmaps/flutter/content/112-animations/index.md new file mode 100644 index 000000000..3f3ce35bd --- /dev/null +++ b/src/roadmaps/flutter/content/112-animations/index.md @@ -0,0 +1,7 @@ +# Animations + +Flutter’s animation support makes it easy to implement a variety of animation types. Many widgets, especially Material widgets, come with the standard motion effects defined in their design spec, but it’s also possible to customize these effects. + +{% resources %} + {% Official "https://docs.flutter.dev/development/ui/animations", "Introduction to animations" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/113-testing/100-unit-testing.md b/src/roadmaps/flutter/content/113-testing/100-unit-testing.md new file mode 100644 index 000000000..aded62565 --- /dev/null +++ b/src/roadmaps/flutter/content/113-testing/100-unit-testing.md @@ -0,0 +1,7 @@ +# Unit testing + +Unit tests are handy for verifying the behavior of a single function, method, or class. + +{% resources %} + {% Official "https://docs.flutter.dev/cookbook/testing/unit/introduction", "An introduction to unit testing" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/113-testing/101-widget-testing.md b/src/roadmaps/flutter/content/113-testing/101-widget-testing.md new file mode 100644 index 000000000..684d419db --- /dev/null +++ b/src/roadmaps/flutter/content/113-testing/101-widget-testing.md @@ -0,0 +1,7 @@ +# Widget testing + +Flutter provides necessary tools and libraries to test widget classes. + +{% resources %} + {% Official "https://docs.flutter.dev/cookbook/testing/widget/introduction", "An introduction to widget testing" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/113-testing/102-integration-testing.md b/src/roadmaps/flutter/content/113-testing/102-integration-testing.md new file mode 100644 index 000000000..dfe9f05e5 --- /dev/null +++ b/src/roadmaps/flutter/content/113-testing/102-integration-testing.md @@ -0,0 +1,7 @@ +# Integration testing + +Integration tests check how individual pieces work together as a whole, capture the performance of an application. + +{% resources %} + {% Official "https://docs.flutter.dev/cookbook/testing/integration/introduction", "An introduction to integration testing" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/113-testing/103-tdd.md b/src/roadmaps/flutter/content/113-testing/103-tdd.md new file mode 100644 index 000000000..713a67dfd --- /dev/null +++ b/src/roadmaps/flutter/content/113-testing/103-tdd.md @@ -0,0 +1 @@ +# Tdd \ No newline at end of file diff --git a/src/roadmaps/flutter/content/113-testing/104-bdd.md b/src/roadmaps/flutter/content/113-testing/104-bdd.md new file mode 100644 index 000000000..7884c9a67 --- /dev/null +++ b/src/roadmaps/flutter/content/113-testing/104-bdd.md @@ -0,0 +1 @@ +# Bdd \ No newline at end of file diff --git a/src/roadmaps/flutter/content/113-testing/index.md b/src/roadmaps/flutter/content/113-testing/index.md new file mode 100644 index 000000000..94cfd7d77 --- /dev/null +++ b/src/roadmaps/flutter/content/113-testing/index.md @@ -0,0 +1 @@ +# Testing \ No newline at end of file diff --git a/src/roadmaps/flutter/content/114-reactive-programming/100-rxdart.md b/src/roadmaps/flutter/content/114-reactive-programming/100-rxdart.md new file mode 100644 index 000000000..9da3058a6 --- /dev/null +++ b/src/roadmaps/flutter/content/114-reactive-programming/100-rxdart.md @@ -0,0 +1 @@ +# Rxdart \ No newline at end of file diff --git a/src/roadmaps/flutter/content/114-reactive-programming/index.md b/src/roadmaps/flutter/content/114-reactive-programming/index.md new file mode 100644 index 000000000..4293f0ce4 --- /dev/null +++ b/src/roadmaps/flutter/content/114-reactive-programming/index.md @@ -0,0 +1 @@ +# Reactive programming \ No newline at end of file diff --git a/src/roadmaps/flutter/content/115-dev-tools/100-flutter-inspector.md b/src/roadmaps/flutter/content/115-dev-tools/100-flutter-inspector.md new file mode 100644 index 000000000..29bb9c295 --- /dev/null +++ b/src/roadmaps/flutter/content/115-dev-tools/100-flutter-inspector.md @@ -0,0 +1,7 @@ +# Flutter inspector + +The Flutter widget inspector is a powerful tool for visualizing and exploring Flutter widget trees. + +{% resources %} + {% Official "https://docs.flutter.dev/development/tools/devtools/inspector", "Using the Flutter inspector" %} +{% endresources %} diff --git a/src/roadmaps/flutter/content/115-dev-tools/101-flutter-outline.md b/src/roadmaps/flutter/content/115-dev-tools/101-flutter-outline.md new file mode 100644 index 000000000..2a69c59bc --- /dev/null +++ b/src/roadmaps/flutter/content/115-dev-tools/101-flutter-outline.md @@ -0,0 +1 @@ +# Flutter outline \ No newline at end of file diff --git a/src/roadmaps/flutter/content/115-dev-tools/102-memory-allocation.md b/src/roadmaps/flutter/content/115-dev-tools/102-memory-allocation.md new file mode 100644 index 000000000..30c461238 --- /dev/null +++ b/src/roadmaps/flutter/content/115-dev-tools/102-memory-allocation.md @@ -0,0 +1 @@ +# Memory allocation \ No newline at end of file diff --git a/src/roadmaps/flutter/content/115-dev-tools/index.md b/src/roadmaps/flutter/content/115-dev-tools/index.md new file mode 100644 index 000000000..04f245bda --- /dev/null +++ b/src/roadmaps/flutter/content/115-dev-tools/index.md @@ -0,0 +1 @@ +# Dev tools \ No newline at end of file diff --git a/src/roadmaps/flutter/content/116-flutter-internals/100-render-objects.md b/src/roadmaps/flutter/content/116-flutter-internals/100-render-objects.md new file mode 100644 index 000000000..234207ab6 --- /dev/null +++ b/src/roadmaps/flutter/content/116-flutter-internals/100-render-objects.md @@ -0,0 +1 @@ +# Render objects \ No newline at end of file diff --git a/src/roadmaps/flutter/content/116-flutter-internals/102-immutability.md b/src/roadmaps/flutter/content/116-flutter-internals/102-immutability.md new file mode 100644 index 000000000..cebac1e03 --- /dev/null +++ b/src/roadmaps/flutter/content/116-flutter-internals/102-immutability.md @@ -0,0 +1 @@ +# Immutability \ No newline at end of file diff --git a/src/roadmaps/flutter/content/116-flutter-internals/3-trees.md b/src/roadmaps/flutter/content/116-flutter-internals/3-trees.md new file mode 100644 index 000000000..bb315091b --- /dev/null +++ b/src/roadmaps/flutter/content/116-flutter-internals/3-trees.md @@ -0,0 +1 @@ +# Trees \ No newline at end of file diff --git a/src/roadmaps/flutter/content/116-flutter-internals/index.md b/src/roadmaps/flutter/content/116-flutter-internals/index.md new file mode 100644 index 000000000..cff0819a0 --- /dev/null +++ b/src/roadmaps/flutter/content/116-flutter-internals/index.md @@ -0,0 +1 @@ +# Flutter internals \ No newline at end of file diff --git a/src/roadmaps/flutter/content/117-ci-cd/100-fast-lane.md b/src/roadmaps/flutter/content/117-ci-cd/100-fast-lane.md new file mode 100644 index 000000000..c9279211e --- /dev/null +++ b/src/roadmaps/flutter/content/117-ci-cd/100-fast-lane.md @@ -0,0 +1 @@ +# Fast lane \ No newline at end of file diff --git a/src/roadmaps/flutter/content/117-ci-cd/101-codemagic.md b/src/roadmaps/flutter/content/117-ci-cd/101-codemagic.md new file mode 100644 index 000000000..462e6ba95 --- /dev/null +++ b/src/roadmaps/flutter/content/117-ci-cd/101-codemagic.md @@ -0,0 +1 @@ +# Codemagic \ No newline at end of file diff --git a/src/roadmaps/flutter/content/117-ci-cd/102-bitrise.md b/src/roadmaps/flutter/content/117-ci-cd/102-bitrise.md new file mode 100644 index 000000000..3bd9badb7 --- /dev/null +++ b/src/roadmaps/flutter/content/117-ci-cd/102-bitrise.md @@ -0,0 +1 @@ +# Bitrise \ No newline at end of file diff --git a/src/roadmaps/flutter/content/117-ci-cd/103-github-actions.md b/src/roadmaps/flutter/content/117-ci-cd/103-github-actions.md new file mode 100644 index 000000000..d1cf49177 --- /dev/null +++ b/src/roadmaps/flutter/content/117-ci-cd/103-github-actions.md @@ -0,0 +1 @@ +# Github actions \ No newline at end of file diff --git a/src/roadmaps/flutter/content/117-ci-cd/104-firebase-app-distribution.md b/src/roadmaps/flutter/content/117-ci-cd/104-firebase-app-distribution.md new file mode 100644 index 000000000..2b7624f62 --- /dev/null +++ b/src/roadmaps/flutter/content/117-ci-cd/104-firebase-app-distribution.md @@ -0,0 +1 @@ +# Firebase app distribution \ No newline at end of file diff --git a/src/roadmaps/flutter/content/117-ci-cd/index.md b/src/roadmaps/flutter/content/117-ci-cd/index.md new file mode 100644 index 000000000..edee7d737 --- /dev/null +++ b/src/roadmaps/flutter/content/117-ci-cd/index.md @@ -0,0 +1 @@ +# Ci cd \ No newline at end of file diff --git a/src/roadmaps/flutter/content/118-analytics/100-segment.md b/src/roadmaps/flutter/content/118-analytics/100-segment.md new file mode 100644 index 000000000..af21080cd --- /dev/null +++ b/src/roadmaps/flutter/content/118-analytics/100-segment.md @@ -0,0 +1 @@ +# Segment \ No newline at end of file diff --git a/src/roadmaps/flutter/content/118-analytics/101-mix-panel.md b/src/roadmaps/flutter/content/118-analytics/101-mix-panel.md new file mode 100644 index 000000000..858a50b44 --- /dev/null +++ b/src/roadmaps/flutter/content/118-analytics/101-mix-panel.md @@ -0,0 +1 @@ +# Mix panel \ No newline at end of file diff --git a/src/roadmaps/flutter/content/118-analytics/102-firebase-analytics.md b/src/roadmaps/flutter/content/118-analytics/102-firebase-analytics.md new file mode 100644 index 000000000..391136695 --- /dev/null +++ b/src/roadmaps/flutter/content/118-analytics/102-firebase-analytics.md @@ -0,0 +1 @@ +# Firebase analytics \ No newline at end of file diff --git a/src/roadmaps/flutter/content/118-analytics/103-google-analytics.md b/src/roadmaps/flutter/content/118-analytics/103-google-analytics.md new file mode 100644 index 000000000..e9076212b --- /dev/null +++ b/src/roadmaps/flutter/content/118-analytics/103-google-analytics.md @@ -0,0 +1 @@ +# Google analytics \ No newline at end of file diff --git a/src/roadmaps/flutter/content/118-analytics/index.md b/src/roadmaps/flutter/content/118-analytics/index.md new file mode 100644 index 000000000..eb021f46e --- /dev/null +++ b/src/roadmaps/flutter/content/118-analytics/index.md @@ -0,0 +1 @@ +# Analytics \ No newline at end of file diff --git a/src/roadmaps/flutter/content/119-deployment/100-appstore.md b/src/roadmaps/flutter/content/119-deployment/100-appstore.md new file mode 100644 index 000000000..2c2d8e0a3 --- /dev/null +++ b/src/roadmaps/flutter/content/119-deployment/100-appstore.md @@ -0,0 +1 @@ +# Appstore \ No newline at end of file diff --git a/src/roadmaps/flutter/content/119-deployment/101-guidelines-and-protocols.md b/src/roadmaps/flutter/content/119-deployment/101-guidelines-and-protocols.md new file mode 100644 index 000000000..0fb207f13 --- /dev/null +++ b/src/roadmaps/flutter/content/119-deployment/101-guidelines-and-protocols.md @@ -0,0 +1 @@ +# Guidelines and protocols \ No newline at end of file diff --git a/src/roadmaps/flutter/content/119-deployment/101-playstore.md b/src/roadmaps/flutter/content/119-deployment/101-playstore.md new file mode 100644 index 000000000..1148c476f --- /dev/null +++ b/src/roadmaps/flutter/content/119-deployment/101-playstore.md @@ -0,0 +1 @@ +# Playstore \ No newline at end of file diff --git a/src/roadmaps/flutter/content/119-deployment/index.md b/src/roadmaps/flutter/content/119-deployment/index.md new file mode 100644 index 000000000..7a9e3e037 --- /dev/null +++ b/src/roadmaps/flutter/content/119-deployment/index.md @@ -0,0 +1 @@ +# Deployment \ No newline at end of file diff --git a/src/roadmaps/flutter/flutter.md b/src/roadmaps/flutter/flutter.md new file mode 100644 index 000000000..b4e829b39 --- /dev/null +++ b/src/roadmaps/flutter/flutter.md @@ -0,0 +1,52 @@ +--- +jsonUrl: "/jsons/flutter.json" +pdfUrl: "/pdfs/flutter.pdf" +order: 10 +featuredTitle: "Flutter" +featuredDescription: "Step by step guide to becoming a Flutter Developer in 2022" +title: "Flutter Developer" +description: "Step by step guide to becoming a Flutter developer in 2022" +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 2042.2 +seo: + title: "Learn to become a modern Flutter developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for flutter development. Learn to become a modern Flutter developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a flutter developer" + - "guide to becoming a flutter developer" + - "flutter developer" + - "flutter engineer" + - "flutter skills" + - "guide to flutter" + - "flutter roadmap" + - "flutter skills" + - "flutter skills test" + - "skills for flutter" + - "what is flutter" + - "flutter quiz" + - "flutter interview questions" + - "flutter engineer roadmap" + - "flutter developer roadmap" + - "become a flutter developer" + - "flutter developer career path" + - "flutter developer" + - "modern flutter developer" +relatedRoadmaps: + - "backend" + - "devops" + - "python" + - "golang" + - "java" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + diff --git a/src/roadmaps/golang/content/100-go-basics/100-basic-syntax.md b/src/roadmaps/golang/content/100-go-basics/100-basic-syntax.md new file mode 100644 index 000000000..d7150aebc --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/100-basic-syntax.md @@ -0,0 +1,9 @@ +# Basic Syntax + +Learn about the basic syntax of Go, such as how the go programs are executed, package imports, main function, and so on. Visit the resources listed below + +{% resources %} + {% Blog "https://go.dev/doc/tutorial/getting-started", "Go Tutorial: Getting started" %} + {% Blog "https://gobyexample.com/hello-world", "Go by Example: Hello World" %} + {% Blog "https://www.w3schools.com/go/go_syntax.php", "W3schools : Go Syntax" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/101-variables.md b/src/roadmaps/golang/content/100-go-basics/101-variables.md new file mode 100644 index 000000000..82f311306 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/101-variables.md @@ -0,0 +1,9 @@ +# Variables in Go + +Variable is the name given to a memory location to store a value of a specific [type](https://golangbot.com/types/). Go provides multiple ways to declare and use variables. + +{% resources %} + {% Blog "https://go.dev/tour/basics/8", "Go Variables" %} + {% Blog "https://gobyexample.com/variables", "Go by Example: Variables" %} + {% Blog "https://www.w3schools.com/go/go_variables.php", "w3schools Go variables" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/102-data-types.md b/src/roadmaps/golang/content/100-go-basics/102-data-types.md new file mode 100644 index 000000000..7dc665957 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/102-data-types.md @@ -0,0 +1,11 @@ +# Data Types + +Go is a statically typed programming language, which means each variable has a type defined at first and can only hold values with that type. There are two categories of types in Go: basics types and composite types. + +To learn more about types in Go, visit these resources : + +{% resources %} + {% Blog "https://www.w3schools.com/go/go_data_types.php", "Basic data types" %} + {% Blog "https://go.dev/tour/basics/11", "Tour of Go: types" %} + {% Blog "https://golangbyexample.com/all-data-types-in-golang-with-examples/", "Go types with examples" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/103-for-loop.md b/src/roadmaps/golang/content/100-go-basics/103-for-loop.md new file mode 100644 index 000000000..1f932b961 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/103-for-loop.md @@ -0,0 +1,14 @@ +# For Loop + +Go has only one looping construct, the `for` loop. The basic `for` loop has three components separated by semicolons: + +- the init statement: executed before the first iteration +- the condition expression: evaluated before every iteration +- the post statement: executed at the end of every iteration + +{% resources %} + {% Blog "https://go.dev/tour/flowcontrol/1", "For Loop in Golang" %} + {% Blog "https://go.dev/doc/effective_go#for", "Effective Go: For loop" %} + {% Blog "https://gobyexample.com/for", "Go by Example: For loop" %} + {% Blog "https://yourbasic.org/golang/for-loop/", "5 basic for loop patterns" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/104-range.md b/src/roadmaps/golang/content/100-go-basics/104-range.md new file mode 100644 index 000000000..accf11b14 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/104-range.md @@ -0,0 +1,9 @@ +# Range + +`Range` is used with `For Loops` to iterate over each element in arrays, strings and other data structures . + +{% resources %} + {% Blog "https://go.dev/tour/moretypes/16", "Go Ranges" %} + {% Blog "https://gobyexample.com/range", "Go by Example: Range" %} + {% Blog "https://yourbasic.org/golang/for-loop-range-array-slice-map-channel/", "Go ranges basic patterns" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/106-errors-panic-recover.md b/src/roadmaps/golang/content/100-go-basics/106-errors-panic-recover.md new file mode 100644 index 000000000..d858099e6 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/106-errors-panic-recover.md @@ -0,0 +1,13 @@ +# Errors/Panic/Recover + +In lieu of adding exception handlers, the Go creators exploited Go’s ability to return multiple values. The most commonly used Go technique for issuing errors is to return the error as the last value in a return. + +A panic typically means something went unexpectedly wrong. Mostly used to fail fast on errors that shouldn’t occur during normal operation, or that we aren’t prepared to handle gracefully. + +Panic recovery in Go depends on a feature of the language called deferred functions. Go has the ability to guarantee the execution of a function at the moment its parent function returns. This happens regardless of whether the reason for the parent function’s return is a return statement, the end of the function block, or a panic. + +{% resources %} + {% Blog "https://go.dev/blog/error-handling-and-go", "Error handling and Go" %} + {% Blog "https://go.dev/blog/defer-panic-and-recover", "Go Defer, Panic and Recover" %} + {% Blog "https://earthly.dev/blog/golang-errors/", "Effective error handling in Go" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/107-conditionals.md b/src/roadmaps/golang/content/100-go-basics/107-conditionals.md new file mode 100644 index 000000000..69b2b87d6 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/107-conditionals.md @@ -0,0 +1,14 @@ +# Conditional Statements + +Conditional statements are used to run code only if a certain condition is true; go supports : + + - `if` statements + - `if / else` statements + - `switch` `case` statements + +{% resources %} + {% Blog "https://go.dev/doc/effective_go#if", "Effective Go: if statement" %} + {% Blog "https://yourbasic.org/golang/if-else-statement/", "Basic conditional patterns" %} + {% Blog "https://gobyexample.com/if-else", "Go by Example: If-Else" %} + {% Blog "https://www.golangprograms.com/golang-if-else-statements.html", "Golang programs switch case" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/108-functions.md b/src/roadmaps/golang/content/100-go-basics/108-functions.md new file mode 100644 index 000000000..f5f75fbce --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/108-functions.md @@ -0,0 +1,13 @@ +# Functions + +Discover how functions work in Go, the list of resources below will cover : + + - How to define and call functions in Go? + - Named returns in Go? + - Handle multiple return types. + - Different types of functions in Go. + +{% resources %} + {% Blog "https://gobyexample.com/functions", "Go by Example: Functions" %} + {% Blog "https://www.golangprograms.com/go-language/functions.html", "Functions in go" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/109-packages.md b/src/roadmaps/golang/content/100-go-basics/109-packages.md new file mode 100644 index 000000000..4b5f268b5 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/109-packages.md @@ -0,0 +1,12 @@ +# Packages + +Packages are the most powerful part of the Go language. The purpose of a package is to design and maintain a large number of programs by grouping related features together into single units so that they can be easy to maintain and understand and independent of the other package programs. This modularity allows them to share and reuse. In Go language, every package is defined with a different name and that name is close to their functionality like “strings” package and it contains methods and functions that only related to strings. + +{% resources %} + {% Blog "https://www.golang-book.com/books/intro/11", "How to create a package in Go" %} + {% Blog "https://go.dev/doc/modules/managing-dependencies", "How to manage external dependencies in Go" %} + {% Blog "https://pkg.go.dev/", "Go Packages explorer" %} + {% Official "https://pkg.go.dev/std", "Standard library" %} + {% Blog "https://www.geeksforgeeks.org/packages-in-golang/", "Packages in Golang" %} + {% Blog "https://www.programiz.com/golang/packages", "Go Packages" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/110-type-casting.md b/src/roadmaps/golang/content/100-go-basics/110-type-casting.md new file mode 100644 index 000000000..6e00b6c09 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/110-type-casting.md @@ -0,0 +1,9 @@ +# Type Casting + +Go doesn't support automatic type conversion, but it allows type casting, which is the process of explicitly changing the variable type. To learn more about typecasting, visit these resources : + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/type-casting-or-type-conversion-in-golang/", "Geeks for Geeks: Type casting" %} + {% Blog "https://go.dev/tour/basics/13", "Tour of Go: Type Casting Basics" %} + {% Blog "https://golangdocs.com/type-casting-in-golang", "Go Docs: Type Casting" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/111-type-inference.md b/src/roadmaps/golang/content/100-go-basics/111-type-inference.md new file mode 100644 index 000000000..41236db3f --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/111-type-inference.md @@ -0,0 +1,8 @@ +# Type Inference + +Type inference gives go the capability to detect the type of a value without being explicitly indicated , hence the possibility to declare variables without providing its type at first + +{% resources %} + {% Blog "https://www.callicoder.com/golang-variables-zero-values-type-inference/#type-inference", "Go Variables: Type Inference" %} + {% Blog "https://go.dev/tour/basics/14", "Tour of Go: Type Inference" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/112-arrays.md b/src/roadmaps/golang/content/100-go-basics/112-arrays.md new file mode 100644 index 000000000..96bd7cd81 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/112-arrays.md @@ -0,0 +1,9 @@ +# Arrays + +In Go an `array` is a collection of elements of the same type with a **fixed** size defined when the array is created. + +{% resources %} + {% Official "https://go.dev/tour/moretypes/6", "Go Arrays" %} + {% Blog "https://go.dev/doc/effective_go#arrays", "Effective Go: Arrays" %} + {% Blog "https://youtu.be/YS4e4q9oBaU?t=6473", "Learn Go Programming - Arrays (by freeCodeCamp on YouTube)" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/113-slices.md b/src/roadmaps/golang/content/100-go-basics/113-slices.md new file mode 100644 index 000000000..6afb8ff1b --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/113-slices.md @@ -0,0 +1,10 @@ +# Slices + +Slices are similar to arrays but are more powerful and flexible. Like arrays, slices are also used to store multiple values of the same type in a single variable. However, unlike arrays, the length of a slice can grow and shrink as you see fit. + +{% resources %} + {% Official "https://go.dev/tour/moretypes/7", "Go Slices" %} + {% Blog "https://go.dev/doc/effective_go#slices", "Effective Go: Slices" %} + {% Blog "https://www.w3schools.com/go/go_slices.php", "Slices in Go" %} + {% Blog "https://youtu.be/YS4e4q9oBaU?t=6473", "Learn Go Programming - Slices (by freeCodeCamp on YouTube)" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/100-go-basics/114-maps.md b/src/roadmaps/golang/content/100-go-basics/114-maps.md new file mode 100644 index 000000000..5f8408049 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/114-maps.md @@ -0,0 +1,10 @@ +# Maps + +Maps are the data structure in Go, where we use whenever we want to have mappings between key:value pairs. They have flexibility in terms of removing or adding elements into them. Maps do not allow duplicate entries while data are kept unordered. + +{% resources %} + {% Official "https://go.dev/tour/moretypes/19", "Go Maps" %} + {% Blog "https://go.dev/doc/effective_go#maps", "Effective Go: Maps" %} + {% Blog "https://www.w3schools.com/go/go_maps.php", "Maps in Go" %} + {% Blog "https://www.youtube.com/watch?v=yJE2RC37BF4", "Golang Tutorial #15 - Maps (by Tech With Tim on YouTube)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/100-go-basics/115-make.md b/src/roadmaps/golang/content/100-go-basics/115-make.md new file mode 100644 index 000000000..e1e42f33d --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/115-make.md @@ -0,0 +1,10 @@ +# Make + +Golang's built-in function make, helps us create and initialize slices, maps and channels, depending on the arguments that are provided to the function. + +{% resources %} + {% Blog "https://go.dev/doc/effective_go#allocation_make", "Effective Go: Allocation with make" %} + {% Blog "https://www.golangprograms.com/how-to-create-slice-using-make-function-in-golang.html", "Create a slice with make" %} + {% Blog "https://www.golangprograms.com/golang-package-examples/how-to-create-map-using-the-make-function-in-go.html", "Create a map with make" %} + {% Blog "https://www.programiz.com/golang/channel#channel", "Create a channel with make" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/100-go-basics/116-structs.md b/src/roadmaps/golang/content/100-go-basics/116-structs.md new file mode 100644 index 000000000..8e0333963 --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/116-structs.md @@ -0,0 +1,9 @@ +# Structs + +Structs are user-defined types that help us create a collection of data describing a single entity. + +{% resources %} + {% Official "https://go.dev/tour/moretypes/2", "Go Structs" %} + {% Blog "https://gobyexample.com/structs", "Go by Example: Structs" %} + {% Blog "https://www.youtube.com/watch?v=NMTN543WVQY", "Structs in Go" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/100-go-basics/index.md b/src/roadmaps/golang/content/100-go-basics/index.md new file mode 100644 index 000000000..b079036cc --- /dev/null +++ b/src/roadmaps/golang/content/100-go-basics/index.md @@ -0,0 +1,7 @@ +# Learn the Basics + +Learn the common concepts of Go like variables, loops, conditional statements, functions, data types, and so on. A good starting point for go basics is its Go's official docs. + +{% resources %} + {% Official "https://go.dev/doc/tutorial/", "Official Go Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/101-go-advanced/100-go-modules.md b/src/roadmaps/golang/content/101-go-advanced/100-go-modules.md new file mode 100644 index 000000000..22ff829ba --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/100-go-modules.md @@ -0,0 +1,15 @@ +# Modules + +Go modules are a group of related packages that are versioned and distributed together. They specify the requirements of our project, list all the required dependencies, and help us keep track of the specific versions of installed dependencies. + +Modules are identified by a module path that is declared in the first line of the go.mod file in our project. + +{% resources %} + {% Official "https://go.dev/blog/using-go-modules", "Go Modules" %} + {% Blog "https://www.youtube.com/watch?v=9cV1KESTJRc", "Go Modules" %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-use-go-modules", "DigitalOcean: How to use Go Modules" %} + {% Blog "https://youtu.be/7xSxIwWJ9R4", "Go Modules Explained in 5 Minutes (by Golang Dojo on YouTube)" %} + {% Blog "https://go.dev/doc/tutorial/create-module", "How to create a module in Go" %} + {% Blog "https://go.dev/blog/using-go-modules", "How to use modules in Go" %} + {% Blog "https://jfrog.com/blog/converting-projects-for-go-modules/", "How to modify existing projects to use Go modules" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/101-go-advanced/101-working-with-json.md b/src/roadmaps/golang/content/101-go-advanced/101-working-with-json.md new file mode 100644 index 000000000..59db16b37 --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/101-working-with-json.md @@ -0,0 +1,9 @@ +# Working with json + +JSON (JavaScript Object Notation) is a simple data interchange format. Syntactically it resembles the objects and lists of JavaScript. It is most commonly used for communication between web back-ends and JavaScript programs running in the browser, but it is used in many other places, too. + +{% resources %} + {% Official "https://go.dev/blog/json", "JSON" %} + {% Blog "https://www.sohamkamani.com/golang/json/", "Guide to JSON in Golang" %} + {% Blog "https://mholt.github.io/json-to-go/", "JSON to GO" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/101-go-advanced/102-types-and-type-assertions.md b/src/roadmaps/golang/content/101-go-advanced/102-types-and-type-assertions.md new file mode 100644 index 000000000..bff81ff41 --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/102-types-and-type-assertions.md @@ -0,0 +1,9 @@ +# Types and type assertions + +Type assertions in Golang provide access to the exact type of variable of an interface. + + {% resources %} + {% Official "https://go.dev/tour/methods/15", "Types Assertions " %} + {% Blog "https://www.geeksforgeeks.org/type-assertions-in-golang/", "Type Assertion" %} + {% Blog "https://www.youtube.com/watch?v=NoDRq6Twkts", "Type Assertion In Golang" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/101-go-advanced/103-interfaces.md b/src/roadmaps/golang/content/101-go-advanced/103-interfaces.md new file mode 100644 index 000000000..cf91fd1ef --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/103-interfaces.md @@ -0,0 +1,12 @@ +# Interfaces + +An interface in Go, is a type that defines a set of methods. If we have a type (e.g. struct) that implements that set of methods, then we have a type that implements this interface. + +{% resources %} + {% Official "https://go.dev/tour/methods/9", "Go Interfaces" %} + {% Blog "https://go.dev/doc/effective_go#interfaces", "Effective Go: Interfaces" %} + {% Blog "https://gobyexample.com/interfaces", "Go by Example: Interfaces" %} + {% Blog "https://www.youtube.com/watch?v=lh_Uv2imp14", "Golang Tutorial #22 - Interfaces (by Tech With Tim on YouTube)" %} + {% Blog "https://www.youtube.com/watch?v=KB3ysH8cupY", "Learn Go Interfaces" %} + {% Blog "https://www.youtube.com/watch?v=qJKQZKGZgf0", "Understanding Go Interfaces" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/101-go-advanced/104-context.md b/src/roadmaps/golang/content/101-go-advanced/104-context.md new file mode 100644 index 000000000..37cfd8c64 --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/104-context.md @@ -0,0 +1,11 @@ +# Context + +The `context` package provides a standard way to solve the problem of managing the state during a request. The package satisfies the need for request-scoped data and provides a standardized way to handle: Deadlines, Cancellation Signals, etc. + +{% resources %} + {% Official "https://pkg.go.dev/context", "Go Context" %} + {% Blog "https://gobyexample.com/context", "Go by Example: Context" %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-use-contexts-in-go", "Digital Ocean: How to Use Contexts in Go" %} + {% Blog "https://www.youtube.com/watch?v=LSzR0VEraWw", "Context in Go" %} + {% Blog "https://youtu.be/h2RdcrMLQAo", "Understanding Contexts in Go" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/101-go-advanced/105-goroutines.md b/src/roadmaps/golang/content/101-go-advanced/105-goroutines.md new file mode 100644 index 000000000..05d3ab361 --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/105-goroutines.md @@ -0,0 +1,15 @@ +# Goroutines + +Goroutines allow us to write concurrent programs in Go. Things like web servers handling thousands of requests or a website rendering new pages while also concurrently making network requests are a few example of concurrency. + +In Go, each of these concurrent tasks are called `Goroutines`. + +{% resources %} + {% Official "https://go.dev/tour/concurrency/1", "Goroutines" %} + {% Blog "https://go.dev/doc/effective_go#goroutines", "Effective Go: Goroutines" %} + {% Blog "https://www.geeksforgeeks.org/goroutines-concurrency-in-golang", "Goroutines in Golang" %} + {% Blog "https://www.youtube.com/watch?v=LvgVSSpwND8", "GoRoutines" %} + {% Blog "https://www.youtube.com/watch?v=V-0ifUKCkBI", "Understanding Concurrency" %} + {% Blog "https://gobyexample.com/goroutines", "Go by Example: Goroutines" %} + {% Blog "https://youtu.be/oHIbeTmmTaA", "Golang Goroutine Basics You MUST Learn! (by Golang Dojo on YouTube)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/101-go-advanced/106-channels.md b/src/roadmaps/golang/content/101-go-advanced/106-channels.md new file mode 100644 index 000000000..4fd2fcc78 --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/106-channels.md @@ -0,0 +1,15 @@ +# Channels + +Channels are the pipes that connect concurrent goroutines. You can send values into channels from one goroutine and receive those values into another goroutine. + +Channels are a typed conduit through which you can send and receive values with the channel operator, `<-` . + +{% resources %} + {% Official "https://go.dev/tour/concurrency/2", "Channels" %} + {% Blog "https://go.dev/doc/effective_go#channels", "Effective Go: Channels" %} + {% Blog "https://gobyexample.com/channels", "Go by Example: Channels" %} + {% Blog "https://golangbot.com/channels/", "Channels in Golang" %} + {% Blog "https://www.youtube.com/watch?v=e4bu9g-bYtg", "Channels" %} + {% Blog "https://www.geeksforgeeks.org/channel-in-golang/", "GeeksForGeeks: Channel in Golang" %} + {% Blog "https://youtu.be/LgCmPHqAuf4", "Golang Channel Basics You must Know!" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/101-go-advanced/107-buffer.md b/src/roadmaps/golang/content/101-go-advanced/107-buffer.md new file mode 100644 index 000000000..01e7829ea --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/107-buffer.md @@ -0,0 +1,9 @@ +# Buffer + + The `buffer` belongs to the byte package of the Go language, and we can use these package to manipulate the byte of the string. + + {% resources %} + {% Official "https://pkg.go.dev/bytes#example-Buffer", "Buffer Examples" %} + {% Blog "https://www.educba.com/golang-buffer/", "Buffer" %} + {% Blog "https://www.youtube.com/watch?v=NoDRq6Twkts", "Buffers in Golang" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/101-go-advanced/108-select.md b/src/roadmaps/golang/content/101-go-advanced/108-select.md new file mode 100644 index 000000000..d73902777 --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/108-select.md @@ -0,0 +1,12 @@ +# Select + +The `select` statement lets a goroutine wait on multiple communication operations. + +A `select` blocks until one of its cases can run, then it executes that case. It chooses one at random if multiple are ready. The `select` statement is just like switch statement, but in the select statement, case statement refers to communication, i.e. sent or receive operation on the channel. + +{% resources %} + {% Official "https://go.dev/tour/concurrency/5", "Select" %} + {% Blog "https://gobyexample.com/select", "Go by Example: Select" %} + {% Blog "https://www.geeksforgeeks.org/select-statement-in-go-language/", "Select in Golang" %} + {% Blog "https://www.youtube.com/watch?v=1c7ttSJDMAI", "Select Statement" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/101-go-advanced/109-mutext.md b/src/roadmaps/golang/content/101-go-advanced/109-mutext.md new file mode 100644 index 000000000..d9989bf9b --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/109-mutext.md @@ -0,0 +1,7 @@ +# Mutex + +Go allows us to run code concurrently using goroutines. However, when concurrent processes access the same piece of data, it can lead to [race conditions](https://www.sohamkamani.com/golang/data-races/). Mutexes are data structures provided by the [sync](https://pkg.go.dev/sync/) package. They can help us place a lock on different sections of data so that only one goroutine can access it at a time. + +{% resources %} + {% Blog "https://www.sohamkamani.com/golang/mutex/", " Using a Mutex in Go with Examples" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/101-go-advanced/index.md b/src/roadmaps/golang/content/101-go-advanced/index.md new file mode 100644 index 000000000..4300b2fc0 --- /dev/null +++ b/src/roadmaps/golang/content/101-go-advanced/index.md @@ -0,0 +1 @@ +# Go advanced \ No newline at end of file diff --git a/src/roadmaps/golang/content/102-go-building-clis/100-cobra.md b/src/roadmaps/golang/content/102-go-building-clis/100-cobra.md new file mode 100644 index 000000000..49a4735c5 --- /dev/null +++ b/src/roadmaps/golang/content/102-go-building-clis/100-cobra.md @@ -0,0 +1,9 @@ +# Cobra + +Cobra is a library for creating powerful modern CLI applications. + +{% resources %} + {% Blog "https://github.com/spf13/cobra", "Cobra Github Repo" %} + {% Official "https://cobra.dev/", "Cobra Website" %} + {% Blog "https://pkg.go.dev/github.com/spf13/cobra", "Cobra Package Documentation" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/102-go-building-clis/101-urfave-cli.md b/src/roadmaps/golang/content/102-go-building-clis/101-urfave-cli.md new file mode 100644 index 000000000..feba38430 --- /dev/null +++ b/src/roadmaps/golang/content/102-go-building-clis/101-urfave-cli.md @@ -0,0 +1,10 @@ +# Urfave cli + +Urfave cli is a simple, fast, and fun package for building command line apps in Go. + +{% resources %} + {% Blog "https://github.com/urfave/cli", "Urfave cli Github Repo" %} + {% Official "https://cli.urfave.org/", "Urfave cli Website" %} + {% Blog "https://blog.hackajob.co/how-to-build-cli-in-go/", "How to Build cli in Go" %} + {% Blog "https://zerokspot.com/weblog/2021/01/25/building-a-cli-using-urfave-cli/", "Building CLI using urfave cli" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/102-go-building-clis/index.md b/src/roadmaps/golang/content/102-go-building-clis/index.md new file mode 100644 index 000000000..61a349e4e --- /dev/null +++ b/src/roadmaps/golang/content/102-go-building-clis/index.md @@ -0,0 +1,9 @@ +# Building CLI Applications + +Command line interfaces (CLIs), unlike graphical user interfaces (GUIs), are text-only. Cloud and infrastructure applications are primarily CLI-based due to their easy automation and remote capabilities. + +Go applications are built into a single self contained binary making installing Go applications trivial; specifically, programs written in Go run on any system without requiring any existing libraries, runtimes, or dependencies. And programs written in Go have an immediate startup time—similar to C or C++ but unobtainable with other programming languages. + +{% resources %} + {% Blog "https://go.dev/solutions/clis", "Command-line Interfaces (CLIs)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/103-go-orms/100-gorm.md b/src/roadmaps/golang/content/103-go-orms/100-gorm.md new file mode 100644 index 000000000..428c5e153 --- /dev/null +++ b/src/roadmaps/golang/content/103-go-orms/100-gorm.md @@ -0,0 +1,8 @@ +# Gorm + +The GORM is fantastic ORM library for Golang, aims to be developer friendly. It is an ORM library for dealing with relational databases. This gorm library is developed on the top of database/sql package. The overview and feature of ORM are: Full-Featured ORM (almost) + +{% resources %} + {% Official "https://gorm.io/docs/index.html", "Gorm" %} + {% Official "https://pkg.go.dev/gorm.io/gorm", "Gorm Package" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/103-go-orms/index.md b/src/roadmaps/golang/content/103-go-orms/index.md new file mode 100644 index 000000000..d0c90b88e --- /dev/null +++ b/src/roadmaps/golang/content/103-go-orms/index.md @@ -0,0 +1,5 @@ +# ORMs + +Object–relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data between type systems using object-oriented programming languages. This creates, in effect, a "virtual object database", hence a layer of abstraction, that can be used from within the programming language. + +Most common ORM library in Go is [GORM](https://gorm.io/). \ No newline at end of file diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/100-beego.md b/src/roadmaps/golang/content/104-go-web-frameworks/100-beego.md new file mode 100644 index 000000000..f92572e75 --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/100-beego.md @@ -0,0 +1,8 @@ +# Beego + +Beego is used for rapid development of enterprise application in Go, including RESTful APIs, web apps and backend services. It is inspired by Tornado, Sinatra and Flask. beego has some Go-specific features such as interfaces and struct embedding. + +{% resources %} + {% Blog "https://github.com/beego/beego", "Github Repository" %} + {% Blog "https://beego.vip/quickstart", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/101-gin.md b/src/roadmaps/golang/content/104-go-web-frameworks/101-gin.md new file mode 100644 index 000000000..4ad4ebc7b --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/101-gin.md @@ -0,0 +1,8 @@ +# Gin + +Gin is a high-performance HTTP web framework written in Golang (Go). Gin has a martini-like API and claims to be up to 40 times faster. Gin allows you to build web applications and microservices in Go. + +{% resources %} + {% Official "https://github.com/gin-gonic/gin", "Gin" %} + {% Official "https://pkg.go.dev/github.com/gin-gonic/gin", "Gin Web Framework" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/102-revel.md b/src/roadmaps/golang/content/104-go-web-frameworks/102-revel.md new file mode 100644 index 000000000..c40271d0a --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/102-revel.md @@ -0,0 +1,8 @@ +# Revel + +Revel organizes endpoints into Controllers. They provide easy data binding and form validation. Revel makes Go Templates simple to use at scale. Register functionality to be called before or after actions. + +{% resources %} + {% Official "https://revel.github.io/tutorial/index.html", "Revel" %} + {% Official "https://pkg.go.dev/github.com/revel/revel", "Revel Packages" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/103-echo.md b/src/roadmaps/golang/content/104-go-web-frameworks/103-echo.md new file mode 100644 index 000000000..8d13398ce --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/103-echo.md @@ -0,0 +1,8 @@ +# Echo + +Echo is a performance-focused, extensible, open-source Go web application framework. It is a minimalist web framework that stands between stdlib + router and a full-stack web framework. + +{% resources %} + {% Blog "https://github.com/labstack/echo", "Github Repository" %} + {% Blog "https://echo.labstack.com/", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/104-gorilla.md b/src/roadmaps/golang/content/104-go-web-frameworks/104-gorilla.md new file mode 100644 index 000000000..f68d10491 --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/104-gorilla.md @@ -0,0 +1,8 @@ +# Gorilla + +Gorilla is a web toolkit for the Go programming language that provides useful, composable packages for writing HTTP-based applications. + +{% resources %} + {% Blog "https://github.com/gorilla", "Github Repository" %} + {% Blog "https://www.gorillatoolkit.org/", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/105-gofiber.md b/src/roadmaps/golang/content/104-go-web-frameworks/105-gofiber.md new file mode 100644 index 000000000..3e3c5bb5c --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/105-gofiber.md @@ -0,0 +1,8 @@ +# Gofiber + +Go Fiber is an Express-inspired framework for Golang. Go Fiber is a web framework built on top of fast HTTP. It can be used to handle operations such as routing/endpoints, middleware, server request, etc. + +{% resources %} + {% Blog "https://github.com/gofiber/fiber", "Github Repository" %} + {% Blog "https://docs.gofiber.io/", "Official Website Docs" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/106-buffalo.md b/src/roadmaps/golang/content/104-go-web-frameworks/106-buffalo.md new file mode 100644 index 000000000..7a195c5a2 --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/106-buffalo.md @@ -0,0 +1,8 @@ +# Buffalo + +Buffalo helps you to generate a web project that already has everything from front-end (JavaScript, SCSS, etc.) to the back-end (database, routing, etc.) already hooked up and ready to run. From there it provides easy APIs to build your web application quickly in Go. + +{% resources %} + {% Blog "https://github.com/gobuffalo/buffalo", "Github Repository" %} + {% Blog "https://gobuffalo.io/", "Official Website Docs" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/104-go-web-frameworks/index.md b/src/roadmaps/golang/content/104-go-web-frameworks/index.md new file mode 100644 index 000000000..b40d045c2 --- /dev/null +++ b/src/roadmaps/golang/content/104-go-web-frameworks/index.md @@ -0,0 +1,12 @@ +# Web Frameworks + +There are several famous web frameworks for Go. Most common ones being: + +* Beego +* Gin +* Revel +* Echo + +{% resources %} + {% Blog "https://github.com/diyan/go-web-framework-comparison", "Comparison of Web Frameworks" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/105-go-logging/100-zerolog.md b/src/roadmaps/golang/content/105-go-logging/100-zerolog.md new file mode 100644 index 000000000..7e9803063 --- /dev/null +++ b/src/roadmaps/golang/content/105-go-logging/100-zerolog.md @@ -0,0 +1,9 @@ +# Zerolog + +The zerolog package provides a fast and simple logger dedicated to JSON output. + +Zerolog's API is designed to provide both a great developer experience and stunning performance. Its unique chaining API allows zerolog to write JSON (or CBOR) log events by avoiding allocations and reflection. + +{% resources %} + {% Blog "https://github.com/rs/zerolog", "GitHub Repository" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/105-go-logging/101-zap.md b/src/roadmaps/golang/content/105-go-logging/101-zap.md new file mode 100644 index 000000000..93f347832 --- /dev/null +++ b/src/roadmaps/golang/content/105-go-logging/101-zap.md @@ -0,0 +1,7 @@ +# Zap + +Blazing fast, structured, leveled logging in Go. + +{% resources %} + {% Blog "https://github.com/uber-go/zap", "GitHub Repository" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/105-go-logging/102-apex.md b/src/roadmaps/golang/content/105-go-logging/102-apex.md new file mode 100644 index 000000000..d81068ddc --- /dev/null +++ b/src/roadmaps/golang/content/105-go-logging/102-apex.md @@ -0,0 +1,7 @@ +# Apex + +Structured logging package for Go. + +{% resources %} + {% Blog "https://github.com/apex/log", "GitHub Repository" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/105-go-logging/index.md b/src/roadmaps/golang/content/105-go-logging/index.md new file mode 100644 index 000000000..215ec17e9 --- /dev/null +++ b/src/roadmaps/golang/content/105-go-logging/index.md @@ -0,0 +1,8 @@ +# Logging + +Go has built-in features to make it easier for programmers to implement logging. Third parties have also built additional tools to make logging easier. + +{% resources %} + {% Blog "https://www.honeybadger.io/blog/golang-logging/", "Logging in Go: Choosing a System and Using it" %} + {% Blog "https://www.loggly.com/use-cases/logging-in-golang-how-to-start/", "Logging in Golang – How to Start" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/106-go-realtime-communication/100-melody.md b/src/roadmaps/golang/content/106-go-realtime-communication/100-melody.md new file mode 100644 index 000000000..080cec189 --- /dev/null +++ b/src/roadmaps/golang/content/106-go-realtime-communication/100-melody.md @@ -0,0 +1,7 @@ +# Melody + +Melody is websocket framework based on [github.com/gorilla/websocket](https://github.com/gorilla/websocket) that abstracts away the tedious parts of handling websockets. It gets out of your way so you can write real-time apps. + +{% resources %} + {% Blog "https://github.com/olahol/melody", "GitHub Repository" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/106-go-realtime-communication/101-centrifugo.md b/src/roadmaps/golang/content/106-go-realtime-communication/101-centrifugo.md new file mode 100644 index 000000000..bcbe93b06 --- /dev/null +++ b/src/roadmaps/golang/content/106-go-realtime-communication/101-centrifugo.md @@ -0,0 +1,8 @@ +# Centrifugo + +Centrifugo is an open-source scalable real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, GRPC, SockJS, WebTransport). Centrifugo has the concept of a channel – so it's a user-facing PUB/SUB server. + +{% resources %} + {% Blog "https://github.com/centrifugal/centrifugo", "GitHub Repository" %} + {% Blog "https://centrifugal.dev/docs/getting-started/introduction", "Getting started" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/106-go-realtime-communication/index.md b/src/roadmaps/golang/content/106-go-realtime-communication/index.md new file mode 100644 index 000000000..e32d1e64c --- /dev/null +++ b/src/roadmaps/golang/content/106-go-realtime-communication/index.md @@ -0,0 +1 @@ +# Go realtime communication \ No newline at end of file diff --git a/src/roadmaps/golang/content/107-go-api-clients/100-rest/100-heimdall.md b/src/roadmaps/golang/content/107-go-api-clients/100-rest/100-heimdall.md new file mode 100644 index 000000000..979281ca9 --- /dev/null +++ b/src/roadmaps/golang/content/107-go-api-clients/100-rest/100-heimdall.md @@ -0,0 +1,14 @@ +# Heimdall + + +Heimdall is an HTTP client that helps your application make a large number of requests, at scale. With Heimdall, you can: + +- Use a hystrix-like circuit breaker to control failing requests +- Add synchronous in-memory retries to each request, with the option of setting your own retrier strategy +- Create clients with different timeouts for every request + +All HTTP methods are exposed as a fluent interface. + +{% resources %} + {% Blog "https://github.com/gojek/heimdall", "GitHub Repository" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/107-go-api-clients/100-rest/101-grequests.md b/src/roadmaps/golang/content/107-go-api-clients/100-rest/101-grequests.md new file mode 100644 index 000000000..db0c7af33 --- /dev/null +++ b/src/roadmaps/golang/content/107-go-api-clients/100-rest/101-grequests.md @@ -0,0 +1,14 @@ +# Grequests + + +Golang implementation of Python Grequests library(one of well known HTTP Library in Python). + +Features: +- Responses can be serialized into JSON and XML +- Easy file uploads +- Easy file downloads +- Support for the following HTTP verbs GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS + +{% resources %} + {% Blog "https://github.com/levigross/grequests", "GitHub Repository" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/107-go-api-clients/100-rest/index.md b/src/roadmaps/golang/content/107-go-api-clients/100-rest/index.md new file mode 100644 index 000000000..557c0bb3a --- /dev/null +++ b/src/roadmaps/golang/content/107-go-api-clients/100-rest/index.md @@ -0,0 +1,9 @@ +# REST + +REST (Representational State Transfer) API (Application Programming Interface) is used to deliver user functionality when dealing with websites. HTTP requests are used to communicate with REST APIs so users can navigate a URL website. These URLs can return certain information that is stored as part of the API. + +{% resources %} + {% Blog "https://go.dev/doc/tutorial/web-service-gin", "Tutorial" %} + {% Blog "https://youtube.com/playlist?list=PLzUGFf4GhXBL4GHXVcMMvzgtO8-WEJIoY", "RESTful APIs Series" %} + {% Blog "https://www.geeksforgeeks.org/rest-api-introduction/", "Introduction to RESTful APIs" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/107-go-api-clients/101-graphql/100-graphql-go.md b/src/roadmaps/golang/content/107-go-api-clients/101-graphql/100-graphql-go.md new file mode 100644 index 000000000..d6f84c38f --- /dev/null +++ b/src/roadmaps/golang/content/107-go-api-clients/101-graphql/100-graphql-go.md @@ -0,0 +1,10 @@ +# Graphql go + +A `GraphQL` package for `Go`. + +{% resources %} + {% Official "https://graphql-go.github.io/graphql-go.org/", "Graphql-go homepage" %} + {% Blog "https://pkg.go.dev/github.com/graphql-go/graphql ", "Graphql-go documentation" %} + {% Blog "https://github.com/graphql-go/graphql", "Github Repository" %} + {% Blog "https://www.youtube.com/watch?v=YK7BQfQ84ws", "GraphQL-Go - Golang Tutorial (by TechPractice on YouTube)" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/107-go-api-clients/101-graphql/101-gqlgen.md b/src/roadmaps/golang/content/107-go-api-clients/101-graphql/101-gqlgen.md new file mode 100644 index 000000000..a2f163e6e --- /dev/null +++ b/src/roadmaps/golang/content/107-go-api-clients/101-graphql/101-gqlgen.md @@ -0,0 +1,9 @@ +# Gqlgen + +According to their documentation, it's a Golang library for building GraphQL servers without much effort. + +{% resources %} + {% Official "https://gqlgen.com/", "Gqlgen website documentation" %} + {% Blog "https://99designs.com.au/blog/engineering/gqlgen-a-graphql-server-generator-for-go/", "Introducing gqlgen: a GraphQL Server Generator for Go" %} + {% Blog "https://www.youtube.com/watch?v=O6jYy421tGw", "GraphQL in Go - GQLGen Tutorial (by acklackl on YouTube)" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/107-go-api-clients/101-graphql/index.md b/src/roadmaps/golang/content/107-go-api-clients/101-graphql/index.md new file mode 100644 index 000000000..969db05cb --- /dev/null +++ b/src/roadmaps/golang/content/107-go-api-clients/101-graphql/index.md @@ -0,0 +1,16 @@ +# Graphql + +`GraphQL` is a query language for [APIs](https://developer.mozilla.org/en-US/docs/Glossary/API), it offers a service that prioritizes giving just the data that the client requested and no more. + +Besides, you don't need to be worried about breaking changes, versioning and backwards compatibility like REST APIs. Therefore you can implement your version and auto-document your API just by using `GraphQL`. + +{% resources %} + {% Official "https://graphql.org/", "GraphQL Website" %} + {% Blog "https://graphql.org/learn/", "Learn GraphQL" %} + {% Blog "https://www.graphql.com/tutorials/", "GraphQL Tutorials" %} + {% Blog "https://www.redhat.com/en/topics/api/what-is-graphql", "Red Hat: What is GraphQL?" %} + {% Blog "https://www.digitalocean.com/community/tutorials/an-introduction-to-graphql", "Digital Ocean: An Introduction to GraphQL" %} + {% Blog "https://www.howtographql.com/", "How to GraphQL: The Fullstack Tutorial for GraphQL" %} + {% Blog "https://www.youtube.com/watch?v=ed8SzALpx1Q", "GraphQL Full Course - Novice to Expert (by freeCodeCamp.org on YouTube)" %} + {% Blog "https://www.youtube.com/playlist?list=PLN3n1USn4xln0j_NN9k4j5hS1thsGibKi", "Beginner GraphQL Series (by Ben Awad on YouTube)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/107-go-api-clients/index.md b/src/roadmaps/golang/content/107-go-api-clients/index.md new file mode 100644 index 000000000..656b814e6 --- /dev/null +++ b/src/roadmaps/golang/content/107-go-api-clients/index.md @@ -0,0 +1,7 @@ +# API Clients + +An API client is a set of tools and protocols that operate from an application on a computer. They help you to bypass some operations when developing a web application rather than reinventing the wheel every time. Using a client API is a great way to speed up the development process. + +{% resources %} + {% Blog "https://rapidapi.com/blog/api-glossary/client/", "API Clients" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/108-go-testing-your-apps.md b/src/roadmaps/golang/content/108-go-testing-your-apps.md new file mode 100644 index 000000000..c04b481d4 --- /dev/null +++ b/src/roadmaps/golang/content/108-go-testing-your-apps.md @@ -0,0 +1,10 @@ +# Testing Go Code + +Go has a built-in testing command that we can use to test our program. + +{% resources %} + {% Blog "https://go.dev/doc/tutorial/add-a-test", "Official Go Tutorial: Add a test" %} + {% Blog "https://gobyexample.com/testing", "Go by Example: Testing" %} + {% Blog "https://yourbasic.org/golang/table-driven-unit-test/", "YourBasic Go: Table-driven unit tests" %} + {% Blog "https://quii.gitbook.io/learn-go-with-tests/", "Learn Go with Tests" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/100-watermill.md b/src/roadmaps/golang/content/109-go-microservices/100-watermill.md new file mode 100644 index 000000000..5966939e0 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/100-watermill.md @@ -0,0 +1,8 @@ +# Watermill + +Watermill is an event streaming library for handling asynchronous requests in go. It provides multiple sets of implementations for pub/sub. +e.g: You can use conventional pub/sub implementations like Kafka or RabbitMQ, but also HTTP or MySQL binlog, if that fits your use case. + +{% resources %} + {% Official "https://watermill.io/", "Watermill Website" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/101-rpcx.md b/src/roadmaps/golang/content/109-go-microservices/101-rpcx.md new file mode 100644 index 000000000..9e665bac5 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/101-rpcx.md @@ -0,0 +1,13 @@ +# Rpcx + +Rpcx is a RPC (Remote Procedure Call) framework like Alibaba Dubbo and Weibo Motan. Some of the advantages on using Rpcx: +- Simple: easy to learn, easy to develop, easy to intergate and easy to deploy +- Performance: high performance (>= grpc-go) +- Cross-platform: support raw slice of bytes, JSON, Protobuf and MessagePack. Theoretically it can be used with java, php, python, c/c++, node.js, c# and other platforms +- Service discovery and service governance: support zookeeper, etcd and consul. + +{% resources %} + {% Blog "https://en.doc.rpcx.io/", "Rpcx English Documentation" %} + {% Official "https://github.com/smallnest/rpcx", "Rpcx Github" %} + {% Official "https://rpcx.io/", "Rpcx Official Website" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/102-go-kit.md b/src/roadmaps/golang/content/109-go-microservices/102-go-kit.md new file mode 100644 index 000000000..c3c4961bb --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/102-go-kit.md @@ -0,0 +1,9 @@ +# Go kit + +Go kit is a programming toolkit for building microservices (or elegant monoliths) in Go. it solves common problems in distributed systems and application architecture so you can focus on delivering business value. + +{% resources %} + {% Official "https://gokit.io/", "Go-kit Website" %} + {% Blog "https://dev.to/eminetto/microservices-in-go-using-the-go-kit-jjf", "Microservices in Go using the Go kit" %} + {% Blog "https://www.youtube.com/watch?v=sjd2ePF3CuQ", "Building Microservices with the Go Kit Toolkit" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/103-micro.md b/src/roadmaps/golang/content/109-go-microservices/103-micro.md new file mode 100644 index 000000000..96c0b2e11 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/103-micro.md @@ -0,0 +1,8 @@ +# Micro + +It is an API first development platform. It leverages the microservices architecture pattern and provides a set of services which act as the building blocks of a platform. + +{% resources %} + {% Official "https://micro.dev/", "Offical Website" %} + {% Official "https://github.com/micro/micro", "Micro Github" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/104-go-zero.md b/src/roadmaps/golang/content/109-go-microservices/104-go-zero.md new file mode 100644 index 000000000..5b1fedb48 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/104-go-zero.md @@ -0,0 +1,9 @@ +# go-zero + +go-zero is a web and rpc framework with lots of engineering best practices builtin. It’s born to ensure the stability of the busy services with resilience design, and has been serving sites with tens of millions users for years. + +{% resources %} + {% Official "https://go-zero.dev/", "Go-zero" %} + {% Official "https://go-zero.dev/docs/introduction", "Go-zero Docs" %} + {% Blog "https://github.com/zeromicro/go-zero", "GitHub Repository" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/golang/content/109-go-microservices/105-protocol-buffers.md b/src/roadmaps/golang/content/109-go-microservices/105-protocol-buffers.md new file mode 100644 index 000000000..e45c0ebbe --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/105-protocol-buffers.md @@ -0,0 +1,15 @@ +# Protocol buffers + +Protocol Buffers(Protobuf) is a free, open-source, language-neutral, platform-neutral, extensible data format used to serialize structured data. It’s like JSON, except it's smaller and faster, and it generates native language bindings. + +Some of the advantages of using protocol buffers include: +- Compact data storage +- Fast parsing +- Availability in many programming languages +- Optimized functionality through automatically-generated classes + +{% resources %} + {% Official "https://github.com/protocolbuffers/protobuf/", "Protobuf Github" %} + {% Official "https://developers.google.com/protocol-buffers/", "Protobuf Doc" %} + {% Blog "https://developers.google.com/protocol-buffers/docs/gotutorial/", "Protobuf with Go" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/106-grpc-go.md b/src/roadmaps/golang/content/109-go-microservices/106-grpc-go.md new file mode 100644 index 000000000..5b75a1238 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/106-grpc-go.md @@ -0,0 +1,9 @@ +# gRPC Go + +Go language implementation of gRPC(gRPC is a technology for implementing RPC APIs). + +{% resources %} + {% Official "https://github.com/grpc/grpc-go/", "gRPC-go Github" %} + {% Official "https://pkg.go.dev/google.golang.org/grpc/", "gRPC-go Doc" %} + {% Blog "https://grpc.io/docs/languages/go/basics/", "Basic tutorial introduction to gRPC in Go." %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/107-grpc-gateway.md b/src/roadmaps/golang/content/109-go-microservices/107-grpc-gateway.md new file mode 100644 index 000000000..d5cb103d2 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/107-grpc-gateway.md @@ -0,0 +1,8 @@ +# Grpc gateway + +gRPC-Gateway creates a layer over gRPC services that will act as a RESTful service to a client. It is a plugin of protoc. It reads a gRPC service definition and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. + +{% resources %} + {% Official "https://github.com/grpc-ecosystem/grpc-gateway/", "Grpc-gateway Github" %} + {% Official "https://grpc-ecosystem.github.io/grpc-gateway/", "Grpc-gateway Doc" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/108-twirp.md b/src/roadmaps/golang/content/109-go-microservices/108-twirp.md new file mode 100644 index 000000000..24b816316 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/108-twirp.md @@ -0,0 +1,10 @@ +# Twirp + +Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON. + +Twirp is similar to gRPC, but without the custom HTTP server and transport implementations: it runs on the standard library's extremely-well-tested-and-high-performance net/http Server. It can run on HTTP 1.1, not just http/2, and supports JSON serialization for easy debugging. + +{% resources %} + {% Blog "https://github.com/twitchtv/twirp", "GitHub Repository" %} + {% Blog "https://twitchtv.github.io/twirp/docs/intro.html", "Getting started" %} +{% endresources %} diff --git a/src/roadmaps/golang/content/109-go-microservices/index.md b/src/roadmaps/golang/content/109-go-microservices/index.md new file mode 100644 index 000000000..afcbb4ea6 --- /dev/null +++ b/src/roadmaps/golang/content/109-go-microservices/index.md @@ -0,0 +1,10 @@ +# Microservices + +Microservices are an architectural approach to software development that allows the creation of a distributed application from deployable services that allow communication through a well-defined API. Being a solution to monoliths. + +{% resources %} + {% Blog "https://developer.ibm.com/learningpaths/get-started-application-modernization/intro-microservices/introduction/", "Introduction to microservices" %} + {% Blog "https://microservices.io/index.html", "Microservice Patterns and Resources by Chris Richardson" %} + {% Blog "https://www.oreilly.com/content/microservices-antipatterns-and-pitfalls/", "Microservices AntiPatterns and Pitfalls - Mark Richards" %} + {% Blog "https://samnewman.io/books/building_microservices_2nd_edition/", "Building Microservices, 2nd Edition - Sam Newman" %} +{% endresources %} diff --git a/src/roadmaps/golang/golang.md b/src/roadmaps/golang/golang.md new file mode 100644 index 000000000..db5aa82d5 --- /dev/null +++ b/src/roadmaps/golang/golang.md @@ -0,0 +1,53 @@ +--- +jsonUrl: "/jsons/golang.json" +pdfUrl: "/pdfs/golang.pdf" +order: 8 +featuredTitle: "Go" +featuredDescription: "Step by step guide to becoming a Go developer in 2022" +title: "Go Developer" +description: "Step by step guide to becoming a Go developer in 2022" +hasTopics: true +dimensions: + width: 968 + height: 1495.21 +seo: + title: "Learn to become a Go developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for Go development. Learn to become a modern Go developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a golang developer" + - "guide to becoming a go developer" + - "golang developer" + - "go developer" + - "guide to golang" + - "guide to go" + - "golang roadmap" + - "go roadmap" + - "golang skills" + - "go skills" + - "golang skills test" + - "go skills test" + - "skills for golang" + - "skills for go" + - "cloud development" + - "what is golang" + - "what is go" + - "golang quiz" + - "go quiz" + - "golang interview questions" + - "go interview questions" +relatedRoadmaps: + - "backend" + - "devops" + - "python" + - "java" + - "javascript" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/java/content/100-java-fundamentals/100-basic-syntax.md b/src/roadmaps/java/content/100-java-fundamentals/100-basic-syntax.md new file mode 100644 index 000000000..a2560863b --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/100-basic-syntax.md @@ -0,0 +1,12 @@ +# Basic Syntax + +Understanding the basics is the key to a solid foundation. In this section, learn the basic terminologies, naming conventions, reserved words, conditions, functions, data structures, OOP, packages, etc. + +* To print output use --> System.out.println(); +* To take input from user --> Scanner or BufferedReader class can be used + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/java-basic-syntax/", "Basic Java Syntax" %} + {% Blog "https://www.youtube.com/watch?v=81piDKqPxjQ", "Java - Basic Syntax" %} + {% Blog "https://www.youtube.com/watch?v=RRubcjpTkks", "Java Tutorial for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/101-data-types-variables.md b/src/roadmaps/java/content/100-java-fundamentals/101-data-types-variables.md new file mode 100644 index 000000000..28a16c777 --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/101-data-types-variables.md @@ -0,0 +1,13 @@ +# Data Types and Variables + +Variable in Java is a data container that stores the data values during Java program execution. Every variable is assigned a data type, which designates the type and quantity of values it can hold. Variable is a memory location name of the data. The Java variables have mainly three types: Local, Instance and Static. + +Data Types are divided into two group - +* Primitive - byte,short,int,long,float,double,boolean and char +* Non-Primitive - String, Arrays and Classes + +{% resources %} + {% Blog "https://www.guru99.com/java-variables.html", "What are Data Types & Variables?" %} + {% Blog "https://www.javatpoint.com/java-variables", "Java Variables" %} + {% Blog "https://www.javatpoint.com/java-data-types", "Learn more about Data types and Variables" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/102-conditionals.md b/src/roadmaps/java/content/100-java-fundamentals/102-conditionals.md new file mode 100644 index 000000000..673f1bac3 --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/102-conditionals.md @@ -0,0 +1,16 @@ +# Conditionals + +Java has the following conditional statements: + +* Use `if` to specify a block of code to be executed, if a specified condition is true +* Use `else` to specify a block of code to be executed if the same condition is false +* Use `else if` to specify a new condition to test; if the first condition is false +* Use `switch` to specify many alternative blocks of code to be executed +* Use `?,:` operator to specify one line condition + +{% resources %} + {% Blog "https://www.educative.io/answers/what-are-conditional-statements-in-programming", "What are Conditional statements?" %} + {% Blog "https://www.javatpoint.com/java-if-else", "Conditionals in Java" %} + {% Blog "https://youtu.be/ldYLYRNaucM", "Conditionals and Loops in Java" %} + {% Blog "https://youtu.be/mA23x39DjbI", "Switch Statements + Nested Case in Java" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/103-functions.md b/src/roadmaps/java/content/100-java-fundamentals/103-functions.md new file mode 100644 index 000000000..4fd26cffe --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/103-functions.md @@ -0,0 +1,14 @@ +# Functions + +A method/function is a way to perform some task. Similarly, in programming like Java, a function method is a block of code written to perform a specific task repeatedly. It provides reusability of code. We write the function once and use it many times. It works on the 'DRY' principle i.e., "Do not repeat yourself". + +Steps - +1. Define function - datatype function_name(parameters){body} +2. Call function - function_name(values) + +{% resources %} + {% Blog "https://www.javatpoint.com/method-in-java", "Methods/Functions in Java." %} + {% Blog "https://www.geeksforgeeks.org/methods-in-java/", "What are methods or functions in Java." %} + {% Blog "https://www.w3schools.com/java/java_methods.asp", "Learn Functions/Methods in Java" %} + {% Blog "https://www.youtube.com/watch?v=vvanI8NRlSI", "Functions / Methods in Java" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/104-datastructures.md b/src/roadmaps/java/content/100-java-fundamentals/104-datastructures.md new file mode 100644 index 000000000..b2dfefd35 --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/104-datastructures.md @@ -0,0 +1,15 @@ +# Datastructures + +As the name indicates itself, a **Data Structure** is a way of organizing the data in the **memory** so that it can be used efficiently. Some common data structures are array, linked list, stack, hashtable, queue, tree, heap, and graph. + +* Array allocates continuous memory for homogeneous data +* Linked List stores data in nodes with references +* Stack follows Last In First Out principle +* Queue follows First In First Out principle + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/data-structures", "What are Data Structures?" %} + {% Blog "https://www.javatpoint.com/data-structure-tutorial", " Data Structures and Algorithms" %} + {% Blog "https://youtube.com/playlist?list=PL9gnSGHSqcnr_DxHsP7AW9ftq0AtAyYqJ", "Java + DSA + Interview Preparation Course" %} + {% Blog "https://www.youtube.com/watch?v=9rhT3P1MDHk&list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY", "Data Structures Illustrated" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/105-oop.md b/src/roadmaps/java/content/100-java-fundamentals/105-oop.md new file mode 100644 index 000000000..f012a8b3d --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/105-oop.md @@ -0,0 +1,18 @@ +# OOP + +Object-oriented programming is a core of Java Programming, which is used for designing a program using classes and objects. This can also be characterized as data controlling for accessing the code. + +* [Class](https://www.javatpoint.com/object-and-class-in-java) +* [Interfaces](https://www.geeksforgeeks.org/interfaces-in-java/) +* [Object](https://www.geeksforgeeks.org/classes-objects-java/) +* [Inheritance](https://www.geeksforgeeks.org/inheritance-in-java) +* [Polymorphism](https://www.javatpoint.com/runtime-polymorphism-in-java) +* [Abstraction](https://www.softwaretestinghelp.com/what-is-abstraction-in-java/) +* [Encapsulation](https://www.programiz.com/java-programming/encapsulation) + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/object-oriented-programming-oops-concept-in-java/", "OOPs Concept in Java" %} + {% Blog "https://www.javatpoint.com/java-oops-concepts", "Java OOPs Concepts" %} + {% Blog "https://youtube.com/playlist?list=PL9gnSGHSqcno1G3XjUbwzXHL8_EttOuKk", "Java complete OOPs playlist" %} + {% Blog "https://www.youtube.com/watch?v=6T_HgnjoYwM", "Java OOPs Concepts" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/106-files-and-apis.md b/src/roadmaps/java/content/100-java-fundamentals/106-files-and-apis.md new file mode 100644 index 000000000..f0b001ffc --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/106-files-and-apis.md @@ -0,0 +1,14 @@ +# Files and APIs + +Learn how to work with files i.e., reading, writing and deleting, files and folders, etc. Also, learn how to make API calls, parse the incoming response, and so on. + +* FileWriter - this class is useful to create a file by writing characters into it +* FileReader - this class is useful to read data in form of characters from file + +{% resources %} + {% Blog "https://www.marcobehler.com/guides/java-files", "How To Work With Files In Java" %} + {% Blog "https://www.javatpoint.com/java-file-class", "Java File Class" %} + {% Blog "https://www.geeksforgeeks.org/file-class-in-java/", "Java.io.File Class in Java" %} + {% Blog "https://www.digitalocean.com/community/tutorials/java-httpurlconnection-example-java-http-request-get-post", "Java HttpURLConnection Example - Java HTTP Request GET, POST" %} + {% Blog "https://www.twilio.com/blog/5-ways-to-make-http-requests-in-java", "5 ways to make HTTP requests in Java" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/100-java-fundamentals/106-packages.md b/src/roadmaps/java/content/100-java-fundamentals/106-packages.md new file mode 100644 index 000000000..17698d90f --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/106-packages.md @@ -0,0 +1,11 @@ +# Packages + +A package is a namespace that mainly contains classes and interfaces. For instance, the standard class `ArrayList` is in the package `java.util`. For this class, `java.util.ArrayList` is called its fully qualified name because this syntax has no ambiguity. Classes in different packages can have the same name. For example, you have the two classes `java.util.Date` and `java.sql.Date`, which are different. If no package is declared in a class, its package is the default package. + +To create package use this command -> javac -d directory javafilename + +{% resources %} + {% Official "https://docs.oracle.com/javase/8/docs/api/java/lang/Package.html", "Packages in Java" %} + {% Blog "https://www.javatpoint.com/package", "Java Package" %} + {% Blog "https://www.geeksforgeeks.org/packages-in-java/", "Packages In Java" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/107-loops.md b/src/roadmaps/java/content/100-java-fundamentals/107-loops.md new file mode 100644 index 000000000..b9e49c809 --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/107-loops.md @@ -0,0 +1,12 @@ +# Loops + +In Java and other programming languages, loops are used to iterate a part of the program several times. There are four types of loops in Java, `for`, `forEach`, `while`, and `do...while`. + +* Synatx of `for` loop is `for(initialization;condition;increment/decrement){}` +* Syntax of `forEach` loop is `for(data_type variable:array_name){}` + + +{% resources %} + {% Blog "https://www.javatpoint.com/java-for-loop", "What are loops in Java?" %} + {% Blog "https://www.programiz.com/java-programming/for-loop", " Loops in Java." %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/108-exception-handling.md b/src/roadmaps/java/content/100-java-fundamentals/108-exception-handling.md new file mode 100644 index 000000000..e582da5da --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/108-exception-handling.md @@ -0,0 +1,13 @@ +# Exception Handling + +Exception Handling in Java is one of the effective means to handle the runtime errors so that the regular flow of the application can be preserved. Java Exception Handling is a mechanism to handle runtime errors such as ClassNotFoundException, IOException, SQLException, RemoteException, etc. + +There are three types of exceptions - +1. Checked Exception - exceptions checked at compile time. Example - IOException +2. Unchecked Exception - exceptions checked at run time. Example - NullPointerException +3. Error - It is irrecoverable. Example - OutOfMemoryError + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/exceptions-in-java/", "Exception Handling - G4G" %} + {% Blog "https://www.youtube.com/watch?v=W-N2ltgU-X4", "Understanding Java Exceptions" %} +{% endresources %} diff --git a/src/roadmaps/java/content/100-java-fundamentals/index.md b/src/roadmaps/java/content/100-java-fundamentals/index.md new file mode 100644 index 000000000..3e94f7ea9 --- /dev/null +++ b/src/roadmaps/java/content/100-java-fundamentals/index.md @@ -0,0 +1,16 @@ +# Java Fundamentals + +Java is a programming language and computing platform first released by Sun Microsystems in 1995. Java is a general-purpose, class-based, object-oriented programming language designed for having lesser implementation dependencies. It is a computing platform for application development. Java is fast, secure, and reliable, therefore. It is widely used for developing Java applications in laptops, data centers, game consoles, scientific supercomputers, cell phones, etc. + +Learn about the fundamentals of Java such as basic syntax, data types, variables, conditionals, functions, data structures, packages, etc. + +{% resources %} + {% Blog "https://www.w3schools.com/java/", "Java Basics - W3Schools" %} + {% Blog "https://youtu.be/eIrMbAQSU34", "Java Tutorial for Beginners" %} + {% Blog "https://youtube.com/playlist?list=PL9gnSGHSqcnr_DxHsP7AW9ftq0AtAyYqJ", "Java + DSA + Interview Preparation Course (For beginners)" %} + {% Blog "https://www.amazon.co.uk/Head-First-Java-3rd-Brain-Friendly/dp/1491910771", "Head First Java" %} + {% Blog "https://www.amazon.co.uk/Thinking-Java-Eckel-Bruce-February/dp/B00IBON6C6", "Thinking in Java" %} + {% Blog "https://www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997", "Effective Java" %} + {% Blog "https://www.amazon.co.uk/Java-Beginners-Guide-Herbert-Schildt/dp/1260463559", "Java: A Beginners Guide" %} + {% Blog "https://www.amazon.co.uk/gp/product/B09JL8BMK7/ref=dbs_a_def_rwt_bibl_vppi_i2", "Java: The Complete Reference" %} +{% endresources %} diff --git a/src/roadmaps/java/content/101-java-advanced-topics/100-generics.md b/src/roadmaps/java/content/101-java-advanced-topics/100-generics.md new file mode 100644 index 000000000..c5a0b254d --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/100-generics.md @@ -0,0 +1,10 @@ +# Generics + +Java Generic methods and generic classes enable programmers to specify, with a single method declaration, a set of related methods, or with a single class declaration, a set of related types, respectively. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/generics-in-java/", "Generics in Java" %} + {% Blog "https://www.tutorialspoint.com/java/java_generics.htm", "Java - Generics" %} + {% Blog "https://www.javatpoint.com/generics-in-java", "Generics in Java" %} + {% Blog "https://www.youtube.com/watch?v=XMvznsY02Mk", "Generics in Java" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/101-java-advanced-topics/101-memory-management.md b/src/roadmaps/java/content/101-java-advanced-topics/101-memory-management.md new file mode 100644 index 000000000..6c509de50 --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/101-memory-management.md @@ -0,0 +1,8 @@ +# Memory Management + +In Java, memory management is the process of allocation and de-allocation of objects, called Memory management. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/java-memory-management/", "Java Memory Management" %} + {% Blog "https://www.javatpoint.com/memory-management-in-java", "Memory Management in Java" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/101-java-advanced-topics/102-collection-framework.md b/src/roadmaps/java/content/101-java-advanced-topics/102-collection-framework.md new file mode 100644 index 000000000..4f540a5b6 --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/102-collection-framework.md @@ -0,0 +1,8 @@ +# Collection Framework + +The Collection in Java is a framework that provides an architecture to store and manipulate the group of objects. Java Collections can achieve all the operations that you perform on a data such as searching, sorting, insertion, manipulation, and deletion. + +{% resources %} + {% Blog "https://www.javatpoint.com/collections-in-java", "Collections in Java" %} + {% Blog "https://www.tutorialspoint.com/java/java_collections.htm", "Java - Collections Framework" %} +{% endresources %} diff --git a/src/roadmaps/java/content/101-java-advanced-topics/103-serialization.md b/src/roadmaps/java/content/101-java-advanced-topics/103-serialization.md new file mode 100644 index 000000000..2a6da7ffd --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/103-serialization.md @@ -0,0 +1,9 @@ +# Serialization + +Serialization is the conversion of the state of an object into a byte stream; deserialization does the opposite. Stated differently, serialization is the conversion of a Java object into a static stream (sequence) of bytes, which we can then save to a database or transfer over a network. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/serialization-in-java/", "Serialization and Deserialization in Java" %} + {% Blog "https://www.javatpoint.com/serialization-in-java", "Serialization and Deserialization in Java" %} + {% Blog "https://www.baeldung.com/java-serialization", "Introduction to Java Serialization" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/101-java-advanced-topics/104-networking-sockets.md b/src/roadmaps/java/content/101-java-advanced-topics/104-networking-sockets.md new file mode 100644 index 000000000..f06a1ccde --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/104-networking-sockets.md @@ -0,0 +1,12 @@ +# Networking sockets + +- Java Networking is a concept of connecting two or more computing devices together so that we can share resources. +- Java socket programming provides facility to share data between different computing devices. +- A socket is one endpoint of a two-way communication link between two programs running on the network. A socket is bound to a port number so that the TCP layer can identify the application that data is destined to be sent to. + +{% resources %} + {% Official "https://docs.oracle.com/javase/tutorial/networking/sockets/index.html", "Sockets" %} + {% Blog "https://youtu.be/BqBKEXLqdvI", "What is Socket Programming?" %} + {% Blog "https://www.geeksforgeeks.org/socket-programming-in-java/", "Socket Programming" %} + {% Blog "https://www.tutorialspoint.com/java/java_networking.htm", "Java Networking" %} +{% endresources %} diff --git a/src/roadmaps/java/content/101-java-advanced-topics/105-streams.md b/src/roadmaps/java/content/101-java-advanced-topics/105-streams.md new file mode 100644 index 000000000..4c897d09d --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/105-streams.md @@ -0,0 +1,11 @@ +# Streams + +Java provides a new additional package in Java 8 called java.util.stream. This package consists of classes, interfaces and enum to allows functional-style operations on the elements. You can use stream by importing java.util.stream package. + + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/stream-in-java/", "Streams in Java" %} + {% Blog "https://www.javatpoint.com/java-8-stream", "Java 8 Stream" %} + {% Blog "https://www.youtube.com/watch?v=VNovNwHr9jY", "Streams API Tutorial in Java 8+" %} + {% Blog "https://www.youtube.com/watch?v=t1-YZ6bF-g0", "Java 8 Streams Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/101-java-advanced-topics/106-how-jvm-works.md b/src/roadmaps/java/content/101-java-advanced-topics/106-how-jvm-works.md new file mode 100644 index 000000000..9240448e5 --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/106-how-jvm-works.md @@ -0,0 +1,12 @@ +# How JVM Works + +The Java Virtual Machine is a program whose purpose is to execute other programs. JVMs are available for many hardware and software platforms (i.e. JVM is platform dependent). JVM is the one that actually calls the main method present in a java code. JVM is a part of JRE(Java Runtime Environment) + +{% resources %} + {% Official "https://docs.oracle.com/javase/8/docs/api/java/lang/Package.html", "Packages in Java" %} + {% Blog "https://www.javatpoint.com/jvm-java-virtual-machine", "What is JVM?" %} + {% Blog "https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html", "Introducing the Java Virtual Machine" %} + {% Blog "https://www.geeksforgeeks.org/jvm-works-jvm-architecture/", "JVM Architecture" %} + {% Blog "https://www.javatpoint.com/jvm-java-virtual-machine", "JVM (Java Virtual Machine) Architecture" %} + {% Blog "https://youtu.be/G1ubVOl9IBw", "How JVM works?" %} +{% endresources %} diff --git a/src/roadmaps/java/content/101-java-advanced-topics/107-garbage-collection.md b/src/roadmaps/java/content/101-java-advanced-topics/107-garbage-collection.md new file mode 100644 index 000000000..a7e3b0a32 --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/107-garbage-collection.md @@ -0,0 +1,9 @@ +# Garbage Collection + +Java garbage collection is the process by which Java programs perform automatic memory management. Java programs compile to bytecode that can be run on a Java Virtual Machine, or JVM for short. When Java programs run on the JVM, objects are created on the heap, which is a portion of memory dedicated to the program + +{% resources %} + {% Blog "https://stackify.com/what-is-java-garbage-collection/", "Java Garbage Collection" %} + {% Blog "https://www.geeksforgeeks.org/garbage-collection-java/", "Garbage Collection in Java" %} + {% Blog "https://www.javatpoint.com/Garbage-Collection", "Java Garbage Collection" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/101-java-advanced-topics/108-basics-of-threads.md b/src/roadmaps/java/content/101-java-advanced-topics/108-basics-of-threads.md new file mode 100644 index 000000000..e14c3143a --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/108-basics-of-threads.md @@ -0,0 +1,12 @@ +# Basics of Threads + +A thread in Java is the direction or path that is taken while a program is being executed. Generally, all the programs have at least one thread, known as the main thread, that is provided by the JVM or Java Virtual Machine at the starting of the program’s execution + +{% resources %} + {% Official "https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html", "Threads in Java" %} + {% Blog "https://www.simplilearn.com/tutorials/java-tutorial/thread-in-java", "An Introduction to Thread in Java" %} + {% Blog "https://www.geeksforgeeks.org/java-threads/", "Java Threads" %} + {% Blog "https://www.javatpoint.com/how-to-create-a-thread-in-java", "How to Create a Thread in Java?" %} + {% Blog "https://www.youtube.com/watch?v=TCd8QIS-2KI", "Java Threads Tutorial" %} + {% Blog "https://youtu.be/TCd8QIS-2KI", "Threads in Java" %} +{% endresources %} diff --git a/src/roadmaps/java/content/101-java-advanced-topics/index.md b/src/roadmaps/java/content/101-java-advanced-topics/index.md new file mode 100644 index 000000000..4aea76cae --- /dev/null +++ b/src/roadmaps/java/content/101-java-advanced-topics/index.md @@ -0,0 +1 @@ +# Java advanced topics \ No newline at end of file diff --git a/src/roadmaps/java/content/102-java-build-tools/100-gradle.md b/src/roadmaps/java/content/102-java-build-tools/100-gradle.md new file mode 100644 index 000000000..e28a9d2d8 --- /dev/null +++ b/src/roadmaps/java/content/102-java-build-tools/100-gradle.md @@ -0,0 +1,11 @@ +# Gradle + +Gradle is an open-source build automation tool that helps software engineers to test, build, and release high-performance software products. In addition, Gradle also supports multi-language development. Currently, the supported languages for Gradle include Java, Kotlin, Groovy, Scala, C/C++, and JavaScript. + +{% resources %} + {% Official "https://gradle.org/", "Gradle" %} + {% Blog "https://youtu.be/kONQCIAcWeI", "Gradle Tutorial" %} + {% Blog "https://youtu.be/6V6G3RyxEMk", "Working with Gradle" %} + {% Blog "https://www.javatpoint.com/gradle", "Gradle" %} + {% Blog "https://spring.io/guides/gs/gradle/", "Building Java Projects with Gradle" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/102-java-build-tools/101-maven.md b/src/roadmaps/java/content/102-java-build-tools/101-maven.md new file mode 100644 index 000000000..adf1741fc --- /dev/null +++ b/src/roadmaps/java/content/102-java-build-tools/101-maven.md @@ -0,0 +1,8 @@ +# Maven + +Maven is an open-source build tool, used primarily for Java projects. + +{% resources %} + {% Official "https://maven.apache.org/guides/getting-started/", "Getting started" %} + {% Blog "https://spring.io/guides/gs/maven/", "Building Java Projects with Maven" %} +{% endresources %} diff --git a/src/roadmaps/java/content/102-java-build-tools/102-ant.md b/src/roadmaps/java/content/102-java-build-tools/102-ant.md new file mode 100644 index 000000000..464c9a02f --- /dev/null +++ b/src/roadmaps/java/content/102-java-build-tools/102-ant.md @@ -0,0 +1,10 @@ +# Ant + +Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications. Ant supplies a number of built-in tasks allowing to compile, assemble, test and run Java applications. Ant can also be used effectively to build non Java applications, for instance C or C++ applications. More generally, Ant can be used to pilot any type of process which can be described in terms of targets and tasks. + +{% resources %} + {% Official "https://ant.apache.org/", "Apache Ant" %} + {% Blog "https://www.javatpoint.com/apache-ant-tutorial", "Apache Ant Tutorial" %} + {% Blog "https://en.wikipedia.org/wiki/Apache_Ant", "Apache Ant" %} + {% Blog "https://youtu.be/3rizinq7bng", "What is Apache Ant?" %} +{% endresources %} diff --git a/src/roadmaps/java/content/102-java-build-tools/index.md b/src/roadmaps/java/content/102-java-build-tools/index.md new file mode 100644 index 000000000..5422a13a1 --- /dev/null +++ b/src/roadmaps/java/content/102-java-build-tools/index.md @@ -0,0 +1,5 @@ +# Build Tools + +A build tool is a program or command-line utility that automates the process of compiling, assembling, and deploying software. + +Build tools are not only limited to compiling code; they can also help with package management, dependency handling, and continuous integration systems. \ No newline at end of file diff --git a/src/roadmaps/java/content/103-java-web-frameworks/100-spring.md b/src/roadmaps/java/content/103-java-web-frameworks/100-spring.md new file mode 100644 index 000000000..012d7e86f --- /dev/null +++ b/src/roadmaps/java/content/103-java-web-frameworks/100-spring.md @@ -0,0 +1,11 @@ +# Spring + +Spring is a powerful open-source Java platform (framework), that is used to create and maintain web applications. + +{% resources %} + {% Official "https://spring.io/", "Official Site" %} + {% Official "https://spring.io/quickstart", "Quickstart guide" %} + {% Official "https://spring.io/guides", "Official guides" %} + {% Official "https://docs.spring.io/spring-framework/docs/current/reference/html/", "Spring Framework Documentation" %} + {% Blog "https://www.baeldung.com/spring-boot", "Different Spring tutorials" %} +{% endresources %} diff --git a/src/roadmaps/java/content/103-java-web-frameworks/101-spring-boot.md b/src/roadmaps/java/content/103-java-web-frameworks/101-spring-boot.md new file mode 100644 index 000000000..59947a6cb --- /dev/null +++ b/src/roadmaps/java/content/103-java-web-frameworks/101-spring-boot.md @@ -0,0 +1,12 @@ +# Spring Boot + +Spring Boot is an open source, microservice-based Java web framework. The Spring Boot framework creates a fully production-ready environment that is completely configurable using its prebuilt code within its codebase. The microservice architecture provides developers with a fully enclosed application, including embedded application servers. + +{% resources %} + {% Official "https://spring.io/projects/spring-boot/", "Spring Boot" %} + {% Blog "https://www.ibm.com/cloud/learn/java-spring-boot", "What is Spring Boot?" %} + {% Blog "https://www.javaguides.net/2021/07/spring-boot-tutorial-for-beginners.html", "Spring Boot Tutorial" %} + {% Blog "https://www.baeldung.com/spring-boot", "Learn Spring Boot" %} + {% Blog "https://youtu.be/vtPkZShrvXQ", "Spring Boot Tutorial" %} + {% Blog "https://youtu.be/UfOxcrxhC0s", "Spring Boot for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/java/content/103-java-web-frameworks/102-play-framework.md b/src/roadmaps/java/content/103-java-web-frameworks/102-play-framework.md new file mode 100644 index 000000000..ee96244fa --- /dev/null +++ b/src/roadmaps/java/content/103-java-web-frameworks/102-play-framework.md @@ -0,0 +1,10 @@ +# Play Framework + +Play Framework is a high-productivity web application framework that allows the model-view-controller pattern. It is written in Scala but can also be used for other programming languages that are compiled and run on the JVM. e.g.Java. + +{% resources %} + {% Official "https://www.playframework.com/", "Play Framework Website" %} + {% Blog "https://youtu.be/bLrmnjPQsZc", "Introduction to Play Framework" %} + {% Blog "https://en.wikipedia.org/wiki/Play_Framework", "What is Play Framework?" %} + {% Blog "https://www.baeldung.com/java-intro-to-the-play-framework", "Intro to Play Framework" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/103-java-web-frameworks/103-spark.md b/src/roadmaps/java/content/103-java-web-frameworks/103-spark.md new file mode 100644 index 000000000..abadf4974 --- /dev/null +++ b/src/roadmaps/java/content/103-java-web-frameworks/103-spark.md @@ -0,0 +1,9 @@ +# Spark + +Spark is a micro framework for creating web applications in Kotlin and Java 8. Sinatra, a popular Ruby micro framework, was the inspiration for it. + +{% resources %} + {% Official "https://sparkjava.com/", "Spark Java" %} + {% Blog "https://www.baeldung.com/spark-framework-rest-api", "Intro to Spark Java Framework" %} + {% Blog "https://www.javatpoint.com/spark-java", "What is Spark java?" %} +{% endresources %} diff --git a/src/roadmaps/java/content/103-java-web-frameworks/index.md b/src/roadmaps/java/content/103-java-web-frameworks/index.md new file mode 100644 index 000000000..0fa8aec84 --- /dev/null +++ b/src/roadmaps/java/content/103-java-web-frameworks/index.md @@ -0,0 +1,3 @@ +# Web Frameworks + +Frameworks are tools with pre-written code, that act as a template or skeleton, which can be reused to create an application by simply filling with your code as needed which enables developers to program their application with no overhead of creating each line of code again and again from scratch. diff --git a/src/roadmaps/java/content/104-java-orm/100-jpa.md b/src/roadmaps/java/content/104-java-orm/100-jpa.md new file mode 100644 index 000000000..ccfb58ab8 --- /dev/null +++ b/src/roadmaps/java/content/104-java-orm/100-jpa.md @@ -0,0 +1,20 @@ +# JPA + +The Jakarta Persistence API provides Java developers with an object/relational mapping facility for managing relational data in Java applications. JPA is not a tool nor a framework, but a set of interfaces for accessing, persisting, and managing data between Java objects and (a) relational database. Because it is a set of interfaces, it will require an implementation to work with and persist Java objects. This will be ORM. Here are the main features of JPA: + +- Cleaner, easier, standardized ORM. +- Supports inheritance, polymorphism, and polymorphic queries. +- Supports metadata annotations/XML descriptors to define the mapping (between objects and relational database). +- Supports a rich, SQL-like query language for static and dynamic queries. +- Pluggable persistence providers like Hibernate, MyBatis, etc. +- Caching: JPA supports 2 kinds of cache - first and second levels - to support performance tuning. +- Read more [here](https://javabydeveloper.com/what-is-java-persistence-api/). + +> Note: In 2019, JPA was renamed from Java Persistence API to Jakarta Persistence. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/jpa/", "TutorialsPoint JPA" %} + {% Blog "https://docs.oracle.com/javaee/7/api/javax/persistence/package-summary.html", "Official Java doc - Package javax.persistence" %} + {% Blog "https://www.amazon.com/Pro-Jakarta-Persistence-Depth-Development/dp/1484274423", "Pro Jakarta Persistence in Jakarta EE 10" %} + {% Blog "https://www.simonandschuster.com/books/Java-Persistence-with-Spring-Data-and-Hibernate/Catalin-Tudose/9781617299186", "Java Persistence with Spring Data and Hibernate by Catalin Tudose" %} +{% endresources %} diff --git a/src/roadmaps/java/content/104-java-orm/101-spring-data-jpa.md b/src/roadmaps/java/content/104-java-orm/101-spring-data-jpa.md new file mode 100644 index 000000000..8f0c035f9 --- /dev/null +++ b/src/roadmaps/java/content/104-java-orm/101-spring-data-jpa.md @@ -0,0 +1,12 @@ +# Spring data jpa + +Spring Data JPA aims to significantly improve the implementation of data access layers by reducing the effort to the amount that's actually needed. As a developer you write your repository interfaces, including custom finder methods, and Spring will provide the implementation automatically. + +{% resources %} + {% Official "https://spring.io/projects/spring-data-jpa", "Spring Data JPA" %} + {% Blog "https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa", "Introduction to Spring Data JPA" %} + {% Blog "https://www.javatpoint.com/spring-and-jpa-integration", "Spring Data JPA Tutorial" %} + {% Blog "https://www.geeksforgeeks.org/spring-boot-spring-data-jpa/", "Spring Boot – Spring Data JPA" %} + {% Blog "https://youtu.be/XszpXoII9Sg", "Spring Data JPA Tutorial" %} + {% Blog "https://youtu.be/8SGI_XS5OPw", "Spring Boot Tutorial - Spring Data JPA" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/104-java-orm/102-hibernate.md b/src/roadmaps/java/content/104-java-orm/102-hibernate.md new file mode 100644 index 000000000..33ee043ab --- /dev/null +++ b/src/roadmaps/java/content/104-java-orm/102-hibernate.md @@ -0,0 +1,8 @@ +# Hibernate + +Hibernate is an open source object-relational mapping tool that provides a framework to map object-oriented domain models to relational databases for web applications. + +{% resources %} + {% Official "https://hibernate.org/", "Hibernate" %} + {% Blog "https://www.javatpoint.com/hibernate-tutorial", "Hibernate Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/java/content/104-java-orm/103-ebean.md b/src/roadmaps/java/content/104-java-orm/103-ebean.md new file mode 100644 index 000000000..7447b5814 --- /dev/null +++ b/src/roadmaps/java/content/104-java-orm/103-ebean.md @@ -0,0 +1,9 @@ +# Ebean + +Ebean is an object-relational mapping tool written in Java. It supports the standard JPA annotations for declaring entities. However, it provides a much simpler API for persisting. In fact, one of the points worth mentioning about the Ebean architecture is that it is sessionless, meaning it does not fully manage entities. + +{% resources %} + {% Official "https://ebean.io/", "Ebean" %} + {% Official "https://ebean.io/docs/", "Ebean Documentation" %} + {% Blog "https://www.baeldung.com/ebean-orm", "Guide to Ebean" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/104-java-orm/index.md b/src/roadmaps/java/content/104-java-orm/index.md new file mode 100644 index 000000000..4369189db --- /dev/null +++ b/src/roadmaps/java/content/104-java-orm/index.md @@ -0,0 +1,11 @@ +# ORM (Object-Relational Mapping) + +A programming method to map objects in Java to relational entities in a database. In other words, converting data between relational databases and object-oriented programming languages. Some popular ORM tools/frameworks in Java are: + +- Spring Data JPA +- Hibernate +- Ebean + +{% resources %} + {% Blog "https://www.altexsoft.com/blog/object-relational-mapping/", "ORM tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/105-java-logging-frameworks/100-log4j2.md b/src/roadmaps/java/content/105-java-logging-frameworks/100-log4j2.md new file mode 100644 index 000000000..9d9faf3dd --- /dev/null +++ b/src/roadmaps/java/content/105-java-logging-frameworks/100-log4j2.md @@ -0,0 +1,10 @@ +# Log4j2 + +Apache Log4j is a Java-based logging utility. Log4j Java library's role is to log information that helps applications run smoothly, determine what's happening, and help with the debugging process when errors occur. Logging libraries typically write down messages to the log file or a database. + +Log4j2 is the updated version of the popular and influential log4j library, used extensively throughout the Java ecosystem for so many years. Version 2. x keeps all the logging features of its predecessor and builds on that foundation with some significant improvements, especially in the area of performance. + +{% resources %} + {% Official "https://logging.apache.org/log4j/2.x/manual/configuration.html", "Official Website" %} + {% Blog "https://www.techtarget.com/whatis/feature/Log4j-explained-Everything-you-need-to-know", "Log4j explained: Everything you need to know" %} +{% endresources %} diff --git a/src/roadmaps/java/content/105-java-logging-frameworks/101-logback.md b/src/roadmaps/java/content/105-java-logging-frameworks/101-logback.md new file mode 100644 index 000000000..3f0c64f49 --- /dev/null +++ b/src/roadmaps/java/content/105-java-logging-frameworks/101-logback.md @@ -0,0 +1,7 @@ +# Logback + +Logback is one of the most widely used logging frameworks in the Java Community. It's a replacement for its predecessor, Log4j. Logback offers a faster implementation, provides more options for configuration, and more flexibility in archiving old log files. + +{% resources %} + {% Official "https://logback.qos.ch/manual/configuration.html", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/java/content/105-java-logging-frameworks/102-slf4j.md b/src/roadmaps/java/content/105-java-logging-frameworks/102-slf4j.md new file mode 100644 index 000000000..1f6d0a6b7 --- /dev/null +++ b/src/roadmaps/java/content/105-java-logging-frameworks/102-slf4j.md @@ -0,0 +1,7 @@ +# Slf4j + +The SLF4J or the Simple Logging Facade for Java is an abstraction layer for various Java logging frameworks, like Log4j 2 or Logback. This allows for plugging different logging frameworks at deployment time without the need for code changes. + +{% resources %} + {% Official "https://www.slf4j.org/", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/java/content/105-java-logging-frameworks/103-tinylog.md b/src/roadmaps/java/content/105-java-logging-frameworks/103-tinylog.md new file mode 100644 index 000000000..04e49d12d --- /dev/null +++ b/src/roadmaps/java/content/105-java-logging-frameworks/103-tinylog.md @@ -0,0 +1,7 @@ +# Tinylog + +Tinylog is a lightweight open-source logging framework for Java and Android, optimized for ease of use. + +{% resources %} + {% Official "https://tinylog.org/v1/", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/java/content/105-java-logging-frameworks/index.md b/src/roadmaps/java/content/105-java-logging-frameworks/index.md new file mode 100644 index 000000000..e8dac6271 --- /dev/null +++ b/src/roadmaps/java/content/105-java-logging-frameworks/index.md @@ -0,0 +1,9 @@ +# Logging Frameworks + +Logging is an important feature that helps developers to trace out the errors. It provides the ability to capture the log file. Logging provides the complete tracing information of the application and also records the critical failure if any occur in an application. There are three components of Logging: Logger, Logging handlers or Appenders and Layouts or logging formatters. + +{% resources %} + {% Blog "https://www.baeldung.com/java-logging-intro", "Introduction to Java Logging" %} + {% Blog "https://www.javatpoint.com/java-logger", "Java Logger" %} + {% Blog "https://en.wikipedia.org/wiki/Java_logging_framework", "Java Logging Frameworks" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/106-java-jdbc/100-jdbi3.md b/src/roadmaps/java/content/106-java-jdbc/100-jdbi3.md new file mode 100644 index 000000000..9f789eb64 --- /dev/null +++ b/src/roadmaps/java/content/106-java-jdbc/100-jdbi3.md @@ -0,0 +1,8 @@ +# Jdbi3 + +Jdbi is an open source Java library (Apache license) that uses lambda expressions and reflection to provide a friendlier, higher level interface than JDBC to access the database. + +{% resources %} + {% Official "https://jdbi.org/", "Jdbi" %} + {% Blog "https://www.baeldung.com/jdbi", "Jdbi Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/106-java-jdbc/101-jdbc-template.md b/src/roadmaps/java/content/106-java-jdbc/101-jdbc-template.md new file mode 100644 index 000000000..c928a435a --- /dev/null +++ b/src/roadmaps/java/content/106-java-jdbc/101-jdbc-template.md @@ -0,0 +1,7 @@ +# JDBC Template + +JDBCTemplate is a central class in the JDBC core package that simplifies the use of JDBC and helps to avoid common errors. It internally uses JDBC API and eliminates many problems with JDBC API. It executes SQL queries or updates, initiating iteration over ResultSets, catching JDBC exceptions, and translating them to the generic. It executes core JDBC workflow, leaving application code to provide SQL and extract results. It handles the exception and provides informative exception messages with the help of exception classes defined in the `org.springframework.dao` package. + +{% resources %} + {% Blog "https://www.baeldung.com/spring-jdbc-jdbctemplate", "JDBC Template tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/106-java-jdbc/index.md b/src/roadmaps/java/content/106-java-jdbc/index.md new file mode 100644 index 000000000..440880980 --- /dev/null +++ b/src/roadmaps/java/content/106-java-jdbc/index.md @@ -0,0 +1,8 @@ +# Java JDBC + +JDBC is an API(Application programming interface) used in java programming to interact with databases. The classes and interfaces of JDBC allow the application to send requests made by users to the specified database. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/introduction-to-jdbc/", "Introduction to JDBC" %} + {% Blog "https://www.ibm.com/docs/en/informix-servers/12.10?topic=started-what-is-jdbc", "IBM: What is JDBC" %} +{% endresources %} diff --git a/src/roadmaps/java/content/107-testing-java-apps/100-mocking.md b/src/roadmaps/java/content/107-testing-java-apps/100-mocking.md new file mode 100644 index 000000000..e8cc949c0 --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/100-mocking.md @@ -0,0 +1,13 @@ +# Mocking + +Mocking removes external dependencies from a unit test to create a sense of an entire controlled environment. The traditional method of mocks involves mocking all other classes that interact with the class we want to test. The common targets for mocking are: + +- Database connections +- Web services +- Slow Classes +- Classes with side effects +- Classes with non-deterministic behavior + +{% resources %} + {% Blog "https://site.mockito.org/", "Mockito - Mocking Framework for Java" %} +{% endresources %} diff --git a/src/roadmaps/java/content/107-testing-java-apps/101-cucumber-jvm.md b/src/roadmaps/java/content/107-testing-java-apps/101-cucumber-jvm.md new file mode 100644 index 000000000..49a63b237 --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/101-cucumber-jvm.md @@ -0,0 +1,10 @@ +# Cucumber JVM + +Cucumber is a testing tool that supports Behavior Driven Development (BDD). It offers a way to write tests that anybody can understand, regardless of their technical knowledge. + +{% resources %} + {% Official "https://cucumber.io/", "Cucumber" %} + {% Official "https://cucumber.io/docs/cucumber/", "Cucumber Documentation" %} + {% Blog "https://automationpanda.com/2017/10/24/cucumber-jvm-for-java/", "Cucumber-JVM for Java" %} + {% Blog "https://www.youtube.com/watch?v=jCzpxvAJoZM", "Cucumber-JVM 5 with Enhanced Cucumber Expression" %} +{% endresources %} diff --git a/src/roadmaps/java/content/107-testing-java-apps/102-cukes.md b/src/roadmaps/java/content/107-testing-java-apps/102-cukes.md new file mode 100644 index 000000000..232def8ff --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/102-cukes.md @@ -0,0 +1,8 @@ +# Cukes + +cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using request/response content from a file system, variable support in .features, context inflation in all steps and a custom plug-in system to allow users to add additional project specific content. + +{% resources %} + {% Blog "https://github.com/ctco/cukes", "Cukes Github" %} + {% Blog "https://speakerdeck.com/larchaon/getting-started-with-cukes-rest?slide=23", "Getting Started with Cukes-REST" %} +{% endresources %} diff --git a/src/roadmaps/java/content/107-testing-java-apps/103-jbehave.md b/src/roadmaps/java/content/107-testing-java-apps/103-jbehave.md new file mode 100644 index 000000000..4404dd5ec --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/103-jbehave.md @@ -0,0 +1,8 @@ +# Jbehave + +JBehave is a framework for Behaviour-Driven Development (BDD). BDD is an evolution of test-driven development (TDD) and acceptance-test driven design, and is intended to make these practices more accessible and intuitive to newcomers and experts alike. It shifts the vocabulary from being test-based to behaviour-based, and positions itself as a design philosophy. + +{% resources %} + {% Official "https://jbehave.org/", "Jbehave" %} + {% Official "https://jbehave.org/tutorials.html", "Jbehave Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/107-testing-java-apps/104-junit.md b/src/roadmaps/java/content/107-testing-java-apps/104-junit.md new file mode 100644 index 000000000..c0fa31c4b --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/104-junit.md @@ -0,0 +1,11 @@ +# JUnit + +JUnit is a testing framework for Java. + +{% resources %} + {% Official "https://junit.org/junit5", "JUnit" %} + {% Official "https://junit.org/junit5/docs/current/user-guide/", "JUnit Documentation" %} + {% Blog "https://www.guru99.com/junit-tutorial.html", "JUnit tutorial" %} + {% Blog "https://www.baeldung.com/junit-5", "Basic JUnit tutorial" %} + {% Blog "https://www.youtube.com/watch?v=flpmSXVTqBI", "Testing with JUnit crash course" %} +{% endresources %} diff --git a/src/roadmaps/java/content/107-testing-java-apps/105-testng.md b/src/roadmaps/java/content/107-testing-java-apps/105-testng.md new file mode 100644 index 000000000..15a6bc789 --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/105-testng.md @@ -0,0 +1,9 @@ +# Testng + +TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it more powerful and easier to use. + +{% resources %} + {% Official "https://testng.org", "Testng" %} + {% Official "https://testng.org/doc/documentation-main.html", "Testng Documentation" %} + {% Blog "https://www.guru99.com/all-about-testng-and-selenium.html", "Testng tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/107-testing-java-apps/106-rest-assured.md b/src/roadmaps/java/content/107-testing-java-apps/106-rest-assured.md new file mode 100644 index 000000000..1b8534c97 --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/106-rest-assured.md @@ -0,0 +1,8 @@ +# Rest assured + +Testing and validating REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into the Java domain. + +{% resources %} + {% Official "https://rest-assured.io/", "Rest-assured" %} + {% Official "https://github.com/rest-assured/rest-assured/wiki", "Rest-assured Documentation" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/java/content/107-testing-java-apps/107-jmeter.md b/src/roadmaps/java/content/107-testing-java-apps/107-jmeter.md new file mode 100644 index 000000000..5b1c84249 --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/107-jmeter.md @@ -0,0 +1,7 @@ +# JMeter + +Apache JMeter is an Apache project that can be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications. + +{% resources %} + {% Official "https://jmeter.apache.org/", "Apache JMeter Website" %} +{% endresources %} diff --git a/src/roadmaps/java/content/107-testing-java-apps/index.md b/src/roadmaps/java/content/107-testing-java-apps/index.md new file mode 100644 index 000000000..5eaf2bfb6 --- /dev/null +++ b/src/roadmaps/java/content/107-testing-java-apps/index.md @@ -0,0 +1,8 @@ +# Testing + +A key to building software that meets requirements without defects is testing. Software testing helps developers know they are building the right software. When tests are run as part of the development process (often with continuous integration tools), they build confidence and prevent regressions in the code. + +{% resources %} + {% Blog "https://www.guru99.com/software-testing-introduction-importance.html", "What is Software Testing?" %} + {% Blog "https://www.browserstack.com/guide/testing-pyramid-for-test-automation", "Testing Pyramid" %} +{% endresources %} diff --git a/src/roadmaps/java/java.md b/src/roadmaps/java/java.md new file mode 100644 index 000000000..424d00d80 --- /dev/null +++ b/src/roadmaps/java/java.md @@ -0,0 +1,52 @@ +--- +jsonUrl: "/jsons/java.json" +pdfUrl: "/pdfs/java.pdf" +order: 9 +featuredTitle: "Java" +featuredDescription: "Step by step guide to becoming a Java Developer in 2022" +title: "Java Developer" +description: "Step by step guide to becoming a Java developer in 2022" +hasTopics: true +dimensions: + width: 968 + height: 1167.29 +seo: + title: "Learn to become a modern Java developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for java development. Learn to become a modern Java developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a developer" + - "guide to becoming a java developer" + - "java developer" + - "java engineer" + - "java skills" + - "guide to java" + - "java roadmap" + - "java skills" + - "java skills test" + - "skills for java" + - "cloud development" + - "what is java" + - "java quiz" + - "java interview questions" + - "java engineer roadmap" + - "java developer roadmap" + - "become a java developer" + - "java developer career path" + - "java developer" + - "modern java developer" +relatedRoadmaps: + - "backend" + - "devops" + - "python" + - "golang" + - "javascript" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/javascript/content/100-javascript-introduction/100-what-is-javascript.md b/src/roadmaps/javascript/content/100-javascript-introduction/100-what-is-javascript.md new file mode 100644 index 000000000..d3fd07270 --- /dev/null +++ b/src/roadmaps/javascript/content/100-javascript-introduction/100-what-is-javascript.md @@ -0,0 +1,13 @@ +# What is JavaScript? + +JavaScript, often abbreviated JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. It lets us add interactivity to pages e.g. you might have seen sliders, alerts, click interactions, popups, etc on different websites -- all of that is built using JavaScript. Apart from being used in the browser, it is also used in other non-browser environments as well such as Node.js for writing server-side code in JavaScript, Electron for writing desktop applications, React Native for mobile applications, and so on. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript", "JavaScript MDN Docs" %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} + {% Blog "https://javascript.info/", "The Modern JavaScript Tutorial" %} + {% Blog "https://www.codeguage.com/courses/js/", "A Comprehensive Course on JavaScript with Quizzes and Exercises - CodeGuage" %} + {% Blog "https://exploringjs.com/", "Exploring JS: JavaScript books for programmers" %} + {% Blog "https://youtu.be/hdI2bqOjy3c?t=2", "JavaScript Crash Course for Beginners" %} + {% Blog "https://youtu.be/P7t13SGytRk?t=22", "Build a Netflix Landing Page Clone with HTML, CSS & JS" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/100-javascript-introduction/101-history-of-javascript.md b/src/roadmaps/javascript/content/100-javascript-introduction/101-history-of-javascript.md new file mode 100644 index 000000000..14d487fda --- /dev/null +++ b/src/roadmaps/javascript/content/100-javascript-introduction/101-history-of-javascript.md @@ -0,0 +1,8 @@ +# History of JavaScript + +JavaScript was initially created by Brendan Eich of NetScape and was first announced in a press release by Netscape in 1995. It has a bizarre history of naming; initially, it was named Mocha by the creator, which was later renamed LiveScript. In 1996, about a year later after the release, NetScape decided to rename it to JavaScript with hopes of capitalizing on the Java community (although JavaScript did not have any relationship with Java) and released Netscape 2.0 with the official support of JavaScript. + +{% resources %} + {% Blog "https://roadmap.sh/guides/history-of-javascript", "Brief History of JavaScript" %} + {% Blog "https://dev.to/iarchitsharma/the-history-of-javascript-5e98", "The History of JavaScript" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/100-javascript-introduction/102-javascript-versions.md b/src/roadmaps/javascript/content/100-javascript-introduction/102-javascript-versions.md new file mode 100644 index 000000000..0445cc0e8 --- /dev/null +++ b/src/roadmaps/javascript/content/100-javascript-introduction/102-javascript-versions.md @@ -0,0 +1,8 @@ +# Javascript Versions + +JavaScript was invented by Brendan Eich, and in 1997 and became an ECMA standard. ECMAScript is the official language name. ECMAScript versions include ES1, ES2, ES3, ES5, and ES6 + +{% resources %} + {% Blog "https://www.educative.io/blog/javascript-versions-history", "JavaScript Versions: How JavaScript has changed over the years" %} + {% Blog "https://roadmap.sh/guides/history-of-javascript", "Brief History of JavaScript" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/100-javascript-introduction/103-how-to-run-javascript.md b/src/roadmaps/javascript/content/100-javascript-introduction/103-how-to-run-javascript.md new file mode 100644 index 000000000..488071f41 --- /dev/null +++ b/src/roadmaps/javascript/content/100-javascript-introduction/103-how-to-run-javascript.md @@ -0,0 +1,9 @@ +# How to run Javascript + +JavaScript can be run in the browser by including the external script file using the `script` tag, writing it within the HTML page using the `script` tag again, running it in the browser console or you can also use [REPL](https://www.digitalocean.com/community/tutorials/how-to-use-the-node-js-repl). + +{% resources %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-add-javascript-to-html", "How To Add JavaScript to HTML" %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-write-your-first-javascript-program", "How To Write Your First JavaScript Program" %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-use-the-javascript-developer-console", "How To Use the JavaScript Developer Console" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/100-javascript-introduction/index.md b/src/roadmaps/javascript/content/100-javascript-introduction/index.md new file mode 100644 index 000000000..f46b952aa --- /dev/null +++ b/src/roadmaps/javascript/content/100-javascript-introduction/index.md @@ -0,0 +1,14 @@ +# JavaScript + +JavaScript, often abbreviated JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. It lets us add interactivity to pages e.g. you might have seen sliders, alerts, click interactions, popups, etc on different websites -- all of that is built using JavaScript. Apart from being used in the browser, it is also used in other non-browser environments as well such as Node.js for writing server-side code in JavaScript, Electron for writing desktop applications, React Native for mobile applications, and so on. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript", "JavaScript MDN Docs" %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} + {% Blog "https://javascript.info/", "The Modern JavaScript Tutorial" %} + {% Blog "https://exploringjs.com/", "Exploring JS: JavaScript books for programmers" %} + {% Blog "https://eloquentjavascript.net/", "Eloquent JavaScript textbook" %} + {% Blog "https://github.com/getify/You-Dont-Know-JS", "You Dont Know JS Yet (book series)" %} + {% Blog "https://youtu.be/hdI2bqOjy3c?t=2", "JavaScript Crash Course for Beginners" %} + {% Blog "https://youtu.be/P7t13SGytRk?t=22", "Build a Netflix Landing Page Clone with HTML, CSS & JS" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/100-var.md b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/100-var.md new file mode 100644 index 000000000..94e4472ae --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/100-var.md @@ -0,0 +1,11 @@ +# [var] keyword + +The var statement declares a function-scoped or globally-scoped variable, optionally initializing it to a value. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var", "var keyword - MDN" %} + {% Blog "https://javascript.info/variables", "JavaScript Variables" %} + {% Blog "https://www.w3schools.com/js/js_variables.asp", "JavaScript Variables - W3Schools" %} + {% Blog "https://www.youtube.com/watch?v=6UAKBYpUC-Y", "Declaring Variables without Var, Let, Const - What Would Happen?" %} + {% Blog "https://www.geeksforgeeks.org/how-to-declare-variables-in-different-ways-in-javascript/", "How to declare variables in different ways in JavaScript?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/101-let.md b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/101-let.md new file mode 100644 index 000000000..1166effb1 --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/101-let.md @@ -0,0 +1,9 @@ +# [let] keyword + +The `let` declaration declares a block-scoped local variable, optionally initializing it to a value. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let", "let keyword - MDN Docs" %} + {% Blog "https://javascript.info/variables", "JavaScript Variables" %} + {% Blog "https://www.geeksforgeeks.org/how-to-declare-variables-in-different-ways-in-javascript/", "How to declare variables in different ways in JavaScript?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/102-const.md b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/102-const.md new file mode 100644 index 000000000..5553123fe --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/102-const.md @@ -0,0 +1,10 @@ +# [const] keyword + +Constants are block-scoped, much like variables declared using the `let` keyword. The value of a constant can't be changed through reassignment (i.e. by using the assignment operator), and it can't be redeclared (i.e. through a variable declaration). However, if a constant is an object or array its properties or items can be updated or removed. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/js/constants", "JavaScript Constants - CodeGuage" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const", "const keyword - MDN Docs" %} + {% Blog "https://javascript.info/variables", "JavaScript Variables" %} + {% Blog "https://www.geeksforgeeks.org/how-to-declare-variables-in-different-ways-in-javascript/", "How to declare variables in different ways in JavaScript?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/index.md b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/index.md new file mode 100644 index 000000000..4a0bd4c3c --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/100-variable-declarations/index.md @@ -0,0 +1,8 @@ +# Variable Declarations + +To use variables in JavaScript, we first need to create it i.e. declare a variable. To declare variables, we use one of the `var`, `let`, or `const` keywords. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Variables", "Storing the information you need — Variables" %} + {% Blog "https://www.codeguage.com/courses/js/variables", "JavaScript Variables - CodeGuage" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/101-hoisting.md b/src/roadmaps/javascript/content/101-javascript-variables/101-hoisting.md new file mode 100644 index 000000000..d58ecd8b0 --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/101-hoisting.md @@ -0,0 +1,9 @@ +# Hoisting + +JavaScript Hoisting refers to the process whereby the interpreter appears to move the declaration of functions, variables, or classes to the top of their scope, prior to execution of the code. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Hoisting", "What is Hoisting - MDN Docs" %} + {% Blog "https://www.geeksforgeeks.org/javascript-hoisting/", "JavaScript Hoisting" %} +{% endresources %} + diff --git a/src/roadmaps/javascript/content/101-javascript-variables/102-naming-rules.md b/src/roadmaps/javascript/content/101-javascript-variables/102-naming-rules.md new file mode 100644 index 000000000..24d0940c4 --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/102-naming-rules.md @@ -0,0 +1,11 @@ +# Naming Rules + +A variable name should accurately identify your variable. When you create good variable names, your JavaScript code becomes easier to understand and easier to work with. Properly naming variables is really important. JavaScript also has some rules when it comes to naming variables; read about these rules through the links below. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/js/variables#Tips_for_naming_variables", "JavaScript Variable Naming Tips - CodeGuage" %} + {% Blog "https://www.informit.com/articles/article.aspx?p=131025&seqNum=3", "Understanding Variables in JavaScript" %} + {% Blog "https://www.dummies.com/article/technology/programming-web-design/javascript/naming-javascript-variables-142522/", "Naming JavaScript Variables" %} + {% Blog "https://www.robinwieruch.de/javascript-naming-conventions/", "JavaScript Naming Conventions" %} + {% Blog "https://google.github.io/styleguide/jsguide.html", "Google JavaScript Style Guide" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/100-block.md b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/100-block.md new file mode 100644 index 000000000..d532bb0ad --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/100-block.md @@ -0,0 +1,8 @@ +# Block Scope + +This scope restricts the variable that is declared inside a specific block, from access by the outside of the block. The let & const keyword facilitates the variables to be block scoped. In order to access the variables of that specific block, we need to create an object for it. Variables declared with the var keyword, do not have block scope. + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_scope.asp", "JavaScript Scope" %} + {% Blog "https://www.geeksforgeeks.org/javascript-es2015-block-scoping", "Block Scoping in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/101-function.md b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/101-function.md new file mode 100644 index 000000000..e845e64e6 --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/101-function.md @@ -0,0 +1,9 @@ +# Function Scope + +When a variable is declared inside a function, it is only accessible within that function and cannot be used outside that function. + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_scope.asp", "JavaScript Scope" %} + {% Blog "https://medium.com/nerd-for-tech/function-scope-block-scope-in-js-d29c8e7cd216", "Function Scope & Block Scope in JS" %} + {% Blog "https://www.geeksforgeeks.org/all-about-functions-and-scopes-in-javascript/", "All about Functions and Scopes in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/102-global.md b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/102-global.md new file mode 100644 index 000000000..6d37e964f --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/102-global.md @@ -0,0 +1,9 @@ +# Global Scope + +Variables declared Globally (outside any function) have Global Scope. Global variables can be accessed from anywhere in a JavaScript program. Variables declared with `var`, `let` and `const` are quite similar when declared outside a block. + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_scope.asp", "JavaScript Scope" %} +{% endresources %} + + diff --git a/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/index.md b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/index.md new file mode 100644 index 000000000..1b4aa5bc0 --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/103-scopes/index.md @@ -0,0 +1,16 @@ +# Scopes + +In JavaScript, scope refers to the visibility of a variable or how it can be used after it is declared. The scope of a variable depends on the keyword that was used to declare it. + +The three types of Scope are Global Scope, Function Scope, and Block Scope. Before ES6 (2015), JavaScript had only Global Scope and Function Scope with the `var` keyword. ES6 introduced `let` and `const` which allow Block Scope in JavaScript. + +Global Scope: Variables declared outside any function or curly braces '{}' have Global Scope, and can be accessed from anywhere within the same Javascript code. `var`, `let` and `const` all provide this Scope. + +Function Scope: Variables declared within a function can only be used within that same function. Outside that function, they are undefined. `var`, `let` and `const` all provide this Scope. + +Block Scope: A block is any part of JavaScript code bounded by '{}'. Variables declared within a block can not be accessed outside that block. This Scope is only provided by the `let` and `const` keywords. If you declare a variable within a block using the `var` keyword, it will NOT have Block Scope. + + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_scope.asp", "JavaScript Scope" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/101-javascript-variables/index.md b/src/roadmaps/javascript/content/101-javascript-variables/index.md new file mode 100644 index 000000000..447a447c8 --- /dev/null +++ b/src/roadmaps/javascript/content/101-javascript-variables/index.md @@ -0,0 +1,8 @@ +# Javascript Variables + +Most of the time, a JavaScript application needs to work with information. To store and represent this information in the JavaScript codebase, we use variables. A variable is a container for a value. + +{% resources %} + {% Blog "https://javascript.info/variables", "JavaScript Variables" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Variables", "Storing the information you need — Variables" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/102-javascript-datatypes/100-primitive-types.md b/src/roadmaps/javascript/content/102-javascript-datatypes/100-primitive-types.md new file mode 100644 index 000000000..29aebc482 --- /dev/null +++ b/src/roadmaps/javascript/content/102-javascript-datatypes/100-primitive-types.md @@ -0,0 +1,17 @@ +# Primitive Types + +In JavaScript, a primitive (primitive value, primitive data type) is data that is not an object and has no methods or properties. There are 7 primitive data types: + +- `string` +- `number` +- `bigint` +- `boolean` +- `undefined` +- `Symbol` +- `null` + +Most of the time, a primitive value is represented directly at the lowest level of the language implementation. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Primitive", "Primitive" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/100-prototype.md b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/100-prototype.md new file mode 100644 index 000000000..bb2901f51 --- /dev/null +++ b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/100-prototype.md @@ -0,0 +1,9 @@ +# Prototypes + +JavaScript is an object-oriented language built around a prototype model. In JavaScript, every object inherits properties from its prototype, if there are any. A prototype is simply an object from which another object inherits properties. To create complex programs using JavaScript, one has to be proficient in working with prototypes — they form the very core of OOP in the language. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/js/objects-prototypes", "Prototypes in JavaScript - A Comprehensive Guide" %} + {% Blog "https://javascript.info/prototypes", "Prototypes, Inheritance" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes", "Object prototypes - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/101-prototypal-inheritance.md b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/101-prototypal-inheritance.md new file mode 100644 index 000000000..c12ca8045 --- /dev/null +++ b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/101-prototypal-inheritance.md @@ -0,0 +1,10 @@ +# Prototypal Inheritance + +The Prototypal Inheritance is a feature in javascript used to add methods and properties in objects. It is a method by which an object can inherit the properties and methods of another object. Traditionally, in order to get and set the Prototype of an object, we use Object.getPrototypeOf and Object. + +{% resources %} + {% Official "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain", "JavaScript MDN Docs" %} + {% Official "https://www.geeksforgeeks.org/prototypal-inheritance-using-__proto__-in-javascript/", "GeeksForGeeks – JavaScript Tutorial" %} + {% Official "https://javascript.info/prototype-inheritance", "The Modern JavaScript Tutorial" %} + {% Blog "https://javascript.info/prototype-inheritance", "Prototype Inheritance" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/102-builtin-objects.md b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/102-builtin-objects.md new file mode 100644 index 000000000..93efc2446 --- /dev/null +++ b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/102-builtin-objects.md @@ -0,0 +1,18 @@ +# Built-in objects + +Built-in objects, or "global objects", are those built into the language specification itself. There are numerous built-in objects with the JavaScript language, all of which are accessible at the global scope. Some examples are: +- `Number` +- `Math` +- `Date` +- `String` +- `Error` +- `Function` +- `Boolean` + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects", "Built-in Objects" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects", "Standard built-in objects" %} + {% Blog "https://www.tutorialride.com/javascript/javascript-built-in-objects.htm", "JavaScript Built-in Objects" %} + {% Blog "https://www.scaler.com/topics/javascript-built-in-objects/", "Built-in Objects" %} + {% Blog "https://youtu.be/YLCtw8Ms5Q4", "JavaScript Built-in Objects" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/index.md b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/index.md new file mode 100644 index 000000000..b2322ef86 --- /dev/null +++ b/src/roadmaps/javascript/content/102-javascript-datatypes/101-object/index.md @@ -0,0 +1,10 @@ +# Object + +JavaScript object is a data structure that allows us to have key-value pairs; so we can have distinct keys and each key is mapped to a value that can be of any JavaScript data type. Comparing it to a real-world object, a pen is an object with several properties such as color, design, the material it is made of, etc. In the same way, JavaScript objects can have properties that define their characteristics. + +{% resources %} + {% Blog "https://javascript.info/object", "Objects" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects", "Working with Objects" %} + {% Blog "https://www.w3schools.com/js/js_object_definition.asp", "JavaScript Object Definition" %} + {% Blog "https://www.geeksforgeeks.org/objects-in-javascript/", "Objects in JavaScript " %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/102-javascript-datatypes/102-typeof-operator.md b/src/roadmaps/javascript/content/102-javascript-datatypes/102-typeof-operator.md new file mode 100644 index 000000000..27b3a96e1 --- /dev/null +++ b/src/roadmaps/javascript/content/102-javascript-datatypes/102-typeof-operator.md @@ -0,0 +1,8 @@ +# TypeOf Operator + +You can use the typeOf operator to find the data type of a JavaScript variable. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof", "Typeof Reference" %} + {% Blog "https://www.w3schools.com/js/tryit.asp?filename=tryjs_typeof_all", "Typeof Live Examples" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/102-javascript-datatypes/index.md b/src/roadmaps/javascript/content/102-javascript-datatypes/index.md new file mode 100644 index 000000000..e4efb3150 --- /dev/null +++ b/src/roadmaps/javascript/content/102-javascript-datatypes/index.md @@ -0,0 +1,10 @@ +# Datatypes + +Data type refers to the type of data that a JavaScript variable can hold. There are eight basic data types in JavaScript. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/js/data-types", "JavaScript Data Types - CodeGuage" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures", "JavaScript data types and data structures" %} + {% Blog "https://www.w3schools.com/js/js_datatypes.asp", "JavaScript Data Types" %} + {% Blog "https://javascript.info/types", "JavaScript Data Types" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/103-javascript-type-casting/100-type-conversion-coercion.md b/src/roadmaps/javascript/content/103-javascript-type-casting/100-type-conversion-coercion.md new file mode 100644 index 000000000..3996e287f --- /dev/null +++ b/src/roadmaps/javascript/content/103-javascript-type-casting/100-type-conversion-coercion.md @@ -0,0 +1,9 @@ +# Type Conversion/Coercion + +Type coercion is the automatic or implicit conversion of values from one data type to another (such as strings to numbers). Type conversion is similar to type coercion because they convert values from one data type to another with one key difference — type coercion is implicit. In contrast, type conversion can be either implicit or explicit. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Type_Conversion", "Type Conversion - MDN" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Type_coercion", "Type Coercion - MDN" %} + {% Blog "https://www.youtube.com/watch?v=XYFg6_V-c9Q", "Type Conversion and Coercion video" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/103-javascript-type-casting/101-explicit-type-casting.md b/src/roadmaps/javascript/content/103-javascript-type-casting/101-explicit-type-casting.md new file mode 100644 index 000000000..f19fea641 --- /dev/null +++ b/src/roadmaps/javascript/content/103-javascript-type-casting/101-explicit-type-casting.md @@ -0,0 +1,11 @@ +# Explicit Type Casting + +Type casting means transferring data from one data type to another by explicitly specifying the type to convert the given data to. Explicit type casting is normally done to make data compatible with other variables. Examples of typecasting methods are `parseInt()`, `parseFloat()`, `toString()`. + +{% resources %} + {% Blog "https://www.c-sharpcorner.com/article/type-conversions-in-javascript/", "Type Conversion" %} + {% Blog "https://www.scaler.com/topics/javascript/type-conversion-in-javascript/", "Type casting" %} + {% Blog "https://youtu.be/VQLYiFqetZM", "Data Type Conversion" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Type_Conversion", "Type conversion" %} + {% Blog "https://www.tutorialspoint.com/explain-typecasting-in-javascript", "What is typecasting in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/103-javascript-type-casting/102-implicit-type-casting.md b/src/roadmaps/javascript/content/103-javascript-type-casting/102-implicit-type-casting.md new file mode 100644 index 000000000..cdff72412 --- /dev/null +++ b/src/roadmaps/javascript/content/103-javascript-type-casting/102-implicit-type-casting.md @@ -0,0 +1,10 @@ +# Implicit Type Casting + +Implicit type conversion happens when the compiler or runtime automatically converts data types. JavaScript is loosely typed language and most of the time operators automatically convert a value to the right type. + +{% resources %} + {% Official "https://www.geeksforgeeks.org/javascript-type-conversion/", "GeeeksForGeeks - JavaScript Tutorials" %} + {% Official "https://www.w3schools.com/js/js_type_conversion.asp", "W3Schools - JavaScript Tutorials" %} + {% Official "https://www.tutorialspoint.com/explain-typecasting-in-javascript", "TutorialsPoint - JavaScript Tutorials" %} + {% Blog "https://dev.to/promisetochi/what-you-need-to-know-about-javascripts-implicit-coercion-e23", "What you need to know about Javascripts Implicit Coercion" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/103-javascript-type-casting/index.md b/src/roadmaps/javascript/content/103-javascript-type-casting/index.md new file mode 100644 index 000000000..58aae0d38 --- /dev/null +++ b/src/roadmaps/javascript/content/103-javascript-type-casting/index.md @@ -0,0 +1,11 @@ +# Type Casting + +Type conversion (or typecasting) means the transfer of data from one data type to another. Implicit conversion happens when the compiler (for compiled languages) or runtime (for script languages like [JavaScript](https://developer.mozilla.org/en-US/docs/Glossary/JavaScript)) automatically converts data types. The source code can also explicitly require a conversion to take place. + +{% resources %} + {% Blog "https://javascript.info/type-conversions", "Type Conversions" %} + {% Blog "https://www.w3schools.com/js/js_type_conversion.asp", "JavaScript Type Conversion" %} + {% Blog "https://www.tutorialspoint.com/type-casting-in-javascript", "Type Casting in JavaScript" %} + {% Blog "https://www.geeksforgeeks.org/javascript-type-conversion", "JavaScript Type Cast" %} +{% endresources %} + diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/100-arrays.md b/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/100-arrays.md new file mode 100644 index 000000000..3c1a08110 --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/100-arrays.md @@ -0,0 +1,9 @@ +# Arrays + +Arrays are objects that store a collection of items and can be assigned to a variable. They have their methods that can perform operations on the array. + +{% resources %} + {% Blog "https://javascript.info/array", "Working with Arrays in JavaScript" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array", "JavaScript Arrays" %} + {% Blog "https://www.youtube.com/watch?v=oigfaZ5ApsM", "JavaScript Arrays" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/101-typed-arrays.md b/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/101-typed-arrays.md new file mode 100644 index 000000000..064c6576c --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/101-typed-arrays.md @@ -0,0 +1,8 @@ +# Typed Arrays + +In Javascript, a typed array is an array-like buffer of binary data. There is no JavaScript property or object named TypedArray, but properties and methods can be used with typed array objects. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays", "JavaScript typed arrays" %} + {% Blog "https://www.youtube.com/watch?v=UYkJaW3pmj0", "Intro to Typed Arrays in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/index.md b/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/index.md new file mode 100644 index 000000000..614e37b08 --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/100-indexed-collections/index.md @@ -0,0 +1,10 @@ +# Indexed collections + +Indexed Collections are collections that have numeric indices i.e. the collections of data that are ordered by an index value. In JavaScript, an array is an indexed collection. An array is an ordered set of values that has a numeric index. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/javascript-indexed-collections/", "Indexed Collections" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections", "What is Indexed collections?" %} + {% Blog "https://www.tutorialspoint.com/indexed-collections-in-javascript", "Indexed collections in JavaScript" %} + {% Blog "https://youtu.be/XYq9QpgAx8g", "Javascript Arrays" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/100-map.md b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/100-map.md new file mode 100644 index 000000000..35730e62c --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/100-map.md @@ -0,0 +1,8 @@ +# Map + +[Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) is a collection of keyed data items, just like an `Object`. But the main difference is that `Map` allows keys of any type. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map", "Map - Keyed Collections" %} + {% Blog "https://javascript.info/map-set#map", "Map Data Type" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/101-weak-map.md b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/101-weak-map.md new file mode 100644 index 000000000..9e7cdc3ef --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/101-weak-map.md @@ -0,0 +1,8 @@ +# Weak map + +[WeakMap](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) is a Map-like collection of key/value pairs whose keys must be objects, it removes them once they become inaccessible by other means + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap", "WeakMap" %} + {% Blog "https://javascript.info/weakmap-weakset", "WeakMap and WeakSet" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/102-set.md b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/102-set.md new file mode 100644 index 000000000..54f7d9c69 --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/102-set.md @@ -0,0 +1,8 @@ +# Set + +The `Set` object lets you store unique values of any type, whether [primitive](https://developer.mozilla.org/en-US/docs/Glossary/Primitive) values or object references. A value in the `Set` may only occur once; it is unique in the `Set`'s collection. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set", "Set - JavaScript" %} + {% Blog "https://exploringjs.com/impatient-js/ch_sets.html", "Set - ExploringJS" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/103-weak-set.md b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/103-weak-set.md new file mode 100644 index 000000000..0c323c905 --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/103-weak-set.md @@ -0,0 +1,8 @@ +# WeakSet + +`WeakSet` objects are collections of objects. Just as with `Sets`, each object in a `WeakSet` may occur only once; all objects in a `WeakSet`'s collection are unique. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet", "WeakSet" %} + {% Blog "https://javascript.info/weakmap-weakset", "WeakMap and WeakSet" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/index.md b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/index.md new file mode 100644 index 000000000..1328401b4 --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/101-keyed-collections/index.md @@ -0,0 +1,10 @@ +# Keyed Collections + +Keyed collections are data collections that are ordered by key not index. They are associative in nature. Map and set objects are keyed collections and are iterable in the order of insertion. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Keyed_collections", "Keyed collections" %} + {% Blog "https://blog.logrocket.com/es6-keyed-collections-maps-and-sets/", "ES6 keyed collections- Maps and sets" %} + {% Blog "https://www.freecodecamp.org/news/how-to-use-javascript-collections-map-and-set/", "How to use Keyed collections" %} + {% Blog "https://youtu.be/4UqSqF4foy4", "Creating keyed collection" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/100-json.md b/src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/100-json.md new file mode 100644 index 000000000..63e1862fa --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/100-json.md @@ -0,0 +1,8 @@ +# JSON + +JavaScript Object Notation (JSON) is a standard text-based format for representing structured data based on JavaScript object syntax. It is commonly used for transmitting data in web applications (e.g., sending some data from the server to the client, so it can be displayed on a web page, or vice versa). + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON", "Working with JSON" %} + {% Blog "https://www.youtube.com/watch?v=iiADhChRriM", "JSON Tutorial for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/index.md b/src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/index.md new file mode 100644 index 000000000..b1a25d172 --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/102-structured-data/index.md @@ -0,0 +1,9 @@ +# Structured data + +Structured data is used by search-engines, like Google, to understand the content of the page, as well as to gather information about the web and the world in general. + +It is also coded using in-page markup on the page that the information applies to. + +{% resources %} + {% Official "https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data", "Google Developers docs" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/104-javascript-data-structures/index.md b/src/roadmaps/javascript/content/104-javascript-data-structures/index.md new file mode 100644 index 000000000..79e702678 --- /dev/null +++ b/src/roadmaps/javascript/content/104-javascript-data-structures/index.md @@ -0,0 +1,7 @@ +# Data Structures + +A Data structure is a format to organize, manage and store data in a way that allows efficient access and modification. JavaScript has primitive (built-in) and non-primitive (not built-in) data structures. Primitive data structures come by default with the programming language and you can implement them out of the box (like arrays and objects). Non-primitive data structures don't come by default and you have to code them up if you want to use them. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/data-structures-in-javascript-with-examples/#what-is-a-data-structure", " Data structures" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/100-is-loosely-equal.md b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/100-is-loosely-equal.md new file mode 100644 index 000000000..e93ef3153 --- /dev/null +++ b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/100-is-loosely-equal.md @@ -0,0 +1,8 @@ +# isLooselyEqual + +[isLooselyEqual](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality) checks whether its two operands are equal, returning a `Boolean` result. It attempts to convert and compare operands that are of different types. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality", " Loosely Equality (==) Operator" %} + {% Blog "https://javascript.info/comparison", "Comparison - javascript.info" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/101-is-strictly-equal.md b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/101-is-strictly-equal.md new file mode 100644 index 000000000..c4c3bb459 --- /dev/null +++ b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/101-is-strictly-equal.md @@ -0,0 +1,8 @@ +# isStrictlyEqual + +[isStrictlyEqual](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality) checks whether its two operands are equal, returning a `Boolean` result. It always considers operands of different types to be different. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality", " Strictly Equality (===) Operator" %} + {% Blog "https://javascript.info/comparison", "Comparison - javascript.info" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/102-same-value-zero.md b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/102-same-value-zero.md new file mode 100644 index 000000000..fde08b63d --- /dev/null +++ b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/102-same-value-zero.md @@ -0,0 +1,7 @@ +# Same value zero + +[SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#same-value-zero_equality) equality determines whether two values are functionally identical in all contexts with +0 and -0 are also considered equal. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#same-value-zero_equality", " Same-value-zero equality" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/103-same-value.md b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/103-same-value.md new file mode 100644 index 000000000..16e3c82ea --- /dev/null +++ b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/103-same-value.md @@ -0,0 +1,7 @@ +# Same value + +[SameValue](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#same-value_equality_using_object.is) equality determines whether two values are functionally identical in all contexts. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#same-value_equality_using_object.is", " Same-value equality using Object.is()" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/index.md b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/index.md new file mode 100644 index 000000000..cea6fa7b7 --- /dev/null +++ b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/index.md @@ -0,0 +1,7 @@ +# Equality algorithms + +Equality algorithms are used to perform equality comparisons of values or variables in JavaScript. Each equality algorithm works slightly differently, and the one you use depends on the type of comparison you want to make. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness", "Which JavaScript equality algorithm should you use?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/105-javascript-equality-comparisons/101-value-comparison-operators.md b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/101-value-comparison-operators.md new file mode 100644 index 000000000..1556fb286 --- /dev/null +++ b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/101-value-comparison-operators.md @@ -0,0 +1,12 @@ +# Value Comparison Operators + +In javascript, the `==` operator does the type conversion of the operands before comparison, whereas the === operator compares the values and the data types of the operands. The `Object.is()` method determines whether two values are the same value: `Object.is(value1, value2)`. + +`Object.is()` is not equivalent to the `==` operator. The `==` operator applies various coercions to both sides (if they are not the same type) before testing for equality (resulting in such behavior as `"" == false` being `true`), but `Object.is()` doesn't coerce either value. + +`Object.is()` is also not equivalent to the `===` operator. The only difference between `Object.is()` and `===` is in their treatment of signed zeros and `NaN` values. The `===` operator (and the `==` operator) treats the number values `-0` and `+0` as equal but treats `NaN` as not equal to each other. + +{% resources %} + {% Blog "https://www.scaler.com/topics/javascript/difference-between-double-equals-and-triple-equals-in-javascript/", "The Difference Between == and === in Javascript" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#same-value_equality_using_object.is", "Equality comparisons and sameness - MDN" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/105-javascript-equality-comparisons/index.md b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/index.md new file mode 100644 index 000000000..501d1461d --- /dev/null +++ b/src/roadmaps/javascript/content/105-javascript-equality-comparisons/index.md @@ -0,0 +1,8 @@ +# Equality Comparisons + +Comparison operators are used in logical statements to determine equality or difference between variables or values. Comparison operators can be used in conditional statements to compare values and take action depending on the result. + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_comparisons.asp", "JavaScript Comparisons" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#equality_operators", "JavaScript Equality Operators" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/100-for-in-statement.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/100-for-in-statement.md new file mode 100644 index 000000000..7006d8219 --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/100-for-in-statement.md @@ -0,0 +1,8 @@ +# for...in statement + +The for...in statement iterates over all enumerable properties of an object that are keyed by strings (ignoring ones keyed by Symbols), including inherited enumerable properties. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in", "for...in statement - MDN" %} + {% Blog "https://javascript.info/object#forin", "The for..in loop with examples" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/101-for-of-statement.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/101-for-of-statement.md new file mode 100644 index 000000000..8f4ee4fb2 --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/101-for-of-statement.md @@ -0,0 +1,7 @@ +# for...of statement + +The for...of statement executes a loop that operates on a sequence of values sourced from an iterable object. Iterable objects include instances of built-ins such as Array, String, TypedArray, Map, Set, NodeList (and other DOM collections), and the arguments object, generators produced by generator functions, and user-defined iterables. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of", "for...of statement - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/100-labeled-statements.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/100-labeled-statements.md new file mode 100644 index 000000000..c6aec0d8c --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/100-labeled-statements.md @@ -0,0 +1,10 @@ +# Labeled Statements + +JavaScript label statements are used to prefix a label to an identifier. It can be used with `break` and `continue` statement to control the flow more precisely. + +A label is simply an identifier followed by a colon`(:)` that is applied to a block of code. + +{% resources %} + {% Official "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label", "JavaScript MDN Docs" %} + {% Official "https://www.tutorialspoint.com/What-are-label-statements-in-JavaScript", "Tutorialspoint – JavaScript Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/index.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/index.md new file mode 100644 index 000000000..d04863561 --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/102-break-continue/index.md @@ -0,0 +1,11 @@ +# Break continue + +`break` statement, without a label reference, can only be used to jump out of a loop or a switch block. + +`continue` statement, with or without a label reference, can only be used to skip one loop iteration. + +{% resources %} + {% Official "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/continue", "JavaScript MDN Docs - continue statement" %} + {% Official "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break", "JavaScript MDN Docs - break statement" %} + {% Official "https://www.w3schools.com/js/js_break.asp", "W3Schools – JavaScript Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/103-for-statement.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/103-for-statement.md new file mode 100644 index 000000000..55b215d32 --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/103-for-statement.md @@ -0,0 +1,8 @@ +# The `for` loop + +The `for` loop is a standard control-flow construct in many programming languages, including JavaScript. It's commonly used to iterate over given sequences or iterate a known number of times and execute a piece of code for each iteration. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/js/loops-for-loop", "JavaScript `for` Loop - CodeGuage" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for", "The `for` Loop - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/104-do-while-statement.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/104-do-while-statement.md new file mode 100644 index 000000000..5c353e040 --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/104-do-while-statement.md @@ -0,0 +1,8 @@ +# do...while statement + +The `do...while` statement creates a loop that executes a specified statement until the test condition evaluates to `false`. The condition is evaluated after executing the statement, resulting in the specified statement executing at least once. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/do...while", "do...while - MDN" %} + {% Blog "https://www.w3schools.com/jsref/jsref_dowhile.asp", "JavaScript do...while Loop - W3Schools" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/105-while-statement.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/105-while-statement.md new file mode 100644 index 000000000..0c6b91f39 --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/105-while-statement.md @@ -0,0 +1,8 @@ +# while statement + +The `while` statement creates a loop that executes a specified statement as long as the test condition evaluates to `true`. The condition is evaluated before executing the statement. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while", "While Statement - MDN" %} + {% Blog "https://www.codeguage.com/courses/js/loops-while-loop", "The while Loop - CodeGuage" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/106-javascript-loops-iterations/index.md b/src/roadmaps/javascript/content/106-javascript-loops-iterations/index.md new file mode 100644 index 000000000..aee0591ae --- /dev/null +++ b/src/roadmaps/javascript/content/106-javascript-loops-iterations/index.md @@ -0,0 +1,16 @@ +# Loops and Iterations + +Loops offer a quick and easy way to do something repeatedly. + +You can think of a loop as a computerized version of the game where you tell someone to take X steps in one direction, then Y steps in another. For example, the idea "Go five steps to the east" could be expressed this way as a loop: + +``` +for (let step = 0; step < 5; step++) { + // Runs 5 times, with values of step 0 through 4. + console.log('Walking east one step'); +} +``` + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration", "Loops and iteration" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md new file mode 100644 index 000000000..3c21f6736 --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md @@ -0,0 +1,6 @@ +# Throw Statement + +The throw statement throws a user-defined exception. Execution of the current function will stop (the statements after throw won't be executed), and control will be passed to the first catch block in the call stack. If no catch block exists among caller functions, the program will terminate. (excerpt from MDN) + +{% resources %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/101-try-catch-finally.md b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/101-try-catch-finally.md new file mode 100644 index 000000000..32b4f71f1 --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/101-try-catch-finally.md @@ -0,0 +1,8 @@ +# Try, Catch, Finally + +These are ways of handling errors in your JavaScript code. Inside the try code block we have the code to run, inside the catch block we handle the errors, and inside the finally block we have code that runs after the execution of the previous code blocks, regardless of the result. + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_errors.asp", "JavaScript Errors" %} +{% endresources %} + diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/102-utilizing-error-objects.md b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/102-utilizing-error-objects.md new file mode 100644 index 000000000..fddf82014 --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/102-utilizing-error-objects.md @@ -0,0 +1,35 @@ +# Utilizing error objects + +When a runtime error occurs, a new `Error` object is created and thrown. With this `Error` object, we can determine the type of the Error and handle it according to its type. + +## Types of Errors: + +Besides error constructors, Javascript also has other core Error constructors. + +- [`AggregateError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError) +- [`EvalError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError) +- [`InternalError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError) +- [`RangeError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError) +- [`ReferenceError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError) +- [`SyntaxError`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError) + +## Example + +```js +try { + willGiveErrorSometime(); +} catch (error) { + if (error instanceof RangeError) { + rangeErrorHandler(error); + } else if (error instanceof ReferenceError) { + referenceErrorHandle(error); + } else { + errorHandler(error); + } +} +``` + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", "Error Object - MDN" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling", "Control flow & Error handling - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/index.md b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/index.md new file mode 100644 index 000000000..b488ad706 --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/index.md @@ -0,0 +1,7 @@ +# Exception Handling + +In JavaScript, all exceptions are simply objects. While the majority of exceptions are implementations of the global Error class, any old object can be thrown. With this in mind, there are two ways to throw an exception: directly via an Error object, and through a custom object. (excerpt from Rollbar) + +{% resources %} + {% Blog "https://rollbar.com/guides/javascript/how-to-throw-exceptions-in-javascript", "Throwing Exceptions in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/100-if-else.md b/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/100-if-else.md new file mode 100644 index 000000000..0026ec216 --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/100-if-else.md @@ -0,0 +1,17 @@ +# If else + +The `if` statement executes a statement if a specified condition is `truthy`. If the condition is `falsy`, another statement in the optional `else` clause will be executed. + +## Example +```js +if (condition) { + statement1 +} else { + statement2 +} +``` + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else", "if...else - MDN docs" %} + {% Blog "https://javascript.info/ifelse", "Conditional branching: if, ? - javascript.info" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/101-switch.md b/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/101-switch.md new file mode 100644 index 000000000..69fb6795a --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/101-switch.md @@ -0,0 +1,27 @@ +# Switch Case + +The `switch` statement evaluates an expression, matching the expression's value against a series of `case` clauses, and executes statements after the first `case` clause with a matching value, until a `break` statement is encountered. The `default` clause of a `switch` statement will be jumped to if no `case` matches the expression's value. + +## Example +```js +switch (expression) { + case value1: + //Statements executed when the result of expression matches value1 + break; + case value2: + //Statements executed when the result of expression matches value2 + break; + ... + case valueN: + //Statements executed when the result of expression matches valueN + break; + default: + //Statements executed when none of the values match the value of the expression + break; +} +``` + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch", "switch - MDN" %} + {% Blog "https://javascript.info/switch", "The switch statement - javascript.info" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/index.md b/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/index.md new file mode 100644 index 000000000..30bb26f34 --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/101-conditional-statements/index.md @@ -0,0 +1,8 @@ +# Conditional statements + +When you write code, you often want to perform different actions for different decisions. You can use conditional statements in your code to do this. In JavaScript, we have three conditional statements: `if`, `if...else`, and `switch`. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/conditionals", "Making decisions in your code — conditionals" %} + {% Blog "https://javascript.info/ifelse", "Conditional branching: if, ?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/107-javascript-control-flow/index.md b/src/roadmaps/javascript/content/107-javascript-control-flow/index.md new file mode 100644 index 000000000..32390b909 --- /dev/null +++ b/src/roadmaps/javascript/content/107-javascript-control-flow/index.md @@ -0,0 +1,13 @@ +# Control Flow + +In JavaScript, the `Control flow` is a way of how your computer runs code from top to bottom. It starts from the first line and ends at the last line unless it hits any statement that changes the control flow of the program such as loops, conditionals, etc. + +We can control the flow of the program through any of these control structures: +- Sequential (default mode) +- Conditional Statements +- Exception Handling +- Loops and Iterations + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Control_flow", "Control Flow - MDN" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/100-assignment-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/100-assignment-operators.md new file mode 100644 index 000000000..9d853077a --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/100-assignment-operators.md @@ -0,0 +1,8 @@ +# Assignment Operators + +An assignment operator assigns a value to its left operand based on the value of its right operand. The simple assignment operator is equal (`=`), which assigns the value of its right operand to its left operand. That is, `x = f()` is an assignment expression that assigns the value of `f()` to `x`. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment_operators", "Assignment Operators" %} + {% Blog "https://javascript.info/operators#assignment", "Basic Operators" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/101-omparison-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/101-omparison-operators.md new file mode 100644 index 000000000..1de394ff8 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/101-omparison-operators.md @@ -0,0 +1,9 @@ +# Comparison Operators + +Comparison operators are the operators that compare values and return true or false. The operators include: `>`, `<`, `>=`, `<=`, `==`, `===`, `!==` and `!===` + +{% resources %} + {% Official "https://www.w3schools.com/js/js_comparisons.asp", "W3Schools - JavaScript Tutorials" %} + {% Official "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#comparison_operators", "JavaScript MDN Docs" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#comparison_operators", "Comparison operators" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/102-arithmetic-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/102-arithmetic-operators.md new file mode 100644 index 000000000..ca5955210 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/102-arithmetic-operators.md @@ -0,0 +1,19 @@ +# Arithmetic operators + +The Arithmetic operators perform addition, subtraction, multiplication, division, exponentiation, and remainder operations. + +Arithmetic operators in JavaScript are as follows: +- `+` (Addition) +- `-` (Subtraction) +- `*` (Multiplication) +- `**` (Exponentiation) +- `/` (Division) +- `%` (Modulus i.e. Remainder) +- `++` (Increment) +- `--` (Decrement) + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#arithmetic_operators", "Arithmetic Operators - MDN" %} + {% Blog "https://javascript.info/operators#maths", "Arithmetic Operators - JavaScript.info" %} + {% Blog "https://www.w3schools.com/js/js_arithmetic.asp", "JavaScript Arithmetic Operators" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/103-bitwise-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/103-bitwise-operators.md new file mode 100644 index 000000000..fc67ada92 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/103-bitwise-operators.md @@ -0,0 +1,19 @@ +# Bitwise operators + +Bitwise operators treat arguments as 32-bits (zeros & ones) and work on the level of their binary representation. +Ex. Decimal number `9` has a binary representation of `1001`. Bitwise operators perform their operations on such binary representations, but they return standard JavaScript numerical values. + +Bitwise operators in JavaScript are as follows: + +- `&` (AND) +- `|` (OR) +- `^` (XOR) +- `~` (NOT) +- `<<` (Left SHIFT) +- `>>` (Right SHIFT) +- `>>>` (Zero-Fill Right SHIFT) + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise_operators", "Bitwise Operators - MDN" %} + {% Blog "https://javascript.info/operators#bitwise-operators", "Bitwise Operators - JavaScript.info" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/104-logical-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/104-logical-operators.md new file mode 100644 index 000000000..e68fe1015 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/104-logical-operators.md @@ -0,0 +1,8 @@ +# Logical Operators + +There are four logical operators in JavaScript: `||` (OR), `&&` (AND), `!` (NOT), `??` (Nullish Coalescing). + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#binary_logical_operators", "Logical Operators - MDN" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#binary_logical_operators", "Logical Operators - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/105-bigint-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/105-bigint-operators.md new file mode 100644 index 000000000..42deccee2 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/105-bigint-operators.md @@ -0,0 +1,7 @@ +# BigInt Operators + +Most operators that can be used with the `Number` data type will also work with `BigInt` values (e.g. arithmetic, comparison, etc.). However, the unsigned right shift `>>>` operator is an exception and is not supported. Similarly, some operators may have slight differences in behaviour (for example, division with `BigInt` will round towards zero). + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bigint_operators", "BigInt Operators" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/106-string-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/106-string-operators.md new file mode 100644 index 000000000..6e118d1d2 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/106-string-operators.md @@ -0,0 +1,10 @@ +# String Operators + +In addition to the comparison operators, which can be used on string values, the concatenation operator (`+`) concatenates two string values together, returning another string that is the union of the two operand strings. + +The shorthand assignment operator `+=` can also be used to concatenate strings. + +{% resources %} + {% Official "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#string_operators", "JavaScript MDN Tutorials" %} + {% Blog "https://javascript.info/operators#string-concatenation-with-binary", "String Concatenation - JavaScript.info" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/107-conditional-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/107-conditional-operators.md new file mode 100644 index 000000000..17e643c44 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/107-conditional-operators.md @@ -0,0 +1,14 @@ +# Conditional operators + +Conditional operator also known as Ternary operator is the only JS operator that takes three operands. + +The operator can have one of two values based on a condition. + +Syntax: + +`condition ? val_for_true : val_for_false ` + +{% resources %} + {% Official "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#conditional_operator", "JavaScript MDN Docs" %} + {% Official "https://www.w3schools.com/js/js_comparisons.asp", "W3Schools - JavaScript Tutorials" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/108-comma-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/108-comma-operators.md new file mode 100644 index 000000000..b8bc40e84 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/108-comma-operators.md @@ -0,0 +1,7 @@ +# Comma operators + +The comma operator (`,`) evaluates each of its operands (from left to right) and returns the value of the last operand. This lets you create a compound expression in which multiple expressions are evaluated, with the compound expression's final value being the value of the rightmost of its member expressions. This is commonly used to provide multiple parameters to a `for` loop. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator", "Comma operator" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/109-unary-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/109-unary-operators.md new file mode 100644 index 000000000..9d954a888 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/109-unary-operators.md @@ -0,0 +1,8 @@ +# Unary Operators + +JavaScript Unary Operators are the special operators that consider a single operand and perform all the types of operations on that single operand. These operators include unary plus, unary minus, prefix increments, postfix increments, prefix decrements, and postfix decrements. + +{% resources %} + {% Blog "https://www.educba.com/unary-operators-in-javascript/", "Unary Operators in JavaScript" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#unary_operators", "Unary Operators - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/110-relational-operators.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/110-relational-operators.md new file mode 100644 index 000000000..13d7c36f6 --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/110-relational-operators.md @@ -0,0 +1,7 @@ +# Relational Operators + +Relational operators are also known as comparison operators. They are used to find the relationship between two values or compare the relationship between them; on the comparison, they yield the result true or false. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#relational_operators", "Relational Operators - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/index.md b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/index.md new file mode 100644 index 000000000..7f43f0e1a --- /dev/null +++ b/src/roadmaps/javascript/content/108-javascript-expressions-and-operators/index.md @@ -0,0 +1,7 @@ +# Expressions and Operators + +At a high level, an expression is a valid unit of code that resolves to a value. There are two types of expressions: those that have side effects (such as assigning values) and those that purely evaluate. The expression `x = 7` is an example of the first type. This expression uses the `=` operator to assign the value seven to the variable x. The expression itself evaluates to 7. The expression `3 + 4` is an example of the second type. This expression uses the `+` operator to add `3` and `4` together and produces a value, `7`. However, if it's not eventually part of a bigger construct (for example, a variable declaration like const `z = 3 + 4`), its result will be immediately discarded `—` this is usually a programmer mistake because the evaluation doesn't produce any effects. As the examples above also illustrate, all complex expressions are joined by operators, such as `=` and `+`. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators", "Expressions and operators" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/100-defining-calling-functions.md b/src/roadmaps/javascript/content/109-javascript-functions/100-defining-calling-functions.md new file mode 100644 index 000000000..1ac3fe923 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/100-defining-calling-functions.md @@ -0,0 +1,18 @@ +# Defining and Calling Functions + +**Defining:** +- JavaScript function *declarations* are made by using the `function` keyword. +- Functions can also be defined by saving function *expressions* to a variable. "Arrow" functions are commonly used in this way. + +**Calling:** +- When a function is defined, it is not yet executed. +- To call and invoke a function's code, use the function's name followed by parentheses: `functionName()`. + + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#defining_functions", "Defining Functions" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#calling_functions", "Calling Functions" %} + {% Blog "https://www.w3schools.com/js/js_function_definition.asp", "Function Definitions" %} +{% endresources %} + + diff --git a/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md b/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md new file mode 100644 index 000000000..b6fef7ea5 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md @@ -0,0 +1,7 @@ +# Default Parameters + +Default function parameters allow named parameters to be initialized with default values if no value or `undefined` is passed. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters", "Default Parameters - MDN Docs" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/101-rest-params.md b/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/101-rest-params.md new file mode 100644 index 000000000..74f64e4c6 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/101-rest-params.md @@ -0,0 +1,7 @@ +# Rest Parameters + +The rest parameter syntax allows a function to accept an indefinite number of arguments as an array, providing a way to represent [variadic functions](https://en.wikipedia.org/wiki/Variadic_function) in JavaScript. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters", "Rest Parameters - MDN Docs" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/index.md b/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/index.md new file mode 100644 index 000000000..25dadcaa8 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/101-function-parameters/index.md @@ -0,0 +1,7 @@ +# Function Parameters + +The parameter is the name given to the variable declared inside the definition of a function. There are two special kinds of syntax: default and rest parameters. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#function_parameters", "Function Parameters" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/102-arrow-functions.md b/src/roadmaps/javascript/content/109-javascript-functions/102-arrow-functions.md new file mode 100644 index 000000000..c57552893 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/102-arrow-functions.md @@ -0,0 +1,8 @@ +# Arrow Functions + +Arrow Function is a new way of creating functions with the '=>' operator with a shorter syntax. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions", "MDN - Arrow Function Expressions" %} + {% Blog "https://www.w3schools.com/js/js_arrow_function.asp", "JavaScript Arrow Function" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/103-iifes.md b/src/roadmaps/javascript/content/109-javascript-functions/103-iifes.md new file mode 100644 index 000000000..5e18f95f0 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/103-iifes.md @@ -0,0 +1,8 @@ +# IIFE + +Immediately-Invoked Function Expression is a function that is executed immediately after it is created. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/IIFE", "IIFE — MDN Docs" %} + {% Blog "https://javascript.plainenglish.io/https-medium-com-javascript-in-plain-english-stop-feeling-iffy-about-using-an-iife-7b0292aba174", "JavaScript in Plain English - IIFE" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/104-arguments-object.md b/src/roadmaps/javascript/content/109-javascript-functions/104-arguments-object.md new file mode 100644 index 000000000..9d616ad8e --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/104-arguments-object.md @@ -0,0 +1,7 @@ +# Arguments object + +The arguments object is an Array-like object accessible inside functions that contains the values of the arguments passed to that function, available within all non-arrow functions. You can refer to a function's arguments inside that function by using its arguments object. It has entries for each argument the function was called with, with the first entry's index at 0. But, in modern code, rest parameters should be preferred. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments", "The arguments object - MDN Docs" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/100-recursion.md b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/100-recursion.md new file mode 100644 index 000000000..ab6825112 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/100-recursion.md @@ -0,0 +1,9 @@ +# Recursion + +One of the most powerful and elegant concept of functions, recursion is when a function invokes itself. Such a function is called a **_recursive function_**. As recursion happens, the underlying code of the recursive function gets executed again and again until a terminating condition, called the _base case_, gets fulfilled. As you dive into the world of algorithms, you'll come across recursion in many many instances. + +{% resources %} + {% Blog "https://javascript.info/recursion", "Recursion and Stack" %} + {% Blog "https://www.codeguage.com/courses/js/functions-recursions", "JavaScript Function Recursions - CodeGuage" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Recursion", "Recursion - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/101-lexical-scoping.md b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/101-lexical-scoping.md new file mode 100644 index 000000000..01a580304 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/101-lexical-scoping.md @@ -0,0 +1,9 @@ +# Lexical scoping + +Before one can make an intuition of closures in JavaScript, it's important to first get the hang of the term '**_lexical environment_**'. In simple words, the lexical environment for a function `f` simply refers to the environment enclosing that function's definition in the source code. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/js/functions-closures#What_is_a_lexical_environment", "What is a lexical environment? - JavaScript - CodeGuage" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#lexical_scoping", "Lexical scoping - JavaScript - MDN" %} + {% Blog "https://www.freecodecamp.org/news/javascript-lexical-scope-tutorial/", "Lexical Scope in JavaScript – What Exactly Is Scope in JS?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/102-closures.md b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/102-closures.md new file mode 100644 index 000000000..ae4c3f8a3 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/102-closures.md @@ -0,0 +1,7 @@ +# Closures + +Function closures are one of the most powerful, yet most misunderstood, concepts of JavaScript that are actually really simple to understand. A closure refers to a function along with its lexical environment. It is essentially what allows us to return a function `A`, from another function `B`, that remembers the local variables defined in `B`, even after `B` exits. The idea of closures is employed in nearly every other JavaScript program, hence, it's paramount for a JavaScript developer to know it really well. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/js/functions-closures", "JavaScript Closures - The Simplest Explanation" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/index.md b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/index.md new file mode 100644 index 000000000..5a82981f3 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/105-scope-and-function-stack/index.md @@ -0,0 +1,18 @@ +# Scope and function stack + +## Scope +A space or environment in which a particular variable or function can be accessed or used. Accessibility of this variable or function depends on where it is defined. + +JavaScript has the following kinds of scopes: +- **Global scope**: The default scope for all code running in script mode. +- **Module scope**: The scope for code running in module mode. +- **Function scope**: The scope created with a function. +- **Block scope**: The scope created with a pair of curly braces (a block). + +## Function Stack (Call stack) +The function stack is how the interpreter keeps track of its place in a script that calls multiple functions, like which function is currently executing and which functions within that function are being called. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Call_stack", "Function stack (call stack) - MDN" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Scope", "Kinds of Scope - MDN" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/106-built-in-functions.md b/src/roadmaps/javascript/content/109-javascript-functions/106-built-in-functions.md new file mode 100644 index 000000000..3172410df --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/106-built-in-functions.md @@ -0,0 +1,11 @@ +# Built in functions + +- A JavaScript **method** is a property containing a **function definition** . In other words, when the data stored on an object is a function we call that a method. +- To differentiate between properties and methods, we can think of it this way: **A property is what an object has, while a method is what an object does.** +- Since JavaScript methods are actions that can be performed on objects, we first need to have objects to start with. There are several objects built into JavaScript which we can use. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/javascript/javascript_builtin_functions.htm", "JavaScript Built-in Functions" %} + {% Blog "https://dev.to/elpepebenitez/built-in-methods-in-javascript-4bll", "Built-in Methods in Javascript" %} + {% Blog "https://www.tutorialride.com/javascript/javascript-built-in-functions.htm", "Built-in Functions:" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/109-javascript-functions/index.md b/src/roadmaps/javascript/content/109-javascript-functions/index.md new file mode 100644 index 000000000..5cd035712 --- /dev/null +++ b/src/roadmaps/javascript/content/109-javascript-functions/index.md @@ -0,0 +1,9 @@ +# Functions + +Functions exist so we can reuse code. They are blocks of code that execute whenever they are invoked. Each function is typically written to perform a particular task, like an addition function used to find the sum of two or more numbers. When numbers need to be added anywhere within your code, the addition function can be invoked as many times as necessary. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions", "Functions - MDN Docs" %} + {% Blog "https://youtu.be/N8ap4k_1QEQ", "JavaScript Functions - Programming with Mosh" %} + {% Blog "https://www.codeguage.com/courses/js/functions-basics", "JavaScript Functions in Detail - CodeGuage" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/110-javascript-strict-mode.md b/src/roadmaps/javascript/content/110-javascript-strict-mode.md new file mode 100644 index 000000000..e2ed67645 --- /dev/null +++ b/src/roadmaps/javascript/content/110-javascript-strict-mode.md @@ -0,0 +1,14 @@ +# Strict Mode + +JavaScript's strict mode is a way to opt-in to a restricted variant of JavaScript, thereby implicitly opting out of "sloppy mode". Strict mode isn't just a subset: it intentionally has different semantics from regular code. Browsers not supporting strict mode will run strict mode code with different behavior from browsers that do, so don't rely on strict mode without feature-testing for support for the relevant aspects of strict mode. Strict mode code and non-strict mode code can coexist so that scripts can opt into strict mode incrementally. + +Strict mode makes several changes to normal JavaScript semantics: + +- Eliminates some JavaScript silent errors by changing them to throw errors. +- Fixes mistakes that make it difficult for JavaScript engines to perform optimizations: strict mode code can sometimes run faster than identical code that's not strict mode. +- Prohibits some syntax likely to be defined in future versions of ECMAScript. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode", "Strict mode" %} + {% Blog "https://javascript.info/strict-mode", "Strict mode in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/100-function-borrowing.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/100-function-borrowing.md new file mode 100644 index 000000000..353ce956e --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/100-function-borrowing.md @@ -0,0 +1,7 @@ +# Function Borrowing + +Function borrowing allows us to use the methods of one object on a different object without having to make a copy of that method and maintain it in two separate places. It is accomplished through the use of `.call()`, `.apply()`, or `.bind()`, all of which exist to explicitly set this on the method we are borrowing. + +{% resources %} + {% Blog "https://medium.com/@ensallee/function-borrowing-in-javascript-4bd671e9d7b4", "Function borrowing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/101-this-in-a-method.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/101-this-in-a-method.md new file mode 100644 index 000000000..1cd90a131 --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/101-this-in-a-method.md @@ -0,0 +1,8 @@ +# this in a method + +Methods are properties of an object which are functions. The value of this inside a method is equal to the calling object. In simple words, this value is the object “before dot”, the one used to call the method. + +{% resources %} + {% Blog "https://javascript.info/object-methods#this-in-methods", "`this` in methods" %} + {% Blog "https://www.w3schools.com/js/js_this.asp", "Short and clear post about the `this` keyword" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/102-this-in-a-function.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/102-this-in-a-function.md new file mode 100644 index 000000000..e25aa87fa --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/102-this-in-a-function.md @@ -0,0 +1,9 @@ +# this in a function + +The keyword `this` when used in a function refers to the global object. + +*Note: in a browser window the global object is the `window` object.* + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_this.asp", "this in a function" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/103-using-this-alone.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/103-using-this-alone.md new file mode 100644 index 000000000..f1090bd76 --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/103-using-this-alone.md @@ -0,0 +1,9 @@ +# Using this alone + +The keyword `this` when used alone refers to the global object. + +*Note: in a browser window the global object is the `window` object.* + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_this.asp", "this Alone" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/104-this-in-event-handlers.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/104-this-in-event-handlers.md new file mode 100644 index 000000000..4c8baab99 --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/104-this-in-event-handlers.md @@ -0,0 +1,7 @@ +# this in event handlers + +The keyword `this` when used in an event handler refers to the element that received the event. + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_this.asp", "this in Event handlers" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/105-this-in-arrow-functions.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/105-this-in-arrow-functions.md new file mode 100644 index 000000000..c6ce6e19b --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/105-this-in-arrow-functions.md @@ -0,0 +1,7 @@ +# this in arrow functions + +The keyword `this` when used in an arrow function refers to the parent object. + +{% resources %} + {% Blog "https://stackoverflow.com/questions/66518020/javascript-this-keyword-and-arrow-function", "this keyword and arrow function" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/106-explicit-binding.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/106-explicit-binding.md new file mode 100644 index 000000000..e490958fb --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/106-explicit-binding.md @@ -0,0 +1,8 @@ +# Explicit binding + +Explicit binding is when you use the `call` or `apply` methods to explicitly set the value of `this` in a function. Explicit Binding can be applied using `call()`, `apply()`, and `bind()`. + +{% resources %} + {% Blog "https://medium.com/swlh/javascript-this-ac28f8e0f65d", "Explicit Binding" %} + {% Blog "https://medium.com/@msinha2801/explicit-binding-rule-for-this-keyword-in-js-712405b0a11", "Explicit Binding rule for this keyword" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/107-call-method.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/107-call-method.md new file mode 100644 index 000000000..7aa5839ca --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/107-call-method.md @@ -0,0 +1,7 @@ +# call() method + +The `call()` method calls the function with a reference to the aspire object to `this` keyword. `call()` method accepts an argument list and each arguments should be provided individually. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call", "call() method" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/108-apply-method.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/108-apply-method.md new file mode 100644 index 000000000..d139e991c --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/108-apply-method.md @@ -0,0 +1,7 @@ +# apply() method + +`apply()` method is almost identical to `call()` method, except that `call()` method accepts an argument list, while `apply()` method accepts a single array of arguments. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply", "apply() method" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/109-bind-method.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/109-bind-method.md new file mode 100644 index 000000000..52001f423 --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/109-bind-method.md @@ -0,0 +1,7 @@ +# bind() method + +The `bind()` method return a new method that has its `this` keyword refers to the aspire object, with a given sequence of arguments which can be call later. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind", "bind() method" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/111-javascript-this-keyword/index.md b/src/roadmaps/javascript/content/111-javascript-this-keyword/index.md new file mode 100644 index 000000000..8e95de7b5 --- /dev/null +++ b/src/roadmaps/javascript/content/111-javascript-this-keyword/index.md @@ -0,0 +1,15 @@ +# This Keyword + +In JavaScript, the `this` keyword is a little different compared to other languages. It refers to an object, but it depends on how or where it is being invoked. It also has some differences between strict mode and non-strict mode. + +- In an object method, `this` refers to the object +- Alone, `this` refers to the global object +- In a function, `this` refers to the global object +- In a function, in strict mode, `this` is undefined +- In an event, `this` refers to the element that received the event +- Methods like call(), apply(), and bind() can refer `this` to any object + +{% resources %} + {% Blog "https://www.w3schools.com/js/js_this.asp", "The JavaScript `this` Keyword" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this", "This Keyword" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/100-event-loop.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/100-event-loop.md new file mode 100644 index 000000000..6d6acc121 --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/100-event-loop.md @@ -0,0 +1,9 @@ +# Event Loop + +The Event Loop is one of the most important aspects to understand about Node.js. Why is this so important? Because it explains how Node.js can be asynchronous and have non-blocking I/O, it explains the "killer feature" of Node.js, which made it this successful. + +{% resources %} + {% Blog "https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#what-is-the-event-loop", "The Node.Js Event Loop" %} + {% Blog "https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif", "JavaScript Visualized: Event Loop" %} + {% Blog "https://www.youtube.com/watch?v=8aGhZQkoFbQ", "What the heck is the event loop anyway?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/101-set-timeout.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/101-set-timeout.md new file mode 100644 index 000000000..2349466a8 --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/101-set-timeout.md @@ -0,0 +1,10 @@ +# setTimeout + +The setTimeout runs a function after the specified period expires. Times are declared in milliseconds. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/setTimeout", "JavaScript MDN Docs" %} + {% Blog "https://www.w3schools.com/jsref/met_win_settimeout.asp", "W3Schools – JavaScript - setTimeOut" %} + {% Blog "https://www.youtube.com/watch?v=kOcFZV3c75I", "setInterval and setTimeout: timing events" %} + {% Blog "https://www.youtube.com/watch?v=z9lJb4D3nJY", "setTimeout EXPLAINED in 5 minutes!" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/102-set-interval.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/102-set-interval.md new file mode 100644 index 000000000..c4a313516 --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/102-set-interval.md @@ -0,0 +1,10 @@ +# setInterval + +The `setInterval()` method helps us to repeatedly execute a function after a fixed delay. It returns a unique interval ID which can later be used by the `clearInterval()` method, which stops further repeated execution of the function. + +`setInterval()` is similar to setTimeout, with a difference. Instead of running the callback function once, it will run it forever, at the specific time interval you specify (in milliseconds): + +{% resources %} + {% Blog "https://javascript.info/settimeout-setinterval", "Scheduling: setTimeout and setInterval" %} + {% Blog "https://www.geeksforgeeks.org/what-is-setinterval-in-javascript/", "What is the use of setInterval() method in JavaScript?" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/100-callback-hell.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/100-callback-hell.md new file mode 100644 index 000000000..3c1ae5233 --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/100-callback-hell.md @@ -0,0 +1,7 @@ +# Callback Hell + +The callback hell is when we try to write asynchronous JavaScript in a way where execution happens visually from top to bottom, creating a code that has a pyramid shape with many }) at the end. + +{% resources %} + {% Blog "http://callbackhell.com/", "Callback Hell" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/index.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/index.md new file mode 100644 index 000000000..f42cb4d3b --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/103-callbacks/index.md @@ -0,0 +1,8 @@ +# Callbacks + +A callback function is a function passed into another function as an argument, which is then invoked inside the outer function to complete some kind of routine or action. + +{% resources %} + {% Blog "https://javascript.info/callbacks", "Callbacks in JavaScript" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Glossary/Callback_function", "Callback Functions" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/100-async-await.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/100-async-await.md new file mode 100644 index 000000000..2dc60ee98 --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/100-async-await.md @@ -0,0 +1,11 @@ +# Async/Await + +`async/await` is a special syntax to work with promises in a more comfortable fashion. +We use `async` keyword to declare a async function that return a Promise, and the `await` keyword makes a function wait for a Promise. + +{% resources %} + {% Blog "https://javascript.info/async-await", "Async/await" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function", "async function" %} + {% Blog "https://www.codeguage.com/courses/advanced-js/promises-chaining", "JavaScript Promises - Chaining" %} + {% Blog "https://www.freecodecamp.org/news/javascript-async-await-tutorial-learn-callbacks-promises-async-await-by-making-icecream/", "JavaScript Async/Await Tutorial – Learn Callbacks, Promises, and Async/Await in JS by Making Ice Cream" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/index.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/index.md new file mode 100644 index 000000000..d52ebf1ac --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/104-promises/index.md @@ -0,0 +1,10 @@ +# Promises + +Promises are a much better way to work with asynchronous code in JavaScript than the old and error-prone callback approach. They were introduced into JavaScript with ECMAScript 6. Using promises, we can manage extremely complex asynchronous code with rigorous error-handling setup, write code in a more or less synchronous style, and keep ourselves from running into the so-called callback hell. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/advanced-js/promises-introduction", "A Detailed Introduction to Promises" %} + {% Blog "https://www.codeguage.com/courses/advanced-js/promises-basics", "JavaScript Promises - Basics" %} + {% Blog "https://www.codeguage.com/courses/advanced-js/promises-chaining", "JavaScript Promises - Chaining" %} + {% Blog "https://www.codeguage.com/courses/advanced-js/promises-error-handling", "JavaScript Promises - Error Handling" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/index.md b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/index.md new file mode 100644 index 000000000..7f14a70fe --- /dev/null +++ b/src/roadmaps/javascript/content/112-javascript-asynchronous-javascript/index.md @@ -0,0 +1,14 @@ +# Asynchronous JavaScript + +Asynchronous programming is a technique that enables your program to start a potentially long-running task and still be able to be responsive to other events while that task runs, rather than having to wait until that task has finished. Once that task has finished, your program is presented with the result. + +Many functions provided by browsers, especially the most interesting ones, can potentially take a long time, and therefore, are asynchronous. For example: + +- Making HTTP requests using `fetch()` +- Accessing a user's camera or microphone using `getUserMedia()` +- Asking a user to select files using `showOpenFilePicker()` + +So even though you may not have to implement your own asynchronous functions very often, you are very likely to need to use them correctly. + +{% resources %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/113-javascript-classes.md b/src/roadmaps/javascript/content/113-javascript-classes.md new file mode 100644 index 000000000..41740278f --- /dev/null +++ b/src/roadmaps/javascript/content/113-javascript-classes.md @@ -0,0 +1,8 @@ +# Classes + +Classes are a template for creating objects. They encapsulate data with code to work on that data. Classes in JS are built on prototypes but have some syntax and semantics that are not shared with ES5 class-like semantics. + +{% resources %} + {% Blog "https://javascript.info/classes", "Classes in JavaScript" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes", "JavaScript Classes" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/114-javascript-iterators-and-generators.md b/src/roadmaps/javascript/content/114-javascript-iterators-and-generators.md new file mode 100644 index 000000000..72c23cf2f --- /dev/null +++ b/src/roadmaps/javascript/content/114-javascript-iterators-and-generators.md @@ -0,0 +1,9 @@ +# Javascript Iterators and Generators + +Iterators and generators, introduced into JavaScript with ECMAScript 6, represent an extremely useful concept related to iteration in the language. Iterators are objects, abiding by the iterator protocol, that allows us to easily iterate over a given sequence in various ways, such as using the `for...of` loop. Generators, on the other hand, allow us to use functions and the `yield` keyword to easily define iterable sequences that are iterators as well. + +{% resources %} + {% Blog "https://www.codeguage.com/courses/advanced-js/iteration-introduction", "Introduction to Iterators - Advanced JavaScript" %} + {% Blog "https://www.codeguage.com/courses/advanced-js/iteration-iterators", "A Detailed Discussion on Iterators - Advanced JavaScript" %} + {% Blog "https://www.codeguage.com/courses/advanced-js/iteration-generators", "What Exactly Are Generators? - Advanced JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/115-javascript-modules/100-commonjs.md b/src/roadmaps/javascript/content/115-javascript-modules/100-commonjs.md new file mode 100644 index 000000000..1e8ee7bc5 --- /dev/null +++ b/src/roadmaps/javascript/content/115-javascript-modules/100-commonjs.md @@ -0,0 +1,9 @@ +# CommonJS + +CommonJS modules are the original way to package JavaScript code for Node.js. Node.js also supports the ESModules standard used by browsers and other JavaScript runtimes, but CJS is still widely used in backend Node.js applications. Sometimes these modules will be written with a .cjs extension. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/modules-in-javascript/#commonjsmodules", "Modules in Javascript: CJS Section" %} + {% Blog "https://blog.risingstack.com/node-js-at-scale-module-system-commonjs-require/", "How the CJS Module System Works" %} + {% Blog "https://www.youtube.com/watch?v=XTND4rjATXA", "How to Import and Export Modules in CJS" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/115-javascript-modules/101-esm.md b/src/roadmaps/javascript/content/115-javascript-modules/101-esm.md new file mode 100644 index 000000000..0358e4636 --- /dev/null +++ b/src/roadmaps/javascript/content/115-javascript-modules/101-esm.md @@ -0,0 +1,11 @@ +# ESModules + +ESModules is a standard that was introduced with ES6 (2015). The idea was to standardize how JS modules work and implement these features in browsers. This standard is widely used with frontend frameworks such as react and can also be used in the backend with Node.js. Sometimes these modules will be written with a .mjs extension. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/modules-in-javascript/", "Introduction to Modules in Javascript" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules", "Full ESM module overview from MDN" %} + {% Blog "https://javascript.info/modules", "Full ESM module overview from js.info" %} + {% Blog "https://nodejs.org/api/esm.html", "Node.js documentation for ESModules" %} + {% Blog "https://www.youtube.com/watch?v=cRHQNNcYf6s", "JavaScript ES6 Modules Simplified" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/115-javascript-modules/index.md b/src/roadmaps/javascript/content/115-javascript-modules/index.md new file mode 100644 index 000000000..856e53aad --- /dev/null +++ b/src/roadmaps/javascript/content/115-javascript-modules/index.md @@ -0,0 +1,9 @@ +# Modules + +Modules encapsulate all sorts of code like functions and variables and expose all this to other files. Generally, we use it to break our code into separate files to make it more maintainable. They were introduced into JavaScript with ECMAScript 6. + +{% resources %} + {% Blog "https://javascript.info/modules-intro", "Modules, introduction" %} + {% Blog "https://javascript.info/import-export", "Export and Import" %} + {% Blog "https://javascript.info/modules-dynamic-imports", "Dynamic imports" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/116-javascript-memory-management/100-memory-lifecycle.md b/src/roadmaps/javascript/content/116-javascript-memory-management/100-memory-lifecycle.md new file mode 100644 index 000000000..94be257f9 --- /dev/null +++ b/src/roadmaps/javascript/content/116-javascript-memory-management/100-memory-lifecycle.md @@ -0,0 +1,14 @@ +# Memory lifecycle + +Regardless of the programming language, the memory life cycle is pretty much always the same: + + - Allocate the memory you need + - Use the allocated memory (read, write) + - Release the allocated memory when it is not needed anymore + +The second part is explicit in all languages. The first and last parts are explicit in low-level languages but are mostly implicit in high-level languages like JavaScript. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management", "MDN docs - Memory Management" %} + {% Blog "https://medium.com/swlh/the-lifecycle-of-memory-in-javascript-5b5bffc5ff4c", "Lifecycle in Memory Management" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/116-javascript-memory-management/101-garbage-collection.md b/src/roadmaps/javascript/content/116-javascript-memory-management/101-garbage-collection.md new file mode 100644 index 000000000..959127f1d --- /dev/null +++ b/src/roadmaps/javascript/content/116-javascript-memory-management/101-garbage-collection.md @@ -0,0 +1,8 @@ +# Garbage Collection + +Memory management in JavaScript is performed automatically and invisibly to us. We create primitives, objects, functions… All that takes memory. The main concept of memory management in JavaScript is reachability. + +{% resources %} + {% Blog "https://javascript.info/garbage-collection", "JavaScript Garbage Collection" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management", "Memory Management in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/116-javascript-memory-management/index.md b/src/roadmaps/javascript/content/116-javascript-memory-management/index.md new file mode 100644 index 000000000..7fbeff2fa --- /dev/null +++ b/src/roadmaps/javascript/content/116-javascript-memory-management/index.md @@ -0,0 +1,8 @@ +# Memory Management + +Low-level languages like C, have manual memory management primitives such as malloc() and free(). In contrast, JavaScript automatically allocates memory when objects are created and frees it when they are not used anymore (garbage collection). This automaticity is a potential source of confusion: it can give developers the false impression that they don't need to worry about memory management. + +{% resources %} + {% Blog "https://javascript.info/garbage-collection", "JavaScript Garbage Collection" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management", "Memory Management in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/100-debugging-issues.md b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/100-debugging-issues.md new file mode 100644 index 000000000..2f6c1a8d1 --- /dev/null +++ b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/100-debugging-issues.md @@ -0,0 +1,9 @@ +# Debugging issues + +When you're just starting out with JavaScript development, you might use a lot of `console.log()` statement in your code to log and check values of variables while debugging. The results of these would show up in the **Console** panel, along with a reference to the line and file of code which originated it. + +However, for quicker, more complex and easier to handler debugging (which also doesn't litter your codebase with `console.log()`s), breakpoints and the sources panel is your friend. + +{% resources %} + {% Blog "https://developer.chrome.com/docs/devtools/javascript/", "Debugging JavaScript in the sources panel" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/101-debugging-memory-leaks.md b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/101-debugging-memory-leaks.md new file mode 100644 index 000000000..043b207e6 --- /dev/null +++ b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/101-debugging-memory-leaks.md @@ -0,0 +1,10 @@ +# Debugging Memory Leaks + +In JavaScript, memory leaks commonly occur within heap allocated memory, where short lived objects are attached to long lived ones and the Garbage Collector cannot safely de-allocate that memory as it is still referenced from the root set (the global object). + +{% resources %} + {% Blog "https://medium.com/coding-blocks/catching-memory-leaks-with-chrome-devtools-57b03acb6bb9", "Catching memory leaks with Chrome DevTools" %} + {% Blog "https://medium.com/swlh/effective-javascript-debugging-memory-leaks-75059b2436f6", "Effective Javascript Debugging " %} + {% Blog "https://www.debugbear.com/blog/debugging-javascript-memory-leaks", "Debugging JavaScript memory leaks" %} + {% Blog "https://www.jackhoy.com/web-applications/2020/10/21/debugging-memory-leaks-in-nodejs.html", "Debugging Memory Leaks In Production JavaScript Applications" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/102-debugging-performance.md b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/102-debugging-performance.md new file mode 100644 index 000000000..8046ee078 --- /dev/null +++ b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/102-debugging-performance.md @@ -0,0 +1,3 @@ +# Debugging performance + +Enter the dev tools and check out the Lighthouse tab. This is essentially a series of tests which analyses the currently open website on a bunch of metrics related to performance, page speed, accessibility, etc. Feel free to run the tests by clicking the **Analyse Page Load** button (you might want to do this in an incognito tab to avoid errors arising from extensions you're using). Once you have the results, take your time and read through them (and do click through to the reference pages mentioned alongside each test result to know more about it!) diff --git a/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/index.md b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/index.md new file mode 100644 index 000000000..6aa7567f4 --- /dev/null +++ b/src/roadmaps/javascript/content/117-javascript-chrome-dev-tools/index.md @@ -0,0 +1,12 @@ +# Javascript chrome dev tools + +These are a set of tools built into the browser to aid frontend developers diagnose and solve various issues in their applications — such as JavaScript and logical bugs, CSS styling issues or even just making quick temporary alterations to the DOM. + +To enter the dev tools, right click and click **Inspect** (or press `ctrl+shift+c`/`cmd+opt+c`) to enter the Elements panel. Here you can debug CSS and HTML issues. If you want to see logged messages or interact with javascript, enter the **Console** tab from the tabs above (or press `ctrl+shift+j` or `F12` /`cmd+opt+j` to enter it directly). Another very useful feature in the Chrome dev tools is the Lighthouse (for checking performance). + +NOTE: This isn't a chrome-specific feature, and most browsers (Chromium based or otherwise) will have their own, largely-similar set of devtools. + +{% resources %} + {% Blog "https://developer.chrome.com/docs/devtools/overview/", "Official Docs" %} + {% Blog "https://www.freecodecamp.org/news/mastering-chrome-developer-tools-next-level-front-end-development-techniques-3ac0b6fe8a3/", "Mastering Chrome Dev Tools" %} +{% endresources %} diff --git a/src/roadmaps/javascript/content/118-working-with-apis/100-xml-http-request.md b/src/roadmaps/javascript/content/118-working-with-apis/100-xml-http-request.md new file mode 100644 index 000000000..4aec810f9 --- /dev/null +++ b/src/roadmaps/javascript/content/118-working-with-apis/100-xml-http-request.md @@ -0,0 +1,9 @@ +# XMLHttpRequest + +`XMLHttpRequest` (XHR) is a built-in browser object that can be used to interact with server. XHR allows you to update data without having to reload a web page. Despite the word XML in its name, XHR not only used to retrieve data with XML format, we can use it with any type of data, like JSON, file(s), and much more. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest", "Using XMLHttpRequest" %} + {% Course "https://javascript.info/xmlhttprequest", "Network request - XMLHttpRequest" %} + {% Blog "https://www.w3schools.com/xml/xml_http.asp", "W3Schools" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/118-working-with-apis/101-fetch.md b/src/roadmaps/javascript/content/118-working-with-apis/101-fetch.md new file mode 100644 index 000000000..c539d71b3 --- /dev/null +++ b/src/roadmaps/javascript/content/118-working-with-apis/101-fetch.md @@ -0,0 +1,10 @@ +# Fetch + + +The fetch() method in JavaScript is used to request to the server and load the information on the webpages. The request can be of any APIs that return the data of the format JSON or XML. This method returns a promise. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch", "Fetch MDN Docs" %} + {% Blog "https://www.w3schools.com/jsref/api_fetch.asp", "Fetch W3school Docs" %} + {% Course "https://javascript.info/fetch", "Network request - Fetch" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/content/118-working-with-apis/index.md b/src/roadmaps/javascript/content/118-working-with-apis/index.md new file mode 100644 index 000000000..e353f1ae9 --- /dev/null +++ b/src/roadmaps/javascript/content/118-working-with-apis/index.md @@ -0,0 +1,11 @@ +# Working with APIs + +When working with remote APIs, you need a way to interact with those APIs. Modern JavaScript provides two native ways to send HTTP requests to remote servers, `XMLHttpRequest` and `Fetch`. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Fetching_data", "Fetching data from the server" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest", "XMLHttpRequest" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API", "Fetch API" %} + {% Blog "https://medium.com/beginners-guide-to-mobile-web-development/the-fetch-api-2c962591f5c", "Is fetch API better than XMLHTTPRequest" %} + {% Blog "https://blog.openreplay.com/ajax-battle-xmlhttprequest-vs-the-fetch-api", "Ajax Battle: XMLHttpRequest vs the Fetch API" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/javascript/javascript.md b/src/roadmaps/javascript/javascript.md new file mode 100644 index 000000000..45ccd842a --- /dev/null +++ b/src/roadmaps/javascript/javascript.md @@ -0,0 +1,50 @@ +--- +jsonUrl: "/jsons/javascript.json" +pdfUrl: "/pdfs/javascript.pdf" +order: 5 +featuredTitle: "JavaScript" +featuredDescription: "Step by step guide to learn JavaScript in 2022" +title: "JavaScript Roadmap" +description: "Step by step guide to learn JavaScript in 2022" +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 2438.9 +seo: + title: "JavaScript Developer Roadmap: Step by step guide to learn JavaScript" + description: "Community driven, articles, resources, guides, interview questions, quizzes for javascript development. Learn to become a modern JavaScript developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "javascript guide 2022" + - "learn javascript" + - "step by step javascript guide" + - "javascript roadmap 2022" + - "javascript developer roadmap 2022" + - "guide to becoming a javascript developer" + - "javascript developer roadmap" + - "javascript roadmap" + - "become javascript developer" + - "javascript developer skills" + - "javascript skills test" + - "skills for javascript development" + - "learn javascript development" + - "what is javascript" + - "javascript quiz" + - "javascript interview questions" +relatedRoadmaps: + - "frontend" + - "backend" + - "javascript" + - "react" + - "angular" + - "vue" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/nodejs/content/100-nodejs-introduction/100-what-is-nodejs.md b/src/roadmaps/nodejs/content/100-nodejs-introduction/100-what-is-nodejs.md new file mode 100644 index 000000000..7bd36ef36 --- /dev/null +++ b/src/roadmaps/nodejs/content/100-nodejs-introduction/100-what-is-nodejs.md @@ -0,0 +1,11 @@ +# What is Node.js + +Node.js is an open-source and cross-platform JavaScript runtime environment. It is a popular tool for almost any kind of project! Node.js runs the V8 JavaScript engine, Google Chrome's core, outside the browser. This allows Node.js to be very performant. A Node.js app runs in a single process, without creating a new thread for every request. Node.js provides a set of asynchronous I/O primitives in its standard library that prevent JavaScript code from blocking and generally, libraries in Node.js are written using non-blocking paradigms, making blocking behavior the exception rather than the norm. + +{% resources %} + {% Blog "https://nodejs.org/en/about/", "Official Website" %} + {% Blog "https://www.w3schools.com/nodejs/nodejs_intro.asp", "Node.JS Introduction" %} + {% Blog "https://nodejs.dev/en/learn/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=uVwtVBpw7RQ", "What is Node.js?" %} + {% Blog "https://www.youtube.com/watch?v=jOupHNvDIq8", "How Node.js Works?" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/100-nodejs-introduction/101-why-nodejs.md b/src/roadmaps/nodejs/content/100-nodejs-introduction/101-why-nodejs.md new file mode 100644 index 000000000..3d9e04162 --- /dev/null +++ b/src/roadmaps/nodejs/content/100-nodejs-introduction/101-why-nodejs.md @@ -0,0 +1,10 @@ +# Why Node.js + +Node.js is a cross-platform runtime, perfect for a wide range of use cases. Its huge community makes it easy to get started. It uses the V8 engine to compile JavaScript and runs at lightning-fast speeds. Node.js applications are very scalable and maintainable. Cross-platform support allows the creation of all kinds of applications - desktop apps, software as a service, and even mobile applications. Node.js is perfect for data-intensive and real-time applications since it uses an event-driven, non-blocking I/O model, making it lightweight and efficient. With such a huge community, a vast collection of Node.js packages is available to simplify and boost development. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/what-are-the-advantages-of-node-js/", "Pros of Node.js" %} + {% Blog "https://nodejs.dev/en/learn/", "Learn Node.js" %} + {% Blog "https://medium.com/selleo/why-choose-node-js-b0091ad6c3fc", "Why Choose Node.js?" %} + {% Blog "https://www.bitovi.com/blog/5-reasons-to-choose-nodejs", "5 Reasons to Choose Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/100-nodejs-introduction/102-history-of-nodejs.md b/src/roadmaps/nodejs/content/100-nodejs-introduction/102-history-of-nodejs.md new file mode 100644 index 000000000..5f214bb7e --- /dev/null +++ b/src/roadmaps/nodejs/content/100-nodejs-introduction/102-history-of-nodejs.md @@ -0,0 +1,7 @@ +# History of Node.js + +Node.js was written initially by Ryan Dahl in 2009, about thirteen years after the introduction of the first server-side JavaScript environment, Netscape's LiveWire Pro Web. The initial release supported only Linux and Mac OS X. Its development and maintenance were led by Dahl and later sponsored by Joyent. + +{% resources %} + {% Official "https://nodejs.dev/en/learn/a-brief-history-of-nodejs/", "Official Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/100-nodejs-introduction/103-nodejs-vs-browser.md b/src/roadmaps/nodejs/content/100-nodejs-introduction/103-nodejs-vs-browser.md new file mode 100644 index 000000000..9011b114b --- /dev/null +++ b/src/roadmaps/nodejs/content/100-nodejs-introduction/103-nodejs-vs-browser.md @@ -0,0 +1,7 @@ +# Nodejs vs Browser + +Both the browser and Node.js use JavaScript as their programming language. Building apps that run in the browser is entirely different than building a Node.js application. Even though it's always JavaScript, some key differences make the experience radically different. + +{% resources %} + {% Blog "https://nodejs.dev/en/learn/differences-between-nodejs-and-the-browser/", "Differences between Node.js and the Browser" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/100-nodejs-introduction/104-running-nodejs-code.md b/src/roadmaps/nodejs/content/100-nodejs-introduction/104-running-nodejs-code.md new file mode 100644 index 000000000..4b019f180 --- /dev/null +++ b/src/roadmaps/nodejs/content/100-nodejs-introduction/104-running-nodejs-code.md @@ -0,0 +1,7 @@ +# Running Node.js Code + +The usual way to run a Node.js program is to run the globally available `node` command (once you install Node.js) and pass the name of the file you want to execute. + +{% resources %} + {% Blog "https://nodejs.dev/en/learn/run-nodejs-scripts-from-the-command-line/", "Run Node.js from Command Line" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/100-nodejs-introduction/index.md b/src/roadmaps/nodejs/content/100-nodejs-introduction/index.md new file mode 100644 index 000000000..d0380abd5 --- /dev/null +++ b/src/roadmaps/nodejs/content/100-nodejs-introduction/index.md @@ -0,0 +1,10 @@ +# Node.js Introduction + +Node.js is an open source, cross-platform runtime environment and library that is used for running web applications outside the client’s browser. + +It is used for server-side programming, and primarily deployed for non-blocking, event-driven servers, such as traditional web sites and back-end API services, but was originally designed with real-time, push-based architectures in mind. Every browser has its own version of a JS engine, and node.js is built on Google Chrome’s V8 JavaScript engine. + +{% resources %} + {% Official "https://nodejs.org/en/", "Official Website" %} + {% Official "https://nodejs.org/en/docs/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/101-nodejs-modules/100-commonjs-vs-esm.md b/src/roadmaps/nodejs/content/101-nodejs-modules/100-commonjs-vs-esm.md new file mode 100644 index 000000000..506d54e1a --- /dev/null +++ b/src/roadmaps/nodejs/content/101-nodejs-modules/100-commonjs-vs-esm.md @@ -0,0 +1,11 @@ +# CommonJS vs ESM + +CommonJS and ES (EcmaScript) are module systems used in Node. CommonJS is the default module system. However, a new module system was recently added to NodeJS - ES modules. CommonJS modules use the require() statement for module imports and module.exports for module exports while it's import and export for ES. + +{% resources %} + {% Blog "https://blog.logrocket.com/commonjs-vs-es-modules-node-js/", "CommonJS vs ESM" %} + {% Blog "https://www.javascripttutorial.net/nodejs-tutorial/nodejs-modules/", "Using CommonJS" %} + {% Blog "https://blog.logrocket.com/es-modules-in-node-today/", "Using ES Modules" %} + {% Blog "https://www.youtube.com/watch?v=pP4kjXykbio", "Using Modules" %} + {% Blog "https://reflectoring.io/nodejs-modules-imports/", "CommonJS vs. ES Modules: Modules and Imports in NodeJS" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/101-nodejs-modules/101-custom-modules.md b/src/roadmaps/nodejs/content/101-nodejs-modules/101-custom-modules.md new file mode 100644 index 000000000..1b102e45a --- /dev/null +++ b/src/roadmaps/nodejs/content/101-nodejs-modules/101-custom-modules.md @@ -0,0 +1,10 @@ +# Custom Modules + +Modules are the collection of JavaScript codes in a separate logical file that can be used in external applications based on their related functionality. There are two ways to create modules in Node.js i.e. either via CommonJS or ESM. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/how-to-create-modules-in-node-js/", "How to Create Modules in Node.js ?" %} + {% Blog "https://www.youtube.com/watch?v=Cxo4UKpHv5s", "Creating a Module in Node.js" %} + {% Blog "https://blog.logrocket.com/commonjs-vs-es-modules-node-js/", "CommonJS vs ESM in Node.js" %} + {% Blog "https://reflectoring.io/nodejs-modules-imports/", "Modules and Imports in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/101-nodejs-modules/102-global-keyword.md b/src/roadmaps/nodejs/content/101-nodejs-modules/102-global-keyword.md new file mode 100644 index 000000000..faf5bca5a --- /dev/null +++ b/src/roadmaps/nodejs/content/101-nodejs-modules/102-global-keyword.md @@ -0,0 +1,9 @@ +# global keyword + +In browsers, the top-level scope is the global scope. This means that within the browser var something will define a new global variable. In Node.js this is different. The top-level scope is not the global scope; `var something` inside a Node.js module will be local to that module. + +{% resources %} + {% Blog "https://nodejs.org/api/globals.html#global", "global Keyword in Node.js" %} + {% Blog "https://www.youtube.com/watch?v=jn8PZNBmKm0", "What is Global Object?" %} + {% Blog "https://www.youtube.com/watch?v=PY-AycMkEAg", "Global Object in Node" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/101-nodejs-modules/index.md b/src/roadmaps/nodejs/content/101-nodejs-modules/index.md new file mode 100644 index 000000000..e05e67da9 --- /dev/null +++ b/src/roadmaps/nodejs/content/101-nodejs-modules/index.md @@ -0,0 +1,11 @@ +# Node.js Modules + +We split our code into different files to maintain, organize and reuse code whenever possible. A module system allows us to split and include code and import code written by other developers whenever required. In simple terms, a module is nothing but a JavaScript file. Node.js has many built-in modules that are part of the platform and comes with Node.js installation, for example, HTTP, fs, path, and more. + +{% resources %} + {% Official "https://nodejs.org/api/modules.html#modules-commonjs-modules", "Modules: CommonJS modules" %} + {% Blog "https://blog.logrocket.com/commonjs-vs-es-modules-node-js/", "CommonJS vs. ES modules in Node.js" %} + {% Blog "https://www.geeksforgeeks.org/node-js-modules/", "More about modules" %} + {% Blog "https://www.freecodecamp.org/news/modular-programming-nodejs-npm-modules/", "Using Modules" %} + {% Blog "https://www.youtube.com/watch?v=9Amxzvq5LY8&", "Modules in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/100-npx.md b/src/roadmaps/nodejs/content/102-nodejs-npm/100-npx.md new file mode 100644 index 000000000..6736b98b0 --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/100-npx.md @@ -0,0 +1,9 @@ +# npx + +npx is a very powerful command that's been available in npm starting version 5.2, released in July 2017. If you don't want to install npm, you can install npx as a standalone package. npx lets you run code built with Node.js and published through the npm registry. + +{% resources %} + {% Blog "https://nodejs.dev/en/learn/the-npx-nodejs-package-runner", "The npx Node.js Package Runner" %} + {% Blog "https://www.freecodecamp.org/news/npm-vs-npx-whats-the-difference/", "npm vs npx — What’s the Difference?" %} + {% Blog "https://docs.npmjs.com/cli/v7/commands/npx/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/101-global-install-vs-local-install.md b/src/roadmaps/nodejs/content/102-nodejs-npm/101-global-install-vs-local-install.md new file mode 100644 index 000000000..830cf86a8 --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/101-global-install-vs-local-install.md @@ -0,0 +1,10 @@ +# Global Install vs Local Install + +NodeJS and NPM allow two methods of installing dependencies/packages: Local and Global. This is mainly used when adding a package or dependency as part of a specific project you're working on. The package would be installed (with its dependencies) in `node_modules` folder **under your project**. In addition, in `package.json` file there will be a new line added for the installed dependency under the label `dependencies`. At this point - you can start using the package in your NodeJS code by importing the package. Unlike the local install, you can install packages and dependencies **globally**. This would install it in a system path, and these packages would be available to any program which runs on **this specific** computer. This method is often used for installing command line tools (for example, even `npm` program is a Globally installed npm package). + +{% resources %} + {% Official "https://docs.npmjs.com/downloading-and-installing-packages-locally", "Downloading and installing packages locally" %} + {% Official "https://docs.npmjs.com/downloading-and-installing-packages-globally", "Downloading and installing packages globally" %} + {% Blog "https://docs.npmjs.com/cli/v8/commands/npm-install", "NPM Install Docs" %} + {% Blog "https://www.geeksforgeeks.org/what-is-global-installation-of-dependencies-in-node-js/", "What is global installation of dependencies in Node.js ?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/102-updating-packages.md b/src/roadmaps/nodejs/content/102-nodejs-npm/102-updating-packages.md new file mode 100644 index 000000000..8d544ad0d --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/102-updating-packages.md @@ -0,0 +1,9 @@ +# Updating Packages + +npm provides various features to help install and maintain the project's dependencies. Dependencies get updates with new features and fixes, so upgrading to a newer version is recommended. We use npm update commands for this. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/how-to-update-npm-dependencies/", "How to update?" %} + {% Blog "https://www.youtube.com/watch?v=Ghdfdq17JAY", "Updating dependencies" %} + {% Blog "https://docs.npmjs.com/updating-packages-downloaded-from-the-registry", "Updating packages downloaded from the registry" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/103-using-packages.md b/src/roadmaps/nodejs/content/102-nodejs-npm/103-using-packages.md new file mode 100644 index 000000000..d93a52632 --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/103-using-packages.md @@ -0,0 +1,7 @@ +# Using Packages + +Open source Node modules are very powerful as you can instantly get access to the functionality that you’d otherwise have to write yourself. We normally use CommonJS or ESM to import an installed package. + +{% resources %} + {% Blog "https://learn.coderslang.com/0014-how-to-import-and-use-npm-modules/", "How to import and use npm modules" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/104-running-scripts.md b/src/roadmaps/nodejs/content/102-nodejs-npm/104-running-scripts.md new file mode 100644 index 000000000..fe29e4b4a --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/104-running-scripts.md @@ -0,0 +1,9 @@ +# Running Scripts + +In Node.js, npm scripts are used for the purpose of initiating a server, starting the build of a project, and also for running the tests. We can define this scripts in the package.json file of the folder. Also, we can split the huge scripts into many smaller parts if it is needed. + +{% resources %} + {% Blog "https://riptutorial.com/node-js/example/4592/running-scripts", "Example of Running Scripts" %} + {% Blog "https://www.geeksforgeeks.org/introduction-to-npm-scripts/", "Introduction to NPM Scripts" %} + {% Official "https://docs.npmjs.com/downloading-and-installing-packages-locally", "Running Scripts" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/105-npm-workspaces.md b/src/roadmaps/nodejs/content/102-nodejs-npm/105-npm-workspaces.md new file mode 100644 index 000000000..a76e18369 --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/105-npm-workspaces.md @@ -0,0 +1,8 @@ +# npm workspaces + +Workspace is a generic term that refers to the set of npm CLI features that support managing multiple packages from your local file system from within a singular top-level root package. + +{% resources %} + {% Official "https://docs.npmjs.com/cli/v8/using-npm/workspaces", "npm workspaces" %} + {% Blog "https://ruanmartinelli.com/posts/npm-7-workspaces-1", "Getting Started with Npm Workspaces " %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/106-creating-packages.md b/src/roadmaps/nodejs/content/102-nodejs-npm/106-creating-packages.md new file mode 100644 index 000000000..179500380 --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/106-creating-packages.md @@ -0,0 +1,8 @@ +# Creating Packages + +npm packages allow you to bundle some specific functionality into a reusable package which can then be uploaded to some package registry such as npm or GitHub packages and then be installed and reused in projects using npm. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/how-to-make-a-beautiful-tiny-npm-package-and-publish-it-2881d4307f78/", "How to make a tiny npm package and publish it" %} + {% Blog "https://snyk.io/blog/best-practices-create-modern-npm-package/", "Best practices for creating a modern npm package" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/102-nodejs-npm/index.md b/src/roadmaps/nodejs/content/102-nodejs-npm/index.md new file mode 100644 index 000000000..ab76cc599 --- /dev/null +++ b/src/roadmaps/nodejs/content/102-nodejs-npm/index.md @@ -0,0 +1,13 @@ +# npm + +npm is the standard package manager for Node.js. + +It is two things: first and foremost, it is an online repository for the publishing of open-source Node.js projects; second, it is a command-line utility for interacting with said repository that aids in package installation, version management, and dependency management. A plethora of Node.js libraries and applications are published on npm, and many more are added every day + +{% resources %} + {% Blog "https://nodejs.org/en/knowledge/getting-started/npm/what-is-npm/", "What is npm?" %} + {% Blog "https://nodejs.dev/en/learn/an-introduction-to-the-npm-package-manager/", "An introduction to the npm package manager" %} + {% Blog "https://www.npmjs.com/", "Official Website" %} + {% Blog "https://docs.npmjs.com/", "Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=jHDhaSSKmB0", "NPM Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/100-stack-trace.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/100-stack-trace.md new file mode 100644 index 000000000..18c6fdea1 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/100-stack-trace.md @@ -0,0 +1,9 @@ +# Stack Trace + +The stack trace is used to trace the active stack frames at a particular instance during the execution of a program. The stack trace is useful while debugging code as it shows the exact point that has caused an error. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/what-is-stacktrace-and-how-to-print-in-node-js/", "What is Stack trace?" %} + {% Blog "https://www.geeksforgeeks.org/what-is-stacktrace-and-how-to-print-in-node-js/", "What is stacktrace and how to print in node.js?" %} + {% Blog "https://www.cloudhadoop.com/nodejs-print-stack-trace-error/", "Multiple ways to log the stack trace in node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/101-using-debugger.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/101-using-debugger.md new file mode 100644 index 000000000..efdca19c7 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/101-using-debugger.md @@ -0,0 +1,10 @@ +# Using debugger + +Node.js includes a command-line debugging utility. The Node.js debugger client is not a full-featured debugger, but simple stepping and inspection are possible. To use it, start Node.js with the inspect argument followed by the path to the script to debug. + +Example - $ node inspect myscript.js + +{% resources %} + {% Official "https://nodejs.org/api/debugger.html", "Official Website" %} + {% Blog "https://www.geeksforgeeks.org/node-js-debugging/", "Node.js Debugging" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/102-uncaught-exceptions.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/102-uncaught-exceptions.md new file mode 100644 index 000000000..a08b19382 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/102-uncaught-exceptions.md @@ -0,0 +1,11 @@ +# Uncaught Exceptions + +When a JavaScript error is not properly handled, an uncaughtException is emitted. These suggest the programmer has made an error, and they should be treated with the utmost priority. + +The correct use of `uncaughtException` is to perform synchronous cleanup of allocated resources (e.g. file descriptors, handles, etc) before shutting down the process. It is not safe to resume normal operation after `uncaughtException` because system becomes corrupted. The best way is to let the application crash, log the error and then restart the process automatically using nodemon or pm2. + +{% resources %} + {% Official "https://nodejs.org/api/process.html#event-uncaughtexception", "Official Website" %} + {% Blog "https://blog.heroku.com/best-practices-nodejs-errors", "Let It Crash: Best Practices for Handling Node.js Errors on Shutdown" %} + {% Blog "https://shapeshed.com/uncaught-exceptions-in-node/", "Uncaught Exceptions in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/100-javascript-errors.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/100-javascript-errors.md new file mode 100644 index 000000000..93f9e7333 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/100-javascript-errors.md @@ -0,0 +1,18 @@ +# Javascript Errors + +JavaScript Errors are used by JavaScript to inform developers about various issue in the script being executed. These issues can be syntax error where the developer/programmer has used the worng syntax, it can be due to some wrong user input or some other problem. + +JavaScript has six types of errors that may occur during the execution of the script: + +* EvalError +* RangeError +* ReferenceError +* SyntaxError +* TypeError +* URIError + +{% resources %} + {% Blog "https://www.tutorialspoint.com/javascript/javascript_error_handling.htm", "JavaScript - Errors " %} + {% Blog "https://www.tutorialspoint.com/what-are-the-different-types-of-errors-in-javascript", "Error Types in JavaScript" %} + {% Blog "https://youtu.be/fRv2ng_srrM", "JavaScript Errors and Types" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/101-system-errors.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/101-system-errors.md new file mode 100644 index 000000000..af86d0f71 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/101-system-errors.md @@ -0,0 +1,25 @@ +# System Errors + +Node.js generates system errors when exceptions occur within its runtime environment. These usually occur when an application violates an operating system constraint. +For example, a system error will occur if an application attempts to read a file that does not exist. + +Below are the system errors commonly encountered when writing a Node.js program + +1. EACCES - Permission denied +2. EADDRINUSE - Address already in use +3. ECONNRESET - Connection reset by peer +4. EEXIST - File exists +5. EISDIR - Is a directory +6. EMFILE - Too many open files in system +7. ENOENT - No such file or directory +8. ENOTDIR - Not a directory +9. ENOTEMPTY - Directory not empty +10. ENOTFOUND - DNS lookup failed +11. EPERM - Operation not permitted +12. EPIPE - Broken Pipe +13. ETIMEDOUT - Operation timed out + + +{% resources %} + {% Official "https://nodejs.org/api/errors.html#class-systemerror", "Node.js Errors - Official Docs" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/102-user-specified-errors.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/102-user-specified-errors.md new file mode 100644 index 000000000..44702a977 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/102-user-specified-errors.md @@ -0,0 +1,7 @@ +# User Specified Errors + +User specified errors can be created by extending the base Error object, a built-in error class. When creating errors in this manner, you should pass a message string that describes the error. This message can be accessed through the message property on the object. The Error object also contains a name and a stack property that indicate the name of the error and the point in the code at which it is created. + +{% resources %} + {% Blog "https://www.honeybadger.io/blog/errors-nodejs/", "A Comprehensive Guide To Error Handling In Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/103-assertion-errors.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/103-assertion-errors.md new file mode 100644 index 000000000..75f461b4d --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/103-assertion-errors.md @@ -0,0 +1 @@ +# Assertion errors \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/index.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/index.md new file mode 100644 index 000000000..6e8c94cf1 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/103-error-types/index.md @@ -0,0 +1 @@ +# Error types \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/104-async-errors.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/104-async-errors.md new file mode 100644 index 000000000..4ab53fbf4 --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/104-async-errors.md @@ -0,0 +1,7 @@ +# Async errors + +Errors must always be handled. If you are using synchronous programming you could use a try catch. But this does not work if you work asynchronous! Async errors will only be handled inside the callback function! + +{% resources %} + {% Blog "https://www.mariokandut.com/handling-errors-in-asynchronous-functions-node-js/", "Async Errors" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/103-nodejs-error-handling/index.md b/src/roadmaps/nodejs/content/103-nodejs-error-handling/index.md new file mode 100644 index 000000000..d5f44074c --- /dev/null +++ b/src/roadmaps/nodejs/content/103-nodejs-error-handling/index.md @@ -0,0 +1,8 @@ +# Error Handling + +Error handling is a way to find bugs and solve them as quickly as humanly possible. The errors in Node.js can be either operation or programmer errors. Read the articles linked below to understand how to handle different types of errors in Node.js + +{% resources %} + {% Blog "https://sematext.com/blog/node-js-error-handling", "Node.js Error Handling Best Practices" %} + {% Blog "https://blog.logrocket.com/error-handling-node-js/", "Error handling in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/100-event-loop.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/100-event-loop.md new file mode 100644 index 000000000..b0328d351 --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/100-event-loop.md @@ -0,0 +1,11 @@ +# Event Loop + +The Event Loop is one of the most critical aspects of Node.js. Why is this so important? Because it explains how Node.js can be asynchronous and have non-blocking I/O, it explains the "killer feature" of Node.js, which made it this successful. + +{% resources %} + {% Blog "https://nodejs.dev/en/learn/the-nodejs-event-loop/", "The Node.JS Event Loop" %} + {% Blog "https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif", "JavaScript Visualized: Event Loop" %} + {% Course "https://www.coursera.org/lecture/secure-full-stack-mean-developer/the-node-js-event-loop-j5fbT", "The Node.js Event Loop" %} + {% Blog "https://www.youtube.com/watch?v=6YgsqXlUoTM", "The Complete Node js: The Node js Event Loop" %} + {% Blog "https://nodejs.dev/en/learn/the-nodejs-event-loop/", "The NodeJS Event loop" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/101-event-emitter.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/101-event-emitter.md new file mode 100644 index 000000000..1fc7c47b1 --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/101-event-emitter.md @@ -0,0 +1,8 @@ +# Event Emitter + +In Node.js, an event can be described simply as a string with a corresponding callback. An event can be "emitted" (or, in other words, the corresponding callback be called) multiple times or you can choose to only listen for the first time it is emitted. + +{% resources %} + {% Official "https://nodejs.org/en/knowledge/getting-started/control-flow/what-are-event-emitters/", "What are Event Emitters?" %} + {% Blog "https://www.digitalocean.com/community/tutorials/using-event-emitters-in-node-js", "Using Event Emitters in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/102-promises.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/102-promises.md new file mode 100644 index 000000000..19d55c2a7 --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/102-promises.md @@ -0,0 +1,18 @@ +# Promises + +A promise is commonly defined as a proxy for a value that will eventually become available +Asynchronous functions use promise behind the scenes, so understanding how promises work is fundamental to understanding how "async" and "await" works. +Once a promise has been called, it will start in a pending state. This means that the calling function continues executing, while the promise is pending until it resolves, giving the calling function whatever data was being requested. + +Creating a Promise: +The Promise API exposes a Promise constructor, which you initialize using newPromise(). + +Using resolve() and reject(), we can communicate back to the caller what the resulting Promise state was, and what to do with it. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise", "Promise Methods" %} + {% Blog "https://www.promisejs.org/", "Official Website" %} + {% Blog "https://www.freecodecamp.org/news/javascript-promises-for-beginners/", "Official Website" %} + {% Blog "https://www.youtube.com/watch?v=a_8nrslImo4/", "Asynchronous JavaScript - Promises" %} +{% endresources %} + diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/103-async-await.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/103-async-await.md new file mode 100644 index 000000000..3a869ca78 --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/103-async-await.md @@ -0,0 +1,11 @@ +# Async/Await + +Async/Await is a special syntax to work with promises in a more comfortable fashion. It's easy to understand and use. Adding the keyword async before a function ensures that the function returns a promise and the keyword await makes JavaScript wait until that promise settles and returns the result. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function", "Official Documentation" %} + {% Blog "https://javascript.info/async-await", "More on async await" %} + {% Blog "https://www.youtube.com/watch?v=V_Kr9OSfDeU", "Using async await" %} + {% Blog "https://www.w3docs.com/learn-javascript/async-await.html", "W3Docs Async/Await" %} + {% Blog "https://www.geeksforgeeks.org/difference-between-promise-and-async-await-in-node-js/", "Difference between Promise and Async/Await" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/104-callbacks.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/104-callbacks.md new file mode 100644 index 000000000..179469b0b --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/104-callbacks.md @@ -0,0 +1,8 @@ +# Callbacks + +Node.js, being an asynchronous platform, doesn't wait around for things like file I/O to finish - Node.js uses callbacks. A callback is a function called at the completion of a given task; this prevents any blocking, and allows other code to be run in the meantime. + +{% resources %} + {% Official "https://nodejs.org/en/knowledge/getting-started/control-flow/what-are-callbacks/", "What are callbacks?" %} + {% Blog "https://nodejs.dev/en/learn/javascript-asynchronous-programming-and-callbacks/", "Asynchronicity in Programming Languages" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/105-set-timeout.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/105-set-timeout.md new file mode 100644 index 000000000..2349466a8 --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/105-set-timeout.md @@ -0,0 +1,10 @@ +# setTimeout + +The setTimeout runs a function after the specified period expires. Times are declared in milliseconds. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/setTimeout", "JavaScript MDN Docs" %} + {% Blog "https://www.w3schools.com/jsref/met_win_settimeout.asp", "W3Schools – JavaScript - setTimeOut" %} + {% Blog "https://www.youtube.com/watch?v=kOcFZV3c75I", "setInterval and setTimeout: timing events" %} + {% Blog "https://www.youtube.com/watch?v=z9lJb4D3nJY", "setTimeout EXPLAINED in 5 minutes!" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/106-set-interval.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/106-set-interval.md new file mode 100644 index 000000000..6656df5cb --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/106-set-interval.md @@ -0,0 +1,10 @@ +# setInterval + +The `setInterval()` method helps us to repeatedly execute a function after a fixed delay. It returns a unique interval ID which can later be used by the `clearInterval()` method, which stops further repeated execution of the function. + +`setInterval()` is similar to setTimeout, with a difference. Instead of running the callback function once, it will run it forever, at the specific time interval you specify (in milliseconds): + +{% resources %} + {% Blog "https://javascript.info/settimeout-setinterval", "Scheduling: setTimeout and setInterval" %} + {% Blog "https://www.geeksforgeeks.org/what-is-setinterval-in-javascript/", "What is the use of setInterval() method in Node.js?" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/107-set-immediate.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/107-set-immediate.md new file mode 100644 index 000000000..40ae027bf --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/107-set-immediate.md @@ -0,0 +1,8 @@ +# setImmediate + +The `setImmediate` function delays the execution of a function to be called after the current event loops finish all their execution. It's very similar to calling `setTimeout` with 0 ms delay. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate", "Understanding setImmediate" %} + {% Blog "https://nodejs.dev/en/learn/understanding-setimmediate/", "Understanding setImmediate" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/108-process-next-tick.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/108-process-next-tick.md new file mode 100644 index 000000000..df5953427 --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/108-process-next-tick.md @@ -0,0 +1,9 @@ +# process.nextTick() + +Every time the event loop takes a full trip, we call it a tick. When we pass a function to `process.nextTick()`, we instruct the engine to invoke this function at the end of the current operation before the next event loop tick starts. + +{% resources %} + {% Blog "https://nodejs.dev/en/learn/understanding-processnexttick/", "Understanding Process.NextTick()" %} + {% Blog "https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/", "The Node.js process.nextTick()" %} + {% Blog "https://www.youtube.com/watch?v=-niA5XOlCWI", "The process.nextTick Function" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/104-nodejs-async-programming/index.md b/src/roadmaps/nodejs/content/104-nodejs-async-programming/index.md new file mode 100644 index 000000000..19e8490d8 --- /dev/null +++ b/src/roadmaps/nodejs/content/104-nodejs-async-programming/index.md @@ -0,0 +1,8 @@ +# Nodejs async programming + +Asynchronous code means that things can happen independently of the main program flow, async functions in JavaScript are processed in the background without blocking other requests. It ensures non-blocking code execution. Asynchronous code executes without having any dependency and no order. This improves the system efficiency and throughput. Making web apps requires knowledge of asynchronous concepts since we will be dealing with actions that require some time to get processed. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing/", "Introduction to Async JS" %} + {% Blog "https://www.youtube.com/watch?v=Kpn2ajSa92c", "Asynchronous Vs Synchronous Programming" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/100-fs-module.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/100-fs-module.md new file mode 100644 index 000000000..f0960b05c --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/100-fs-module.md @@ -0,0 +1,9 @@ +# Fs module + +File System or fs module is a built in module in Node that enables interacting with the file system using JavaScript. All file system operations have synchronous, callback, and promise-based forms, and are accessible using both CommonJS syntax and ES6 Modules. + +{% resources %} + {% Blog "https://nodejs.org/api/fs.html", "Official Documentation" %} + {% Blog "https://www.w3schools.com/nodejs/nodejs_filesystem.asp", "More about fs module" %} + {% Blog "https://www.youtube.com/watch?v=ZySsdm576wE", "Using fs" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/101-path-module.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/101-path-module.md new file mode 100644 index 000000000..b1827d5b2 --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/101-path-module.md @@ -0,0 +1,9 @@ +# path module + +The `path` module provides utilities for working with file and directory paths. It's built-in to Node.js core and can simply be used by requiring it. + +{% resources %} + {% Official "https://nodejs.org/api/path.html", "Official Website" %} + {% Official "https://nodejs.dev/en/learn/the-nodejs-path-module/", "Official Website" %} + {% Blog "https://youtu.be/j95Lwxvi9JY", "Path Module in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/102-process-cwd.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/102-process-cwd.md new file mode 100644 index 000000000..79d3ed68f --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/102-process-cwd.md @@ -0,0 +1,8 @@ +# process.cwd() + +The `process.cwd()` method returns the current working directory of the Node.js process. + +{% resources %} + {% Blog "https://nodejs.org/api/process.html#processcwd", "Official Website" %} + {% Blog "https://stackoverflow.com/questions/9874382/whats-the-difference-between-process-cwd-vs-dirname", "Whats the difference between process.cwd() vs __dirname?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/103-glob.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/103-glob.md new file mode 100644 index 000000000..7cad2251e --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/103-glob.md @@ -0,0 +1,7 @@ +# Glob + +The glob pattern is most commonly used to specify filenames, called wildcard characters, and strings, called wildcard matching. + +{% resources %} + {% Blog "https://www.npmjs.com/package/glob", "NPM Glob" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/104-globby.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/104-globby.md new file mode 100644 index 000000000..30fd834bd --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/104-globby.md @@ -0,0 +1 @@ +# Globby \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/105-fs-extra.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/105-fs-extra.md new file mode 100644 index 000000000..1f4e313ee --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/105-fs-extra.md @@ -0,0 +1,7 @@ +# fs-extra + +fs-extra adds file system methods that aren't included in the native fs module and adds promise support to the fs methods. It also uses graceful-fs to prevent EMFILE errors. It should be a drop in replacement for fs. + +{% resources %} + {% Official "https://www.npmjs.com/package/fs-extra", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/106-chokidar.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/106-chokidar.md new file mode 100644 index 000000000..5bdb82cb2 --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/106-chokidar.md @@ -0,0 +1,7 @@ +# Chokidar + +Chokidar is a fast open-source file watcher for node. js. You give it a bunch of files, it watches them for changes and notifies you every time an old file is edited; or a new file is created. + +{% resources %} + {% Official "https://www.npmjs.com/package/chokidar", "NPM Docs" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/107-dirname.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/107-dirname.md new file mode 100644 index 000000000..4009e994a --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/107-dirname.md @@ -0,0 +1,8 @@ +# __dirname + +The `__dirname` in a node script returns the path of the folder where the current JavaScript file resides. `__filename` and `__dirname` are used to get the filename and directory name of the currently executing file. + +{% resources %} + {% Official "https://nodejs.org/docs/latest/api/modules.html#__dirname", "Official Website" %} + {% Blog "https://www.digitalocean.com/community/tutorials/nodejs-how-to-use__dirname", "How to use __dirname" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/108-filename.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/108-filename.md new file mode 100644 index 000000000..ed5d0f64e --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/108-filename.md @@ -0,0 +1,7 @@ +# __filename + +The `__filename` in Node.js returns the filename of the executed code. It gives the absolute path of the code file. The following approach covers implementing `__filename` in the Node.js project. + +{% resources %} + {% Official "https://nodejs.org/docs/latest/api/modules.html#__filename", "Official Docs" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/105-nodejs-working-with-files/index.md b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/index.md new file mode 100644 index 000000000..80f7daa56 --- /dev/null +++ b/src/roadmaps/nodejs/content/105-nodejs-working-with-files/index.md @@ -0,0 +1,7 @@ +# Working with Files + +You can programmatically manipulate files in Node.js with the built-in `fs` module. The name is short for “file system,” and the module contains all the functions you need to read, write, and delete files on the local machine. + +{% resources %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-work-with-files-using-the-fs-module-in-node-js", "How To Work with Files using the fs Module in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/100-exitting-and-exit-codes.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/100-exitting-and-exit-codes.md new file mode 100644 index 000000000..998ba1c56 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/100-exitting-and-exit-codes.md @@ -0,0 +1,8 @@ +# Exiting and exit codes + +`Exiting` is a way of terminating a Node.js process by using node.js process module. + +{% resources %} + {% Blog "https://nodejs.org/docs/latest/api/process.html", "Node.js Docs on exit" %} + {% Blog "https://www.knowledgehut.com/blog/web-development/node-js-process-exit", "How to Exit a Process in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/100-process-stdout.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/100-process-stdout.md new file mode 100644 index 000000000..54d59379e --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/100-process-stdout.md @@ -0,0 +1,6 @@ +# Process stdout +The process.stdout property is an inbuilt application programming interface of the process module which is used to send data out of our program. A Writable Stream to stdout. It implements a write() method. + +{% resources %} + {% Official "https://nodejs.org/api/process.html#processstdout", "process.stdout" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/101-process-stderr.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/101-process-stderr.md new file mode 100644 index 000000000..690ea4410 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/101-process-stderr.md @@ -0,0 +1,7 @@ +# process.stderr + +The `process.stderr` is an inbuilt application programming interface of class Process within process module which is used to returns a stream connected to stderr. + +{% resources %} + {% Blog "https://nodejs.org/api/process.html#processstderr", "process.stderr" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/102-chalk.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/102-chalk.md new file mode 100644 index 000000000..af0194e20 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/102-chalk.md @@ -0,0 +1,8 @@ +# Chalk + +Chalk is a clean and focused library used to do string styling in your terminal applications. With it you can print different styled messages to your console like changing font colors, font boldness, font opacity and also the background of any message printed on your console. + +{% resources %} + {% Official "https://github.com/chalk/chalk#readme", "Chalk Docs" %} + {% Blog "https://www.positronx.io/style-command-line-output-with-chalk-library-in-node-js/", "Style Command Line Output with Chalk Package in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/103-figlet.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/103-figlet.md new file mode 100644 index 000000000..3c39e28d0 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/103-figlet.md @@ -0,0 +1,7 @@ +# Figlet + +This package aims to fully implement the FIGfont spec in JavaScript, which represents the graphical arrangement of characters representing larger characters. It works in the browser and with Node.js. + +{% resources %} + {% Official "https://github.com/patorjk/figlet.js", "GitHub Repository" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/104-cli-progress.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/104-cli-progress.md new file mode 100644 index 000000000..eb69bad29 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/104-cli-progress.md @@ -0,0 +1,7 @@ +# Cli progress + +CLI-Progress is a package that provides a custom progress bar for CLI applications. + +{% resources %} + {% Official "https://www.npmjs.com/package/cli-progress", "CLI-Progress Documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/index.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/index.md new file mode 100644 index 000000000..4b6d5a0aa --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/index.md @@ -0,0 +1 @@ +# Printing output \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/100-process-stdin.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/100-process-stdin.md new file mode 100644 index 000000000..17e7dc8b2 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/100-process-stdin.md @@ -0,0 +1,8 @@ +# Process stdin + +The process.stdin is a standard Readable stream which listens for user input and is accessible via the process module. It uses on() function to listen for input events. + +{% resources %} + {% Official "https://nodejs.org/api/process.html#processstdin", "Official Documentation" %} + {% Blog "https://www.geeksforgeeks.org/node-js-process-stdin-property", "Node.js process.stdin Property" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/101-prompts.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/101-prompts.md new file mode 100644 index 000000000..0165ec025 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/101-prompts.md @@ -0,0 +1,7 @@ +# Prompts + +Prompts is a higher level and user friendly interface built on top of Node.js's inbuilt `Readline` module. It supports different type of prompts such as text, password, autocomplete, date, etc. It is an interactive module and comes with inbuilt validation support. + +{% resources %} + {% Official "https://www.npmjs.com/package/prompts", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/102-inquirer.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/102-inquirer.md new file mode 100644 index 000000000..fa4c00ab6 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/102-inquirer.md @@ -0,0 +1,13 @@ +# Inquirer + +Inquirer.js is a collection of common interactive command line interfaces for taking inputs from user. +It is promise based and supports chaining series of prompt questions together, receiving text input, checkboxes, lists of choices and much more. + +You can use it to empower your terminal applications that need user input or to build your own CLI. + +{% resources %} + {% Official "https://github.com/SBoudrias/Inquirer.js#readme", "Official Docs" %} + {% Blog "https://www.digitalocean.com/community/tutorials/nodejs-interactive-command-line-prompts", "How To Create Interactive Command-line Prompts with Inquirer.js" %} + {% Blog "https://www.youtube.com/watch?v=0xjfkl9nODQ", "How to make a CLI in Node.js with Inquirer" %} + {% Blog "https://egghead.io/lessons/node-js-create-an-interactive-node-js-command-line-tool-using-inquirer", "Create an Interactive Node.js Command Line Tool using Inquirer" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/index.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/index.md new file mode 100644 index 000000000..4289311bf --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/102-taking-input/index.md @@ -0,0 +1,3 @@ +# Taking input + +Node.js provides a few ways to take inputs from user, including the built-in `process.stdin` and `readline` module. There are also several third party packages like `prompts` and `Enquirer` built on top of `readline` that provide an easy to use and intuitive interface. diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/100-process-argv.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/100-process-argv.md new file mode 100644 index 000000000..46dfadbdb --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/100-process-argv.md @@ -0,0 +1,8 @@ +# process.argv + +`process.argv` is an array of parameters that are sent when you run a Node.js file or Node.js process. + +{% resources %} + {% Blog "https://nodejs.org/docs/latest/api/process.html", "Node.js Docs on process.argv" %} + {% Blog "https://www.geeksforgeeks.org/node-js-process-argv-property/", "Node.js process.argv Property" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/101-commander-js.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/101-commander-js.md new file mode 100644 index 000000000..3a01e2717 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/101-commander-js.md @@ -0,0 +1,7 @@ +# Commander.js + +Commander is a light-weight, expressive, and powerful command-line framework for node.js. with Commander.js you can create your own command-line interface (CLI). + +{% resources %} + {% Official "https://www.npmjs.com/package/commander", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/index.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/index.md new file mode 100644 index 000000000..ffa6a5b03 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/103-command-line-args/index.md @@ -0,0 +1 @@ +# Command line args \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/100-dotenv.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/100-dotenv.md new file mode 100644 index 000000000..149dc710f --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/100-dotenv.md @@ -0,0 +1,10 @@ +# dotenv + +dotenv is a zero-dependency module that loads environment variables from a `.env` file into [process.env](https://nodejs.org/docs/latest/api/process.html#process_process_env). Storing configuration in the environment separate from code is based on [The Twelve-Factor App methodology](https://12factor.net/config). + +{% resources %} + {% Official "https://github.com/motdotla/dotenv#readme", "dotenv Docs" %} + {% Blog "https://www.npmjs.com/package/dotenv", "Dotenv package" %} + {% Blog "https://zetcode.com/javascript/dotenv/", "Dotenv tutorial" %} + {% Blog "https://www.freecodecamp.org/news/how-to-use-node-environment-variables-with-a-dotenv-file-for-node-js-and-npm/", "How to Use Node Environment Variables with a DotEnv File for Node.js and npm" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/101-process-env.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/101-process-env.md new file mode 100644 index 000000000..b0eb99ad7 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/101-process-env.md @@ -0,0 +1,8 @@ +# process.env + +In Node. js, process. env is a global variable that is injected during runtime. It is a view of the state of the system environment variables. When we set an environment variable, it is loaded into process.env during runtime and can later be accessed. + +{% resources %} + {% Blog "https://www.knowledgehut.com/blog/web-development/node-environment-variables", "Process.env Node" %} + {% Blog "https://www.geeksforgeeks.org/node-js-process-env-property/", "Node.js process.env Property" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/index.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/index.md new file mode 100644 index 000000000..61c633b94 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/104-environment-variables/index.md @@ -0,0 +1,5 @@ +# Environment variables + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/reading-environment-variables-from-node-js/", "Reading Environment Variables From Node.js" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/index.md b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/index.md new file mode 100644 index 000000000..d4dac63c0 --- /dev/null +++ b/src/roadmaps/nodejs/content/106-nodejs-command-line-apps/index.md @@ -0,0 +1,9 @@ +# Command Line Applications + +Command Line Applications are applications that can be run from the command line. They are also called CLI (Command Line Interface) applications. Users can interact with clients entirely by terminal commands. They are very useful for automation and building tools. + +{% resources %} + {% Blog "https://learn.co/lessons/intro-to-cli-applications", "Intro To CLI Applications" %} + {% Blog "https://developer.okta.com/blog/2019/06/18/command-line-app-with-nodejs", "Build a Command Line Application with Node.js" %} + {% Blog "https://www.youtube.com/watch?v=_oHByo8tiEY", " 5-Minute Node.js CLI Project" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/100-http-module.md b/src/roadmaps/nodejs/content/107-nodejs-apis/100-http-module.md new file mode 100644 index 000000000..0bc6ed374 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/100-http-module.md @@ -0,0 +1,9 @@ +# Http module + +To make HTTP requests in Node.js, there is a built-in module HTTP in Node.js to transfer data over the HTTP. To use the HTTP server in node, we need to require the HTTP module using `require()` method. The HTTP module creates an HTTP server that listens to server ports and gives a response back to the client. + +{% resources %} + {% Course "https://www.digitalocean.com/community/tutorials/how-to-create-a-web-server-in-node-js-with-the-http-module", "How To Create a Web Server in Node.js with the HTTP Modulet" %} + {% Blog "https://www.geeksforgeeks.org/node-js-http-module/", "Node.js Http Module" %} + {% Blog "https://nodejs.dev/en/learn/the-nodejs-http-module/", "The Node.js Http Module" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/101-express-js.md b/src/roadmaps/nodejs/content/107-nodejs-apis/101-express-js.md new file mode 100644 index 000000000..d9071c2a6 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/101-express-js.md @@ -0,0 +1,11 @@ +# Express.js + +Express is a node js web application framework that provides broad features for building web and mobile applications. It is used to build a single page, multipage, and hybrid web application. + +{% resources %} + {% Official "https://expressjs.com/", "Express.js Official Website" %} + {% Blog "https://expressjs.com/en/starter/installing.html", "Official Getting Started Guide" %} + {% Blog "https://www.tutorialspoint.com/nodejs/nodejs_express_framework.html", "Express Full Guide" %} + {% Blog "https://auth0.com/blog/create-a-simple-and-stylish-node-express-app/", "Sample Project" %} + {% Blog "https://www.freecodecamp.org/news/express-explained-with-examples-installation-routing-middleware-and-more/", "Express Explained with Examples" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/102-nest-js.md b/src/roadmaps/nodejs/content/107-nodejs-apis/102-nest-js.md new file mode 100644 index 000000000..e08164122 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/102-nest-js.md @@ -0,0 +1,9 @@ +# NestJS + +NestJS is a progressive Node.js framework for creating efficient and scalable server-side applications. + +{% resources %} + {% Official "https://nestjs.com", "NestJS Website" %} + {% Official "https://docs.nestjs.com", "NestJS Official Documentations" %} + {% Blog "https://www.youtube.com/watch?v=GHTA143_b-s", "Beginner NestJS Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/103-fastify.md b/src/roadmaps/nodejs/content/107-nodejs-apis/103-fastify.md new file mode 100644 index 000000000..1a2ffe052 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/103-fastify.md @@ -0,0 +1,9 @@ +# Fastify + +Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture, inspired by Hapi and Express. + +{% resources %} + {% Official "https://www.fastify.io/", "Fastify Website" %} + {% Official "https://www.fastify.io/docs/latest/", "Fastify Official Documentations" %} + {% Blog "https://www.youtube.com/watch?v=Lk-uVEVGxOA", "Beginner Fastify Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/104-got.md b/src/roadmaps/nodejs/content/107-nodejs-apis/104-got.md new file mode 100644 index 000000000..46c0562e3 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/104-got.md @@ -0,0 +1,8 @@ +# Got + +Got is a lighter, human-friendly, and powerful HTTP request library explicitly designed to work with Node.js. It supports pagination, RFC compliant caching, makes an API request again if it fails, supports cookies out of the box, etc. + +{% resources %} + {% Official "https://www.npmjs.com/package/got", "Official Documentation" %} + {% Blog "https://rapidapi.com/guides/call-apis-got", "How to consume APIs using GOT in Node.js?" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/105-unfetch.md b/src/roadmaps/nodejs/content/107-nodejs-apis/105-unfetch.md new file mode 100644 index 000000000..84298282d --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/105-unfetch.md @@ -0,0 +1,7 @@ +# unfetch + +unfetch is a tiny 500b fetch "barely-polyfill" + +{% resources %} + {% Official "https://github.com/developit/unfetch#readme", "unfetch Docs" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/106-axios.md b/src/roadmaps/nodejs/content/107-nodejs-apis/106-axios.md new file mode 100644 index 000000000..5775fa68c --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/106-axios.md @@ -0,0 +1,8 @@ +# Axios + +Axios is a promise-based HTTP Client for node.js and the browser. Used for making requests to web servers. On the server-side it uses the native node.js http module, while on the client (browser) it uses XMLHttpRequests. + +{% resources %} + {% Official "https://axios-http.com/docs/intro", "Axios Official Documentations" %} + {% Blog "https://www.youtube.com/watch?v=6LyagkoRWYA", "Axios Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/107-api-calls-http.md b/src/roadmaps/nodejs/content/107-nodejs-apis/107-api-calls-http.md new file mode 100644 index 000000000..990de55b1 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/107-api-calls-http.md @@ -0,0 +1 @@ +# Api calls http \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/108-jsonwebtoken.md b/src/roadmaps/nodejs/content/107-nodejs-apis/108-jsonwebtoken.md new file mode 100644 index 000000000..6c891f3ae --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/108-jsonwebtoken.md @@ -0,0 +1,9 @@ +# JSON Web Token + +JWT, or JSON-Web-Token, is an open standard for sharing security information between two parties — a client and a server. Each JWT contains encoded JSON objects, including a set of claims. JWTs are signed using a cryptographic algorithm to ensure that the claims cannot be altered after the token is issued. + +{% resources %} + {% Official "https://www.npmjs.com/package/jsonwebtoken", "Package Documentation" %} + {% Blog "https://www.akana.com/blog/what-is-jwt", "What is JWT" %} + {% Blog "https://www.youtube.com/watch?v=mbsmsi7l3r4", "JWT Implementation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/109-passport-js.md b/src/roadmaps/nodejs/content/107-nodejs-apis/109-passport-js.md new file mode 100644 index 000000000..a4cb5ed91 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/109-passport-js.md @@ -0,0 +1,9 @@ +# Passport js + +Passport.js is authentication middleware for Node.js. It makes implementing authentication in express apps really easy and fast. It is extremely flexible and modular. It uses "strategies" to support authentication using a username and password, Facebook, Twitter, and a lot of other sites. + +{% resources %} + {% Official "https://www.passportjs.org/", "PassportJS Website" %} + {% Official "https://www.passportjs.org/docs/", "PassportJS Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=sakQbeRjgwg&list=PL4cUxeGkcC9jdm7QX143aMLAqyM-jTZ2x", "Implemetaion of OAuth using passportjs" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/107-nodejs-apis/index.md b/src/roadmaps/nodejs/content/107-nodejs-apis/index.md new file mode 100644 index 000000000..d4b916127 --- /dev/null +++ b/src/roadmaps/nodejs/content/107-nodejs-apis/index.md @@ -0,0 +1,7 @@ +# APIs + +API is the acronym for Application Programming Interface, which is a software intermediary that allows two applications to talk to each other. + +{% resources %} + {% Blog "https://aws.amazon.com/what-is/api/", "What is an API?" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/108-nodejs-keep-app-running/100-nodemon.md b/src/roadmaps/nodejs/content/108-nodejs-keep-app-running/100-nodemon.md new file mode 100644 index 000000000..545bb23d3 --- /dev/null +++ b/src/roadmaps/nodejs/content/108-nodejs-keep-app-running/100-nodemon.md @@ -0,0 +1,9 @@ +# Nodemon + +In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using [nodemon](https://nodemon.io/) or [PM2](https://pm2.keymetrics.io/docs/usage/quick-start/) to restart the process automatically. + +`nodemon` is a command-line interface (CLI) utility developed by [@rem](https://twitter.com/rem) that wraps your Node app, watches the file system, and automatically restarts the process. + +{% resources %} + {% Blog "https://www.digitalocean.com/community/tutorials/workflow-nodemon", "How To Restart Your Node.js Apps Automatically with nodemon" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/108-nodejs-keep-app-running/index.md b/src/roadmaps/nodejs/content/108-nodejs-keep-app-running/index.md new file mode 100644 index 000000000..b1f97fa51 --- /dev/null +++ b/src/roadmaps/nodejs/content/108-nodejs-keep-app-running/index.md @@ -0,0 +1,6 @@ +# Keep App Running + +In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using `nodemon` to restart the process automatically. + +Since Node.js 18.11.0, you can run Node with the `--watch` flag to reload your app everytime a file is changed. So you don't need to use `nodemon` anymore. +[Node.js 18.11.0 Changelog](https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V18.md#18.11.0). diff --git a/src/roadmaps/nodejs/content/109-nodejs-template-engines/100-marko.md b/src/roadmaps/nodejs/content/109-nodejs-template-engines/100-marko.md new file mode 100644 index 000000000..e06292a72 --- /dev/null +++ b/src/roadmaps/nodejs/content/109-nodejs-template-engines/100-marko.md @@ -0,0 +1,7 @@ +# Marko + +Marko is a fast and lightweight HTML-based templating engine that compiles templates to CommonJS modules and supports streaming, async rendering, and custom tags. It is HTML re-imagined as a language for building dynamic and reactive user interfaces. + +{% resources %} + {% Official "https://markojs.com/docs/guides-overview/", "Marko Documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/109-nodejs-template-engines/101-pug.md b/src/roadmaps/nodejs/content/109-nodejs-template-engines/101-pug.md new file mode 100644 index 000000000..60b712169 --- /dev/null +++ b/src/roadmaps/nodejs/content/109-nodejs-template-engines/101-pug.md @@ -0,0 +1,12 @@ +# Pug + +Pug is a JavaScript template engine. It is a high-performance template engine heavily influenced by Haml and implemented with JavaScript for Node.js and browsers. Pug was formerly called Jade. + +Pug is a high-performance template engine heavily influenced by Haml and implemented with JavaScript for Node.js and browsers + +{% resources %} + {% Official "https://pugjs.org/api/getting-started.html", "Getting started with PugJs" %} + {% Course "https://blog.bitsrc.io/how-to-build-a-node-application-using-a-pug-template-7319ab1bba69?gi=40b338891148", "How to Build a Node Application Using a Pug Template" %} + {% Blog "https://www.youtube.com/watch?v=DSp9ExFw3Ig", "Node.js + Express - Tutorial - PugJS Templating Engine" %} + {% Blog "https://zetcode.com/javascript/pugjs/", "Pug.js tutorial" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/109-nodejs-template-engines/102-ejs.md b/src/roadmaps/nodejs/content/109-nodejs-template-engines/102-ejs.md new file mode 100644 index 000000000..a06f18e18 --- /dev/null +++ b/src/roadmaps/nodejs/content/109-nodejs-template-engines/102-ejs.md @@ -0,0 +1,13 @@ +# EJS + +EJS is a templating language or engine that allows you to generate HTML markup with pure JavaScript. And this is what makes it perfect for Nodejs applications. +In simple words, the EJS template engine helps to easily embed JavaScript into your HTML template. + +{% resources %} + {% Official "https://ejs.co/", "Ejs website" %} + {% Official "https://ejs.co/#docs", "Ejs Official Documentations" %} + {% Official "https://www.npmjs.com/package/ejs", "Ejs Official Package" %} + {% Blog "https://ionicabizau.github.io/ejs-playground/", "Try EJS Online" %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-use-ejs-to-template-your-node-application", "How to use EJS" %} + {% Blog "https://codeforgeek.com/ejs-template-engine-in-nodejs/", "Step-by-Step EJS Guide" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/109-nodejs-template-engines/index.md b/src/roadmaps/nodejs/content/109-nodejs-template-engines/index.md new file mode 100644 index 000000000..3897584b9 --- /dev/null +++ b/src/roadmaps/nodejs/content/109-nodejs-template-engines/index.md @@ -0,0 +1,12 @@ +# Template Engines + +Template engine helps us to create an HTML template with minimal code. Also, it can inject data into HTML template at client side and produce the final HTML. + +Some examples of template engines in Node.js are: + +- Nunjucks +- Jade +- Vash +- EJS +- Handlebars +- HAML diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/100-knex.md b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/100-knex.md new file mode 100644 index 000000000..340e1558c --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/100-knex.md @@ -0,0 +1,7 @@ +# Knex + +Knex.js is a "batteries included" SQL query builder for PostgreSQL, CockroachDB, MSSQL, MySQL, MariaDB, SQLite3, Better-SQLite3, Oracle, and Amazon Redshift designed to be flexible, portable, and fun to use. + +{% resources %} + {% Official "https://knexjs.org", "Knex.js Docs" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/101-type-orm.md b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/101-type-orm.md new file mode 100644 index 000000000..f6c835543 --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/101-type-orm.md @@ -0,0 +1,10 @@ +# TypeORM + +TypeORM is an ORM that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used with TypeScript and JavaScript (ES5, ES6, ES7, ES8). Its goal is to always support the latest JavaScript features and provide additional features that help you to develop any kind of application that uses databases - from small applications with a few tables to large scale enterprise applications with multiple databases. + +TypeORM supports both [Active Record](https://typeorm.io/active-record-data-mapper#what-is-the-active-record-pattern) and [Data Mapper](https://typeorm.io/active-record-data-mapper#what-is-the-data-mapper-pattern) patterns, unlike all other JavaScript ORMs currently in existence, which means you can write high quality, loosely coupled, scalable, maintainable applications the most productive way. + +{% resources %} + {% Official "https://typeorm.io", "TypeORM Docs" %} + {% Blog "https://www.youtube.com/watch?v=JaTbzPcyiOE", "TypeORM Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/102-sequelize.md b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/102-sequelize.md new file mode 100644 index 000000000..b251b1cc4 --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/102-sequelize.md @@ -0,0 +1,14 @@ +# Sequelize + +Sequelize is an easy-to-use and promise-based Node.js ORM tool for Postgres, MySQL, MariaDB, SQLite, DB2, Microsoft SQL Server, and Snowflake. It features solid transaction support, relations, eager and lazy loading, read replication and more. + +## What is an ORM ? +An ORM is known as Object Relational Mapper. This is a tool or a level of abstraction which maps(converts) data in a relational database into programmatic objects that can be manipulated by a programmer using a programming language(usually an OOP language). ORMs solely exist to map the details between two data sources which due to a mismatch cannot coexist together. + +{% resources %} + {% Official "https://sequelize.org/", "Sequelize Website" %} + {% Official "https://www.npmjs.com/package/sequelize", "Sequelize - NPM Package" %} + {% Blog "https://sequelize.org/docs/v6/getting-started/", "Official Sequelize Docs" %} + {% Blog "https://levelup.gitconnected.com/the-ultimate-guide-to-get-started-with-sequelize-orm-238588d3516e", "Getting started with Sequelize" %} + {% Blog "https://www.geeksforgeeks.org/how-to-use-sequelize-in-node-js/", "Sequelize in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/103-prisma.md b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/103-prisma.md new file mode 100644 index 000000000..1d28fb959 --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/103-prisma.md @@ -0,0 +1,8 @@ +# Prisma + +Prisma is an ORM that helps app developers build faster and make fewer errors. Combined with its Data Platform developers gain reliability and visibility when working with databases. + +{% resources %} + {% Official "https://www.prisma.io/", "Prisma Website" %} + {% Official "https://www.prisma.io/docs/", "Prisma Official Documentations" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/104-native-drivers.md b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/104-native-drivers.md new file mode 100644 index 000000000..951ae3533 --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/104-native-drivers.md @@ -0,0 +1,16 @@ +# Native drivers + +NativeDriver is an implementation of the WebDriver API which drives the UI of a native application rather than a web application. It extends the WebDriver API in a few key places, and re-interprets the existing API for native applications. + +- MySQL: + - [`mysql`](https://www.npmjs.com/package/mysql) + - [`mysql2`](https://www.npmjs.com/package/mysql2) +- MariaDB: + - [`mariadb`](https://www.npmjs.com/package/mariadb) +- PostgreSQL: + - [`pg`](https://www.npmjs.com/package/pg) +- Microsoft SQL Server: + - [`tedious`](https://www.npmjs.com/package/tedious) + - [`mssql`](https://www.npmjs.com/package/mssql) +- Oracle: + - [`oracledb`](https://www.npmjs.com/package/oracledb) diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/index.md b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/index.md new file mode 100644 index 000000000..613daa077 --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/100-relational/index.md @@ -0,0 +1,5 @@ +# Relational + +A relational database is a (most commonly digital) database based on the relational model of data, as proposed by E. F. Codd in 1970. A system used to maintain relational databases is a relational database management system (RDBMS). Many relational database systems are equipped with the option of using the SQL (Structured Query Language) for querying and maintaining the database. + +Free Content diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/100-mongoose.md b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/100-mongoose.md new file mode 100644 index 000000000..a007b53da --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/100-mongoose.md @@ -0,0 +1,9 @@ +# Mongoose + +Mongoose is an Object Data Modeling (ODM) library for MongoDB and Node.js. Mongoose provides a straight-forward, schema-based solution to model your application data. It includes built-in type casting, validation, query building, business logic hooks and more, out of the box. + +{% resources %} + {% Official "https://mongoosejs.com", "Mongoose Website" %} + {% Blog "https://www.freecodecamp.org/news/introduction-to-mongoose-for-mongodb-d2a7aa593c57", "Introduction to Mongoose for MongoDB" %} + {% Blog "https://www.mongodb.com/developer/languages/javascript/getting-started-with-mongodb-and-mongoose/", "Getting Started with MongoDB and Mongoose" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/101-prisma.md b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/101-prisma.md new file mode 100644 index 000000000..ea8b6ee02 --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/101-prisma.md @@ -0,0 +1,9 @@ +# Prisma + +Prisma is an open source next-generation ORM in the TypeScript ecosystem. It offer a dedicated API for relation filters. It provide an abstraction layer that makes you more productive compared to writing SQL. Prisma currently supports `PostgreSQL`, `MySQL`, `SQL Server`, `SQLite`, `MongoDB` and `CockroachDB`. + + +{% resources %} + {% Official "https://www.prisma.io/", "Prisma Website" %} + {% Blog "https://www.youtube.com/watch?v=-7r4whMKt1s", "Prisma & MongoDB Youtube Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/102-native-drivers.md b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/102-native-drivers.md new file mode 100644 index 000000000..9fc283e98 --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/102-native-drivers.md @@ -0,0 +1,3 @@ +# Native Drivers + +Another way to connect to different databases in Node.js is to use the official native drivers provided by the database. For example, here is the [list of drivers by MongoDB](https://www.mongodb.com/docs/drivers/) \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/index.md b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/index.md new file mode 100644 index 000000000..22a1470bd --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/101-document/index.md @@ -0,0 +1,7 @@ +# Document + +A document database is a type of nonrelational database that is designed to store and query data as JSON-like documents. Document databases make it easier for developers to store and query data in a database by using the same document-model format they use in their application code. The flexible, semistructured, and hierarchical nature of documents and document databases allows them to evolve with applications’ needs. + +{% resources %} + {% Blog "https://aws.amazon.com/nosql/document/", "What Is a Document Database?" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/110-nodejs-databases/index.md b/src/roadmaps/nodejs/content/110-nodejs-databases/index.md new file mode 100644 index 000000000..9b458922a --- /dev/null +++ b/src/roadmaps/nodejs/content/110-nodejs-databases/index.md @@ -0,0 +1,3 @@ +# What is Database + +A database is an organized collection of structured information, or data, typically stored electronically in a computer system. A database is usually controlled by a database management system (DBMS). diff --git a/src/roadmaps/nodejs/content/111-nodejs-testing/100-jest.md b/src/roadmaps/nodejs/content/111-nodejs-testing/100-jest.md new file mode 100644 index 000000000..8e297b8b7 --- /dev/null +++ b/src/roadmaps/nodejs/content/111-nodejs-testing/100-jest.md @@ -0,0 +1,9 @@ +# Jest + +Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It works with projects using: Babel, TypeScript, Node, React, Angular, Vue and more! + +{% resources %} + {% Official "https://jestjs.io", "Jest Website" %} + {% Blog "https://jestjs.io/docs/getting-started", "Jest Documentation" %} +{% endresources %} + diff --git a/src/roadmaps/nodejs/content/111-nodejs-testing/101-mocha.md b/src/roadmaps/nodejs/content/111-nodejs-testing/101-mocha.md new file mode 100644 index 000000000..58866b8f8 --- /dev/null +++ b/src/roadmaps/nodejs/content/111-nodejs-testing/101-mocha.md @@ -0,0 +1,9 @@ +# Mocha + +Mocha is an open source JavaScript test framework running on Nodejs and in the browser, making asynchronous testing simple and fun, and it's a great candidate for BDD (Behavior Driven Development). + +{% resources %} + {% Blog "https://www.npmjs.com/package/mocha", "Official Website" %} + {% Blog "https://mochajs.org/", "Mocha Documentation" %} + {% Blog "https://youtube.com/playlist?list=PLgbtO1Bcz4C-vU0JLfDBsZGbSUdNX4mQ8", "Mocha Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/111-nodejs-testing/102-cypress.md b/src/roadmaps/nodejs/content/111-nodejs-testing/102-cypress.md new file mode 100644 index 000000000..5476e8dbe --- /dev/null +++ b/src/roadmaps/nodejs/content/111-nodejs-testing/102-cypress.md @@ -0,0 +1,8 @@ +# Cypress + +Cypress is a new front end testing tool built for the modern web. It enables you to write faster, easier and more reliable tests. + +{% resources %} + {% Official "https://www.cypress.io/", "Cypress Website" %} + {% Blog "https://docs.cypress.io/", "Cypress Documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/111-nodejs-testing/index.md b/src/roadmaps/nodejs/content/111-nodejs-testing/index.md new file mode 100644 index 000000000..0da66e714 --- /dev/null +++ b/src/roadmaps/nodejs/content/111-nodejs-testing/index.md @@ -0,0 +1,9 @@ +# Testing + +Software testing is the process of verifying that what we create is doing exactly what we expect it to do. The tests are created to prevent bugs and improve code quality. + +The two most common testing approaches are unit testing and end-to-end testing. In the first, we examine small snippets of code, in the second, we test an entire user flow. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/difference-between-end-to-end-testing-and-unit-testing/", "Differences between end-to-end testing and unit testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/112-nodejs-logging/100-morgan.md b/src/roadmaps/nodejs/content/112-nodejs-logging/100-morgan.md new file mode 100644 index 000000000..7e5f8e842 --- /dev/null +++ b/src/roadmaps/nodejs/content/112-nodejs-logging/100-morgan.md @@ -0,0 +1,8 @@ +# Morgan + +Morgan is a NodeJS and express.js middleware to log the HTTP request and error, simplifying the debugging process. It provides flexibility in defining the format of log messages and helps override the output destination for your logs. + +{% resources %} + {% Blog "https://www.npmjs.com/package/morgan", "Official Website" %} + {% Blog "https://www.digitalocean.com/community/tutorials/nodejs-getting-started-morgan", "How to use Morgan|DigitalOcean" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/112-nodejs-logging/101-winston.md b/src/roadmaps/nodejs/content/112-nodejs-logging/101-winston.md new file mode 100644 index 000000000..9f0e3ff53 --- /dev/null +++ b/src/roadmaps/nodejs/content/112-nodejs-logging/101-winston.md @@ -0,0 +1,8 @@ +# Winston + +winston is designed to be a simple and universal logging library with support for multiple transports. A transport is essentially a storage device for your logs. Each winston logger can have multiple transports configured at different levels. For example, one may want error logs to be stored in a persistent remote location (like a database), but all logs output to the console or a local file. + + +{% resources %} + {% Official "https://github.com/winstonjs/winston", "winston Website" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/112-nodejs-logging/index.md b/src/roadmaps/nodejs/content/112-nodejs-logging/index.md new file mode 100644 index 000000000..b7fd90aeb --- /dev/null +++ b/src/roadmaps/nodejs/content/112-nodejs-logging/index.md @@ -0,0 +1,8 @@ +# Node.js Logging + +**Logging** is an essential part of understanding the complete application life cycle of the `Node.js` application. We can much more easily and quickly fix errors by looking at logs throughout the development process, from creating to debugging to designing new features. **Error**, **warn**, **info**, and **debug** are the four basic logging levels in `Node.js`. Logging involves persistently collecting information about an application's runtime behaviour. + +{% resources %} + {% Blog "https://stackify.com/node-js-logging/", "Node.js Logging" %} + {% Blog "https://blog.appsignal.com/2021/09/01/best-practices-for-logging-in-nodejs.html", "Logging best practices" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/100-pm2.md b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/100-pm2.md new file mode 100644 index 000000000..2dfdf17ce --- /dev/null +++ b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/100-pm2.md @@ -0,0 +1,8 @@ +# Pm2 + +PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks. + +{% resources %} + {% Official "https://pm2.keymetrics.io/", "Pm2 Website" %} + {% Official "https://pm2.keymetrics.io/docs/usage/quick-start/", "Pm2 Official Documentations" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/101-forever.md b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/101-forever.md new file mode 100644 index 000000000..0a9e50359 --- /dev/null +++ b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/101-forever.md @@ -0,0 +1,8 @@ +# Forever + +Forever is a node.js package for ensuring that a given script runs continuously (i.e. forever) even when the server crash/stops. A CLI tool for the production environment to manage the Node applications and their processes. + + +{% resources %} + {% Blog "https://www.npmjs.com/package/forever", "Forever package documentation" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/102-nohup.md b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/102-nohup.md new file mode 100644 index 000000000..5ed4747b9 --- /dev/null +++ b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/102-nohup.md @@ -0,0 +1,9 @@ +# Nohup + +Nohup, short for no hang up is a command in Linux systems that keep processes running, will ignore the SIGHUP signal even after exiting the shell or terminal. + + +{% resources %} + {% Blog "https://www.digitalocean.com/community/tutorials/nohup-command-in-linux", "Nohup command" %} + {% Blog "https://www.geeksforgeeks.org/nohup-command-in-linux-with-examples/", "geekforgeeks Nohup example" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/index.md b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/index.md new file mode 100644 index 000000000..f364d7690 --- /dev/null +++ b/src/roadmaps/nodejs/content/113-nodejs-keep-app-running-prod/index.md @@ -0,0 +1,7 @@ +# Keep your app running in Production + +PM2 lets you run your nodejs scripts forever. In the event that your application crashes, PM2 will also restart it for you. + +{% resources %} + {% Blog "https://devtut.github.io/nodejs/keep-a-node-application-constantly-running.html#use-pm2-as-a-process-manager", "Keep a node application constantly running" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/114-nodejs-threads/100-child-process.md b/src/roadmaps/nodejs/content/114-nodejs-threads/100-child-process.md new file mode 100644 index 000000000..9a6395968 --- /dev/null +++ b/src/roadmaps/nodejs/content/114-nodejs-threads/100-child-process.md @@ -0,0 +1,12 @@ +# Child Process + +The child_process module gives the node the ability to run the child process, established through IPC (inter-process communication) by accessing operating system commands. + +The three main methods inside this module are : +`child_process.spawn()` +`child_process.fork()` +`child_process.exec()` + +{% resources %} + {% Official "https://nodejs.org/api/child_process.html#child-process", "Child Process Docs" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/114-nodejs-threads/101-cluster.md b/src/roadmaps/nodejs/content/114-nodejs-threads/101-cluster.md new file mode 100644 index 000000000..d0c234262 --- /dev/null +++ b/src/roadmaps/nodejs/content/114-nodejs-threads/101-cluster.md @@ -0,0 +1,7 @@ +# Cluster + + The Cluster module allows you to easily create child processes that each runs simultaneously on their own single thread, to handle workloads among their application threads. + +{% resources %} + {% Official "https://nodejs.org/api/cluster.html#cluster", "Cluster Docs" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/114-nodejs-threads/102-worker-threads.md b/src/roadmaps/nodejs/content/114-nodejs-threads/102-worker-threads.md new file mode 100644 index 000000000..958f54c70 --- /dev/null +++ b/src/roadmaps/nodejs/content/114-nodejs-threads/102-worker-threads.md @@ -0,0 +1,9 @@ +# Worker Threads + +Worker thread is a continuous parallel thread that runs and accepts messages until it is explicitly closed or terminated. +With worker threads, we can achieve a much efficient application without creating a deadlock situation. Workers, unlike children's processes, can exchange memory. + +{% resources %} + {% Official "https://nodejs.org/api/worker_threads.html#worker-threads", "Worker Threads Docs" %} +{% endresources %} + diff --git a/src/roadmaps/nodejs/content/114-nodejs-threads/index.md b/src/roadmaps/nodejs/content/114-nodejs-threads/index.md new file mode 100644 index 000000000..fa2200810 --- /dev/null +++ b/src/roadmaps/nodejs/content/114-nodejs-threads/index.md @@ -0,0 +1,8 @@ +# Nodejs Threads + +Node.js is a single-threaded language and gives us ways to work parallelly to our main process. +Taking note of nowadays multicore system single threading is very memory efficient. + +{% resources %} + {% Blog "https://alvinlal.netlify.app/blog/single-thread-vs-child-process-vs-worker-threads-vs-cluster-in-nodejs", "Single Thread vs Child Process vs Worker Threads vs Clutster in Node.js" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/nodejs/content/115-nodejs-streams.md b/src/roadmaps/nodejs/content/115-nodejs-streams.md new file mode 100644 index 000000000..fcd2383c6 --- /dev/null +++ b/src/roadmaps/nodejs/content/115-nodejs-streams.md @@ -0,0 +1,16 @@ +# Nodejs streams + +Streams are a type of data handling methods and are used to read, write or transform chunks of data piece by piece without keeping it in memory all at once. There are four types of streams in Node.js. + +- **Readable**: streams from which data can be read. +- **Writable**: streams to which we can write data. +- **Duplex**: streams that are both Readable and Writable. +- **Transform**: streams that can modify or transform the data as it is written and read. + +Multiple streams can be chained together using `pipe()` method. + +{% resources %} + {% Official "https://nodejs.org/api/stream.html", "Stream API Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=GlybFFMXXmQ", "Node.js Streams tutorial" %} + {% Blog "https://nodesource.com/blog/understanding-streams-in-nodejs", "Understanding Streams in Node.js" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/100-garbage-collection.md b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/100-garbage-collection.md new file mode 100644 index 000000000..959127f1d --- /dev/null +++ b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/100-garbage-collection.md @@ -0,0 +1,8 @@ +# Garbage Collection + +Memory management in JavaScript is performed automatically and invisibly to us. We create primitives, objects, functions… All that takes memory. The main concept of memory management in JavaScript is reachability. + +{% resources %} + {% Blog "https://javascript.info/garbage-collection", "JavaScript Garbage Collection" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management", "Memory Management in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/index.md b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/index.md new file mode 100644 index 000000000..67d8a3964 --- /dev/null +++ b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/100-memory-leaks/index.md @@ -0,0 +1,9 @@ +# Memory Leaks + +Memory leaks are caused when your Node.js app’s CPU and memory usage increases over time for no apparent reason. In simple terms, a Node.js memory leak is an orphan block of memory on the Heap that is no longer used by your app because it has not been released by the garbage collector. It’s a useless block of memory. These blocks can grow over time and lead to your app crashing because it runs out of memory. + +{% resources %} + {% Blog "https://sematext.com/blog/nodejs-memory-leaks/", "Memory leaks in Node.js" %} + {% Blog "https://sematext.com/blog/nodejs-memory-leaks/#what-causes-them-common-node-js-memory-leaks", "Memory leaks causes" %} + {% Blog "https://sematext.com/blog/nodejs-memory-leaks/#node-js-memory-leak-detectors", "Memory leaks detectors" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/116-nodejs-more-debugging/101-node-inspect.md b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/101-node-inspect.md new file mode 100644 index 000000000..65dcf71bd --- /dev/null +++ b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/101-node-inspect.md @@ -0,0 +1,7 @@ +# Node Inspect + +Node.js provides a built-in DevTools-based debugger to allow debugging Node.js applicatins. + +{% resources %} + {% Blog "https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27", "Debugging Node.js with Chrome DevTools" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/116-nodejs-more-debugging/102-using-apm.md b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/102-using-apm.md new file mode 100644 index 000000000..a095f3f8d --- /dev/null +++ b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/102-using-apm.md @@ -0,0 +1,11 @@ +# Using APM + +As much fun as it is to intercept your container requests with inspect and step through your code, you won’t have this option in production. This is why it makes a lot of sense to try and debug your application locally in the same way as you would in production. + +In production, one of your tools would be to login to your remote server to view the console logs, just as you would on local. But this can be a tedious approach. Luckily, there are tools out there that perform what is called log aggregation, such as Stackify. + +These tools send your logs from your running application into a single location. They often come with high-powered search and query utilities so that you can easily parse your logs and visualize them. + +{% resources %} + {% Blog "https://stackify.com/node-js-debugging-tips/", "Debugging using APM " %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/116-nodejs-more-debugging/index.md b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/index.md new file mode 100644 index 000000000..2c5a3f545 --- /dev/null +++ b/src/roadmaps/nodejs/content/116-nodejs-more-debugging/index.md @@ -0,0 +1,10 @@ +# More Debugging + +Debugging is a concept to identify and remove errors from software applications. Here, we will learn about the technique to debug a Node.js application. + +## Why not to use console.log() for debugging? +Using `console.log` to debug the code generally dives into an infinite loop of “stopping the app and adding a console.log, and start the app again” operations. Besides slowing down the development of the app, it also makes the writing dirty and creates unnecessary code. Finally, trying to log out variables alongside with the noise of other potential logging operations, may make the process of debugging difficult when attempting to find the values you are debugging. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/node-js-debugging/", "Node.js Debugging" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/117-nodejs-common-modules/100-builtin-modules.md b/src/roadmaps/nodejs/content/117-nodejs-common-modules/100-builtin-modules.md new file mode 100644 index 000000000..e249fbc71 --- /dev/null +++ b/src/roadmaps/nodejs/content/117-nodejs-common-modules/100-builtin-modules.md @@ -0,0 +1,32 @@ +# Builtin modules + +Built-in modules are already installed with `Node.js`, so you don't need to install them with any package manager (yarn, npm, etc.). + +- **fs**: dealing with the system files. +- **os**: provides information about the operation system. +- **net**: to build clients and servers. +- **path**: to handle file paths. +- **url**: help in parsing URL strings. +- **events**: provides a method for interacting with events. +- **http**: making Node.js transfer data over HTTP. +- **console**: to log information in the console. +- **assert**: provides a set of assertion tests. +- **process**: provides information about, and control over, the current process. +- **cluster**: able to creating child processes that runs simultaneously and share the same server port. +- **perf_hooks**: provides APIs for performance measurement +- **crypto**: to handle OpenSSL cryptographic functions. +- **Buffer**: provides APIs to handling streams of binary data. +- **DNS**: enables name resolution. +- **events**: for handling existing events and creating custon events. +- **child_processes**: provides the ability to spawn subprocesses. +- **REPL**: provides a Read-Eval-Print-Loop (REPL) implementation that is available both as a standalone program or includible in other applications. +- **readline**: provides an interface for reading data from a Readable stream one line at a time. +- **util**: supports the needs of Node.js internal APIs. +- **querystring**: provides utilities for parsing and formatting URL query strings. +- **string_decoder**: provides an API for decoding Buffer objects into strings. +- **tls**: provides an implementation of the Transport Layer Security (TLS) and Secure Socket Layer (SSL) protocols. + +{% resources %} + {% Official "https://nodejs.org/api/modules.html", "API documentation of Built-in modules" %} + {% Blog "https://www.w3schools.com/nodejs/ref_modules.asp", "Built-in modules - w3schools" %} +{% endresources %} diff --git a/src/roadmaps/nodejs/content/117-nodejs-common-modules/index.md b/src/roadmaps/nodejs/content/117-nodejs-common-modules/index.md new file mode 100644 index 000000000..e1a80c46b --- /dev/null +++ b/src/roadmaps/nodejs/content/117-nodejs-common-modules/index.md @@ -0,0 +1,3 @@ +# Nodejs common modules + +These are the common modules that come with `Node.js` out of the box. This module provides tools or APIs for performing out certain standard `Node.js` operations. like interacting with the file system, url parsing, or logging information to the console. diff --git a/src/roadmaps/nodejs/nodejs.md b/src/roadmaps/nodejs/nodejs.md new file mode 100644 index 000000000..2222dc28b --- /dev/null +++ b/src/roadmaps/nodejs/nodejs.md @@ -0,0 +1,79 @@ +--- +jsonUrl: "/jsons/nodejs.json" +pdfUrl: "/pdfs/nodejs.pdf" +order: 6 +featuredTitle: "Node.js" +featuredDescription: "Step by step guide to becoming a Node.js developer in 2022" +title: "Node.js Developer" +description: "Step by step guide to becoming a modern Node.js developer in 2022" +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 2474.06 +seo: + title: "Node.js Developer Roadmap: Learn to become a modern node.js developer" + description: "Learn to become a modern node.js developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern node.js development." + keywords: + - "node.js roadmap 2022" + - "nodejs roadmap 2022" + - "node.js roadmap 2022" + - "nodejs roadmap 2022" + - "node.js developer roadmap 2022" + - "nodejs developer roadmap 2022" + - "guide to becoming a developer" + - "guide to becoming a node.js developer" + - "guid to becoming a node.js developer" + - "node.js developer" + - "nodejs developer" + - "node.js engineer" + - "nodejs engineer" + - "node.js skills" + - "nodejs skills" + - "node.js development" + - "nodejs development" + - "node.js developer" + - "nodejs developer" + - "node.js development skills" + - "nodejs development skills" + - "node.js development skills test" + - "nodejs development skills test" + - "node.js roadmap" + - "nodejs roadmap" + - "node.js engineer roadmap" + - "nodejs engineer roadmap" + - "node.js developer roadmap" + - "nodejs developer roadmap" + - "become a node.js developer" + - "become a node.js developer" + - "node.js developer career path" + - "nodejs developer career path" + - "node.js developer" + - "nodejs developer" + - "modern node.js developer" + - "modern node.js developer" + - "node developer" + - "skills for node.js development" + - "skills for nodejs development" + - "learn node.js development" + - "lear node.js development" + - "node.js developer quiz" + - "nodejs developer quiz" + - "node.js developer interview questions" + - "nodejs developer interview questions" +relatedRoadmaps: + - "frontend" + - "backend" + - "javascript" + - "react" + - "angular" + - "vue" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/postgresql-dba/postgresql-dba.md b/src/roadmaps/postgresql-dba/postgresql-dba.md new file mode 100644 index 000000000..13857e76b --- /dev/null +++ b/src/roadmaps/postgresql-dba/postgresql-dba.md @@ -0,0 +1,223 @@ +--- +jsonUrl: "/jsons/postgresql-dba.json" +pdfUrl: "/pdfs/postgresql-dba.pdf" +order: 5 +featuredTitle: "DBA" +featuredDescription: "Step by step guide to become a PostgreSQL DBA in 2022" +title: "PostgreSQL DBA" +description: "Step by step guide to becoming a modern PostgreSQL DB Administrator in 2022" +hasTopics: false +seo: + title: "DBA Roadmap: Learn to become a database administrator with PostgreSQL" + description: "Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a database administrator" + - "guide to becoming a DBA" + - "dba roadmap" + - "db administrator roadmap" + - "database administrator roadmap" + - "postgresql roadmap" + - "dba skills" + - "db administrator skills" + - "become dba" + - "postgresql skills" + - "modern dba skills" + - "dba skills test" + - "skills for dba" + - "skills for database administrator" + - "learn dba" + - "what is dba" + - "database administrator quiz" + - "dba interview questions" +relatedRoadmaps: + - "backend" + - "devops" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + +The intent of this guide is to give you an idea about the DBA landscape and to help guide your learning if you are confused. The roadmap is highly opinionated — neither, knowing everything listed in the roadmap, nor the order of items given in the roadmap is required to be followed in order to be a DBA. + +## Learn basic RDBMS terms and concepts +Get basic understanding of Postgres key terms and basic RDBMS concepts. + +- **Object model**: data types, columns, rows, tables, schemas, databases, queries. +- **Relational model**: domains, attributes, tuples, relations, constraints, NULL. +- **Databases high-level concepts**: ACID, MVCC, transactions, write-ahead log, query processing. +- **Links**: + - [Postgres Glossary](https://www.postgresql.org/docs/13/glossary.html) + - SQL and Relational Theory - Christopher J. Date, 2009 + - Database Design and Relational Theory - Christopher J. Date, 2012 + +## Learn how to install and run PostgreSQL +Get practical skills of how to set up and run Postgres to get a working environment for further learning. + +- Using package managers (APT, YUM, etc.) +- Using `docker`. +- Managing Postgres service using `systemd` (start, stop, restart, reload). +- Managing Postgres service using `pg_ctl`, or OS-specific tools (like `pg_ctlcluster`). +- Connect to Postgres using `psql`. +- Deploy database service in cloud environment (AWS, GCE, Azure, Heroku, DigitalOcean, etc...). +- **Links**: + - [Official download and install instructions](https://www.postgresql.org/download/) + - [Official Docker images](https://hub.docker.com/_/postgres) + +## Learn SQL concepts +Get practical skills of how to create and manipulate database objects and how to execute queries using `psql` client. +- Understand basic data types. +- **DML queries**: querying data, modifying data, filtering data, joining tables. + - **Advanced topics**: transactions, CTE, subqueries, lateral join, grouping, set operations. +- **DDL queries**: managing tables and schemas (create, alter, drop). +- Import and export data using `COPY`. +- **Links**: + - [DB Fiddle](https://www.db-fiddle.com/) + - [PostgreSQL Tutorial](https://www.postgresqltutorial.com/) + - [PostgreSQL SQL Getting Started](https://www.postgresql.org/docs/current/tutorial-sql.html) + - [The SQL Language](https://www.postgresql.org/docs/current/sql.html) + +## Learn how to configure Postgres +Get understanding of the main aspects of how Postgres could be configured. Deep understanding of Postgres internals is not yet necessary here. + +- postgresql.conf: + - Resources usage + - Write-ahead Log + - Checkpoints and Background Writer + - Cost-based vacuum and auto-vacuum + - Replication + - Query planner + - Reporting, logging and statistics + - Adding extra extensions + - ...keep exploring other configuration options +- **Links**: + - [Postgresqlco.nf](http://postgresqlco.nf/) + +## Learn Postgres security concepts +Get understanding about basic security concepts and common ways of how to deploy secure configurations. +- Authentication models, roles, pg_hba.conf, SSL settings. +- **Objects privileges**: grant/revoke, default privileges. +- **Advanced topics** - row-level security, selinux. +- **Links**: + - [Client authentication](https://www.postgresql.org/docs/current/client-authentication.html) + - [Roles and users managements](https://www.postgresql.org/docs/current/user-manag.html) + +## Develop infrastructure DBA skills +Get practical skills of how to deploy, extend, maintain and support Postgres installations and 3rd-party Postgres ecosystem software. +- **Replication**: streaming replication, logical replication +- **Backup/recovery tools**: + - Built-in: `pg_dump`, `pg_dumpall`, `pg_restore`, `pg_basebackup` + - 3rd-party: `barman`, `pgbackrest`, `pg_probackup`, `WAL-G` + - Backup validation procedures +- **Upgrading procedures** + - Minor and major upgrades using `pg_upgrade` + - Upgrades using logical replication +- **Connection pooling**: + - `Pgbouncer` + - Alternatives: `Pgpool-II`, `Odyssey`, `Pgagroal` +- **Infrastructure monitoring**: `Prometheus`, `Zabbix`, other favourite monitoring solution +- **High availability and cluster management tools**: + - `Patroni` + - **Alternatives**: `Repmgr`, `Stolon`, `pg_auto_failover`, `PAF` +- **Applications Load Balancing and Service Discovery**: `Haproxy`, `Keepalived`, `Consul`, `Etcd` +- **Deploy Postgres on `Kubernetes`**: Simple `StatefulSet` setup, `HELM`, operators +- Resource usage and provisioning, capacity planning + +## Learn how to automate routines +Get practical skills, learn automation tools and automate existing routine tasks. +- Automation using shell scripts or any other favourite language (`Bash`, `Python`, `Perl`, etc) +- Configuration management: `Ansible`, `Salt`, `Chef`, `Puppet` + +## Develop application DBA skills +Learn theory and get practical skills of how applications should work with Postgres +- **Migrations**: + - practical patterns and antipatterns + - tools: `liquibase`, `sqitch`, language-specific tools +- Data import/export, bulk loading and processing +- **Queues**: + - practical patterns and anti-patterns + - `Skytools PGQ` +- Data partitioning and sharding patterns. +- Database normalization and normal forms. +- Books: + - The Art of PostgreSQL - Dimitri Fontaine, 2020 + +## Learn Postgres advanced topics +Here is important to continuously extend and develop existing knowledge about Postgres. +- **Low level internals**: + - Processes and memory architecture + - Vacuum processing + - Buffer management + - Lock management + - [Physical storage and file layout](https://www.postgresql.org/docs/current/storage.html) + - [System catalog](https://www.postgresql.org/docs/current/catalogs.html) +- **Fine-grained tuning**: + - Per-user, per-database settings + - [Storage parameters](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS) + - Workload-dependant tuning: OLTP, OLAP, HTAP +- **Advanced SQL topics**: + - PL/pgSQL, procedures and functions, triggers + - Aggregate and window functions + - Recursive CTE +- **Links**: + - [The Internals of PostgreSQL](http://www.interdb.jp/pg/index.html) for database administrators and system developers + - [PL/pgSQL Guide](https://www.postgresql.org/docs/current/plpgsql.html) + +## Learn Postgres troubleshooting techniques +Get basic understanding about troubleshooting tools and get practical skills of how to detect and resolve problems. +- **Operating system tools** + - `top` (`htop`, `atop`) + - `sysstat` + - `iotop` +- **Postgres system views** + - `pg_stat_activity` + - `pg_stat_statements` +- **Postgres tools** + - `pgcenter` - *personal recommendation* +- **Query analyzing**: + - [EXPLAIN](https://www.postgresql.org/docs/current/sql-explain.html) + - [Depesz](https://explain.depesz.com/) online EXPLAIN visualization tool + - [PEV](https://tatiyants.com/pev/#/plans) online EXPLAIN visualization tool + - [Tensor](https://explain.tensor.ru/) online EXPLAIN visualization tool, RU language only +- **Log analyzing**: + - `pgBadger` + - Ad-hoc analyzing using `grep`, `awk`, `sed`, etc. +- **External tracing/profiling tools**: `gdb`, `strace`, `perf-tools`, `ebpf`, core dumps +- **Troubleshooting methods**: USE, RED, Golden signals +- **Links**: + - [Linux Performance](http://www.brendangregg.com/linuxperf.html) by Brendan Gregg + - [USE Method](http://www.brendangregg.com/usemethod.html) + +## Learn SQL optimization techniques +Get understanding and practical skills of how to optimize SQL queries. +- **Indexes, and their use cases**: B-tree, Hash, GiST, SP-GiST, GIN, BRIN +- SQL queries patterns and anti-patterns +- SQL schema design patterns and anti-patterns +- **Links**: + - [Use the Index, Luke](https://use-the-index-luke.com/) - a Guide to Database Performance for Developers +- **Books**: + - SQL Antipatterns: Avoiding the Pitfalls of Database Programming - Bill Karwin, 2010 + +## Develop architect skills +Get deeper understanding of Postgres use cases and where Postgres is suitable and where is not. +- **Postgres forks and extensions**: `Greenplum`, `Timescaledb`, `Citus`, `Postgres-XL`, etc. +- RDBMS in general, benefits and limitations +- Differences between Postgres and other RDBMS and NoSQL databases + +## Develop Postgres hacker skills +Get involved to Postgres community and contribute to Postgres; be a useful member of Postgres, and the open source community; use personal experience to help other people. +- Daily reading and answering in [mailing lists](https://www.postgresql.org/list/) + - pgsql-general + - pgsql-admin + - pgsql-performance + - pgsql-hackers + - pgsql-bugs +- Reviewing patches +- Writing patches, attending in [Commitfests](https://commitfest.postgresql.org/) + +
+
+
diff --git a/src/roadmaps/python/content/100-python-basics/100-basic-syntax.md b/src/roadmaps/python/content/100-python-basics/100-basic-syntax.md new file mode 100644 index 000000000..1439b3fb9 --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/100-basic-syntax.md @@ -0,0 +1,12 @@ +# Basic Syntax + +Setup the environment for python and get started with the basics. + +{% resources %} + {% Blog "https://www.w3schools.com/python/", "W3Schools - Python" %} + {% Blog "https://www.youtube.com/watch?v=kqtD5dpn9C8", "Python for Beginners - Learn Python in 1 Hour" %} + {% Blog "https://www.tutorialspoint.com/python/python_basic_syntax.htm", "Python Basics" %} + {% Blog "https://learnxinyminutes.com/docs/python/", "Learn X in Y Minutes / Python" %} +{% endresources %} + + diff --git a/src/roadmaps/python/content/100-python-basics/101-variables-and-datatypes.md b/src/roadmaps/python/content/100-python-basics/101-variables-and-datatypes.md new file mode 100644 index 000000000..8f42c0e4f --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/101-variables-and-datatypes.md @@ -0,0 +1,17 @@ +## Variables + +Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program. + +{% resources %} + {% Blog "https://realpython.com/python-variables", "Variables in Python" %} + {% Blog "https://www.w3schools.com/python/python_variables.asp", "W3Schools — Python Variables" %} + {% Blog "https://www.geeksforgeeks.org/python-variables/", "Python Variables - Geeks for Geeks" %} + {% Blog "https://www.w3schools.com/python/python_datatypes.asp", "Python Data Types" %} + {% Blog "https://realpython.com/python-data-types/", "Basic Data Types in Python" %} +{% endresources %} + + + + + + diff --git a/src/roadmaps/python/content/100-python-basics/102-conditionals.md b/src/roadmaps/python/content/100-python-basics/102-conditionals.md new file mode 100644 index 000000000..9eaa10e73 --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/102-conditionals.md @@ -0,0 +1,11 @@ +# Conditionals + +Conditional Statements in Python perform different actions depending on whether a specific condition evaluates to true or false. Conditional Statements are handled by IF-ELIF-ELSE statements and MATCH-CASE statements in Python. + +{% resources %} + {% Blog "https://www.guru99.com/if-loop-python-conditional-structures.html", "Python Conditional Statements: IF…Else, ELIF & Switch Case" %} + {% Blog "https://realpython.com/python-conditional-statements/", "Conditional Statements in Python" %} + {% Blog "https://learnpython.com/blog/python-match-case-statement/", "How to use a match statement in Python" %} +{% endresources %} + + diff --git a/src/roadmaps/python/content/100-python-basics/103-typecasting-exceptions.md b/src/roadmaps/python/content/100-python-basics/103-typecasting-exceptions.md new file mode 100644 index 000000000..ddfa376cc --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/103-typecasting-exceptions.md @@ -0,0 +1,14 @@ +## Typecasting + +The process of converting the value of one data type (integer, string, float, etc.) to another data type is called type conversion. Python has two types of type conversion: Implicit and Explicit. + +{% resources %} + {% Blog "https://www.programiz.com/python-programming/type-conversion-and-casting", "Type Conversion and Casting" %} + {% Blog "https://www.geeksforgeeks.org/type-casting-in-python-implicit-and-explicit-with-examples/", "Type Casting in Python with Examples" %} + {% Blog "https://realpython.com/python-exceptions/", "Python Exceptions: An Introduction" %} + {% Official "https://docs.python.org/3/tutorial/errors.html", "Errors and Exceptions" %} + {% Blog "https://www.programiz.com/python-programming/exception-handling", "Python Exception Handling" %} + {% Blog "https://www.w3schools.com/python/python_try_except.asp", "Python Try Except" %} +{% endresources %} + + diff --git a/src/roadmaps/python/content/100-python-basics/104-functions.md b/src/roadmaps/python/content/100-python-basics/104-functions.md new file mode 100644 index 000000000..82892b121 --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/104-functions.md @@ -0,0 +1,12 @@ +# Functions + +In programming, a function is a reusable block of code that executes a certain functionality when it is called. Functions are integral parts of every programming language because they help make your code more modular and reusable. + +In Python, you define a function with the `def` keyword, then write the function identifier (name) followed by parentheses and a colon. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/python-functions-define-and-call-a-function/", "Python Functions – How to Define and Call a Function" %} + {% Blog "https://www.w3schools.com/python/python_functions.asp", "Python Functions - W3Schools" %} + {% Blog "https://www.geeksforgeeks.org/python-functions/", "Python Functions" %} + {% Official "https://docs.python.org/3/library/functions.html", "Built-in Functions in Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/100-python-basics/105-lists-tuples-sets-dictionaries.md b/src/roadmaps/python/content/100-python-basics/105-lists-tuples-sets-dictionaries.md new file mode 100644 index 000000000..df317bc66 --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/105-lists-tuples-sets-dictionaries.md @@ -0,0 +1,19 @@ +# Lists, Tuples, Sets, and Dictionaries + +**Lists:** are just like dynamic sized arrays, declared in other languages (vector in C++ and ArrayList in Java). Lists need not be homogeneous always which makes it the most powerful tool in Python. + +**Tuple:** A Tuple is a collection of Python objects separated by commas. In some ways, a tuple is similar to a list in terms of indexing, nested objects, and repetition but a tuple is immutable, unlike lists that are mutable. + +**Set:** A Set is an unordered collection data type that is iterable, mutable, and has no duplicate elements. Python’s set class represents the mathematical notion of a set. + +**Dictionary:** In python, Dictionary is an ordered (since Py 3.7) [unordered (Py 3.6 & prior)] collection of data values, used to store data values like a map, which, unlike other Data Types that hold only a single value as an element, Dictionary holds key:value pair. Key-value is provided in the dictionary to make it more optimized. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=n0krwG38SHI", "Difference Between List, Tuple, Set and Dictionary in Python" %} + {% Blog "https://www.geeksforgeeks.org/differences-and-applications-of-list-tuple-set-and-dictionary-in-python/", "Differences and Applications of List, Tuple, Set and Dictionary in Python" %} + {% Blog "https://jerrynsh.com/tuples-vs-lists-vs-sets-in-python/", "Tuples vs. Lists vs. Sets in Python" %} +{% endresources %} + + + + diff --git a/src/roadmaps/python/content/100-python-basics/106-string-methods.md b/src/roadmaps/python/content/100-python-basics/106-string-methods.md new file mode 100644 index 000000000..ed607dd3c --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/106-string-methods.md @@ -0,0 +1,11 @@ +# String Methods + +Python does not have a character data type, a single character is simply a string with a length of 1. Square bracket can be used to access elements of the string. +There are methods which can be used on a string to best utilize it's wide range of functionalities. +Below Given resources can be utilised to learn more about them. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=Ctqi5Y4X-jA&t=11s", "Practical String Methods applications" %} + {% Blog "https://www.w3schools.com/python/python_ref_string.asp", "Comprehensive Study of String methods" %} + {% Blog "https://www.geeksforgeeks.org/string-slicing-in-python/", "String Slicing in Python" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/python/content/100-python-basics/index.md b/src/roadmaps/python/content/100-python-basics/index.md new file mode 100644 index 000000000..08e34e462 --- /dev/null +++ b/src/roadmaps/python/content/100-python-basics/index.md @@ -0,0 +1,11 @@ +# Python + +Python is a high-level, interpreted, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation. Python is dynamically-typed and garbage-collected. + +{% resources %} + {% Official "https://www.python.org/", "Official Website: Python" %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-write-your-first-python-3-program", "Tutorial Series: How to Code in Python" %} + {% Blog "https://en.wikipedia.org/wiki/Python_(programming_language)", "Python Wikipedia" %} +{% endresources %} + + diff --git a/src/roadmaps/python/content/101-data-structures-and-algorithms/100-arrays-linked-lists.md b/src/roadmaps/python/content/101-data-structures-and-algorithms/100-arrays-linked-lists.md new file mode 100644 index 000000000..3f1f2496f --- /dev/null +++ b/src/roadmaps/python/content/101-data-structures-and-algorithms/100-arrays-linked-lists.md @@ -0,0 +1,17 @@ +# Arrays and Linked lists + +Arrays store elements in contiguous memory locations, resulting in easily calculable addresses for the elements stored and this allows faster access to an element at a specific index. Linked lists are less rigid in their storage structure and elements are usually not stored in contiguous locations, hence they need to be stored with additional tags giving a reference to the next element. This difference in the data storage scheme decides which data structure would be more suitable for a given situation. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/linked-list-vs-array/", "Linked Lists vs Arrays" %} + {% Blog "https://towardsdatascience.com/a-complete-guide-to-linked-lists-in-python-c52b6cb005", "A Complete Guide to Linked Lists in Python" %} + {% Blog "https://www.freecodecamp.org/news/python-array-tutorial-define-index-methods/", "Python Array Tutorial" %} + {% Blog "https://www.geeksforgeeks.org/python-arrays/", "Python Arrays" %} + {% Blog "https://www.edureka.co/blog/arrays-in-python/", "Arrays in Python" %} + {% Blog "https://www.youtube.com/watch?v=QJNwK2uJyGs", "Array Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.youtube.com/watch?v=odW9FU8jPRQ", "Linked List Data Structure | Illustrated Data Structures" %} +{% endresources %} + + + + diff --git a/src/roadmaps/python/content/101-data-structures-and-algorithms/101-heaps-stacks-queues.md b/src/roadmaps/python/content/101-data-structures-and-algorithms/101-heaps-stacks-queues.md new file mode 100644 index 000000000..a42e3fc33 --- /dev/null +++ b/src/roadmaps/python/content/101-data-structures-and-algorithms/101-heaps-stacks-queues.md @@ -0,0 +1,19 @@ +# Heaps Stacks and Queues + +**Stacks:** Operations are performed LIFO (last in, first out), which means that the last element added will be the first one removed. A stack can be implemented using an array or a linked list. If the stack runs out of memory, it’s called a stack overflow. + +**Queue:** Operations are performed FIFO (first in, first out), which means that the first element added will be the first one removed. A queue can be implemented using an array. + +**Heap:** A tree-based data structure in which the value of a parent node is ordered in a certain way with respect to the value of its child node(s). A heap can be either a min heap (the value of a parent node is less than or equal to the value of its children) or a max heap (the value of a parent node is greater than or equal to the value of its children). + +{% resources %} + {% Blog "https://stephanosterburg.gitbook.io/scrapbook/coding/coding-interview/data-structures/heaps-stacks-queues", "Heaps, Stacks, Queues" %} + {% Blog "https://www.youtube.com/watch?v=I5lq6sCuABE", "Stack Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.youtube.com/watch?v=mDCi1lXd9hc", "Queue Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.geeksforgeeks.org/stack-in-python/", "Stack in Python" %} + {% Blog "https://realpython.com/how-to-implement-python-stack/", "How to Implement Python Stack?" %} + {% Blog "https://www.geeksforgeeks.org/queue-in-python/", "Queue in Python" %} + {% Blog "https://realpython.com/queue-in-python/", "Python Stacks, Queues, and Priority Queues in Practice" %} + {% Blog "https://www.educative.io/answers/heap-implementation-in-python", "Heap Implementation in Python" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/101-data-structures-and-algorithms/102-hash-tables.md b/src/roadmaps/python/content/101-data-structures-and-algorithms/102-hash-tables.md new file mode 100644 index 000000000..574b93096 --- /dev/null +++ b/src/roadmaps/python/content/101-data-structures-and-algorithms/102-hash-tables.md @@ -0,0 +1,10 @@ +# Hash Tables + +Hash Table, Map, HashMap, Dictionary or Associative are all the names of the same data structure. It is a data structure that implements a set abstract data type, a structure that can map keys to values. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=jalSiaIi8j4", "Hash Table Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.edureka.co/blog/hash-tables-and-hashmaps-in-python/", "Hash Tables and Hashmaps in Python" %} + {% Blog "https://realpython.com/python-hash-table/", "Build a Hash Table in Python" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/101-data-structures-and-algorithms/103-binary-search-trees.md b/src/roadmaps/python/content/101-data-structures-and-algorithms/103-binary-search-trees.md new file mode 100644 index 000000000..dd79a50d2 --- /dev/null +++ b/src/roadmaps/python/content/101-data-structures-and-algorithms/103-binary-search-trees.md @@ -0,0 +1,11 @@ +# Binary Search Trees + +A binary search tree, also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and less than the ones in its right subtree + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=S2W3SXGPVyU", "Tree Data Structure | Illustrated Data Structures" %} + {% Blog "https://www.section.io/engineering-education/implementing-binary-search-tree-using-python/", "How to Implement Binary Search Tree in Python" %} + {% Blog "https://www.geeksforgeeks.org/binary-search-tree-data-structure/?ref=gcse", "Problem Set" %} +{% endresources %} + + diff --git a/src/roadmaps/python/content/101-data-structures-and-algorithms/104-recursion.md b/src/roadmaps/python/content/101-data-structures-and-algorithms/104-recursion.md new file mode 100644 index 000000000..ea60c904a --- /dev/null +++ b/src/roadmaps/python/content/101-data-structures-and-algorithms/104-recursion.md @@ -0,0 +1,9 @@ +# Recursion + +Recursion is a method of solving a computational problem where the solution depends on solutions to smaller instances of the same problem. Recursion solves such recursive problems by using functions that call themselves from within their own code. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/recursion/", "Recursion in Python" %} + {% Blog "https://realpython.com/python-recursion/", "Recursion in Python: An Introduction" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/101-data-structures-and-algorithms/105-sorting-algorithms.md b/src/roadmaps/python/content/101-data-structures-and-algorithms/105-sorting-algorithms.md new file mode 100644 index 000000000..12f00d855 --- /dev/null +++ b/src/roadmaps/python/content/101-data-structures-and-algorithms/105-sorting-algorithms.md @@ -0,0 +1,10 @@ +# Sorting Algorithms + +Sorting refers to arranging data in a particular format. Sorting algorithm specifies the way to arrange data in a particular order. Most common orders are in numerical or lexicographical order. + +The importance of sorting lies in the fact that data searching can be optimized to a very high level, if data is stored in a sorted manner. + +{% resources %} + {% Blog "https://realpython.com/sorting-algorithms-python/", "Sorting Algorithms in Python" %} + {% Blog "https://www.tutorialspoint.com/python_data_structure/python_sorting_algorithms.htm", "Python - Sorting Algorithms" %} +{% endresources %} diff --git a/src/roadmaps/python/content/101-data-structures-and-algorithms/index.md b/src/roadmaps/python/content/101-data-structures-and-algorithms/index.md new file mode 100644 index 000000000..5dbe79ee0 --- /dev/null +++ b/src/roadmaps/python/content/101-data-structures-and-algorithms/index.md @@ -0,0 +1,8 @@ +# Data Structures and Algorithms + +A data structure is a named location that can be used to store and organize data. And, an algorithm is a collection of steps to solve a particular problem. Learning data structures and algorithms allow us to write efficient and optimized computer programs. + +{% resources %} + {% Blog "https://www.programiz.com/dsa", "Learn DS & Algorithms" %} + {% Blog "https://www.youtube.com/playlist?list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY", "Data Structures Illustrated" %} +{% endresources %} diff --git a/src/roadmaps/python/content/102-python-advanced-topics/100-oop/100-methods-dunder.md b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/100-methods-dunder.md new file mode 100644 index 000000000..e2a81ce7e --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/100-methods-dunder.md @@ -0,0 +1,15 @@ +# Methods and Dunder + +A method in python is somewhat similar to a function, except it is associated with object/classes. Methods in python are very similar to functions except for two major differences. + +* The method is implicitly used for an object for which it is called. +* The method is accessible to data that is contained within the class. + +Dunder or magic methods in Python are the methods having two prefix and suffix underscores in the method name. Dunder here means “Double Under (Underscores)”. These are commonly used for operator overloading. Few examples for magic methods are: __init__, __add__, __len__, __repr__ etc. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/difference-between-method-and-function-in-python", "Method vs Function in Python" %} + {% Blog "https://www.geeksforgeeks.org/dunder-magic-methods-python/", "Dunder or magic methods in Python" %} + {% Blog "https://www.tutorialsteacher.com/python/magic-methods-in-python", "Python - Magic or Dunder Methods" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/102-python-advanced-topics/100-oop/101-inheritance.md b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/101-inheritance.md new file mode 100644 index 000000000..2e6913b25 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/101-inheritance.md @@ -0,0 +1,9 @@ +# Inheritance + +Inheritance allows us to define a class that inherits all the methods and properties from another class. + +{% resources %} + {% Blog "https://www.w3schools.com/python/python_inheritance.asp", "Python Inheritance" %} + {% Blog "https://www.javatpoint.com/inheritance-in-python", "Inheritance in Python" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/102-python-advanced-topics/100-oop/102-classes.md b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/102-classes.md new file mode 100644 index 000000000..e443c76a5 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/102-classes.md @@ -0,0 +1,10 @@ +# Classes + +A class is a user-defined blueprint or prototype from which objects are created. Classes provide a means of bundling data and functionality together. Creating a new class creates a new type of object, allowing new instances of that type to be made. Each class instance can have attributes attached to it for maintaining its state. Class instances can also have methods (defined by their class) for modifying their state. + +{% resources %} + {% Official "https://docs.python.org/3/tutorial/classes.html", "Classes in Python" %} + {% Blog "https://www.geeksforgeeks.org/python-classes-and-objects/", "Python Classes and Objects" %} + {% Blog "https://www.w3schools.com/python/python_classes.asp", "Python Classes and Objects" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/102-python-advanced-topics/100-oop/index.md b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/index.md new file mode 100644 index 000000000..e740b8c41 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/100-oop/index.md @@ -0,0 +1,10 @@ +# OOP + +In Python, object-oriented Programming (OOPs) is a programming paradigm that uses objects and classes in programming. It aims to implement real-world entities like inheritance, polymorphisms, encapsulation, etc. in the programming. The main concept of OOPs is to bind the data and the functions that work on that together as a single unit so that no other part of the code can access this data. + +{% resources %} + {% Blog "https://realpython.com/python3-object-oriented-programming/", "Object Oriented Programming in Python" %} + {% Blog "https://www.geeksforgeeks.org/python-oops-concepts/", "Python OOP Concepts" %} + {% Blog "https://www.youtube.com/watch?v=-pEs-Bss8Wc/", "Object Oriented Programming (OOP) In Python - Beginner Crash Course" %} + {% Blog "https://www.youtube.com/watch?v=Ej_02ICOIgs", "OOP in Python One Shot" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/python/content/102-python-advanced-topics/101-regular-expressions.md b/src/roadmaps/python/content/102-python-advanced-topics/101-regular-expressions.md new file mode 100644 index 000000000..1eaf56477 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/101-regular-expressions.md @@ -0,0 +1,10 @@ +# Regular Expressions + +A regular expression is a sequence of characters that specifies a search pattern in text. Usually such patterns are used by string-searching algorithms for "find" or "find and replace" operations on strings, or for input validation. + +{% resources %} + {% Official "https://docs.python.org/3/library/re.html", "Regular Expressions in Python" %} + {% Blog "https://developers.google.com/edu/python/regular-expressions", "Python Regular Expressions" %} + {% Blog "https://www.tutorialspoint.com/python/python_reg_expressions.htm", "Python - Regular Expressions" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/102-python-advanced-topics/102-decorators.md b/src/roadmaps/python/content/102-python-advanced-topics/102-decorators.md new file mode 100644 index 000000000..1eabd57da --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/102-decorators.md @@ -0,0 +1,9 @@ +# Decorators + +decorator is a design pattern in Python that allows a user to add new functionality to an existing object without modifying its structure. Decorators are usually called before the definition of a function you want to decorate. + +{% resources %} + {% Blog "https://www.datacamp.com/tutorial/decorators-python", "Python Decorators" %} + {% Blog "https://www.geeksforgeeks.org/decorators-in-python/", "Decorators in Python" %} + {% Blog "https://www.youtube.com/watch?v=FXUUSfJO_J4", "Decorators in Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/102-python-advanced-topics/103-lambdas.md b/src/roadmaps/python/content/102-python-advanced-topics/103-lambdas.md new file mode 100644 index 000000000..afc8a80c2 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/103-lambdas.md @@ -0,0 +1,9 @@ +# Lambdas + +Python Lambda Functions are anonymous function means that the function is without a name. As we already know that the def keyword is used to define a normal function in Python. Similarly, the lambda keyword is used to define an anonymous function in Python. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/python-lambda-anonymous-functions-filter-map-reduce/", "Python Lambda Functions" %} + {% Blog "https://www.w3schools.com/python/python_lambda.asp", "Lambdas in Python" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/102-python-advanced-topics/104-iterators.md b/src/roadmaps/python/content/102-python-advanced-topics/104-iterators.md new file mode 100644 index 000000000..c451f14dd --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/104-iterators.md @@ -0,0 +1,8 @@ +# Iterators + +An iterator is an object that contains a countable number of values. An iterator is an object that can be iterated upon, meaning that you can traverse through all the values. Technically, in Python, an iterator is an object which implements the iterator protocol, which consist of the methods __iter__() and __next__() . + +{% resources %} + {% Blog "https://www.w3schools.com/python/python_iterators.asp", "Iterators in Python" %} + {% Blog "https://www.geeksforgeeks.org/iterators-in-python/", "Python Iterators" %} +{% endresources %} diff --git a/src/roadmaps/python/content/102-python-advanced-topics/105-modules/100-builtin-modules.md b/src/roadmaps/python/content/102-python-advanced-topics/105-modules/100-builtin-modules.md new file mode 100644 index 000000000..e532fc947 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/105-modules/100-builtin-modules.md @@ -0,0 +1,9 @@ +# Builtin Modules + +Python interpreter has a number of built-in functions. They are always available for use in every interpreter session. Many of them have been discussed in previously. For example `print()` and `input()` for I/O, number conversion functions (`int()`, `float()`, `complex()`), data type conversions (`list()`, `tuple()`, `set()`) etc. + +{% resources %} + {% Blog "https://www.digitalocean.com/community/tutorials/python-modules", "Python Modules" %} + {% Blog "https://www.knowledgehut.com/tutorials/python-tutorial/python-built-in-modules", "Python - Built-In Modules" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/102-python-advanced-topics/105-modules/101-custom-modules.md b/src/roadmaps/python/content/102-python-advanced-topics/105-modules/101-custom-modules.md new file mode 100644 index 000000000..78b4e4ae3 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/105-modules/101-custom-modules.md @@ -0,0 +1,9 @@ +# Custom Modules + +Modules refer to a file containing Python statements and definitions. A file containing Python code, for example: `example.py`, is called a module, and its module name would be example. We use modules to break down large programs into small manageable and organized files. Furthermore, modules provide reusability of code. + +{% resources %} + {% Official "https://docs.python.org/3/tutorial/modules.html", "Python Modules" %} + {% Blog "https://www.geeksforgeeks.org/python-modules/", "Python Modules - Geeks for Geeks" %} + {% Blog "https://www.programiz.com/python-programming/modules", "Modules in Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/102-python-advanced-topics/105-modules/index.md b/src/roadmaps/python/content/102-python-advanced-topics/105-modules/index.md new file mode 100644 index 000000000..868944ff7 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/105-modules/index.md @@ -0,0 +1,9 @@ +# Modules + +Modules refer to a file containing Python statements and definitions. A file containing Python code, for example: `example.py`, is called a module, and its module name would be example. We use modules to break down large programs into small manageable and organized files. Furthermore, modules provide reusability of code. + +{% resources %} + {% Official "https://docs.python.org/3/tutorial/modules.html", "Python Modules" %} + {% Blog "https://www.geeksforgeeks.org/python-modules/", "Python Modules - Geeks for Geeks" %} + {% Blog "https://www.programiz.com/python-programming/modules", "Modules in Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/102-python-advanced-topics/index.md b/src/roadmaps/python/content/102-python-advanced-topics/index.md new file mode 100644 index 000000000..2ceb7d585 --- /dev/null +++ b/src/roadmaps/python/content/102-python-advanced-topics/index.md @@ -0,0 +1,3 @@ +# Advanced Topics + +Now that you have covered the basics of Python, let's move on to some advanced topics. In this section, you will be learning about things like OOP, Lambdas, Decorators, Iterators, Modules, and more. diff --git a/src/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md b/src/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md new file mode 100644 index 000000000..560faabdf --- /dev/null +++ b/src/roadmaps/python/content/103-version-control-systems/100-basic-git-usage.md @@ -0,0 +1,9 @@ +# Git + +[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=zbKdDsNNOhg", "Version Control System Introduction" %} + {% Blog "https://www.youtube.com/watch?v=SWYqp7iY_Tc", "Git & GitHub Crash Course For Beginners" %} + {% Blog "https://youtu.be/Y9XZQO1n_7c?t=21", "Learn Git in 20 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/python/content/103-version-control-systems/index.md b/src/roadmaps/python/content/103-version-control-systems/index.md new file mode 100644 index 000000000..472bfb5e6 --- /dev/null +++ b/src/roadmaps/python/content/103-version-control-systems/index.md @@ -0,0 +1,9 @@ +# Version Control Systems + +Version control systems allow you to track changes to your codebase/files over time. They allow you to go back to some previous version of the codebase without any issues. Also, they help in collaborating with people working on the same code – if you’ve ever collaborated with other people on a project, you might already know the frustration of copying and merging the changes from someone else into your codebase; version control systems allow you to get rid of this issue. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=zbKdDsNNOhg", "Version Control System Introduction" %} + {% Blog "https://www.youtube.com/watch?v=SWYqp7iY_Tc", "Git & GitHub Crash Course For Beginners" %} + {% Blog "https://youtu.be/Y9XZQO1n_7c?t=21", "Learn Git in 20 Minutes" %} +{% endresources %} diff --git a/src/roadmaps/python/content/104-repo-hosting-services/100-github.md b/src/roadmaps/python/content/104-repo-hosting-services/100-github.md new file mode 100644 index 000000000..4d5e7439a --- /dev/null +++ b/src/roadmaps/python/content/104-repo-hosting-services/100-github.md @@ -0,0 +1,11 @@ +# GitHub + +[GitHub](https://github.com) 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. + +{% resources %} + {% Blog "https://docs.github.com/en/get-started/quickstart/hello-world", "GitHub: Quickstart" %} + {% Blog "https://www.youtube.com/watch?v=w3jLJU7DT5E", "What is GitHub?" %} + {% Blog "https://www.youtube.com/watch?v=wpISo9TNjfU", "Git vs. GitHub: Whats the difference?" %} + {% Blog "https://www.youtube.com/watch?v=RGOj5yH7evk", "Git and GitHub for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=eulnSXkhE7I", "Git and GitHub - CS50 Beyond 2019" %} +{% endresources %} diff --git a/src/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md b/src/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md new file mode 100644 index 000000000..ce1a3d9d9 --- /dev/null +++ b/src/roadmaps/python/content/104-repo-hosting-services/101-gitlab.md @@ -0,0 +1,8 @@ +# GitLab + +[GitLab](https://gitlab.com) 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. + +{% resources %} + {% Blog "https://gitlab.com/", "GitLab Website" %} + {% Blog "https://docs.gitlab.com/", "GitLab Documentation" %} +{% endresources %} diff --git a/src/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md b/src/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md new file mode 100644 index 000000000..48f0cd507 --- /dev/null +++ b/src/roadmaps/python/content/104-repo-hosting-services/102-bitbucket.md @@ -0,0 +1,8 @@ +# BitBucket + +[BitBucket](https://bitbucket.com) 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. + +{% resources %} + {% Blog "https://bitbucket.com/", "BitBucket Website" %} + {% Blog "https://bitbucket.org/product/guides", "How to use BitBucket?" %} +{% endresources %} diff --git a/src/roadmaps/python/content/104-repo-hosting-services/index.md b/src/roadmaps/python/content/104-repo-hosting-services/index.md new file mode 100644 index 000000000..67e7a5a9b --- /dev/null +++ b/src/roadmaps/python/content/104-repo-hosting-services/index.md @@ -0,0 +1,9 @@ +# Repo Hosting Services + +There are different repository hosting services with the most famous one being GitHub, GitLab and BitBucket. I would recommend creating an account on GitHub because that is where most of the OpenSource work is done and most of the developers are. + +{% resources %} + {% Blog "https://github.com", "GitHub: Where the world builds software" %} + {% Blog "https://gitlab.com", "GitLab: Iterate faster, innovate together" %} + {% Blog "https://bitbucket.com", "BitBucket: The Git solution for professional teams" %} +{% endresources %} diff --git a/src/roadmaps/python/content/105-python-package-managers/100-pypi.md b/src/roadmaps/python/content/105-python-package-managers/100-pypi.md new file mode 100644 index 000000000..2886f25ac --- /dev/null +++ b/src/roadmaps/python/content/105-python-package-managers/100-pypi.md @@ -0,0 +1,10 @@ +# PyPI + +PyPI, typically pronounced pie-pee-eye, is a repository containing several hundred thousand packages. These range from trivial Hello, World implementations to advanced deep learning libraries. + +{% resources %} + {% Official "https://pypi.org/", "PyPI Official Website" %} + {% Blog "https://www.youtube.com/watch?v=bPSfNKvhooA", "Getting Started with Pip and PyPI in Python" %} + {% Blog "https://realpython.com/pypi-publish-python-package/", "How to Publish an Open-Source Python Package to PyPI" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/105-python-package-managers/101-pip.md b/src/roadmaps/python/content/105-python-package-managers/101-pip.md new file mode 100644 index 000000000..56957a1f3 --- /dev/null +++ b/src/roadmaps/python/content/105-python-package-managers/101-pip.md @@ -0,0 +1,9 @@ +# Pip + +The standard package manager for Python is pip. It allows you to install and manage packages that aren’t part of the Python standard library. + +{% resources %} + {% Blog "https://realpython.com/what-is-pip/", "Using Pythons pip to Manage Your Projects Dependencies" %} + {% Blog "https://www.w3schools.com/python/python_pip.asp", "Python PIP Introduction" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/105-python-package-managers/index.md b/src/roadmaps/python/content/105-python-package-managers/index.md new file mode 100644 index 000000000..c9a15db4f --- /dev/null +++ b/src/roadmaps/python/content/105-python-package-managers/index.md @@ -0,0 +1,8 @@ +# Package Managers + +Package managers allow you to manage the dependencies (external code written by you or someone else) that your project needs to work correctly. + +`PyPI` and `Pip` are the most common contenders but here are some other options available as well: + + - [**Poetry**](https://python-poetry.org/) : Manages dependencies via isolation + - [**PIPX**](https://github.com/pypa/pipx) : Isolation-based app deployment, so you don't have to affect the system or user PIP libraries. It enables you to try individual python CLI tools without affecting other dependencies. diff --git a/src/roadmaps/python/content/106-python-frameworks/100-synchronous/100-django.md b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/100-django.md new file mode 100644 index 000000000..0c573e5ee --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/100-django.md @@ -0,0 +1,10 @@ +# Django + +Django is a free and open-source, Python-based web framework that follows the model–template–views architectural pattern. It is maintained by the Django Software Foundation, an independent organization established in the US as a 501 non-profit + +{% resources %} + {% Official "https://www.djangoproject.com/", "Django Official Website" %} + {% Blog "https://www.djangoproject.com/start/", "Official Getting Started Guide" %} + {% Blog "https://www.youtube.com/watch?v=rHux0gMZ3Eg", "Python Django Tutorial for Beginners" %} + {% Blog "https://stackoverflow.com/questions/58548089/django-is-synchronous-or-asynchronous", "Is Django synchronous or asynchronous?" %} +{% endresources %} diff --git a/src/roadmaps/python/content/106-python-frameworks/100-synchronous/101-flask.md b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/101-flask.md new file mode 100644 index 000000000..48cb34228 --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/101-flask.md @@ -0,0 +1,8 @@ +# Flask + +Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions. + +{% resources %} + {% Official "https://flask.palletsprojects.com/", "Flask - Official Website" %} + {% Official "https://flask.palletsprojects.com/en/2.2.x/tutorial/", "Flask - Official Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/python/content/106-python-frameworks/100-synchronous/102-pyramid.md b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/102-pyramid.md new file mode 100644 index 000000000..40ebfc366 --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/102-pyramid.md @@ -0,0 +1,10 @@ +# Pyramid + +Pyramid is a general, open source, web application development framework built in python. It allows python developer to create web applications with ease. Pyramid is backed by the enterprise knowledge Management System KARL (a George Soros project). + +{% resources %} + {% Official "https://trypyramid.com/", "Pyramid - Official Website" %} + {% Blog "https://docs.pyramid.com/en/latest/", "Pyramid Documentation" %} + {% Blog "https://www.tutorialspoint.com/python_web_development_libraries/python_web_development_libraries_pyramid_framework.htm", "Pyramid Framework Introduction" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md new file mode 100644 index 000000000..a852f449a --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/100-synchronous/index.md @@ -0,0 +1,7 @@ +# Synchronous Frameworks + +Synchronous frameworks in python handle the flow of data in a synchronous manner. On a s̲y̲n̲c̲h̲r̲o̲n̲o̲u̲s̲ request, you make the request and stop executing your program until you get a response from the HTTP server (or an error if the server can't be reached, or a timeout if the sever is taking way, way too long to reply) The interpreter is blocked until the request is completed (until you got a definitive answer of what happened with the request: did it go well? was there an error? a timeout?... ). + +{% resources %} + {% Blog "https://blog.miguelgrinberg.com/post/sync-vs-async-python-what-is-the-difference", "Sync vs. Async Python: What is the Difference?" %} +{% endresources %} diff --git a/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/100-gevent.md b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/100-gevent.md new file mode 100644 index 000000000..dfe14d5a5 --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/100-gevent.md @@ -0,0 +1,10 @@ +# gevent + +gevent is a Python library that provides a high-level interface to the event loop. +It is based on non-blocking IO (libevent/libev) and lightweight greenlets. Non-blocking IO means requests waiting for network IO won't block other requests; greenlets mean we can continue to write code in synchronous style. + +{% resources %} + {% Official "http://www.gevent.org/", "gevent — Official Website" %} + {% Blog "https://github.com/gevent/gevent", "GitHub Repository" %} + {% Blog "https://sdiehl.github.io/gevent-tutorial/", "gevent For the Working Python Developer" %} +{% endresources %} diff --git a/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/101-aiohttp.md b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/101-aiohttp.md new file mode 100644 index 000000000..55ac29c07 --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/101-aiohttp.md @@ -0,0 +1,12 @@ +# AIOHTTP + +aiohttp is a Python 3.5+ library that provides a simple and powerful asynchronous HTTP client and server implementation. + +{% resources %} + {% Official "https://docs.aiohttp.org/en/stable/", "Official Docs" %} + {% Blog "https://www.youtube.com/watch?v=nFn4_nA_yk8", "Python Asyncio, Requests, Aiohttp | Make faster API Calls" %} + {% Blog "https://tutorialedge.net/python/create-rest-api-python-aiohttp/", "Creating a RESTful API with Python and aiohttp" %} +{% endresources %} + + + diff --git a/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/102-tornado.md b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/102-tornado.md new file mode 100644 index 000000000..c6dad99f7 --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/102-tornado.md @@ -0,0 +1,11 @@ +# Tornado + +Tornado is a scalable, non-blocking web server and web application framework written in Python. It was developed for use by FriendFeed; the company was acquired by Facebook in 2009 and Tornado was open-sourced soon after. + +{% resources %} + {% Official "https://www.tornadoweb.org/", "Tornado — Official Website" %} + {% Blog "https://phrase.com/blog/posts/tornado-web-framework-i18n/", "A Step-by-Step Tutorial on Python Tornado" %} + {% Blog "https://www.youtube.com/watch?v=-gJ21qzpieA", "Tornado Python Framework" %} +{% endresources %} + + diff --git a/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/103-sanic.md b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/103-sanic.md new file mode 100644 index 000000000..ca334e1bd --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/103-sanic.md @@ -0,0 +1,9 @@ +# Sanic + +Sanic is a Python 3.7+ web server and web framework that's written to go fast. It allows the usage of the async/await syntax added in Python 3.5, which makes your code non-blocking and speedy. + +{% resources %} + {% Official "https://sanic.dev/en/", "Sanic Official Website" %} + {% Blog "https://www.geeksforgeeks.org/introduction-to-sanic-web-framework-python/", "Introduction to Sanic Web Framework – Python" %} +{% endresources %} + diff --git a/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md new file mode 100644 index 000000000..c6d5ce9ea --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/101-asynchronous/index.md @@ -0,0 +1,7 @@ +# Asynchronous +Asynchronous programming is a type of parallel programming in which a unit of work is allowed to run separately from the primary application thread. When the work is complete, it notifies the main thread about completion or failure of the worker thread. +This style is mostly concerned with the asynchronous execution of tasks. Python has several asynchronous frameworks that are used to implement asynchronous programming. + +{% resources %} + {% Blog "https://geekflare.com/python-asynchronous-web-frameworks/", "Top 5 Asynchronous Web Frameworks for Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/106-python-frameworks/index.md b/src/roadmaps/python/content/106-python-frameworks/index.md new file mode 100644 index 000000000..763a9d8e0 --- /dev/null +++ b/src/roadmaps/python/content/106-python-frameworks/index.md @@ -0,0 +1,5 @@ +# Python Frameworks + +Frameworks automate the common implementation of common solutions which gives the flexibility to the users to focus on the application logic instead of the basic routine processes. + +Frameworks make the life of web developers easier by giving them a structure for app development. They provide common patterns in a web application that are fast, reliable and easily maintainable. diff --git a/src/roadmaps/python/content/107-python-testing/100-unittest-pyunit.md b/src/roadmaps/python/content/107-python-testing/100-unittest-pyunit.md new file mode 100644 index 000000000..a81c1d343 --- /dev/null +++ b/src/roadmaps/python/content/107-python-testing/100-unittest-pyunit.md @@ -0,0 +1,9 @@ +# PyUnit / Unittest + +PyUnit is an easy way to create unit testing programs and UnitTests with Python. (Note that docs.python.org uses the name "unittest", which is also the module name.) + +{% resources %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-use-unittest-to-write-a-test-case-for-a-function-in-python", "How To Use unittest to Write a Test Case for a Function in Python" %} + {% Blog "https://wiki.python.org/moin/PyUnit%C2%A0", "PyUnit Docs" %} + {% Blog "https://machinelearningmastery.com/a-gentle-introduction-to-unit-testing-in-python/", "A Gentle Introduction to Unit Testing in Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/107-python-testing/101-pytest.md b/src/roadmaps/python/content/107-python-testing/101-pytest.md new file mode 100644 index 000000000..5a496ea36 --- /dev/null +++ b/src/roadmaps/python/content/107-python-testing/101-pytest.md @@ -0,0 +1,10 @@ +# pytest + +pytest is a mature full-featured Python testing tool that helps you write better programs. + +{% resources %} + {% Official "https://docs.pytest.org/", "Official Docs" %} + {% Blog "https://www.tutorialspoint.com/pytest/index.htm", "Pytest Tutorial" %} +{% endresources %} + + diff --git a/src/roadmaps/python/content/107-python-testing/102-doctest.md b/src/roadmaps/python/content/107-python-testing/102-doctest.md new file mode 100644 index 000000000..f7f8101b7 --- /dev/null +++ b/src/roadmaps/python/content/107-python-testing/102-doctest.md @@ -0,0 +1,8 @@ +# Doctest + +Python’s standard library comes equipped with a test framework module called doctest. The doctest module programmatically searches Python code for pieces of text within comments that look like interactive Python sessions. Then, the module executes those sessions to confirm that the code referenced by a doctest runs as expected. + +{% resources %} + {% Official "https://docs.python.org/3/library/doctest.html", "Doctest module reference" %} + {% Blog "https://www.digitalocean.com/community/tutorials/how-to-write-doctests-in-python", "How To Write Doctests in Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/107-python-testing/102-nose.md b/src/roadmaps/python/content/107-python-testing/102-nose.md new file mode 100644 index 000000000..1a07d54b8 --- /dev/null +++ b/src/roadmaps/python/content/107-python-testing/102-nose.md @@ -0,0 +1,8 @@ +# Nose + +Nose is another opensource testing framework that extends `unittest` to provide a more flexible testing framework. + +{% resources %} + {% Blog "https://nose.readthedocs.io/en/latest/", "Introduction to Nose" %} + {% Blog "https://www.lambdatest.com/blog/selenium-python-nose-tutorial/", "Getting Started With Nose In Python" %} +{% endresources %} diff --git a/src/roadmaps/python/content/107-python-testing/index.md b/src/roadmaps/python/content/107-python-testing/index.md new file mode 100644 index 000000000..5eaf2bfb6 --- /dev/null +++ b/src/roadmaps/python/content/107-python-testing/index.md @@ -0,0 +1,8 @@ +# Testing + +A key to building software that meets requirements without defects is testing. Software testing helps developers know they are building the right software. When tests are run as part of the development process (often with continuous integration tools), they build confidence and prevent regressions in the code. + +{% resources %} + {% Blog "https://www.guru99.com/software-testing-introduction-importance.html", "What is Software Testing?" %} + {% Blog "https://www.browserstack.com/guide/testing-pyramid-for-test-automation", "Testing Pyramid" %} +{% endresources %} diff --git a/src/roadmaps/python/python.md b/src/roadmaps/python/python.md new file mode 100644 index 000000000..15f78bb2b --- /dev/null +++ b/src/roadmaps/python/python.md @@ -0,0 +1,43 @@ +--- +jsonUrl: "/jsons/python.json" +pdfUrl: "/pdfs/python.pdf" +order: 7 +featuredTitle: "Python" +featuredDescription: "Step by step guide to becoming a Python Developer in 2022" +title: "Python Developer" +description: "Step by step guide to becoming a Python developer in 2022" +hasTopics: true +dimensions: + width: 992 + height: 1259.03 +seo: + title: "Learn to become a modern Python developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming an python developer" + - "python developer roadmap" + - "python roadmap" + - "become python developer" + - "python developer skills" + - "python skills test" + - "skills for python development" + - "learn python development" + - "what is python" + - "python quiz" + - "python interview questions" +relatedRoadmaps: + - "backend" + - "devops" + - "golang" + - "java" + - "javascript" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/qa/content/100-qa-basics/100-what-is-qa.md b/src/roadmaps/qa/content/100-qa-basics/100-what-is-qa.md new file mode 100644 index 000000000..8d1ca6b1d --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/100-what-is-qa.md @@ -0,0 +1,16 @@ +# What is Quality + +Quality is extremely hard to define, and it is simply stated: “Fit for use or purpose.” It is all about meeting the needs and expectations of customers concerning the functionality, design, reliability, durability, & price of the product. + +## What is Assurance + +Assurance is nothing but a positive declaration of a product or service, which gives confidence. It is certain of a product or a service which it will work well. It provides a guarantee that the product will work without any problems as per the expectations or requirements. + +## Quality Assurance in Software Testing + +Quality Assurance in Software Testing is defined as a procedure to ensure the quality of software products or services provided to the customers by an organization. Quality assurance focuses on improving the [software development process](https://www.guru99.com/software-development-life-cycle-tutorial.html) and making it efficient and effective per the quality standards defined for software products. Quality Assurance is popularly known as QA Testing. + +{% resources %} + {% Blog "https://www.guru99.com/all-about-quality-assurance.html", "What is Quality Assurance(QA)? Process, Methods, Examples" %} + {% Blog "https://www.ministryoftesting.com/dojo/lessons/what-do-software-testers-do-version-0-1", "What Do Software Testers Do?" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/101-tester-mindset.md b/src/roadmaps/qa/content/100-qa-basics/101-tester-mindset.md new file mode 100644 index 000000000..9eab4daba --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/101-tester-mindset.md @@ -0,0 +1,15 @@ +# Tester Mindset + +As a Quality Assurance Engineer, your job is to look for the weak spots in a product, whatever that product may be, and report them back, so that they can be fixed and thus, the product you are working on can be of the highest quality possible. + +To do your job successfully, you need to have a Testing mindset. What does that mean? Among other things, it means you have to think in the most destructive way possible and be as creative as possible. + +A few important points: +- Know the product you are testing +- Don’t be afraid to think outside of the box when you are testing it +- Don’t be afraid to misuse it as much as possible. + +{% resources %} + {% Blog "https://softwaretester.careers/the-software-testers-mindset/", "The Software Tester’s Mindset" %} + {% Blog "https://medium.com/@blakenorrish/how-to-think-like-a-tester-7a174ff6aeaf", "How to Think Like a Tester" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/100-white-box-testing.md b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/100-white-box-testing.md new file mode 100644 index 000000000..861c8668c --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/100-white-box-testing.md @@ -0,0 +1,7 @@ +# White Box Testing + +White Box Testing is a technique in which software’s internal structure, design, and coding are tested to verify input-output flow and improve design, usability, and security. In white box testing, code is visible to testers, so it is also called Clear box testing, Open box testing, Transparent box testing, Code-based testing, and Glass box testing. + +{% resources %} + {% Blog "https://www.guru99.com/white-box-testing.html", "White Box Testing – What is, Techniques, Example & Types" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/101-gray-box-testing.md b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/101-gray-box-testing.md new file mode 100644 index 000000000..c0eb8bba6 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/101-gray-box-testing.md @@ -0,0 +1,7 @@ +# Gray Box Testing + +Gray box testing is a software testing technique to test a software product or application with partial knowledge of the internal structure of the application. The purpose of gray box testing is to search and identify the defects due to improper code structure or improper use of applications. + +{% resources %} + {% Blog "https://www.guru99.com/grey-box-testing.html", "What is Gray Box Testing? Techniques & Example" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/102-black-box-testing.md b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/102-black-box-testing.md new file mode 100644 index 000000000..7570f9743 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/102-black-box-testing.md @@ -0,0 +1,7 @@ +# Black box testing + +Black Box Testing is a software testing method in which the functionalities of software applications are tested without having knowledge of internal code structure, implementation details and internal paths. Black Box Testing mainly focuses on input and output of software applications and it is entirely based on software requirements and specifications. It is also known as Behavioral Testing. + +{% resources %} + {% Blog "https://www.guru99.com/black-box-testing.html", "What is BLACK Box Testing? Techniques, Example & Types" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/index.md b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/index.md new file mode 100644 index 000000000..f67a7fa20 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/102-testing-approaches/index.md @@ -0,0 +1,14 @@ +# Testing Approaches + +Test approach has two techniques: +Proactive - An approach in which the test design process is initiated as early as possible in order to find and fix the defects before the build is created. +Reactive - An approach in which the testing is not started until after design and coding are completed. + +Three approaches are commonly used to implement functional testing: +- Black Box Testing +- White Box Testing +- Gray Box Testing + +{% resources %} + {% Blog "https://www.qualitylogic.com/knowledge-center/functional-testing-approaches-agile-considerations/", "Functional Testing Approaches and Agile Considerations" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/103-test-oracles.md b/src/roadmaps/qa/content/100-qa-basics/103-test-oracles.md new file mode 100644 index 000000000..3021a724e --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/103-test-oracles.md @@ -0,0 +1,7 @@ +# Test Oracles + +A test oracle is a mechanism; different from the program itself that can be used to check the correctness of the program's output for the test cases. Conceptually, we can consider testing a process in which the test cases are given to the test oracle and the program under testing. + +{% resources %} + {% Blog "https://ecomputernotes.com/software-engineering/what-are-test-oracles", "What are Test Oracles" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/104-test-prioritization.md b/src/roadmaps/qa/content/100-qa-basics/104-test-prioritization.md new file mode 100644 index 000000000..a7f5a5e99 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/104-test-prioritization.md @@ -0,0 +1,10 @@ +# Test Prioritization + +Test prioritization is ordering the test cases to be conducted eventually. Prioritizing test cases aids to meet two important constraints, namely time and budget in software testing to enhance the fault detection rate as early as possible. + +{% resources %} + {% Blog "https://www.browserstack.com/guide/test-case-prioritization", "A Tour of what is Test Prioritization?" %} + {% Blog "https://www.professionalqa.com/test-prioritization", "Test Prioritization" %} + {% Blog "https://www.geeksforgeeks.org/test-case-prioritization-in-software-testing/", "Learn about Test Prioritization" %} + {% Blog "https://testomat.io/features/test-case-priorities/", "Test Prioritization fundamentals!" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/100-qtest.md b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/100-qtest.md new file mode 100644 index 000000000..fdca44949 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/100-qtest.md @@ -0,0 +1,8 @@ +# QTest + +qTest is a test management tool used for Project Management, Bug Tracking, and Test Management. It follows the centralized test management concept that helps to communicate easily and assists in rapid development of task across QA team and other stakeholders. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/qtest/qtest_introduction.htm", "QTest tutorial" %} + {% Blog "https://www.youtube.com/watch?v=1q8vQ2XF9QE", "Getting Started with qTest and Parameters" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/101-test-rail.md b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/101-test-rail.md new file mode 100644 index 000000000..445586880 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/101-test-rail.md @@ -0,0 +1,8 @@ +# TestRail + +TestRail is a web-based test case management tool. It is used by testers, developers and team leads to manage, track, and organize software testing efforts. TestRail allows team members to enter test cases, organize test suites, execute test runs, and track their results, all from a modern and easy to use web interface. + +{% resources %} + {% Official "https://www.gurock.com/testrail/", "TestRail Website" %} + {% Blog "https://www.softwaretestinghelp.com/testrail-tutorial/", "TestRail Review Tutorial: Learn End-To-End Test Case Management" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/102-test-link.md b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/102-test-link.md new file mode 100644 index 000000000..4834799a2 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/102-test-link.md @@ -0,0 +1,8 @@ +# TestLink + +TestLink is most widely used web based open source test management tool. It synchronizes both requirements specification and test specification together. Tester can create test project and document test cases using this tool. With TestLink you can create an account for multiple users and assign different user roles. + +{% resources %} + {% Official "https://testlink.org/", "TestLink Website" %} + {% Blog "https://www.guru99.com/testlink-tutorial-complete-guide.html", "TestLink Tutorial: A Complete Guide" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/103-zephyr.md b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/103-zephyr.md new file mode 100644 index 000000000..be7e1f452 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/103-zephyr.md @@ -0,0 +1,10 @@ +# Zephyr + +Zephyr is a testing solution that improves the quality of your software by managing and monitoring end-to-end testing. It is very effective for managing manual testing. Its key capabilities include: +- Test-case creation +- Organization of tests by product releases and components +- Assignment of tests to the Quality Assurance team + +{% resources %} + {% Blog "https://www.guru99.com/zephyr-agile-jira.html", "Zephyr for JIRA Tutorial: Test Management Tool" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/index.md b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/index.md new file mode 100644 index 000000000..4654f3929 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/105-manage-your-testing/index.md @@ -0,0 +1,7 @@ +# Manage Your Testing + +Test Management is a process of managing the testing activities in order to ensure high quality and high-end testing of the software application. The method consists of organizing, controlling, ensuring traceability and visibility of the testing process in order to deliver the high quality software application. It ensures that the software testing process runs as expected. + +{% resources %} + {% Blog "https://www.guru99.com/test-management-phases-a-complete-guide-for-testing-project.html", "Test Management Process in Software Testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/106-project-management/100-atlassian.md b/src/roadmaps/qa/content/100-qa-basics/106-project-management/100-atlassian.md new file mode 100644 index 000000000..8c47a3004 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/106-project-management/100-atlassian.md @@ -0,0 +1,8 @@ +# Atlassian + +Jira is a software application used for issue tracking and project management. The tool, developed by the Australian software company Atlassian, has become widely used by agile development teams to track bugs, stories, epics, and other tasks. + +{% resources %} + {% Official "https://www.atlassian.com/", "Atlassian Website" %} + {% Blog "https://www.atlassian.com/software/jira/guides/use-cases/what-is-jira-used-for#glossary-of-items", "What is Jira used for?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/106-project-management/101-assembla.md b/src/roadmaps/qa/content/100-qa-basics/106-project-management/101-assembla.md new file mode 100644 index 000000000..fa8fbbdd4 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/106-project-management/101-assembla.md @@ -0,0 +1,8 @@ +# Assembla + +Assembla is an extensive suite of applications for software development, enabling distributed agile teams. It allows development teams to manage, initiate and maintain agile projects, applications and websites. + +{% resources %} + {% Official "https://get.assembla.com/projects/", "Assembla Website" %} + {% Blog "https://www.selecthub.com/project-management-software/assembla", "What is Assembla?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/106-project-management/102-youtrack.md b/src/roadmaps/qa/content/100-qa-basics/106-project-management/102-youtrack.md new file mode 100644 index 000000000..bdfabb9ab --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/106-project-management/102-youtrack.md @@ -0,0 +1,8 @@ +# YouTrack + +YouTrack is a project management software developed by JetBrains. It’s in the form of a plugin that can be attached to the JetBrains IDEs such as Intellij Idea, and helps create and assign tasks to a development team as well as track the progress of working. + +{% resources %} + {% Official "https://www.jetbrains.com/youtrack/", "YouTrack Website" %} + {% Blog "https://medium.com/nerd-for-tech/youtrack-for-beginners-31e1e156fdd0", "YouTrack for Beginners" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/106-project-management/103-trello.md b/src/roadmaps/qa/content/100-qa-basics/106-project-management/103-trello.md new file mode 100644 index 000000000..dc70b1ef9 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/106-project-management/103-trello.md @@ -0,0 +1,12 @@ +# Trello + +Trello is a popular, simple, and easy-to-use collaboration tool that enables you to organize projects and everything related to them into boards. With Trello, you can find all kinds of information, such as: + +- What’s being worked on? +- Who’s working on what? +- What progress the project is making + +{% resources %} + {% Official "https://trello.com/en", "Trello Website" %} + {% Blog "https://www.simplilearn.com/tutorials/project-management-tutorial/what-is-trello", "What is Trello and How To Use It?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/106-project-management/index.md b/src/roadmaps/qa/content/100-qa-basics/106-project-management/index.md new file mode 100644 index 000000000..81fe5e991 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/106-project-management/index.md @@ -0,0 +1,11 @@ +# Project Management + +A project is a temporary endeavor to create a unique product, service, or result. A project is temporary because it has a defined beginning and end time, and it is unique because it has a particular set of operations designed to accomplish a goal. + +Project Management is a discipline of planning, organizing, motivating, and controlling the resources to achieve specific project goals. The main objective of project management is to achieve project goals and targets while keeping in mind the project scope, time, quality, and cost. It facilitates the project workflow with team collaboration on a single project. + +{% resources %} + {% Blog "https://www.guru99.com/introduction-project-management-pmp-certification.html", "What are the Main Objectives of Project Management?" %} + {% Blog "https://huddle.eurostarsoftwaretesting.com/project-management-in-software-testing/", "Project Management in Software Testing" %} + {% Blog "https://www.guru99.com/initiation-phase-project-management-life-cycle.html", "Project Management Life Cycle Phases: What are the stages?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/exploratory-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/exploratory-testing.md new file mode 100644 index 000000000..1860623d2 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/exploratory-testing.md @@ -0,0 +1,9 @@ +# Exploratory testing + +Exploratory testing is evaluating a product by learning about it through exploration and experimentation, including to some degree: questioning, study, modeling, observation, inference, etc. + +{% resources %} + {% Blog "https://www.satisfice.com/exploratory-testing", "Exploratory Testing" %} + {% Blog "https://www.satisfice.com/blog/archives/1509", "Exploratory Testing 3.0" %} + {% Blog "https://www.satisfice.com/blog/archives/1504", "History of Definitions of Exploratory Testing" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/index.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/index.md new file mode 100644 index 000000000..52480d8e3 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/index.md @@ -0,0 +1,8 @@ +# Functional Testing + +Functional testing is a type of software testing that validates the software system against the functional requirements/specifications. The purpose of Functional tests is to test each function of the software application by providing appropriate input and verifying the output against the Functional requirements. + +{% resources %} + {% Blog "https://www.guru99.com/functional-testing.html", "What is Functional Testing? Types & Examples" %} + {% Blog "https://www.browserstack.com/guide/functional-testing", "Functional Testing : A Detailed Guide" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/integration-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/integration-testing.md new file mode 100644 index 000000000..5d173e098 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/integration-testing.md @@ -0,0 +1,7 @@ +# Integration Testing + +Integration Testing is a type of testing where software modules are integrated logically and tested as a group. A typical software project consists of multiple software modules coded by different programmers. This testing level aims to expose defects in the interaction between these software modules when they are integrated. Integration Testing focuses on checking data communication amongst these modules. + +{% resources %} + {% Blog "https://www.guru99.com/integration-testing.html", "Integration Testing Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/regression-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/regression-testing.md new file mode 100644 index 000000000..99073ec71 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/regression-testing.md @@ -0,0 +1,8 @@ +# Regression Testing + +Regression Testing is a type of software testing to confirm that a recent program or code change has not adversely affected existing features. Regression testing is a black box testing technique. Test cases are re-executed to check the previous functionality of the application is working fine and that the new changes have not produced any bugs. + +{% resources %} + {% Blog "https://www.javatpoint.com/regression-testing", "Regression Testing" %} + {% Blog "https://www.guru99.com/regression-testing.html", "What is Regression Testing with Test Cases" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/sanity-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/sanity-testing.md new file mode 100644 index 000000000..ce9edd337 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/sanity-testing.md @@ -0,0 +1,7 @@ +# Sanity Testing + +Sanity testing is a kind of Software Testing performed after receiving a software build, with minor changes in code, or functionality, to ascertain that the bugs have been fixed and no further issues are introduced due to these changes. The goal is to determine that the proposed functionality works roughly as expected. If sanity test fails, the build is rejected to save the time and costs involved in a more rigorous testing. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/sanity-testing-software-testing/", "Sanity Testing | Software Testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/smoke-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/smoke-testing.md new file mode 100644 index 000000000..fc025eb97 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/smoke-testing.md @@ -0,0 +1,6 @@ +# Smoke Testing + +Smoke Testing is a software testing process that determines whether the deployed software build is stable or not. Smoke testing is a confirmation for QA team to proceed with further software testing. It consists of a minimal set of tests run on each build to test software functionalities. + +{% resources %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/uat.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/uat.md new file mode 100644 index 000000000..3d812a583 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/uat.md @@ -0,0 +1,8 @@ +# UAT + +User Acceptance Testing (UAT) is a type of testing performed by the end user or the client to verify/accept the software system before moving the software application to the production environment. UAT is done in the final phase of testing after functional, integration and system testing is done. + +{% resources %} + {% Blog "https://www.guru99.com/user-acceptance-testing.html", "What is User Acceptance Testing (UAT)?" %} + {% Blog "https://www.youtube.com/watch?v=AU8SV7091-s", "How to plan your UAT" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/unit-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/unit-testing.md new file mode 100644 index 000000000..7b7c60f85 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/100-functional-testing/unit-testing.md @@ -0,0 +1,8 @@ +# Unit Testing + +Unit testing is where individual __units__ (modules, functions/methods, routines, etc.) of software are tested to ensure their correctness. This low-level testing ensures smaller components are functionally sound while taking the burden off of higher-level tests. Generally, a developer writes these tests during the development process and they are run as automated tests. + +{% resources %} + {% Blog "https://www.guru99.com/unit-testing-guide.html", "Unit Testing Tutorial" %} + {% Blog "https://youtu.be/3kzHmaeozDI", "What is Unit Testing?" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/accessibility-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/accessibility-testing.md new file mode 100644 index 000000000..6043c0007 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/accessibility-testing.md @@ -0,0 +1,10 @@ +# Accessibility Testing + +Accessibility Testing is defined as a type of Software Testing performed to ensure that the application being tested is usable by people with disabilities like hearing, color blindness, old age, low vision and other disadvantaged groups. + +{% resources %} + {% Blog "https://www.guru99.com/accessibility-testing.html", "What is Accessibility Testing? (Examples)" %} + {% Blog "https://www.softwaretestinghelp.com/what-is-web-accessibility-testing/", "Accessibility Testing Tutorial (Step By Step Guide)" %} + {% Blog "https://www.ibm.com/able/", "IBM Accessibility Toolkit" %} +{% endresources %} + diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/index.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/index.md new file mode 100644 index 000000000..1f8245aac --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/index.md @@ -0,0 +1,8 @@ +# Non-Functional Testing + +Non-functional testing is a type of software testing to test non-functional parameters such as reliability, load test, performance, and accountability of the software. The primary purpose of non-functional testing is to test the reading speed of the software system as per non-functional parameters. The parameters of non-functional testing are never tested before the functional testing. + +{% resources %} + {% Blog "https://www.browserstack.com/guide/what-is-non-functional-testing", "What is Non Functional Testing" %} + {% Blog "https://www.guru99.com/non-functional-testing.html", "Types of Non Functional Testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/load-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/load-testing.md new file mode 100644 index 000000000..37bab0e6b --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/load-testing.md @@ -0,0 +1,8 @@ +# Load Testing + +Load Testing is a type of Performance Testing that determines the performance of a system, software product, or software application under real-life-based load conditions. Load testing determines the behavior of the application when multiple users use it at the same time. It is the response of the system measured under varying load conditions. + +{% resources %} + {% Blog "https://www.geeksforgeeks.org/software-testing-load-testing/", "Software Testing: Load Testing" %} + {% Blog "https://loadninja.com/load-testing/", "Load testing and Best Practices" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/performance-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/performance-testing.md new file mode 100644 index 000000000..ead21f037 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/performance-testing.md @@ -0,0 +1,21 @@ +# Performance Testing + +Performance Testing is a subset of Performance Engineering. It is a process of evaluating a system’s behavior under various extreme conditions. The main intent of performance testing is monitoring and improving key performance indicators such as response time, throughput, memory, CPU utilization, and more. + +There are three objectives (three S) of Performance testing to observe and evaluate: `Speed`, `Scalability`, and `Stability`. + +## Types of Performance Testing + +Following are the commonly used performance testing types, but not limited to: + +- Load Testing +- Stress Testing +- Spike Testing +- Endurance Testing +- Volume Testing +- Scalability Testing +- Capacity Testing + +{% resources %} + {% Blog "https://www.guru99.com/performance-testing.html", "Performance Testing Tutorial – Types (Example)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/security-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/security-testing.md new file mode 100644 index 000000000..51e714ad7 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/security-testing.md @@ -0,0 +1,8 @@ +# Security Testing + +Security Testing is a type of Software Testing that uncovers vulnerabilities, threats, or risks in a software application and prevents malicious attacks from intruders. The purpose of Security Tests is to identify all possible loopholes and weaknesses of the software system which might result in a loss of information, revenue, repute at the hands of the employees or outsiders of the organization. + +{% resources %} + {% Blog "https://www.guru99.com/what-is-security-testing.html", "What is Security Testing? Types with Example" %} + {% Blog "https://brightsec.com/blog/security-testing/", "Security Testing: Types, Tools, and Best Practices" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/stress-testing.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/stress-testing.md new file mode 100644 index 000000000..0994486fb --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/101-non-functional-testing/stress-testing.md @@ -0,0 +1,9 @@ +# Stress Testing + +`Stress Testing` is a type of `Performance Testing`. The objective of stress testing is to identify the breaking point of application under test under extreme normal load. + +e.g. Injecting high volume of requests per second to an API might cause the disruption to its service, or throws HTTP 503 Service Unavailable or cause other consequences. + +{% resources %} + {% Blog "https://www.guru99.com/stress-testing-tutorial.html", "What is Stress Testing in Software Testing?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/index.md b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/index.md new file mode 100644 index 000000000..4faa1a71b --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/107-testing-techniques/index.md @@ -0,0 +1,7 @@ +# Testing Techniques + +Testing Techniques are methods applied to evaluate a system or a component with a purpose to find if it satisfies the given requirements. Testing of a system helps to identify gaps, errors, or any kind of missing requirements differing from the actual requirements. These techniques ensure the overall quality of the product or software including performance, security, customer experience, and so on. + +{% resources %} + {% Blog "https://www.elprocus.com/what-are-testing-techniques-types-advantages-disadvantages/", "What are Testing Techniques : Types, Advantages & Disadvantages" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/100-qa-basics/index.md b/src/roadmaps/qa/content/100-qa-basics/index.md new file mode 100644 index 000000000..068600ea9 --- /dev/null +++ b/src/roadmaps/qa/content/100-qa-basics/index.md @@ -0,0 +1,3 @@ +# QA Basics + +Quality Assurance (QA) also known as QA testing is an activity to ensure that an organization provides the best product or service to the customers. QA testing of a software involves the testing of performance, adaptability, and functionality. Yet, software quality assurance extends beyond software quality; it also comprises the quality process used for developing, testing, and release of software products. QA relies on the software development cycle, which includes the management of software requirements, design, coding, testing, and release. diff --git a/src/roadmaps/qa/content/101-qa-sdlc/100-waterfall-model.md b/src/roadmaps/qa/content/101-qa-sdlc/100-waterfall-model.md new file mode 100644 index 000000000..85338e1b3 --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/100-waterfall-model.md @@ -0,0 +1,7 @@ +# Waterfall Model + +Waterfall Model is a sequential model that divides software development into pre-defined phases. Each phase must be completed before the next phase can begin with no overlap between the phases. Each phase is designed for performing specific activity during the SDLC phase. + +{% resources %} + {% Blog "https://www.guru99.com/what-is-sdlc-or-waterfall-model.html", "What is Waterfall Model in SDLC? Advantages and Disadvantages" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/101-qa-sdlc/101-v-model.md b/src/roadmaps/qa/content/101-qa-sdlc/101-v-model.md new file mode 100644 index 000000000..9e8efd5a8 --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/101-v-model.md @@ -0,0 +1,8 @@ +# V Model + +V Model is a highly disciplined SDLC model that has a testing phase parallel to each development phase. The V model is an extension of the waterfall model wherein software development and testing is executed in a sequential way. It's also known as the Validation or Verification Model. + +{% resources %} + {% Blog "https://www.guru99.com/v-model-software-testing.html", "V-Model in Software Testing" %} + {% Blog "https://www.geeksforgeeks.org/software-engineering-sdlc-v-model/", "SDLC V-Model" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/100-kanban.md b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/100-kanban.md new file mode 100644 index 000000000..99dcdb784 --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/100-kanban.md @@ -0,0 +1,10 @@ +# Kanban + +Kanban is a very popular framework for development in the agile software development methodology. It provides a transparent way of visualizing the tasks and work capacity of a team. It mainly uses physical and digital boards to allow the team members to visualize the current state of the project they are working on. + +A kanban board is an agile project management tool designed to help visualize work, limit work-in-progress, and maximize efficiency. + +{% resources %} + {% Blog "https://www.atlassian.com/agile/kanban", "Kanban - A brief introduction" %} + {% Blog "https://www.guru99.com/kanban-cards-boards-methodology.html", "Kanban Model in Software Engineering" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/101-scrum.md b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/101-scrum.md new file mode 100644 index 000000000..4b50dc129 --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/101-scrum.md @@ -0,0 +1,8 @@ +# Scrum + +Scrum in Software Testing is a methodology for building complex software applications. It provides easy solutions for executing complicated tasks. Scrum helps the development team to focus on all aspects of the software product development like quality, performance, usability, and so on. It provides with transparency, inspection and adaptation during the software development to avoid complexity. + +{% resources %} + {% Blog "https://www.guru99.com/scrum-testing-beginner-guide.html", "Scrum Testing Methodology Tutorial" %} + {% Blog "https://www.atlassian.com/agile/scrum", "Scrum - What is, How it works" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/102-safe.md b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/102-safe.md new file mode 100644 index 000000000..f16f5ede2 --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/102-safe.md @@ -0,0 +1,7 @@ +# SAFe + +Scaled Agile Framework (SAFe) is a freely available online knowledge base that allows you to apply lean-agile practices at the enterprise level. It provides a simple and lightweight experience for software development. It is a set of organizations and workflow patterns intended to guide enterprises for scaling lean and agile practices. It is divided into three segments which are Team, Program and Portfolio. + +{% resources %} + {% Blog "https://www.guru99.com/scaled-agile-framework.html", "SAFe (Scaled Agile Framework) Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/103-xp.md b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/103-xp.md new file mode 100644 index 000000000..c6e96783c --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/103-xp.md @@ -0,0 +1,8 @@ +# XP + +Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software, and higher quality of life for the development team. XP is the most specific of the agile frameworks regarding appropriate engineering practices for software development. + +{% resources %} + {% Blog "https://www.agilealliance.org/glossary/xp", "What is Extreme Programming (XP)?" %} + {% Blog "https://www.geeksforgeeks.org/software-engineering-extreme-programming-xp/", "Software Engineering | Extreme Programming (XP)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/index.md b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/index.md new file mode 100644 index 000000000..be9953597 --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/102-agile-model/index.md @@ -0,0 +1,11 @@ +# Agile Model + +The agile model refers to a software development approach based on iterative development. Agile methods break tasks into smaller iterations or parts that do not directly involve long-term planning. The project scope and requirements are laid down at the beginning of the development process. Plans regarding the number of iterations, the duration, and the scope of each iteration are clearly defined in advance. + +The Agile software development methodology is one of the simplest and most effective processes to turn a vision for a business need into software solutions. + +{% resources %} + {% Blog "https://www.guru99.com/agile-scrum-extreme-testing.html", "Agile Methodology: What is Agile Model in Software Testing?" %} + {% Blog "https://www.javatpoint.com/software-engineering-agile-model", "Agile Model" %} + {% Blog "https://agilemanifesto.org/", "Manifesto for Agile Software Development" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/101-qa-sdlc/index.md b/src/roadmaps/qa/content/101-qa-sdlc/index.md new file mode 100644 index 000000000..e9f5603be --- /dev/null +++ b/src/roadmaps/qa/content/101-qa-sdlc/index.md @@ -0,0 +1,8 @@ +# SDLC + +The Software Development Life Cycle (SDLC) is a process followed for a software project, within a software organization. It consists of a detailed plan describing how to develop, maintain, replace and alter or enhance specific software. The life cycle defines a methodology for improving the quality of software and the overall development process. + +{% resources %} + {% Blog "https://cadabra.studio/blog/why-is-quality-assurance-important-qa-role-in-sdlc/", "QA Role In SDLC: Why Is Quality Assurance Important In IT" %} + {% Blog "https://www.tutorialspoint.com/sdlc/sdlc_overview.htm", "SDLC Overview" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/102-qa-manual-testing/100-tdd.md b/src/roadmaps/qa/content/102-qa-manual-testing/100-tdd.md new file mode 100644 index 000000000..cf2c6a22e --- /dev/null +++ b/src/roadmaps/qa/content/102-qa-manual-testing/100-tdd.md @@ -0,0 +1,8 @@ +# TDD - Test Driven Development + +Test Driven Development (TDD) is software development approach in which test cases are developed to specify and validate what the code will do. In simple terms, test cases for each functionality are created and tested first and if the test fails then the new code is written in order to pass the test and making code simple and bug-free. + +{% resources %} + {% Blog "https://www.guru99.com/test-driven-development.html", "What is Test Driven Development (TDD)? Tutorial with Example" %} + {% Course "https://pt.coursera.org/learn/test-and-behavior-driven-development-tdd-bdd", "Introduction to Test Driven Development (TDD)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/102-qa-manual-testing/101-test-planning.md b/src/roadmaps/qa/content/102-qa-manual-testing/101-test-planning.md new file mode 100644 index 000000000..37385515c --- /dev/null +++ b/src/roadmaps/qa/content/102-qa-manual-testing/101-test-planning.md @@ -0,0 +1,7 @@ +# Test Planning + +A Test Plan is a detailed document that describes the test strategy, objectives, schedule, estimation, deliverables, and resources required to perform testing for a software product. Test Plan helps us determine the effort needed to validate the quality of the application under test. + +{% resources %} + {% Blog "https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html", "Test Plan: What is, How to Create (with Example)" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/102-qa-manual-testing/102-test-cases-and-scenarios.md b/src/roadmaps/qa/content/102-qa-manual-testing/102-test-cases-and-scenarios.md new file mode 100644 index 000000000..b5946a0b3 --- /dev/null +++ b/src/roadmaps/qa/content/102-qa-manual-testing/102-test-cases-and-scenarios.md @@ -0,0 +1,10 @@ +# Test Cases and Scenarios + +A Test Case is a set of actions executed to verify a particular feature or functionality of your software application. A Test Case contains test steps, test data, precondition, and postcondition developed for a specific test scenario to verify any requirement. The test case includes specific variables or conditions, using which a testing engineer can compare expected and actual results to determine whether a software product is functioning as per the requirements of the customer. + +A Test Scenario is defined as any functionality that can be tested. It is a collective set of test cases which helps the testing team to determine the positive and negative characteristics of the project. + +{% resources %} + {% Blog "https://www.guru99.com/test-case-vs-test-scenario.html", "Test Case vs Test Scenario – Difference Between Them" %} + {% Blog "https://www.guru99.com/test-case.html", "How to Write Test Cases in Software Testing with Examples" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/102-qa-manual-testing/103-reporting.md b/src/roadmaps/qa/content/102-qa-manual-testing/103-reporting.md new file mode 100644 index 000000000..1487b7ec5 --- /dev/null +++ b/src/roadmaps/qa/content/102-qa-manual-testing/103-reporting.md @@ -0,0 +1,9 @@ +# Reporting + +Communicating the QA and testing team outputs can be interpreted in several different ways. Having a solid reporting stream is very essential for all the decisions that a stakeholder/manager can take. + +{% resources %} + {% Blog "https://www.guru99.com/defect-management-process.html", "Defect Management Process in Software Testing" %} + {% Blog "https://automationhacks.io/2020/07/25/writing-clear-bug-reports/", "Writing clear bug reports" %} + {% Blog "https://www.ministryoftesting.com/dojo/series/the-testing-planet-2019/lessons/the-art-of-the-bug-report", "The Art Of The Bug Report" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/102-qa-manual-testing/104-compatibility.md b/src/roadmaps/qa/content/102-qa-manual-testing/104-compatibility.md new file mode 100644 index 000000000..33ad52e22 --- /dev/null +++ b/src/roadmaps/qa/content/102-qa-manual-testing/104-compatibility.md @@ -0,0 +1,7 @@ +# Compatibility + +Compatibility is nothing but the capability of existing or living together. Compatibility Testing is a type of Software testing to check whether your software is capable of running on different hardware, operating systems, applications, network environments or Mobile devices. + +{% resources %} + {% Blog "https://www.guru99.com/compatibility-testing.html", "What is Compatibility Testing? Forward & Backward Example" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/102-qa-manual-testing/105-verification-and-validation.md b/src/roadmaps/qa/content/102-qa-manual-testing/105-verification-and-validation.md new file mode 100644 index 000000000..276e62793 --- /dev/null +++ b/src/roadmaps/qa/content/102-qa-manual-testing/105-verification-and-validation.md @@ -0,0 +1,10 @@ +# Verification and Validation + +Verification in Software Testing is a process of checking documents, design, code, and program in order to check if the software has been built according to the requirements or not. The main goal of verification process is to ensure quality of software application, design, architecture etc. The verification process involves activities like reviews, walk-throughs and inspection. + +Validation in Software Engineering is a dynamic mechanism of testing and validating if the software product actually meets the exact needs of the customer or not. The process helps to ensure that the software fulfills the desired use in an appropriate environment. The validation process involves activities like unit testing, integration testing, system testing and user acceptance testing. + +{% resources %} + {% Blog "https://www.guru99.com/verification-v-s-validation-in-a-software-testing.html", "Differences Between Verification and Validation" %} + {% Blog "https://www.guru99.com/design-verification-process.html", "Design Verification & Validation Process" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/102-qa-manual-testing/index.md b/src/roadmaps/qa/content/102-qa-manual-testing/index.md new file mode 100644 index 000000000..cc8a36385 --- /dev/null +++ b/src/roadmaps/qa/content/102-qa-manual-testing/index.md @@ -0,0 +1,8 @@ +# QA Manual Testing + +Manual Testing is a type of software testing in which test cases are executed manually by a tester without using any automated tools. The purpose of Manual Testing is to identify the bugs, issues, and defects in the software application. Manual software testing is the most primitive technique of all testing types and it helps to find critical bugs in the software application. + +{% resources %} + {% Blog "https://www.guru99.com/manual-testing.html", "Manual Testing Tutorial: What is, Types, Concepts" %} + {% Blog "https://www.javatpoint.com/manual-testing", "Manual Testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/ajax.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/ajax.md new file mode 100644 index 000000000..d1a701f41 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/ajax.md @@ -0,0 +1,9 @@ +# Ajax + +AJAX stands for Asynchronous JavaScript And XML. In a nutshell, it is the use of the XMLHttpRequest object to communicate with servers. It can send and receive information in various formats, including JSON, XML, HTML, and text files. + +{% resources %} + {% Blog "https://www.w3schools.com/whatis/whatis_ajax.asp", "What is AJAX?" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/Guide/AJAX/Getting_Started", "Getting started" %} + {% Blog "https://www.youtube.com/watch?v=3l13qGLTgNw", "What Is Ajax?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/browser-devtools.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/browser-devtools.md new file mode 100644 index 000000000..45987fedd --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/browser-devtools.md @@ -0,0 +1,8 @@ +# Browser devtools + +Every modern web browser includes a powerful suite of developer tools. These tools do a range of things, from inspecting currently-loaded HTML, CSS and JavaScript to showing which assets the page has requested and how long they took to load. This article explains how to use the basic functions of your browser's devtools. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_are_browser_developer_tools", "What are browser developer tools?" %} + {% Blog "https://www.geeksforgeeks.org/browser-developer-tools/", "Browser Developer Tools" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/caching.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/caching.md new file mode 100644 index 000000000..25c896c62 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/caching.md @@ -0,0 +1,7 @@ +# Caching + +Caching ensures that the resources downloaded once are reused instead of doing a fresh fetch again. It is useful for increasing subsequent page load speed by reusing cached images, fonts, and other static assets. Caching should not be typically done on dynamic content. For example list of posts or comments. As part of the testing strategy, both caching and cache invalidation (not getting stale dynamic content) needs to be tested. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=6FyXURRVmR0", "Caching - Simply Explained" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/csr-vs-ssr.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/csr-vs-ssr.md new file mode 100644 index 000000000..c4383b2bb --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/csr-vs-ssr.md @@ -0,0 +1,8 @@ +# CSR vs SSR + +CSR stands for Client Side Rendering and SSR stands for Server Side Rendering. CSR pages are computed in your machine and then shown by your browser while in the case of SSR, the server sends ready to show Html content directly. Primarily React, Vue, and Angular apps are examples of CSR (technically it is possible for them to be executed in SSR mode too) and almost all older tech stacks are SSR like PHP, ruby on rails, java, dot net, etc. From the user's standpoint, CSR apps take higher time to render but compensate by avoiding page reloads later (SPA) while SSR apps often have faster initial load time but do a full page reload often. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=rNVcZklcmqU", "Server Side Rendering vs Client Side Rendering" %} + {% Blog "https://medium.com/@prashantramnyc/server-side-rendering-ssr-vs-client-side-rendering-csr-vs-pre-rendering-using-static-site-89f2d05182ef", "SSR vs CSR vs SSG" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/html-css-javascript.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/html-css-javascript.md new file mode 100644 index 000000000..fc4c9c8f8 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/html-css-javascript.md @@ -0,0 +1,13 @@ +# HTML/CSS/JavaScript Basics + +HTML stands for HyperText Markup Language. It is used on the front and gives structure to the webpage, which you can style using CSS and make interactive using JavaScript. + +CSS or Cascading Style Sheets is the language used to style the front end of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript. + +JavaScript allows you to add interactivity to your pages. You may have seen common examples on the websites: sliders, click interactions, popups, and so on. + +{% resources %} + {% Blog "https://www.w3schools.com/html/html_intro.asp", "W3Schools: Learn HTML" %} + {% Blog "https://www.w3schools.com/css/", "W3Schools — Learn CSS" %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/index.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/index.md new file mode 100644 index 000000000..55ef7488d --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/index.md @@ -0,0 +1,7 @@ +# Basic Introduction + +Front End Testing is a testing technique in which Graphical User Interface (GUI), functionality and usability of web applications or a software are tested. The goal of Front end testing is testing overall functionalities to ensure the presentation layer of web applications or a software is defect free with successive updates. + +{% resources %} + {% Blog "https://www.guru99.com/frontend-testing.html", "What is Front End Testing?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/responsive-vs-adaptive.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/responsive-vs-adaptive.md new file mode 100644 index 000000000..6adb58d0b --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/responsive-vs-adaptive.md @@ -0,0 +1,18 @@ +# Responsive vs adaptive + +There are two approaches to ensuring a website is optimized for mobile, tablet, laptop and PC screens: responsive design and adaptive design. While both are intended to solve the same problem, they use different strategies. + +# What is responsive design? +A website created with responsive design serves up the same site to every device, but that site is fluid and will change its layout and appearance based on the size and orientation of the device. + +Developers use CSS to ensure each page of the site can reformat based on the size of the user's viewport and only need to create one codebase for the site. They use something called breakpoints to tell the site when to adjust to accommodate different screen sizes. + +The majority of new sites now use responsive, which has been made easier for less experienced designers and developers, thanks to the availability of themes accessible through CMS systems such as WordPress, Joomla, and Drupal. + +Responsive design does not offer as much control as adaptive, but takes much less work to both build and maintain. Responsive layouts are also fluid, and whilst adaptive can and do use percentages to give a more fluid feel when scaling, these can again cause a jump when a window is resized. + +# What is adaptive design? + +In adaptive design, a different website layout is created for each device's screen. As it loads, the site recognizes the size of the screen and serves up the layout that was made for that viewport. In fact, you can create a different user experience for each of six common screen sizes from very small to very large: 320px, 480px, 760px, 960px, 1200px and 1600px. + +Adaptive is useful for retrofitting an existing site in order to make it more suitable for mobile phones. This allows you to take control of the design and web development for specific, multiple viewports. The number of viewports that you choose to design for is entirely up to you, your company, and your overall budget. It does, however, afford you a certain amount of control (for example over content and layout) that you will not necessarily have using responsive design. diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/swas-pwas-jamstack.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/swas-pwas-jamstack.md new file mode 100644 index 000000000..1e5094235 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/swas-pwas-jamstack.md @@ -0,0 +1,19 @@ +# SWAs, PWAs and Jamstack + +## SWAs +A Static Web Application is any web application that can be delivered directly to an end user's browser without any server-side alteration of the HTML, CSS, or JavaScript content. While this can encompass very flat, unchanging sites like a corporate web site, static web applications generally refer to rich sites that utilize technologies in the browser instead of on the server to deliver dynamic content. + +## PWAs +At their heart, Progressive Web Apps are just web applications. Using progressive enhancement, new capabilities are enabled in modern browsers. Using service workers and a web app manifest, your web application becomes reliable and installable. If the new capabilities aren't available, users still get the core experience. + +Progressive Web Apps provide you with a unique opportunity to deliver a web experience your users will love. Using the latest web features to bring enhanced capabilities and reliability, Progressive Web Apps allow what you build to be installed by anyone, anywhere, on any device with a single codebase. + +## Jamstack +Jamstack is an architectural approach that decouples the web experience layer from data and business logic, improving flexibility, scalability, performance, and maintainability. +Jamstack removes the need for business logic to dictate the web experience. It enables a composable architecture for the web where custom logic and 3rd party services are consumed through APIs. + +{% resources %} + {% Official "https://www.staticapps.org/", "SWA" %} + {% Official "https://web.dev/progressive-web-apps/", "PWA" %} + {% Official "https://jamstack.org/", "Jamstack" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-selenium-ide.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-selenium-ide.md new file mode 100644 index 000000000..aae7a1037 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/100-selenium-ide.md @@ -0,0 +1,10 @@ +# Selenium IDE + +Selenium IDE is an open source web automation testing tool from the Selenium Suite used primarily for QA purposes. It functions as a Firefox extension and does not require any programming knowledge and test cases can be created simply by interacting with the browser. + +Selenium itself is an open-source, automated testing tool used to test web applications across various browsers. It's primarily built in Java and supports several browsers and programming languages. Selenium IDE was developed to speed up the creation of automation scripts. It’s a rapid prototyping tool and can be used by engineers with no programming knowledge whatsoever. Because of its simplicity, Selenium IDE is best used as a prototyping tool and not a complete solution for developing and maintaining complex test suites. + +{% resources %} + {% Official "https://www.selenium.dev/selenium-ide/", "Selenium IDE Website" %} + {% Blog "https://www.softwaretestinghelp.com/selenium-ide-script-selenium-tutorial-3/", "Selenium IDE Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-browser-addons.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-browser-addons.md new file mode 100644 index 000000000..68457aa2f --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-browser-addons.md @@ -0,0 +1,10 @@ +# Browser Addons + +With website and app users expecting flawless software, spiffy updates and market-best features that keep getting better, software testers have their hands full, pretty much on a daily basis. Day-to-day QA operations go a lot smoother when testers have appropriate tools at hand. + +Given that Chrome is the undisputed market leader in web browsers, it’s safe to assume that a large number of QAs are using Chrome for their work. Turns out, there are certain Chrome extensions that can actually help QAs work faster and more efficiently. + +{% resources %} + {% Blog "https://blog.gurock.com/browser-plugins-for-testing/", "8 Browser Plugins for Testing" %} + {% Blog "https://www.softwaretestingmaterial.com/chrome-extensions-for-software-testers/", "15 Best Chrome Extensions for Software Testers" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-ghost-inspector.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-ghost-inspector.md new file mode 100644 index 000000000..1b1eb8260 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/101-ghost-inspector.md @@ -0,0 +1,8 @@ +# Ghost Inspector + +Ghost Inspector is a codeless automated testing tool that allows you to easily create and run automated browser tests for websites and web applications. These tests carry out actions in a web browser the same way a real user would to ensure that everything is working properly. + +{% resources %} + {% Official "https://ghostinspector.com/", "Ghost Inspector Website" %} + {% Blog "https://theqalead.com/test-management/what-is-ghost-inspector-overview-tour-of-features/", "What Is Ghost Inspector? Overview & Tour Of Features" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/cypress.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/cypress.md new file mode 100644 index 000000000..4b5e455b2 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/cypress.md @@ -0,0 +1,10 @@ +# Cypress + +Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha – a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework. + +{% resources %} + {% Official "https://www.cypress.io/", "Official Website" %} + {% Official "https://docs.cypress.io/guides/overview/why-cypress#Other", "Official Documentation" %} + {% Blog "https://www.cypress.io/how-it-works", "How it works" %} + {% Blog "https://www.youtube.com/watch?v=7N63cMKosIE", "Cypress End-to-End Testing" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/index.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/index.md new file mode 100644 index 000000000..f23fc416d --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/index.md @@ -0,0 +1,8 @@ +# Automation Frameworks + +A Test Automation Framework is a set of guidelines like coding standards, test-data handling, object repository treatment, etc… which when followed during automation scripting produces beneficial outcomes like increased code re-usage, higher portability or reduced script maintenance cost. + +{% resources %} + {% Blog "https://www.guru99.com/test-automation-framework.html", "Test Automation Framework: What is, Architecture & Types" %} + {% Blog "https://www.browserstack.com/guide/best-test-automation-frameworks", "Popular Test Automation Frameworks" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jasmine.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jasmine.md new file mode 100644 index 000000000..665ffc4d5 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jasmine.md @@ -0,0 +1,9 @@ +# Jasmine + +Jasmine is a very popular JavaScript BDD (behavior-driven development) framework for unit testing JavaScript applications. It provides utilities that can be used to run automated tests for both synchronous and asynchronous code. It does not depend on any other JavaScript frameworks. It does not require a DOM. + +{% resources %} + {% Official "https://jasmine.github.io/", "Jasmines Official Website" %} + {% Blog "https://semaphoreci.com/community/tutorials/testing-components-in-angular-2-with-jasmine", "Easy and Practical example of Angular testing with Jasmine" %} + {% Blog "https://www.testim.io/blog/jasmine-js-a-from-scratch-tutorial-to-start-testing", "Starting with Jasmine from Scratch" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jest.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jest.md new file mode 100644 index 000000000..b2b192ea2 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/jest.md @@ -0,0 +1,10 @@ +# Jest + +Jest is a delightful JavaScript Testing Framework with a focus on simplicity. +It works with projects using: Babel, TypeScript, Node, React, Angular, Vue and more! + +{% resources %} + {% Blog "https://jestjs.io/", "Official Website" %} + {% Blog "https://jestjs.io/docs/getting-started", "Official Documentaion" %} + {% Blog "https://www.youtube.com/watch?v=7r4xVDI2vho", "Jest Crash Course - Unit Testing in JavaScript" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/nightwatch.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/nightwatch.md new file mode 100644 index 000000000..97fac6a6b --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/nightwatch.md @@ -0,0 +1,8 @@ +# Nightwatch + +Nightwatch.js is an open-source automated testing framework that is powered by Node.js and provides complete E2E (end to end) solutions to automation testing with Selenium Javascript be it for web apps, browser apps, and websites. + +{% resources %} + {% Official "https://nightwatchjs.org/", "Nightwatch.js Website" %} + {% Blog "https://www.browserstack.com/guide/nightwatch-framework-tutorial", "NightwatchJS Tutorial: Get Started with Automation Testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/playwright.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/playwright.md new file mode 100644 index 000000000..7c4f44df3 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/playwright.md @@ -0,0 +1,8 @@ +# Playwright + +Playwright Test was created specifically to accommodate the needs of end-to-end testing. Playwright supports all modern rendering engines including Chromium, WebKit, and Firefox. Test on Windows, Linux, and macOS, locally or on CI, headless or headed with native mobile emulation of Google Chrome for Android and Mobile Safari.Playwright leverages the DevTools protocol to write powerful, stable automated tests.Playwright can actually see into and control the browser rather than relying on a middle translation layer, it allows for the simulation of more insightful and relevant user scenarios. + +{% resources %} + {% Official "https://playwright.dev/", "Official Website: Playwright" %} + {% Blog "https://www.browserstack.com/guide/playwright-tutorial", "Playwright Tuotorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/puppeteer.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/puppeteer.md new file mode 100644 index 000000000..627aaf862 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/puppeteer.md @@ -0,0 +1,8 @@ +# Puppeteer + +Puppeteer is a Node library which provides a high-level API to control headless Chrome or Chromium over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome or Chromium. + +{% resources %} + {% Blog "https://developer.chrome.com/docs/puppeteer/", "Puppetter" %} + {% Blog "https://www.freecodecamp.org/news/how-to-use-puppeteer-with-nodejs/", "Puppetter Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/qa-wolf.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/qa-wolf.md new file mode 100644 index 000000000..8121bb6f6 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/qa-wolf.md @@ -0,0 +1,10 @@ +# QA Wolf + +QA Wolf is a hybrid platform & service that helps software teams ship better software faster by taking QA completely off their plate. + +{% resources %} + {% Official "https://www.qawolf.com/", "QA Wolf" %} + {% Official "https://app.qawolf.com/docs/why-qa-wolf", "QA Wolf Official Docs" %} + {% Blog "https://app.qawolf.com/docs/create-a-test", "Getting started with QA Wolf" %} + {% Blog "https://www.youtube.com/watch?v=BRxVu0De-4k&list=PL33T95M59Kkg1zKCU5NHc2g2XYXOs3-DU", "QA Wolf Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/robot-framework.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/robot-framework.md new file mode 100644 index 000000000..6d4b7910a --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/robot-framework.md @@ -0,0 +1,12 @@ +# Robot framework + +Robot Framework is a Python-based, extensible keyword-driven automation framework for acceptance testing, acceptance test driven development (ATDD), behavior driven development (BDD) and robotic process automation (RPA). + +Robot Framework is open and extensible. Robot Framework can be integrated with virtually any other tool to create powerful and flexible automation solutions. + +{% resources %} + {% Official "https://robotframework.org/", "Robot Framework Official Website" %} + {% Official "https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html", "Robot Framework Official User Guide" %} + {% Blog "https://medium.com/swlh/robot-framework-the-basics-dfeadc025bea", "Basic Step-by-step Robot Framework tutorial" %} + {% Blog "https://www.geeksforgeeks.org/robot-framework-in-python/", "Excellent tutorial to start working with Robot Framework" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/selenium.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/selenium.md new file mode 100644 index 000000000..4a9814be2 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/selenium.md @@ -0,0 +1,8 @@ +# Selenium + +Selenium is an open-source tool that automates web browsers. It provides a single interface that lets you write test scripts in programming languages like Ruby, Java, NodeJS, PHP, Perl, Python, and C#, among others. + +{% resources %} + {% Official "https://www.selenium.dev/", "Seleniums Official Website" %} + {% Blog "https://www.browserstack.com/selenium", "Selenium Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/webdriver-io.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/webdriver-io.md new file mode 100644 index 000000000..159249767 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-automation-frameworks/webdriver-io.md @@ -0,0 +1,14 @@ +# Webdriver io + +WebdriverIO is a progressive automation framework built to automate modern web and mobile applications. It simplifies the interaction with your app and provides a set of plugins that help you create a scalable, robust and stable test suite. + +WebdriverIO leverages the power of the WebDriver protocol that is developed and supported by all browser vendors and guarantees a true cross-browser testing experience. While other automation tools require you to download modified browser that aren't used by actual users or emulate user behavior by injecting JavaScript, WebdriverIO relies on a common agreed standard for automation that is properly tested and ensures compatibility for decades to come. + +During the development of this automation standard the web has changed a lot and many of the requirements that developers have today to test their web application can not be fulfilled using WebDriver anymore. While some of the core contributors of this project help support the next generation of the WebDriver protocol, WebdriverIO provides an alternative automation solution based on the Chrome DevTools protocol. This allows the user to seamlessly switch between conventional commands based on WebDriver and powerful browser interactions through Puppeteer. + +{% resources %} + {% Blog "https://webdriver.io/", "WebdriverIO Website" %} + {% Blog "https://webdriver.io/docs/what-is-webdriverio", "A brief overview of WebdriverIO" %} + {% Blog "https://webdriver.io/docs/gettingstarted", "Getting started with WebdriverIO" %} + {% Blog "https://www.youtube.com/watch?v=e8goAKb6CC0&list=PL6AdzyjjD5HBbt9amjf3wIVMaobb28ZYN", "WebdriverIO Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-bug-management.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-bug-management.md new file mode 100644 index 000000000..3b64a2203 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/102-bug-management.md @@ -0,0 +1,8 @@ +# Bug Magnet + +Exploratory Testing is all about exploring the software by navigating random paths and discovering what it can do and what it can’t. In exploratory testing we try to verify how well system reacts to special/invalid inputs and edge cases. Bug Magnet will help you configure Data validations and variety input scenarios likely to cause issues. + +{% resources %} + {% Official "https://bugmagnet.org/", "Bug Magnet Website" %} + {% Blog "http://www.testingjournals.com/bug-magnet-extension-exploratory-testing/", "Bug Magnet: Chrome Extension for Exploratory Testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/103-check-my-links.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/103-check-my-links.md new file mode 100644 index 000000000..4cb7ba371 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/103-check-my-links.md @@ -0,0 +1,7 @@ +# Check My Links + +Check My Links is a link checker that crawls through your webpage and looks for broken links. Is an extension developed primarily for web designers, developers and content editors. + +{% resources %} + {% Official "https://github.com/PageModifiedOfficial/Check-My-Links", "Check My Links Official Docs" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/index.md b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/index.md new file mode 100644 index 000000000..2b5e14538 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/100-frontend-automation/index.md @@ -0,0 +1,7 @@ +# Frontend automation + + Front-end automation is a way to characterize automation that streamlines tasks focused on interactivity, websites, and attended processes. Robotic process automation, or RPA, is considered automation on the front end, or from the user-interface (UI) level. Benefits of front-end automation include quick task building with no programming knowledge, no required changes to existing programs or applications, and those individuals who know the keystrokes can easily build the automation task. + + {% resources %} + {% Blog "https://dev.to/davidz/how-we-do-automated-testing-on-our-frontend-b10", "How we do automated testing on our frontend" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/100-appium.md b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/100-appium.md new file mode 100644 index 000000000..3dced5d2a --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/100-appium.md @@ -0,0 +1,10 @@ +# Appium + +Appium is an open-source framework that allows QAs to conduct automated app testing on different platforms like Android, iOS, and Windows. It is developed and supported by Sauce Labs to automate native and hybrid mobile apps. It is a cross-platform mobile automation tool, which means that it allows the same test to be run on multiple platforms. + +{% resources %} + {% Official "https://appium.io/", "Appium Website" %} + {% Blog "https://www.browserstack.com/guide/appium-tutorial-for-testing", "Appium Tutorial for Mobile Application Testing" %} + {% Blog "https://appium.io/docs/en/about-appium/intro/", "Appium Website" %} + {% Blog "https://github.com/appium/appium/tree/1.x/sample-code", "Appium example tests on Github" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/101-xcuitest.md b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/101-xcuitest.md new file mode 100644 index 000000000..c97e8da3d --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/101-xcuitest.md @@ -0,0 +1,8 @@ +# XCUITest + +Mobile app testing, and more specifically, app UI testing involves checking how the interface behaves when user actions are performed and then compares results with expected outcomes. Here, testers try to replicate exactly how a user would interact with the application and validate the state of the UI. XCUITest allows them to write test cases for these purposes using two fundamental concepts. + +{% resources %} + {% Official "https://developer.apple.com/documentation/xctest/", "Official Documentation" %} + {% Blog "https://www.browserstack.com/guide/getting-started-xcuitest-framework", "Getting Started with XCUITest" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/102-espresso.md b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/102-espresso.md new file mode 100644 index 000000000..fd43a182b --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/102-espresso.md @@ -0,0 +1,9 @@ +# Espresso + +Espresso is a native testing framework for Android to write reliable UI tests. Google released the Espresso framework in October 2013 and, as of release version 2.0, Espresso is part of the Android Support Repository. One of the important features in Espresso is that it automatically synchronizes your test actions with the user interface of your application. The framework also ensures that your activity is started before the test runs. It can also force a test to wait until all observer background activities have finished, which is sometimes a problem with other testing frameworks. + +{% resources %} + {% Official "https://developer.android.com/training/testing/espresso#kotlin", "Official Documentation" %} + {% Blog "https://www.tutorialspoint.com/espresso_testing/index.htm", "Espresso Testing Tutorial" %} + {% Blog "https://github.com/android/testing-samples", "Espresso Code Samples on Github" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/103-detox.md b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/103-detox.md new file mode 100644 index 000000000..e3bd115c3 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/103-detox.md @@ -0,0 +1,9 @@ +# Detox + +Detox is a JavaScript mobile testing framework that is built into the application and the test execution starts with app launch. This makes test execution really fast and robust as no external additional tools are needed to orchestrate and synchronize during the test execution. + +{% resources %} + {% Official "https://wix.github.io/Detox/", "Detox Website" %} + {% Blog "https://wix.github.io/Detox/docs/introduction/getting-started", "Getting Started with Detox" %} + {% Blog "https://www.spritecloud.com/test-automation-tools-detox/", "Test Automation Tools: Detox" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/index.md b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/index.md new file mode 100644 index 000000000..276f71f9d --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/101-mobile-automation/index.md @@ -0,0 +1,7 @@ +# Mobile Automation + +Mobile automation, as the name suggests, refers to 'automation' that is done on mobile devices. Mobile Automation can test a WAP site or an app. As we know, mobile devices consist of hardware and software components, while a mobile application is simply the software. Testing the mobile device is also connected to evaluating the hardware component and the software part. + +{% resources %} + {% Blog "https://u-tor.com/topic/mobile-automation-steps", "Mobile Automation Testing Steps and Process" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/100-karate-framework.md b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/100-karate-framework.md new file mode 100644 index 000000000..5d8090e1f --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/100-karate-framework.md @@ -0,0 +1,12 @@ +# Karate framework + +Karate is the only open-source tool to combine API test-automation, mocks, performance-testing and even UI automation into a single, unified framework. The BDD syntax popularized by Cucumber is language-neutral, and easy for even non-programmers. Assertions and HTML reports are built-in, and you can run tests in parallel for speed. + +There's also a cross-platform stand-alone executable for teams not comfortable with Java. You don't have to compile code. Just write tests in a simple, readable syntax - carefully designed for HTTP, JSON, GraphQL and XML. And you can mix API and UI test-automation within the same test script. + +A Java API also exists for those who prefer to programmatically integrate Karate's rich automation and data-assertion capabilities. + +{% resources %} + {% Official "https://www.karatelabs.io/", "karate website" %} + {% Blog "https://github.com/karatelabs/karate/blob/master/karate-core/src/test/resources/karate-map.jpg?raw=true", "karate architecture" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/101-cypress.md b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/101-cypress.md new file mode 100644 index 000000000..e1c2ac5e3 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/101-cypress.md @@ -0,0 +1,11 @@ +# Cypress + +Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha – a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework. + +{% resources %} + {% Blog "https://www.cypress.io/", "Official Website" %} + {% Blog "https://docs.cypress.io/guides/overview/why-cypress#Other", "Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=7N63cMKosIE", "Cypress End-to-End Testing" %} + {% Blog "https://www.youtube.com/watch?v=PZ2OsLBts1E&list=PLP9o9QNnQuAYYRpJzDNWpeuOVTwxmIxcI", "Cypress Tips & Trics" %} + {% Blog "https://dev.to/bushraalam/cypress-end-to-end-testing-framework-3naa", "Cypress - End to End Testing Framework" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/102-soap-ui.md b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/102-soap-ui.md new file mode 100644 index 000000000..6f1f0bc04 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/102-soap-ui.md @@ -0,0 +1,8 @@ +# SoapUI + +SoapUI is the world's leading Functional Testing tool for SOAP and REST testing. With its easy-to-use graphical interface, and enterprise-class features, SoapUI allows you to easily and rapidly create and execute automated functional, regression, and load tests. + +{% resources %} + {% Official "https://www.soapui.org/", "SoapUI Official Website" %} + {% Official "https://www.soapui.org/getting-started/", "SoapUI Docs" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/103-postman-newman.md b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/103-postman-newman.md new file mode 100644 index 000000000..ca6918d47 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/103-postman-newman.md @@ -0,0 +1,12 @@ +# Newman + +Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster. It is an API client that makes it easy for developers to create, share, test, and document APIs. With this open-source solution, users can create and save simple and complex HTTP/s requests and read their responses. + +Newman is a command-line Collection Runner for Postman. It enables you to run and test a Postman Collection directly from the command line. It's built with extensibility to integrate it with your continuous integration servers and build systems. + +{% resources %} + {% Official "https://www.postman.com", "Postman website" %} + {% Course "https://learning.postman.com/docs/getting-started/introduction/", "Learn postman" %} + {% Blog "https://www.youtube.com/watch?v=VywxIQ2ZXw4", "API testing with postman" %} + {% Course "https://learning.postman.com/docs/running-collections/using-newman-cli/command-line-integration-with-newman/", " Newman cli usage" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/104-rest-assured.md b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/104-rest-assured.md new file mode 100644 index 000000000..13367a1fd --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/104-rest-assured.md @@ -0,0 +1,8 @@ +# REST Assured + +Rest-assured helps developers and test engineers to test REST APIs in Java ease by using techniques used in dynamic languages such as Groovy and Ruby. + +{% resources %} + {% Official "https://rest-assured.io", "REST-assured Website" %} + {% Blog "https://www.guru99.com/rest-assured.html", "REST Assured Tutorial: How to test API with Example" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/index.md b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/index.md new file mode 100644 index 000000000..816f69fa2 --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/102-backend-automation/index.md @@ -0,0 +1,8 @@ +# Backend Automation + +Backend Testing is a testing method that checks the server side or database of web applications or software. Backend testing aims to test the application layer or database layer to ensure that the web application or software is free from database defects like deadlock, data corruption, or data loss. + +{% resources %} + {% Blog "https://testinggenez.com/what-is-backend-testing-and-types/", "What is backend testing?" %} + {% Blog "https://www.guru99.com/what-is-backend-testing.html", "Backend Testing Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/103-qa-automated-testing/index.md b/src/roadmaps/qa/content/103-qa-automated-testing/index.md new file mode 100644 index 000000000..4e170f8df --- /dev/null +++ b/src/roadmaps/qa/content/103-qa-automated-testing/index.md @@ -0,0 +1,10 @@ +# Automated Testing + +Automation Testing is a software testing technique that performs using special automated testing software tools to execute a test case suite. On the contrary, Manual Testing is performed by a human sitting in front of a computer carefully executing the test steps. + +Automated testing is the application of software tools to automate a human-driven manual process of reviewing and validating a software product. Most modern agile and DevOps software projects now include automated testing from inception. To fully appreciate the value of automated testing, however, it helps to understand what life was like before it was widely adopted. + +{% resources %} + {% Blog "https://www.atlassian.com/continuous-delivery/software-testing/automated-testing", "What is Automated Testing?" %} + {% Blog "https://www.browserstack.com/guide/testing-pyramid-for-test-automation", "Testing Pyramid" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/100-vegeta.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/100-vegeta.md new file mode 100644 index 000000000..27e6c7587 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/100-vegeta.md @@ -0,0 +1,7 @@ +# Vegeta + +Vegeta is a versatile HTTP load testing tool built out of a need to drill HTTP services with a constant request rate. It can be used both as a command line utility and a library. + +{% resources %} + {% Official "https://github.com/tsenart/vegeta", "Vegeta Website" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/101-jmeter.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/101-jmeter.md new file mode 100644 index 000000000..64ad85707 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/101-jmeter.md @@ -0,0 +1,8 @@ +# JMeter + +Apache JMeter is an Apache project that can be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications. + +{% resources %} + {% Official "https://jmeter.apache.org/", "Apache JMeter Website" %} + {% Course "https://www.youtube.com/playlist?list=PLJ9A48W0kpRIjLkZ32Do9yDZXnnm7_uj_", "Learn JMeter" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/102-locust.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/102-locust.md new file mode 100644 index 000000000..748813cd0 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/102-locust.md @@ -0,0 +1,14 @@ +# Locust + +Locust is an easy-to-use, scriptable and scalable performance testing tool. You define the behavior of your users in regular Python code instead of being stuck in a UI or restrictive domain-specific language. This makes Locust infinitely expandable and very developer friendly. Given below are some of the features of Locust. + +- Write test scenarios in plain old Python +- Distributed and scalable - supports hundreds of thousands of concurrent users +- Web-based UI +- Can test any system +- Hackable + +{% resources %} + {% Official "https://locust.io/", "Locust Website" %} + {% Course "https://www.youtube.com/playlist?list=PLJ9A48W0kpRKMCzJARCObgJs3SinOewp5", "Learn Locust" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/103-gatling.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/103-gatling.md new file mode 100644 index 000000000..4eba18900 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/103-gatling.md @@ -0,0 +1,12 @@ +# Gatling + +Gatling is a highly capable load testing tool. It is designed for ease of use, maintainability and high performance. + +Out of the box, Gatling comes with excellent support of the HTTP protocol that makes it a tool of choice for load testing any HTTP server. As the core engine is actually protocol agnostic, it is perfectly possible to implement support for other protocols. For example, Gatling currently also ships JMS support. + +Gatling’s architecture is asynchronous as long as the underlying protocol, such as HTTP, can be implemented in a non blocking way. This kind of architecture lets us implement virtual users as messages instead of dedicated threads, making them very resource cheap. Thus, running thousands of concurrent virtual users is not an issue. + +{% resources %} + {% Official "https://gatling.io/", "Gatling Website" %} + {% Course "https://www.youtube.com/playlist?list=PLJ9A48W0kpRJE6s8I1MjWm-z8BGbUYNCw", "Learn Gatling" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/104-k6.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/104-k6.md new file mode 100644 index 000000000..39fd028e8 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/104-k6.md @@ -0,0 +1,10 @@ +# k6 + +Grafana k6 is an open-source load testing tool that makes performance testing easy and productive for engineering teams. k6 is free, developer-centric, and extensible. + +Using k6, you can test the reliability and performance of your systems and catch performance regressions and problems earlier. k6 will help you to build resilient and performant applications that scale. + +{% resources %} + {% Official "https://k6.io/", "k6 Website" %} + {% Course "https://www.youtube.com/playlist?list=PLJ9A48W0kpRJKmVeurt7ltKfrOdr8ZBdt", "Learn k6" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/105-artillery.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/105-artillery.md new file mode 100644 index 000000000..9a2e32c93 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/105-artillery.md @@ -0,0 +1,20 @@ +# Artillery + +Artillery is a modern, powerful & easy-to-use performance testing toolkit. Use it to ship scalable applications that stay performant & resilient under high load. + +Artillery prioritizes developer productivity and happiness, and follows the "batteries-included" philosophy. + +## Features + +- Emulate complex user behavior with scenarios +- Load testing and smoke testing +- Batteries included +- Extensible & hackable +- Integrations and add-ons +- Designed for cross-team collaboration +- Planet-scale testing + +{% resources %} + {% Official "https://www.artillery.io/", "Artillery Website" %} + {% Course "https://www.youtube.com/playlist?list=PLJ9A48W0kpRJh1_uW2mVNhSIVCMYmNlm7", "Learn Artillery" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/106-lighthouse.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/106-lighthouse.md new file mode 100644 index 000000000..57697bd2b --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/106-lighthouse.md @@ -0,0 +1,7 @@ +# Lighthouse + +Lighthouse is an open-source, automated tool for improving the quality of web pages. You can run it against any web page, public or requiring authentication. It has audits for performance, accessibility, progressive web apps, SEO, and more. You can run Lighthouse in Chrome DevTools, from the command line, or as a Node module. You give Lighthouse a URL to audit, run a series of audits against the page, and then generate a report on how well the page did. From there, use the failing audits as indicators on how to improve the page. Each audit has a reference doc explaining why the audit is important and how to fix it. + +{% resources %} + {% Official "https://github.com/GoogleChrome/lighthouse/", "Lighthouse Website" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/107-webpage-test.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/107-webpage-test.md new file mode 100644 index 000000000..38c32e846 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/107-webpage-test.md @@ -0,0 +1,9 @@ +# WebPageTest + +WebPageTest is a web performance tool providing deep diagnostic information about how a page performs under a variety of conditions. + +Each test can be run from different locations around the world, on real browsers, over any number of customizable network conditions. + +{% resources %} + {% Official "https://www.webpagetest.org/", "WebPageTest Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/index.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/index.md new file mode 100644 index 000000000..0470a746f --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/100-load-and-performance-testing/index.md @@ -0,0 +1,15 @@ +# Load and Performance Testing + +Performance Testing is a subset of Performance Engineering. It is a process of evaluating a system’s behavior under various extreme conditions. The main intent of performance testing is to monitor and improve key performance indicators such as response time, throughput, memory, CPU utilization, and more. + +There are three objectives (three S) of Performance testing to observe and evaluate: `Speed`, `Scalability` and `Stability`. Following are the commonly used performance testing types, but not limited to: + +- Load Testing +- Stress Testing +- Spike Testing +- Endurance Testing +- Volume Testing +- Scalability Testing +- Capacity Testing + +Load Testing is one type of performance testing. It helps to evaluate the application under tests' behaviors such as response time, throughput, pass/fail transactions, and more under the normal workload. e.g., cart checkout response time is 500 milliseconds under typical business hours. diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/100-chrome-devtools.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/100-chrome-devtools.md new file mode 100644 index 000000000..259969be2 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/100-chrome-devtools.md @@ -0,0 +1,12 @@ +# Chrome dev tools + +These are a set of tools built into the browser to aid frontend developers diagnose and solve various issues in their applications — such as JavaScript and logical bugs, CSS styling issues or even just making quick temprary alterations to the DOM. + +To enter the dev tools, right click and click **Inspect** (or press `ctrl+shift+c`/`cmd+opt+c`) to enter the Elements panel. Here you can debug CSS and HTML issues. If you want to see logged messages or interact with javascript, enter the **Console** tab from the tabs above (or press `ctrl+shift+j`/`cmd+opt+j` to enter it directly). Another very useful feature in the Chrome dev tools is the Lighthouse (for checking perfomance) — more on this later. + +NOTE: This isn't a chrome-specific feature, and most browsers (Chromium based or otherwise) will have their own, largely-similar set of devtools. + +{% resources %} + {% Blog "https://developer.chrome.com/docs/devtools/overview/", "Official Docs" %} + {% Blog "https://www.freecodecamp.org/news/mastering-chrome-developer-tools-next-level-front-end-development-techniques-3ac0b6fe8a3/", "Mastering Chrome Dev Tools" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/101-wave.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/101-wave.md new file mode 100644 index 000000000..bf38a19a3 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/101-wave.md @@ -0,0 +1,8 @@ +# Wave + +Wave is a suite of evaluation tools that helps authors make their web content more accessible to individuals with disabilities. WAVE can identify many accessibility and Web Content Accessibility Guideline (WCAG) errors, but also facilitates human evaluation of web content. + +{% resources %} + {% Official "https://wave.webaim.org/", "Wave Website" %} + {% Blog "https://www.softwaretestinghelp.com/web-accessibility-testing-tools/", "WAVE Accessibility Testing Tool Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/102-axe.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/102-axe.md new file mode 100644 index 000000000..ad326415a --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/102-axe.md @@ -0,0 +1,8 @@ +# Axe + +Axe is a fast and lightweight accessibility testing tool that checks the entire document against the rules and generates a report with all violations, passes, etc. + +{% resources %} + {% Official "https://www.deque.com/axe/", "Axe Website" %} + {% Blog "https://www.browserstack.com/docs/automate/selenium/accessibility-testing", "Accessibility testing using the axe-core library" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/index.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/index.md new file mode 100644 index 000000000..a49207cdb --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/101-accessibility-testing/index.md @@ -0,0 +1,8 @@ +# Accessibility testing + +In software QA, accessibility testing is the practice of confirming that an application is usable for as many people as possible, including people with disabilities such as vision impairment, hearing problems and cognitive conditions. + +{% resources %} + {% Blog "https://www.javatpoint.com/accessibility-testing", "Accessibility testing -Javapoint" %} + {% Blog "https://www.geeksforgeeks.org/software-testing-accessibility-testing/", "Accessibility testing -geeksforgeeks" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/100-authentication-authorization.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/100-authentication-authorization.md new file mode 100644 index 000000000..875b42e4b --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/100-authentication-authorization.md @@ -0,0 +1,11 @@ +# Authentication authorization + +`Authentication` is the process of verifying that an individual, entity or website is whom it claims to be. Authentication in the context of web applications is commonly performed by submitting a username or ID and one or more items of private information that only a given user should know. + +`Authorization` may be defined as "the process of verifying that a requested action or service is approved for a specific entity" (NIST). `Authorization` is distinct from authentication which is the process of verifying an entity's identity. When designing and developing a software solution, it is important to keep these distinctions in mind. A user who has been authenticated (perhaps by providing a username and password) is often not authorized to access every resource and perform every action that is technically possible through a system. + +For example, a web app may have both regular users and admins, with the admins being able to perform actions the average user is not privileged to do so, even though they have been authenticated. Additionally, authentication is not always required for accessing resources; an unauthenticated user may be authorized to access certain public resources, such as an image or login page, or even an entire web app. + +{% resources %} + {% Blog "https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html", "OWASP Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/101-vulnerability-scanning.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/101-vulnerability-scanning.md new file mode 100644 index 000000000..87d745e04 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/101-vulnerability-scanning.md @@ -0,0 +1,20 @@ +# Vulnerability Scanning + +Vulnerability scanning identifies hosts and host attributes +(e.g., operating systems, applications, open ports), but it also attempts to identify vulnerabilities rather +than relying on human interpretation of the scanning results. Many vulnerability scanners are equipped to +accept results from network discovery and network port and service identification, which reduces the +amount of work needed for vulnerability scanning. + +Also, some scanners can perform their own network +discovery and network port and service identification. Vulnerability scanning can help identify outdated +software versions, missing patches, and misconfigurations, and validate compliance with or deviations +from an organization’s security policy. + +This is done by identifying the operating systems and major +software applications running on the hosts and matching them with information on known vulnerabilities +stored in the scanners’ vulnerability databases. + +{% resources %} + {% Blog "https://csrc.nist.gov/glossary/term/vulnerability_scanning", "NIST Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/102-owasp-10.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/102-owasp-10.md new file mode 100644 index 000000000..1d2730738 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/102-owasp-10.md @@ -0,0 +1,10 @@ +# OWASP 10 + +The Open Web Application Security Project, or OWASP, is an international non-profit organization dedicated to web application security. + +The OWASP Top 10 is a regularly-updated report outlining security concerns for web application security, focusing on the 10 most critical risks. The report is put together by a team of security experts from all over the world. OWASP refers to the Top 10 as an ‘awareness document’ and they recommend that all companies incorporate the report into their processes in order to minimize and/or mitigate security risks. + +{% resources %} + {% Official "https://owasp.org/www-project-top-ten/", "OWASP Top 10" %} + {% Blog "https://www.cloudflare.com/learning/security/threats/owasp-top-10/", "What is the OWASP Top 10?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/103-attack-vectors.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/103-attack-vectors.md new file mode 100644 index 000000000..de777ede0 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/103-attack-vectors.md @@ -0,0 +1,7 @@ +# Attack vectors + +This metric reflects the context by which vulnerability exploitation is possible. This metric value (and consequently the Base Score) will be larger the more remote (logically, and physically) an attacker can be in order to exploit the vulnerable component. The assumption is that the number of potential attackers for a vulnerability that could be exploited from across a network is larger than the number of potential attackers that could exploit a vulnerability requiring physical access to a device, and therefore warrants a greater Base Score. + +{% resources %} + {% Blog "https://www.first.org/cvss/v3.1/specification-document", "FIRST.org Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/104-secrets-management.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/104-secrets-management.md new file mode 100644 index 000000000..b45c4e238 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/104-secrets-management.md @@ -0,0 +1,10 @@ +# Secrets Management + +Secrets Management is a systematic way of in managing, storing, securing, and retrieving credentials for any systems, database, and other services. + +Credentials such as passwords, SSH keys, certificates, API keys, backup codes, and more. + +{% resources %} + {% Blog "https://aws.amazon.com/secrets-manager/", "AWS Secrets Management Website" %} + {% Blog "https://www.vaultproject.io/", "Vault Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/index.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/index.md new file mode 100644 index 000000000..e6b40e861 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/102-security-testing/index.md @@ -0,0 +1,9 @@ +# Security Testing + +Security testing is a process intended to reveal flaws in the security mechanisms of an information system that protect data and maintain functionality as intended. Due to the logical limitations of security testing, passing the security testing process is not an indication that no flaws exist or that the system adequately satisfies the security requirements. + +Typical security requirements may include specific elements of confidentiality, integrity, authentication, availability, authorization and non-repudiation. Actual security requirements tested depend on the security requirements implemented by the system. Security testing as a term has a number of different meanings and can be completed in a number of different ways. As such, a Security Taxonomy helps us to understand these different approaches and meanings by providing a base level to work from. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/Security_testing", "Security Testing Wiki" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/104-qa-non-functional-testing/index.md b/src/roadmaps/qa/content/104-qa-non-functional-testing/index.md new file mode 100644 index 000000000..4a9c199a2 --- /dev/null +++ b/src/roadmaps/qa/content/104-qa-non-functional-testing/index.md @@ -0,0 +1,3 @@ +# Non Functional Testing + +In the process of Software testing, testing and analyzing only software’s functions doesn't complete the testing process. There are some other attributes which will demonstrate the entire software quality, they are known as quality characteristics. These characteristics include performance, security, usability, and reliability. Also not testing and analyzing the report of these characteristics will not affect the function of software, it will work to a degree of extent, but testing of these quality characteristics are referred to as QA non-functional testing. diff --git a/src/roadmaps/qa/content/105-qa-email-testing/100-mailinator.md b/src/roadmaps/qa/content/105-qa-email-testing/100-mailinator.md new file mode 100644 index 000000000..020f07833 --- /dev/null +++ b/src/roadmaps/qa/content/105-qa-email-testing/100-mailinator.md @@ -0,0 +1,8 @@ +# Mailinator + +Mailinator allows Developers and QA Testing teams to automatically test their SMS and Email workflows like 2FA verifications, sign-ups, and password resets with trillions of inboxes at your fingertips. Whether you do Manual Testing, use an API, or a framework like Selenium, Cypress, Playwright, or Puppeteer - Mailinator will close the loop on email/SMS testing. + +{% resources %} + {% Official "https://www.mailinator.com/", "Mailinator" %} + {% Official "https://www.mailinator.com/docs/index.html#mailinator", "Mailinator Official Docs" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/105-qa-email-testing/101-gmail-tester.md b/src/roadmaps/qa/content/105-qa-email-testing/101-gmail-tester.md new file mode 100644 index 000000000..197a9a6d0 --- /dev/null +++ b/src/roadmaps/qa/content/105-qa-email-testing/101-gmail-tester.md @@ -0,0 +1,9 @@ +# Gmail Tester + +Gmail-tester is a simple Node.js Gmail client which checks/returns email message(s) straight from any Gmail-powered account (both private and company). + + +{% resources %} + {% Official "https://www.npmjs.com/package/gmail-tester", "Gmail-tester Website" %} + {% Blog "https://medium.com/@sergtimosh/using-gmail-tester-puppeteer-to-poll-gmail-inbox-65bbee17618c", "Using the gmail-tester + Puppeteer to poll Gmail inbox" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/105-qa-email-testing/index.md b/src/roadmaps/qa/content/105-qa-email-testing/index.md new file mode 100644 index 000000000..5e036de2c --- /dev/null +++ b/src/roadmaps/qa/content/105-qa-email-testing/index.md @@ -0,0 +1,8 @@ +# Email Testing + +Email testing allows you to view your email before sending it out to your subscriber list to verify links, design, spelling errors, and more. + +{% resources %} + {% Blog "https://www.campaignmonitor.com/blog/email-marketing/how-email-testing-and-rendering-works-and-why-its-important/", "About Email Testing" %} + {% Blog "https://sponge.io/checklist-how-to-test-and-qa-an-email/", "Checklist: How to Test and QA an Email" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/106-qa-reporting/100-junit.md b/src/roadmaps/qa/content/106-qa-reporting/100-junit.md new file mode 100644 index 000000000..ce891f22f --- /dev/null +++ b/src/roadmaps/qa/content/106-qa-reporting/100-junit.md @@ -0,0 +1,7 @@ +# JUnit + +JUnit is known as a unit testing framework used for the Java programming language. JUnit has been playing a crucial in the development of test-driven development and is one of a family of unit testing frameworks. JUnit is useful to write repeatable tests for your application code units. JUnit stimulates the idea of “testing first, then coding,”. The test approach explicates –test a little + code a little = JUnit. JUnit helps the programmer by increasing the productivity and the stability of the program’s code snippets.That will helps in reducing the time of the tester, which is spent on debugging of the code. + +{% resources %} + {% Blog "https://www.tutorialspoint.com/junit/junit_test_framework.htm", "What is JUnit?" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/106-qa-reporting/101-allure.md b/src/roadmaps/qa/content/106-qa-reporting/101-allure.md new file mode 100644 index 000000000..1167f9f02 --- /dev/null +++ b/src/roadmaps/qa/content/106-qa-reporting/101-allure.md @@ -0,0 +1,8 @@ +# Allure + +Allure Report is a flexible, lightweight multi-language test reporting tool. It provides clear graphical reports and allows everyone involved in the development process to extract the maximum of information from the everyday testing process. + +{% resources %} + {% Official "https://qameta.io/", "Allure" %} + {% Official "https://docs.qameta.io/allure-report/", "Allure Official Docs" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/106-qa-reporting/102-test-rail.md b/src/roadmaps/qa/content/106-qa-reporting/102-test-rail.md new file mode 100644 index 000000000..22e489afe --- /dev/null +++ b/src/roadmaps/qa/content/106-qa-reporting/102-test-rail.md @@ -0,0 +1,9 @@ +# Test Rail + +TestRail is a web-based test management tool used by testers, developers and other stake holders to manage, track and organize software testing efforts. It follows a centralized test management concept that helps in easy communication and enables rapid development of task across QA team and other stakeholders . + +{% resources %} + {% Official "https://www.gurock.com/testrail/", "Testrail" %} + {% Official "https://support.gurock.com/hc/en-us/", "Testrail Official Docs" %} + {% Blog "https://www.tutorialspoint.com/testrail/testrail_introduction.htm", "Testrail Tutorial Docs" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/106-qa-reporting/index.md b/src/roadmaps/qa/content/106-qa-reporting/index.md new file mode 100644 index 000000000..45541eaea --- /dev/null +++ b/src/roadmaps/qa/content/106-qa-reporting/index.md @@ -0,0 +1,11 @@ +# QA reporting + +The International Software Testing Qualifications Board (ISTQB) glossary defines a QA report as: *Documentation summarizing test activities and results*. +By documenting the testing that was conducted and the results that were achieved, QA reports provide valuable insight into the health of the code base and critical metrics. As such, they should be generated on a regular basis to ensure the quality standards are being met. +So basically, test reports should document all of the test cases that were performed during software testing, as well as the results of those tests. They should also deliver relevant information about the product and highlight any areas where improvements can be made. + +{% resources %} + {% Blog "https://www.netguru.com/blog/how-to-write-qa-report", "How do you write a QA report?" %} + {% Blog "https://www.qatouch.com/blog/how-to-write-qa-test-summary-report/", "How To Write QA Test Summary Report? [13 Easy Steps]" %} +{% endresources %} + diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/100-grafana.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/100-grafana.md new file mode 100644 index 000000000..501ffdfba --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/100-grafana.md @@ -0,0 +1,10 @@ +# Grafana + +Grafana is the open-source platform for monitoring and observability. It allows you to query, visualize, alert on and understand your metrics no matter where they are stored. + +{% resources %} + {% Blog "https://grafana.com/", "Grafana Website" %} + {% Blog "https://grafana.com/docs/", "Grafana Official Documentation" %} + {% Blog "https://community.grafana.com/", "Grafana Community" %} + {% Course "https://grafana.com/videos/", "Grafana Webinars and Videos" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/101-new-relic.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/101-new-relic.md new file mode 100644 index 000000000..f072731f0 --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/101-new-relic.md @@ -0,0 +1,8 @@ +# New Relic + +New Relic is an observability platform that helps you build better software. You can bring in data from any digital source so that you can fully understand your system and how to improve it. + +{% resources %} + {% Blog "https://newrelic.com/", "New Relic Website" %} + {% Course "https://learn.newrelic.com/", "Learn New Relic" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/102-run-scope.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/102-run-scope.md new file mode 100644 index 000000000..f86f0b29a --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/102-run-scope.md @@ -0,0 +1,10 @@ +# Run scope + +A Simple Tool for Monitoring Complex APIs. Verify that the structure and content of your API calls meets your expectations. Powerful and flexible assertions give you total control over defining a successful API call. + +Create simple monitors with dynamic data for even the most complex use cases. More than simple string matching, build API validations without any code and use them across local dev, staging and production environments. + +{% resources %} + {% Blog "https://www.runscope.com", "Runscope Website" %} +{% endresources %} + diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/103-sentry.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/103-sentry.md new file mode 100644 index 000000000..b60c119e0 --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/103-sentry.md @@ -0,0 +1,7 @@ +# Sentry + +Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. + +{% resources %} + {% Blog "https://sentry.io", "Sentry Website" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/104-kibana.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/104-kibana.md new file mode 100644 index 000000000..13bb4df67 --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/104-kibana.md @@ -0,0 +1,8 @@ +# Kibana + +Kibana is a free and open user interface that lets you visualize your Elasticsearch data and navigate the Elastic Stack. Do anything from tracking query load to understanding the way requests flow through your apps. + +{% resources %} + {% Blog "https://www.elastic.co/kibana/", "Elastic Kibana Website" %} + {% Course "https://www.elastic.co/training/free", "Learn Kibana" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/105-data-dog.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/105-data-dog.md new file mode 100644 index 000000000..aee0202a6 --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/105-data-dog.md @@ -0,0 +1,8 @@ +# Datadog + +Datadog is a monitoring and analytics platform for large-scale applications. It encompasses infrastructure monitoring, application performance monitoring, log management, and user-experience monitoring. Datadog aggregates data across your entire stack with 400+ integrations for troubleshooting, alerting, and graphing. + +{% resources %} + {% Official "https://www.datadoghq.com/", "Datadog Website" %} + {% Official "https://docs.datadoghq.com/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/106-pager-duty.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/106-pager-duty.md new file mode 100644 index 000000000..95d804362 --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/106-pager-duty.md @@ -0,0 +1,8 @@ +# PagerDuty + +Through its SaaS-based platform, PagerDuty empowers developers, DevOps, IT operations and business leaders to prevent and resolve business-impacting incidents for exceptional customer experience. When revenue and brand reputation depends on customer satisfaction, PagerDuty arms organizations with the insight to proactively manage events that may impact customers across their IT environment. With hundreds of native integrations, on-call scheduling and escalations, machine learning, business-wide response orchestration, analytics, and much more, PagerDuty gets the right data in the hands of the right people in real time, every time. + +{% resources %} + {% Official "https://www.pagerduty.com/", "PagerDuty Website" %} + {% Course "https://university.pagerduty.com/", "Learn PagerDuty" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/107-qa-monitoring-logs/index.md b/src/roadmaps/qa/content/107-qa-monitoring-logs/index.md new file mode 100644 index 000000000..fe2446b4e --- /dev/null +++ b/src/roadmaps/qa/content/107-qa-monitoring-logs/index.md @@ -0,0 +1,3 @@ +# Monitoring and Logs + +DevOps monitoring entails overseeing the entire development process from planning, development, integration and testing, deployment, and operations. It involves a complete and real-time view of the status of applications, services, and infrastructure in the production environment. Features such as real-time streaming, historical replay, and visualizations are critical components of application and service monitoring. diff --git a/src/roadmaps/qa/content/108-qa-vcs/100-git.md b/src/roadmaps/qa/content/108-qa-vcs/100-git.md new file mode 100644 index 000000000..7febf6901 --- /dev/null +++ b/src/roadmaps/qa/content/108-qa-vcs/100-git.md @@ -0,0 +1,10 @@ +# Git + +[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. + +{% resources %} + {% Course "https://github.com/jlord/git-it-electron", "Learn Git on the command line" %} + {% Blog "https://www.youtube.com/watch?v=zbKdDsNNOhg", "Version Control System Introduction" %} + {% Blog "https://www.youtube.com/watch?v=SWYqp7iY_Tc", "Git & GitHub Crash Course For Beginners" %} + {% Blog "https://youtu.be/Y9XZQO1n_7c?t=21", "Learn Git in 20 Minutes" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/108-qa-vcs/index.md b/src/roadmaps/qa/content/108-qa-vcs/index.md new file mode 100644 index 000000000..e92d292b1 --- /dev/null +++ b/src/roadmaps/qa/content/108-qa-vcs/index.md @@ -0,0 +1,10 @@ +# Version Control Systems + +Version control/source control systems allow developers to track and control changes to code over time. These services often include the ability to make atomic revisions to code, branch/fork off of specific points, and to compare versions of code. They are useful in determining the who, what, when, and why code changes were made. + + +{% resources %} + {% Official "https://git-scm.com/", "Git" %} + {% Official "https://www.mercurial-scm.org/", "Mercurial" %} + {% Blog "https://www.atlassian.com/git/tutorials/what-is-version-control", "What is Version Control?" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/109-qa-repo-hosting-services/100-gitlab.md b/src/roadmaps/qa/content/109-qa-repo-hosting-services/100-gitlab.md new file mode 100644 index 000000000..a3bc43043 --- /dev/null +++ b/src/roadmaps/qa/content/109-qa-repo-hosting-services/100-gitlab.md @@ -0,0 +1,8 @@ +# GitLab + +GitLab 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. + +{% resources %} + {% Official "https://gitlab.com/", "GitLab Website" %} + {% Official "https://docs.gitlab.com/", "GitLab Documentation" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/109-qa-repo-hosting-services/101-bitbucket.md b/src/roadmaps/qa/content/109-qa-repo-hosting-services/101-bitbucket.md new file mode 100644 index 000000000..0facc9ce8 --- /dev/null +++ b/src/roadmaps/qa/content/109-qa-repo-hosting-services/101-bitbucket.md @@ -0,0 +1,14 @@ +# Bitbucket + +Bitbucket is a Git based hosting and source code repository service that is Atlassian's alternative to other products like GitHub, GitLab etc + +Bitbucket offers hosting options via Bitbucket Cloud (Atlassian's servers), Bitbucket Server (customer's on-premise) or Bitbucket Data Centre (number of servers in customers on-premise or cloud environment) + +{% resources %} + {% Blog "https://bitbucket.org/product", "Bitbucket Website" %} + {% Blog "https://bitbucket.org/product/guides/getting-started/overview#a-brief-overview-of-bitbucket", "A brief overview of Bitbucket" %} + {% Blog "https://bitbucket.org/product/guides/basics/bitbucket-interface", "Getting started with Bitbucket" %} + {% Blog "https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud", "Using Git with Bitbucket Cloud" %} + {% Blog "https://www.youtube.com/watch?v=M44nEyd_5To", "Bitbucket tutorial | How to use Bitbucket Cloud" %} + {% Blog "https://www.youtube.com/watch?v=i5T-DB8tb4A", "Bitbucket Tutorial | Bitbucket for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/109-qa-repo-hosting-services/102-github.md b/src/roadmaps/qa/content/109-qa-repo-hosting-services/102-github.md new file mode 100644 index 000000000..be4dcf64b --- /dev/null +++ b/src/roadmaps/qa/content/109-qa-repo-hosting-services/102-github.md @@ -0,0 +1,13 @@ +# GitHub + +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. + +{% resources %} + {% Official "https://github.com", "GitHub Website" %} + {% Official "https://docs.github.com/en/get-started/quickstart", "GitHub Documentation" %} + {% Blog "https://www.youtube.com/watch?v=w3jLJU7DT5E", "What is GitHub?" %} + {% Blog "https://www.youtube.com/watch?v=wpISo9TNjfU", "Git vs. GitHub: Whats the difference?" %} + {% Blog "https://www.youtube.com/watch?v=RGOj5yH7evk", "Git and GitHub for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=eulnSXkhE7I", "Git and GitHub - CS50 Beyond 2019" %} + {% Course "https://ooloo.io/project/github-flow", "How to Use Git in a Professional Dev Team" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/109-qa-repo-hosting-services/index.md b/src/roadmaps/qa/content/109-qa-repo-hosting-services/index.md new file mode 100644 index 000000000..67e7a5a9b --- /dev/null +++ b/src/roadmaps/qa/content/109-qa-repo-hosting-services/index.md @@ -0,0 +1,9 @@ +# Repo Hosting Services + +There are different repository hosting services with the most famous one being GitHub, GitLab and BitBucket. I would recommend creating an account on GitHub because that is where most of the OpenSource work is done and most of the developers are. + +{% resources %} + {% Blog "https://github.com", "GitHub: Where the world builds software" %} + {% Blog "https://gitlab.com", "GitLab: Iterate faster, innovate together" %} + {% Blog "https://bitbucket.com", "BitBucket: The Git solution for professional teams" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/100-jenkins.md b/src/roadmaps/qa/content/110-qa-ci-cd/100-jenkins.md new file mode 100644 index 000000000..6e6d15c48 --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/100-jenkins.md @@ -0,0 +1,9 @@ +# Jenkins + +Jenkins is an open-source CI/CD automation server. Jenkins is primarily used for building projects, running tests, static code analysis and deployments. + +{% resources %} + {% Official "https://www.jenkins.io/", "Jenkins Website" %} + {% Official "https://www.jenkins.io/doc/book/", "Official Jenkins Handbook" %} + {% Blog "https://www.jenkins.io/doc/pipeline/tour/getting-started/", "Jenkins Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/101-travis-ci.md b/src/roadmaps/qa/content/110-qa-ci-cd/101-travis-ci.md new file mode 100644 index 000000000..fef909ee9 --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/101-travis-ci.md @@ -0,0 +1,9 @@ +# Travis CI + +Travis CI is a CI/CD service that is primarily used for building and testing projects that are hosted on BitBucket and GitHub. Open source projects can utilized Travis CI for free. + +{% resources %} + {% Official "https://www.travis-ci.com/", "Travis CI Website" %} + {% Official "https://docs.travis-ci.com/", "Travis CI Documentation" %} + {% Blog "https://docs.travis-ci.com/user/tutorial/", "Travis CI Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/102-circle-ci.md b/src/roadmaps/qa/content/110-qa-ci-cd/102-circle-ci.md new file mode 100644 index 000000000..a8a7bd343 --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/102-circle-ci.md @@ -0,0 +1,9 @@ +# CircleCI + +CircleCI is a CI/CD service that can be integrated with GitHub, BitBucket and GitLab repositories. The service that can be used as a SaaS offering or self-managed using your own resources. + +{% resources %} + {% Official "https://circleci.com/", "CircleCI Website" %} + {% Official "https://circleci.com/docs", "CircleCI Documentation" %} + {% Blog "https://circleci.com/docs/config-intro", "Configuration Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/103-drone.md b/src/roadmaps/qa/content/110-qa-ci-cd/103-drone.md new file mode 100644 index 000000000..273f418ce --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/103-drone.md @@ -0,0 +1,9 @@ +# Drone + +Drone is a CI/CD service offering by [Harness](https://harness.io/). Each build runs on an isolated Docker container, and Drone integrates with many popular source code management repositories like GitHub, BitBucket and GitLab + +{% resources %} + {% Official "https://www.drone.io/", "Drone Website" %} + {% Official "https://docs.drone.io/", "Official Documentation" %} + {% Blog "https://docs.drone.io/server/overview/", "Drone Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/104-gitlab-ci.md b/src/roadmaps/qa/content/110-qa-ci-cd/104-gitlab-ci.md new file mode 100644 index 000000000..56c4f7538 --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/104-gitlab-ci.md @@ -0,0 +1,11 @@ +# GitLab CI + +GitLab offers a CI/CD service that can be used as a SaaS offering or self-managed using your own resources. You can use GitLab CI with any GitLab hosted repository, or any BitBucket Cloud or GitHub repository in the GitLab Premium self-managed, GitLab Premium SaaS and higher tiers. + +{% resources %} + {% Official "https://gitlab.com/", "GitLab Website" %} + {% Official "https://docs.gitlab.com/", "GitLab Documentation" %} + {% Blog "https://docs.gitlab.com/ee/ci/quick_start/", "Get Started with GitLab CI" %} + {% Blog "https://docs.gitlab.com/ee/tutorials/", "Learn GitLab Tutorials" %} + {% Blog "https://docs.gitlab.com/ee/ci/examples/", "GitLab CI/CD Examples" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/105-bamboo.md b/src/roadmaps/qa/content/110-qa-ci-cd/105-bamboo.md new file mode 100644 index 000000000..f7421ff3e --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/105-bamboo.md @@ -0,0 +1,9 @@ +# Bamboo + +Bamboo is a CI/CD service provided by Atlassian. Bamboo is primarily used for automating builds, tests and releases in a single workflow. + +{% resources %} + {% Official "https://www.atlassian.com/software/bamboo", "Bamboo Website" %} + {% Official "https://confluence.atlassian.com/bamboo/bamboo-documentation-289276551.html", "Official Documentation" %} + {% Blog "https://confluence.atlassian.com/bamboo/getting-started-with-bamboo-289277283.html", "Bamboo Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/106-team-city.md b/src/roadmaps/qa/content/110-qa-ci-cd/106-team-city.md new file mode 100644 index 000000000..c9fbfc048 --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/106-team-city.md @@ -0,0 +1,10 @@ +# TeamCity + +TeamCity is a CI/CD service provided by JetBrains. TeamCity can be used as a SaaS offering or self-managed using your own resources. + +{% resources %} + {% Official "https://www.jetbrains.com/teamcity/", "TeamCity Website" %} + {% Official "https://www.jetbrains.com/help/teamcity/teamcity-documentation.html", "Official Documentation" %} + {% Blog "https://www.jetbrains.com/teamcity/tutorials/", "TeamCity Tutorials" %} + {% Blog "https://www.jetbrains.com/teamcity/learn/", "TeamCity Learning Portal" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/107-azure-devops-services.md b/src/roadmaps/qa/content/110-qa-ci-cd/107-azure-devops-services.md new file mode 100644 index 000000000..51dbd83fc --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/107-azure-devops-services.md @@ -0,0 +1,9 @@ +# Azure DevOps + +Azure DevOps is developed by Microsoft as a full scale application lifecycle management and CI/CD service. Azure DevOps provides developer services for allowing teams to plan work, collaborate on code development, and build and deploy applications. + +{% resources %} + {% Official "https://azure.microsoft.com/en-us/services/devops/#overview", "Azure DevOps Website" %} + {% Official "https://docs.microsoft.com/en-us/azure/devops/?view=azure-devops&viewFallbackFrom=vsts", "Official Documentation" %} + {% Blog "https://docs.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops", "Azure DevOps Getting Started Guide" %} +{% endresources %} diff --git a/src/roadmaps/qa/content/110-qa-ci-cd/index.md b/src/roadmaps/qa/content/110-qa-ci-cd/index.md new file mode 100644 index 000000000..7b55ae131 --- /dev/null +++ b/src/roadmaps/qa/content/110-qa-ci-cd/index.md @@ -0,0 +1,11 @@ +# CI / CD + +Continuous Integration is a software development method where team members integrate their work at least once daily. An automated build checks every integration to detect errors in this method. In Continuous Integration, the software is built and tested immediately after a code commit. In a large project with many developers, commits are made many times during the day. With each commit, code is built and tested. + +Continuous Delivery is a software engineering method in which a team develops software products in a short cycle. It ensures that software can be easily released at any time. The main aim of continuous delivery is to build, test, and release software with good speed and frequency. It helps reduce the cost, time, and risk of delivering changes by allowing for frequent updates in production. + +{% resources %} + {% Blog "https://www.guru99.com/continuous-integration.html", "What is CI/CD? Continuous Integration and Continuous Delivery" %} + {% Blog "https://www.guru99.com/continuous-integration-vs-delivery-vs-deployment.html", "Continuous Integration vs Delivery vs Deployment" %} + {% Blog "https://www.guru99.com/ci-cd-pipeline.html", "CI/CD Pipeline: Learn with Example" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/100-zombie-js.md b/src/roadmaps/qa/content/111-qa-headless-testing/100-zombie-js.md new file mode 100644 index 000000000..989daeff1 --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/100-zombie-js.md @@ -0,0 +1,8 @@ +# Zombie.js + +Zombie.js allows you to run Unit or Integration tests without a real web browser. Instead, it uses a simulated browser where it stores the HTML code and runs the JavaScript you may have in your HTML page. This means that an HTML page doesn’t need to be displayed, saving precious time that would otherwise be occupied rendering it. + +{% resources %} + {% Official "http://zombie.js.org/", "Zombie.js Website" %} + {% Blog "https://www.packt.com/getting-started-zombiejs/", "Getting Started with Zombie.js" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/101-playwright.md b/src/roadmaps/qa/content/111-qa-headless-testing/101-playwright.md new file mode 100644 index 000000000..b5c0f150e --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/101-playwright.md @@ -0,0 +1,8 @@ +# Playwright + +Playwright is an open-source test automation library initially developed by Microsoft contributors. It supports programming languages such as Java, Python, C#, and NodeJS. Playwright comes with Apache 2.0 License and is most popular with NodeJS with Javascript/Typescript. + +{% resources %} + {% Official "https://playwright.dev/", "Playwright Website" %} + {% Blog "https://www.browserstack.com/guide/playwright-tutorial", "Playwright Tutorial: Learn Basics and Setup" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/102-puppeteer.md b/src/roadmaps/qa/content/111-qa-headless-testing/102-puppeteer.md new file mode 100644 index 000000000..30c5f3fe9 --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/102-puppeteer.md @@ -0,0 +1,8 @@ +# Puppeteer + +Puppeteer is a Node library that provides a high-level API to control headless Chrome or Chromium browsers over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome or Chromium. + +{% resources %} + {% Official "https://pptr.dev/", "Puppeteer Website" %} + {% Blog "https://www.freecodecamp.org/news/how-to-use-puppeteer-with-nodejs/", "How to Use Puppeteer With Node.js" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/103-cypress.md b/src/roadmaps/qa/content/111-qa-headless-testing/103-cypress.md new file mode 100644 index 000000000..58b03d071 --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/103-cypress.md @@ -0,0 +1,9 @@ +# Cypress + +Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha – a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework. + +{% resources %} + {% Blog "https://www.cypress.io/", "Official Website" %} + {% Blog "https://docs.cypress.io/guides/overview/why-cypress#Other", "Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=7N63cMKosIE", "Cypress End-to-End Testing" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/104-headless-chrome.md b/src/roadmaps/qa/content/111-qa-headless-testing/104-headless-chrome.md new file mode 100644 index 000000000..896fb43af --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/104-headless-chrome.md @@ -0,0 +1,7 @@ +# Headless Chrome + +Headless Chrome is a way to run the Chrome browser in a headless environment without the full browser UI. One of the benefits of using Headless Chrome (as opposed to testing directly in Node) is that your JavaScript tests will be executed in the same environment as users of your site. + +{% resources %} + {% Blog "https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md", "Headless Chromium" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/105-headless-fox.md b/src/roadmaps/qa/content/111-qa-headless-testing/105-headless-fox.md new file mode 100644 index 000000000..05fc5934a --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/105-headless-fox.md @@ -0,0 +1,7 @@ +# Headless Fox + +Headless Browser Testing is a process of running the browser tests without the type of browser UI or GUI. In headless browser testing, to conduct cross-browser testing the tester can run test cases accurately and successfully without requiring the browser on which application needs to be tested. + +{% resources %} + {% Blog "https://hacks.mozilla.org/2017/12/using-headless-mode-in-firefox/", "Using Headless Mode in Firefox" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/106-html-unit.md b/src/roadmaps/qa/content/111-qa-headless-testing/106-html-unit.md new file mode 100644 index 000000000..0d9516943 --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/106-html-unit.md @@ -0,0 +1,10 @@ +# HtmlUnit + +HtmlUnit is a "GUI-Less browser for Java programs". It models HTML documents and provides an API that allows you to invoke pages, fill out forms, click links, etc... just like you do in your "normal" browser. It has fairly good JavaScript support (which is constantly improving) and is able to work even with quite complex AJAX libraries, simulating Chrome, Firefox or Internet Explorer depending on the configuration used. + +HtmlUnit is not a generic unit testing framework. It is specifically a way to simulate a browser for testing purposes and is intended to be used within another testing framework such as JUnit or TestNG. + +{% resources %} + {% Official "https://htmlunit.sourceforge.io/", "HtmlUnit Website" %} + {% Blog "https://www.baeldung.com/htmlunit", "Introduction to HtmlUnit" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/content/111-qa-headless-testing/index.md b/src/roadmaps/qa/content/111-qa-headless-testing/index.md new file mode 100644 index 000000000..ab5764e8b --- /dev/null +++ b/src/roadmaps/qa/content/111-qa-headless-testing/index.md @@ -0,0 +1,13 @@ +# Headless Testing + +Headless testing is when end-to-end tests are performed without loading the browser's user interface. Since the browser operates as a typical browser would but does not make use of the user interface, it is considered highly suitable for automated testing. + +A few example cases where one may use headless browser testing include: + +- Automating HTML event responses, such as form submission, keyboard events, mouse-clicking, etc. +- Web scraping +- Generating screenshots of webpages + +{% resources %} + {% Blog "https://www.browserstack.com/guide/what-is-headless-browser-testing", "What is Headless Browser Testing and Why is it Important?" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/qa/qa.md b/src/roadmaps/qa/qa.md new file mode 100644 index 000000000..9128adc7a --- /dev/null +++ b/src/roadmaps/qa/qa.md @@ -0,0 +1,44 @@ +--- +jsonUrl: "/jsons/qa.json" +pdfUrl: "/pdfs/qa.pdf" +order: 7 +featuredTitle: "QA" +featuredDescription: "Step by step guide to becoming a modern QA Engineer in 2022" +title: "QA Engineer" +description: "Steps to follow in order to become a modern QA Engineer in 2022" +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 2107.75 +seo: + title: "QA Roadmap: Learn to become a modern QA engineer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for modern QA development. Learn to become a modern QA engineer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a QA engineer" + - "QA engineer" + - "QA skills" + - "QA development skills" + - "QA development skills test" + - "QA engineer roadmap" + - "become a QA engineer" + - "QA engineer career path" + - "skills for QA development" + - "what is QA engineer" + - "QA engineer quiz" + - "QA engineer interview questions" +relatedRoadmaps: + - "frontend" + - "backend" + - "devops" + - "javascript" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + diff --git a/src/roadmaps/react-native/react-native.md b/src/roadmaps/react-native/react-native.md new file mode 100644 index 000000000..59f9272bb --- /dev/null +++ b/src/roadmaps/react-native/react-native.md @@ -0,0 +1,45 @@ +--- +jsonUrl: "/jsons/react-native.json" +pdfUrl: "/pdfs/react-native.pdf" +order: 11 +featuredTitle: "React Native" +featuredDescription: "Step by step guide to becoming a React Native Developer in 2022" +title: "React Native Developer" +description: "Step by step guide to becoming a React Native developer in 2022" +isUpcoming: true +seo: + title: "Learn to become a modern React Native developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for react native development. Learn to become a modern React Native developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a react native developer" + - "guide to becoming a react native developer" + - "react native developer" + - "react native engineer" + - "react native skills" + - "guide to react native" + - "react native roadmap" + - "react native skills" + - "react native skills test" + - "skills for react native" + - "what is react native" + - "react native quiz" + - "react native interview questions" + - "react native engineer roadmap" + - "react native developer roadmap" + - "become a react native developer" + - "react native developer career path" + - "react native developer" + - "modern react native developer" +relatedRoadmaps: + - "flutter" + - "android" + - "javascript" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/100-create-react-app.md b/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/100-create-react-app.md new file mode 100644 index 000000000..2e1dd7455 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/100-create-react-app.md @@ -0,0 +1,10 @@ +# Create React App + +Create React App is the CLI based tool and is the best way to start building a new single-page application in React. + +It sets up your development environment so that you can use the latest JavaScript features, provides a nice developer experience, and optimizes your app for production. You’ll need to have Node >= 14.0.0 and npm >= 5.6 on your machine. + +{% resources %} + {% Official "https://create-react-app.dev/docs/getting-started", "Official Website" %} + {% Blog "https://www.robinwieruch.de/minimal-react-webpack-babel-setup/", "Advanced: Custom Setup with Webpack" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/101-vite.md b/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/101-vite.md new file mode 100644 index 000000000..ce3d439a4 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/101-vite.md @@ -0,0 +1,9 @@ +# Vite + +Vite is a build tool that aims to provide a faster and leaner development experience for modern web projects. + +{% resources %} + {% Official "https://vitejs.dev", "Vite Website" %} + {% Official "https://vitejs.dev/guide", "Vite Documentation" %} + {% Course "https://youtu.be/LQQ3CR2JTX8", "Vite Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/index.md b/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/index.md new file mode 100644 index 000000000..bff35fd0d --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/100-cli-tools/index.md @@ -0,0 +1,6 @@ +# CLI Tools + +Here is the list of most common CLI tools for React development: + +* [create-react-app](https://create-react-app.dev) +* [vite](https://vitejs.dev) diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/100-create-react-app.md b/src/roadmaps/react/content/100-react-fundamental-topics/100-create-react-app.md new file mode 100644 index 000000000..2e1dd7455 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/100-create-react-app.md @@ -0,0 +1,10 @@ +# Create React App + +Create React App is the CLI based tool and is the best way to start building a new single-page application in React. + +It sets up your development environment so that you can use the latest JavaScript features, provides a nice developer experience, and optimizes your app for production. You’ll need to have Node >= 14.0.0 and npm >= 5.6 on your machine. + +{% resources %} + {% Official "https://create-react-app.dev/docs/getting-started", "Official Website" %} + {% Blog "https://www.robinwieruch.de/minimal-react-webpack-babel-setup/", "Advanced: Custom Setup with Webpack" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/101-jsx.md b/src/roadmaps/react/content/100-react-fundamental-topics/101-jsx.md new file mode 100644 index 000000000..6039d63b7 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/101-jsx.md @@ -0,0 +1,9 @@ +# JSX + +JSX stands for JavaScript XML. It allows writing HTML in JavaScript and converts the HTML tags into React elements. + +{% resources %} + {% Official "https://reactjs.org/docs/introducing-jsx.html", "Introduction to JSX" %} + {% Blog "https://www.freecodecamp.org/news/jsx-in-react-introduction/", "JSX in React – Explained with Examples" %} + {% Blog "https://www.w3schools.com/react/react_jsx.asp", "JSX in React on w3school" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/102-components/100-functional-components.md b/src/roadmaps/react/content/100-react-fundamental-topics/102-components/100-functional-components.md new file mode 100644 index 000000000..a1edcf3c4 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/102-components/100-functional-components.md @@ -0,0 +1,9 @@ +# Functional Components + +Functional components are some of the more common components that will come across while working in React. These are simply JavaScript functions. We can create a functional component to React by writing a JavaScript function. These functions may or may not receive data as parameters. In the functional Components, the return value is the JSX code to render to the DOM tree. Functional components can also have state which is managed using React hooks. + +{% resources %} + {% Official "https://reactjs.org/docs/components-and-props.html#function-and-class-components", "Components and Props" %} + {% Blog "https://www.geeksforgeeks.org/reactjs-functional-components/", "Functional Components in React (1)" %} + {% Blog "https://www.robinwieruch.de/react-function-component/", "Functional Components in React (2)" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/102-components/101-class-components.md b/src/roadmaps/react/content/100-react-fundamental-topics/102-components/101-class-components.md new file mode 100644 index 000000000..e9793173f --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/102-components/101-class-components.md @@ -0,0 +1,12 @@ +# Class Components + +Components can either be created using the class based approach or a functional approach. These components are simple classes (made up of multiple functions that add functionality to the application). All class based components are child classes for the Component class of ReactJS. + +Although the class components are supported in React, it is encouraged to write functional components and make use of hooks in modern React applications. + +{% resources %} + {% Official "https://reactjs.org/docs/components-and-props.html#function-and-class-components", "Components and Props" %} + {% Blog "https://medium.com/geekculture/is-there-any-reason-to-still-use-react-class-components-9b6a1e6aa9ef", "Is There Any Reason to Still Use React Class Components?" %} + {% Blog "https://www.freecodecamp.org/news/functional-components-vs-class-components-in-react", "Functional Components vs Class Components in React" %} + {% Blog "https://www.robinwieruch.de/react-hooks-migration/", "Migrate Class Components to Functional Components with Hooks in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/102-components/index.md b/src/roadmaps/react/content/100-react-fundamental-topics/102-components/index.md new file mode 100644 index 000000000..9ef284f94 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/102-components/index.md @@ -0,0 +1,10 @@ +# Components + +Components are the building blocks of React applications. They let us split the UI into independent, reusable pieces, and think about each piece in isolation. + +{% resources %} + {% Official "https://reactjs.org/docs/components-and-props.html", "Components and Props" %} + {% Official "https://reactjs.org/docs/react-component.html", "Components in Depth" %} + {% Blog "https://www.robinwieruch.de/react-component-types/", "Explore the different types of components in React" %} + {% Blog "https://www.robinwieruch.de/react-element-component/", "What is the difference between components, elements, and instances?" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/103-props-vs-state.md b/src/roadmaps/react/content/100-react-fundamental-topics/103-props-vs-state.md new file mode 100644 index 000000000..cbf8ec8c4 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/103-props-vs-state.md @@ -0,0 +1,9 @@ +# Props vs State + +Props (short for “properties”) and state are both plain JavaScript objects. While both hold information that influences the output of component render, they are different in one important way: props get passed to the component (similar to function parameters) whereas state is managed within the component (similar to variables declared within a function). + +{% resources %} + {% Official "https://reactjs.org/docs/faq-state.html", "Component State" %} + {% Blog "https://www.robinwieruch.de/react-pass-props-to-component/", "How to use Props in React" %} + {% Blog "https://stackoverflow.com/questions/27991366/what-is-the-difference-between-state-and-props-in-react", "What is the difference between state and props in React?" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/104-conditional-rendering.md b/src/roadmaps/react/content/100-react-fundamental-topics/104-conditional-rendering.md new file mode 100644 index 000000000..666b2f36b --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/104-conditional-rendering.md @@ -0,0 +1,10 @@ +# Conditional Rendering + +In React, you can create distinct components that encapsulate behavior you need. Then, you can render only some of them, depending on the state of your application. + +Conditional rendering in React works the same way conditions work in JavaScript. Use JavaScript operators like [if](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) or the [conditional operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) to create elements representing the current state, and let React update the UI to match them. + +{% resources %} + {% Official "https://reactjs.org/docs/conditional-rendering.html", "Conditional Rendering" %} + {% Blog "https://www.robinwieruch.de/conditional-rendering-react/", "Different techniques for conditional rendering in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/105-component-life-cycle.md b/src/roadmaps/react/content/100-react-fundamental-topics/105-component-life-cycle.md new file mode 100644 index 000000000..6dab587d9 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/105-component-life-cycle.md @@ -0,0 +1,10 @@ +# Component Life Cycle + +Each component has several “lifecycle methods” that you can override to run code at particular times in the process. You can use this [lifecycle diagram](https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/) as a cheat sheet. In the list below, commonly used lifecycle methods are marked as bold. The rest of them exist for relatively rare use cases. + +{% resources %} + {% Official "https://reactjs.org/docs/react-component.html#the-component-lifecycle", "The Component Lifecycle" %} +{% endresources %} + + + diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/106-lists-and-keys.md b/src/roadmaps/react/content/100-react-fundamental-topics/106-lists-and-keys.md new file mode 100644 index 000000000..45aa8c778 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/106-lists-and-keys.md @@ -0,0 +1,9 @@ +# Lists and Keys + +When you render lists in React, you can use the `key` prop to specify a unique key for each item. This key is used to identify which item to update when you want to update a specific item. + +{% resources %} + {% Official "https://reactjs.org/docs/lists-and-keys.html", "Lists and Keys" %} + {% Blog "https://www.robinwieruch.de/react-list-component/", "List components in React by Example" %} + {% Blog "https://www.robinwieruch.de/react-list-key/", "Why do we need the key prop in React?" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/107-composition-vs-inheritance.md b/src/roadmaps/react/content/100-react-fundamental-topics/107-composition-vs-inheritance.md new file mode 100644 index 000000000..918443c53 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/107-composition-vs-inheritance.md @@ -0,0 +1,8 @@ +# Composition vs Inheritance + +React has a powerful composition model, and it is recommended to use composition instead of inheritance to reuse code between components. + +{% resources %} + {% Official "https://reactjs.org/docs/composition-vs-inheritance.html", "Composition vs Inheritance" %} + {% Blog "https://www.robinwieruch.de/react-component-composition/", "How to perform component composition in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/100-use-state.md b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/100-use-state.md new file mode 100644 index 000000000..66cb24184 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/100-use-state.md @@ -0,0 +1,8 @@ +# useState Hook + +`useState` hook is used to manage the state of a component in functional components. Calling `useState` returns an array with two elements: the current state value and a function to update the state. + +{% resources %} + {% Official "https://reactjs.org/docs/hooks-state.html", "Using the State Hook" %} + {% Blog "https://www.robinwieruch.de/react-usestate-hook/", "React useState Hook by Example" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/101-use-effect.md b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/101-use-effect.md new file mode 100644 index 000000000..9afcbb0e3 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/101-use-effect.md @@ -0,0 +1,8 @@ +# useEffect Hook + +`useEffect` is a special hook that lets you run side effects in React. It is similar to componentDidMount and componentDidUpdate, but it only runs when the component (or some of its props) changes and during the initial mount. + +{% resources %} + {% Official "https://reactjs.org/docs/hooks-effect.html", "Using the Effect Hook" %} + {% Blog "https://www.robinwieruch.de/react-useeffect-hook/", "React useEffect Hook by Example" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/102-use-context.md b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/102-use-context.md new file mode 100644 index 000000000..ba3d76860 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/102-use-context.md @@ -0,0 +1,9 @@ +# useContext Hook + +`useContext` hook is used to read and subscribe to context from your component. Context allows a parent component to pass data down the entire component tree below it. + +{% resources %} + {% Official "https://beta.reactjs.org/apis/react/useContext", "Using the Context Hook" %} + {% Blog "https://www.youtube.com/watch?v=5LrDIWkK_Bc", "Learn useContext in 13 Minutes" %} + {% Blog "https://www.robinwieruch.de/react-usecontext-hook", "How to useContext in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/index.md b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/index.md new file mode 100644 index 000000000..dedbfc581 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/108-basic-hooks/index.md @@ -0,0 +1,9 @@ +# Hooks + +Hooks were introduced in React 16.8 and they let us use React's features-like managing your component's state and or performing an after effect when certain changes occur in state(s) without writing a class. + + +{% resources %} + {% Official "https://reactjs.org/docs/hooks-intro.html", "Introduction to Hooks" %} + {% Official "https://reactjs.org/docs/hooks-reference.html", "Hooks Reference" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/109-events.md b/src/roadmaps/react/content/100-react-fundamental-topics/109-events.md new file mode 100644 index 000000000..18fd7f4b9 --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/109-events.md @@ -0,0 +1,12 @@ +# Events + +Handling events with React elements is very similar to handling events on DOM elements. There are some syntax differences: + +* React events are named using camelCase, rather than lowercase. +* With JSX you pass a function as the event handler, rather than a string. + +{% resources %} + {% Official "https://reactjs.org/docs/handling-events.html", "Handling Events in React" %} + {% Official "https://reactjs.org/docs/events.html", "Synthetic Events in React" %} + {% Blog "https://www.robinwieruch.de/react-event-handler/", "React Event Handler" %} +{% endresources %} diff --git a/src/roadmaps/react/content/100-react-fundamental-topics/index.md b/src/roadmaps/react/content/100-react-fundamental-topics/index.md new file mode 100644 index 000000000..9ed82585c --- /dev/null +++ b/src/roadmaps/react/content/100-react-fundamental-topics/index.md @@ -0,0 +1,8 @@ +# React + +React is a JavaScript library for building user interfaces. It is an open-source, component-based front end library responsible only for the view layer of the application. + +{% resources %} + {% Official "https://reactjs.org/", "Official Website" %} + {% Official "https://reactjs.org/docs/getting-started.html", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/101-writing-your-own-hooks.md b/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/101-writing-your-own-hooks.md new file mode 100644 index 000000000..92c906e78 --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/101-writing-your-own-hooks.md @@ -0,0 +1,9 @@ +# Writing Custom Hooks + +Building your own Hooks lets you extract component logic into reusable functions. + +{% resources %} + {% Official "https://reactjs.org/docs/hooks-custom.html", "Creating Custom Hooks" %} + {% Blog "https://www.freecodecamp.org/news/how-to-create-react-hooks/", "How to create a custom Hook (1)" %} + {% Blog "https://www.robinwieruch.de/react-custom-hook/", "How to create a custom Hook (2) followed by Examples" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/102-common-hooks.md b/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/102-common-hooks.md new file mode 100644 index 000000000..97f2abcaf --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/102-common-hooks.md @@ -0,0 +1,13 @@ +# Common Hooks + +React also has a lot of hooks that allow you to write more efficient React code. + +{% resources %} + {% Official "https://reactjs.org/docs/hooks-reference.html#usereducer", "React Hooks Reference" %} + {% Blog "https://reactjs.org/docs/hooks-state.html", "useState Hook by Example" %} + {% Blog "https://www.robinwieruch.de/react-usecallback-hook/", "useCallback Hook by Example" %} + {% Blog "https://www.robinwieruch.de/react-usememo-hook/", "useMemo Hook by Example" %} + {% Blog "https://www.robinwieruch.de/react-usecontext-hook/", "useContext Hook by Example" %} + {% Blog "https://www.robinwieruch.de/react-usereducer-hook/", "useReducer Hook by Example" %} + {% Blog "https://www.robinwieruch.de/react-usereducer-vs-usestate/", "useReducer vs useState Hook" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/index.md b/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/index.md new file mode 100644 index 000000000..b325aa052 --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/100-hooks/index.md @@ -0,0 +1,9 @@ +# React Hooks + +Hooks were introduced in React 16.8 and they let us use state and other React features without writing a class + +{% resources %} + {% Official "https://reactjs.org/docs/hooks-intro.html", "Introduction to Hooks" %} + {% Official "https://reactjs.org/docs/hooks-reference.html", "Hooks Reference" %} + {% Blog "https://www.robinwieruch.de/react-hooks/", "Hooks by Example" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/101-context.md b/src/roadmaps/react/content/101-react-advanced-topics/101-context.md new file mode 100644 index 000000000..c76bf4268 --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/101-context.md @@ -0,0 +1,10 @@ +# Context + +Context provides a way to pass data through the component tree without having to pass props down manually at every level. + +In a typical React application, data is passed top-down (parent to child) via props, but such usage can be cumbersome for certain types of props (e.g. locale preference, UI theme) that are required by many components within an application. Context provides a way to share values like these between components without having to explicitly pass a prop through every level of the tree. + +{% resources %} + {% Official "https://reactjs.org/docs/context.html", "Official React Context Docs" %} + {% Blog "https://www.robinwieruch.de/react-context/", "React Context: Why, How, and When" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/102-refs.md b/src/roadmaps/react/content/101-react-advanced-topics/102-refs.md new file mode 100644 index 000000000..37705a199 --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/102-refs.md @@ -0,0 +1,10 @@ +# Refs + +Refs provide a way to access DOM nodes or React elements created in the render method. + +In the typical React dataflow, props are the only way that parent components interact with their children. To modify a child, you re-render it with new props. However, there are a few cases where you need to imperatively modify a child outside of the typical dataflow. The child to be modified could be an instance of a React component, or it could be a DOM element. For both of these cases, React provides an escape hatch. + +{% resources %} + {% Official "https://reactjs.org/docs/refs-and-the-dom.html", "Refs and DOM" %} + {% Blog "https://www.robinwieruch.de/react-ref/", "Examples of using refs in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/103-render-props.md b/src/roadmaps/react/content/101-react-advanced-topics/103-render-props.md new file mode 100644 index 000000000..96eb8f744 --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/103-render-props.md @@ -0,0 +1,10 @@ +# Render Props + +The term “render prop” refers to a technique for sharing code between React components using a prop whose value is a function. + +A component with a render prop takes a function that returns a React element and calls it instead of implementing its own render logic. + +{% resources %} + {% Official "https://reactjs.org/docs/render-props.html", "Render Props in React" %} + {% Blog "https://www.robinwieruch.de/react-render-props/", "How to create a Render Prop Component" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/104-high-order-components.md b/src/roadmaps/react/content/101-react-advanced-topics/104-high-order-components.md new file mode 100644 index 000000000..0659f07fd --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/104-high-order-components.md @@ -0,0 +1,10 @@ +# High Order Components + +A higher-order component (HOC) is an advanced technique in React for reusing component logic. HOCs are not part of the React API, per se. They are a pattern that emerges from React’s compositional nature. + +Concretely, a higher-order component is a function that takes a component and returns a new component. + +{% resources %} + {% Official "https://reactjs.org/docs/higher-order-components.html", "High-Order Components" %} + {% Blog "https://www.robinwieruch.de/react-higher-order-components/", "How to create a Higher-Order Component" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/105-portals.md b/src/roadmaps/react/content/101-react-advanced-topics/105-portals.md new file mode 100644 index 000000000..b8705ed1a --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/105-portals.md @@ -0,0 +1,7 @@ +# Portals + +Portals provide a first-class way to render children into a DOM node that exists outside the DOM hierarchy of the parent component. + +{% resources %} + {% Official "https://reactjs.org/docs/portals.html", "Portals in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/106-error-boundaries.md b/src/roadmaps/react/content/101-react-advanced-topics/106-error-boundaries.md new file mode 100644 index 000000000..06488f1da --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/106-error-boundaries.md @@ -0,0 +1,9 @@ +# Error Boundaries + +In the past, JavaScript errors inside components used to corrupt React’s internal state and cause it to emit cryptic errors on next renders. These errors were always caused by an earlier error in the application code, but React did not provide a way to handle them gracefully in components, and could not recover from them. + +Error boundaries are React components that catch JavaScript errors anywhere in their child component tree, log those errors, and display a fallback UI instead of the component tree that crashed. Error boundaries catch errors during rendering, in lifecycle methods, and in constructors of the whole tree below them. + +{% resources %} + {% Official "https://reactjs.org/docs/error-boundaries.html", "Error Boundaries in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/101-react-advanced-topics/107-fiber-architecture.md b/src/roadmaps/react/content/101-react-advanced-topics/107-fiber-architecture.md new file mode 100644 index 000000000..7ae313aec --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/107-fiber-architecture.md @@ -0,0 +1,10 @@ +# Fiber Architecture + +React 16.0 was released with an update to the React core algorithm. This new core architecture is named “Fiber.” Facebook has completely rewritten the internals of React from the ground-up while keeping the public API essentially unchanged; in simple terms, it means only changing the engine of a running car. + +{% resources %} + {% Blog "https://github.com/acdlite/react-fiber-architecture", "React Fiber Architecture" %} + {% Blog "https://dzone.com/articles/understanding-of-react-fiber-architecture", "Understanding React Fiber Architecture" %} +{% endresources %} + + diff --git a/src/roadmaps/react/content/101-react-advanced-topics/index.md b/src/roadmaps/react/content/101-react-advanced-topics/index.md new file mode 100644 index 000000000..75a7c3f72 --- /dev/null +++ b/src/roadmaps/react/content/101-react-advanced-topics/index.md @@ -0,0 +1,3 @@ +# Advanced Topics + +Now that you have covered the basics, next we have the advanced topics such as advanced hook topics, context, refs, portals, error boundaries and more. diff --git a/src/roadmaps/react/content/102-react-ecosystem/100-routers/100-react-router.md b/src/roadmaps/react/content/102-react-ecosystem/100-routers/100-react-router.md new file mode 100644 index 000000000..b17fd93f3 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/100-routers/100-react-router.md @@ -0,0 +1,10 @@ +# React Router + +React router is the most famous library when it comes to implementing routing in React applications. + +{% resources %} + {% Official "https://reactrouter.com/", "React Router — Official Website" %} + {% Official "https://reactrouter.com/docs/en/v6/getting-started/tutorial", "Getting Started Guide" %} + {% Blog "https://youtu.be/0cSVuySEB0A", "React Router v6 in 1 hour" %} + {% Blog "https://www.robinwieruch.de/react-router/", "How to use React Router v6" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/100-routers/101-reach-router.md b/src/roadmaps/react/content/102-react-ecosystem/100-routers/101-reach-router.md new file mode 100644 index 000000000..e09eb3fa2 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/100-routers/101-reach-router.md @@ -0,0 +1,9 @@ +# Reach Router + +Reach Router is a small, simple router for React that borrows from React Router, Ember, and Preact Router. Reach Router has a small footprint, supports only simple route patterns by design, and has strong (but experimental) accessibility features. + +{% resources %} + {% Official "https://reach.tech/router/", "Reach Router — Official Website" %} + {% Official "https://reach.tech/router/tutorial/01-intro", "Getting Started Guide" %} +{% endresources %} + diff --git a/src/roadmaps/react/content/102-react-ecosystem/100-routers/index.md b/src/roadmaps/react/content/102-react-ecosystem/100-routers/index.md new file mode 100644 index 000000000..89a33b7ea --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/100-routers/index.md @@ -0,0 +1,8 @@ +# Routing + +Routing is an essential concept in Single Page Applications (SPA). When your application is divided into separated logical sections, and all of them are under their own URL, your users can easily share links among each other. + +{% resources %} + {% Blog "https://teachingbee.in/how-to-use-routing-in-react-js/", "How to use Routing in React JS: A Comprehensive Guide. " %} + {% Blog "https://www.youtube.com/watch?v=59IXY5IDrBA", "React Router 6 – Tutorial for Beginners. " %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/101-ssr/100-next-js.md b/src/roadmaps/react/content/102-react-ecosystem/101-ssr/100-next-js.md new file mode 100644 index 000000000..2972aab45 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/101-ssr/100-next-js.md @@ -0,0 +1,12 @@ +# Next.js + +Next.js is an open-source development framework built on top of Node.js enabling React based web applications functionalities such as server-side rendering and generating static websites. + +{% resources %} + {% Blog "https://nextjs.org/", "Official Website" %} + {% Blog "https://nextjs.org/docs/getting-started", "Official Docs for Getting Started" %} + {% Course "https://www.youtube.com/watch?v=9P8mASSREYM&list=PLC3y8-rFHvwgC9mj0qv972IO5DmD-H0ZH", "Next.js Full course" %} + {% Blog "https://masteringnextjs.com/", "Mastering Next.js" %} + {% Blog "https://youtu.be/1WmNXEVia8I", "Next.js for Beginners - freeCodeCamp" %} + {% Blog "https://www.freecodecamp.org/news/the-next-js-handbook/", "The Next.js Handbook — freeCodeCamp" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/101-ssr/index.md b/src/roadmaps/react/content/102-react-ecosystem/101-ssr/index.md new file mode 100644 index 000000000..f463f2a39 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/101-ssr/index.md @@ -0,0 +1,11 @@ +# Server-side rendering + +Server-side rendering refers to the process that the service side completes the HTML structure splicing of the page, sends it to the browser, and then binds the status and events for it to become a fully interactive page. + +{% resources %} + {% Blog "https://www.educative.io/answers/what-is-server-side-rendering", "what is server side rendering" %} + {% Blog "https://medium.com/@mbleigh/when-should-i-server-side-render-c2a383ff2d0f", "When should I Server-Side Render?" %} + {% Blog "https://vuejs.org/guide/scaling-up/ssr.html", "Server-Side Rendering (SSR)" %} + {% Blog "https://www.youtube.com/watch?v=GQzn7XRdzxY", "what is server side rendering?" %} + {% Blog "https://www.youtube.com/watch?v=okvg3MRAPs0", "What is server-side rendering for web development?" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/102-ssg/101-gatsby.md b/src/roadmaps/react/content/102-react-ecosystem/102-ssg/101-gatsby.md new file mode 100644 index 000000000..a34eccf1c --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/102-ssg/101-gatsby.md @@ -0,0 +1,9 @@ +# Gatsby + +Gatsby is a React-based open source framework with performance, scalability and security built-in. + +{% resources %} + {% Official "https://www.gatsbyjs.com/", "Gatsby Website" %} + {% Blog "https://www.gatsbyjs.com/docs", "Gatsby Docs" %} + {% Blog "https://youtube.com/playlist?list=PL4cUxeGkcC9hw1g77I35ZivVLe8k2nvjB", "Gatsby Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/102-ssg/index.md b/src/roadmaps/react/content/102-react-ecosystem/102-ssg/index.md new file mode 100644 index 000000000..577abb79a --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/102-ssg/index.md @@ -0,0 +1,10 @@ +# Static Site Generators + +A static site generator is a tool that generates a full static HTML website based on raw data and a set of templates. Essentially, a static site generator automates the task of coding individual HTML pages and gets those pages ready to serve to users ahead of time. Because these HTML pages are pre-built, they can load very quickly in users' browsers. + +{% resources %} + {% Blog "https://www.cloudflare.com/learning/performance/static-site-generator/", "What is a static site generator?" %} + {% Blog "https://nextjs.org/docs/advanced-features/static-html-export", "Next.js SSG" %} + {% Blog "https://www.gatsbyjs.com/docs/glossary/static-site-generator/", "Gatsby SSG" %} + {% Blog "https://www.smashingmagazine.com/2021/10/building-ssg-11ty-vite-jam-sandwich/", "SSG — An 11ty, Vite And JAM Sandwich" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/100-react-query.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/100-react-query.md new file mode 100644 index 000000000..05886d1f5 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/100-react-query.md @@ -0,0 +1,8 @@ +# React Query + +Powerful asynchronous state management, server-state utilities and data fetching for TS/JS, React, Solid, Svelte and Vue. + +{% resources %} + {% Blog "https://github.com/TanStack/query", "TanStack Query" %} + {% Blog "https://www.youtube.com/watch?v=novnyCaa7To", "React Query in 100 Seconds" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/101-use-http.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/101-use-http.md new file mode 100644 index 000000000..f3b7c2a89 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/101-use-http.md @@ -0,0 +1,10 @@ +# use-http + +React hook for making isomorphic http requests. + +{% resources %} + {% Official "https://use-http.com/#/", "Official Website: use-http" %} + {% Blog "https://github.com/ava/use-http", "ava / use-http" %} +{% endresources %} + + diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/102-apollo.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/102-apollo.md new file mode 100644 index 000000000..288bc754f --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/102-apollo.md @@ -0,0 +1,10 @@ +# Apollo + +Apollo is a platform for building a unified graph, a communication layer that helps you manage the flow of data between your application clients (such as web and native apps) and your back-end services. + +{% resources %} + {% Official "https://www.apollographql.com", "Apollo Website" %} + {% Blog "https://www.apollographql.com/docs/", "Official Docs" %} + {% Blog "https://www.youtube.com/c/ApolloGraphQL/", "Official YouTube Channel" %} + {% Blog "https://www.youtube.com/watch?v=YyUWW04HwKY", "GraphQL With React Tutorial - Apollo Client" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/103-relay-modern.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/103-relay-modern.md new file mode 100644 index 000000000..ca5d2ff63 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/103-relay-modern.md @@ -0,0 +1,8 @@ +# Relay Modern + +Relay is a JavaScript client used in the browser to fetch GraphQL data. It's a JavaScript framework developed by Facebook for managing and fetching data in React applications. It is built with scalability in mind in order to power complex applications like Facebook. The ultimate goal of GraphQL and Relay is to deliver instant UI-response interactions. + +{% resources %} + {% Official "https://relay.dev/", "Official Website" %} + {% Blog "https://relay.dev/docs/", "Introduction to Relay modern" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/104-axios.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/104-axios.md new file mode 100644 index 000000000..8fa3b269f --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/104-axios.md @@ -0,0 +1,11 @@ +# Axios + +The most common way for frontend programs to communicate with servers is through the HTTP protocol. You are probably familiar with the Fetch API and the XMLHttpRequest interface, which allows you to fetch resources and make HTTP requests. + +Axios is a client HTTP API based on the XMLHttpRequest interface provided by browsers. + +{% resources %} + {% Official "https://axios-http.com/docs/intro", "Axios Getting Started" %} + {% Blog "https://www.freecodecamp.org/news/how-to-use-axios-with-react/", "How To Use Axios With React: The Definitive Guide" %} + {% Blog "https://blog.logrocket.com/how-to-make-http-requests-like-a-pro-with-axios/#why", "How to make HTTP requests with Axios" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/105-unfetch.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/105-unfetch.md new file mode 100644 index 000000000..b4f67b741 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/105-unfetch.md @@ -0,0 +1,7 @@ +# Unfetch + +Unfetch is the bare minimum 500b [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) polyfill. + +{% resources %} + {% Blog "https://github.com/developit/unfetch", "Official GitHub Repository" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/106-superagent.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/106-superagent.md new file mode 100644 index 000000000..7f9f4ce38 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/106-superagent.md @@ -0,0 +1,8 @@ +# Superagent + +Small progressive client-side HTTP request library, and Node.js module with the same API, supporting many high-level HTTP client features + +{% resources %} + {% Official "https://visionmedia.github.io/superagent/", "Official Website" %} + {% Blog "https://github.com/visionmedia/superagent", "GitHub Repository" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/index.md b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/index.md new file mode 100644 index 000000000..0ffe1b41c --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/103-api-calls/index.md @@ -0,0 +1,9 @@ +# API Calls + +APIs, short for Application Programming Interfaces, are software-to-software interfaces. Meaning, they allow different applications to talk to each other and exchange information or functionality. This allows businesses to access another business’s data, piece of code, software, or services in order to extend the functionality of their own products — all while saving time and money. +There are several options available to make API calls from your React.js applications. + +{% resources %} + {% Official "https://reactjs.org/docs/faq-ajax.html", "AJAX and APIs" %} + {% Blog "https://www.robinwieruch.de/react-hooks-fetch-data/", "How to fetch data in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/104-mobile/100-react-native.md b/src/roadmaps/react/content/102-react-ecosystem/104-mobile/100-react-native.md new file mode 100644 index 000000000..da90bd92d --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/104-mobile/100-react-native.md @@ -0,0 +1,10 @@ +# React Native + +React Native is an open-source UI software framework created by Meta Platforms, Inc. It is used to develop applications for Android, Android TV, iOS, macOS, tvOS, Web, Windows and UWP by enabling developers to use the React framework along with native platform capabilities. + +{% resources %} + {% Official "https://reactnative.dev/", "React Native: Official Website" %} + {% Official "https://reactnative.dev/docs/getting-started", "Official Getting Started" %} +{% endresources %} + + diff --git a/src/roadmaps/react/content/102-react-ecosystem/104-mobile/index.md b/src/roadmaps/react/content/102-react-ecosystem/104-mobile/index.md new file mode 100644 index 000000000..ed0661f86 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/104-mobile/index.md @@ -0,0 +1,3 @@ +# Mobile + +React Native is an open-source UI software framework created by Meta Platforms, Inc. It is used to develop applications for Android, Android TV, iOS, macOS, tvOS, Web, Windows and UWP by enabling developers to use the React framework along with native platform capabilities. diff --git a/src/roadmaps/react/content/102-react-ecosystem/105-forms/100-react-hook-form.md b/src/roadmaps/react/content/102-react-ecosystem/105-forms/100-react-hook-form.md new file mode 100644 index 000000000..c93143dc3 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/105-forms/100-react-hook-form.md @@ -0,0 +1,8 @@ +# React hook form + +React hook form is an opensource form library for react. Performant, flexible and extensible forms with easy-to-use validation. + +{% resources %} + {% Official "https://react-hook-form.com/", "React Hook Form: Official Website" %} + {% Blog "https://github.com/react-hook-form/react-hook-form", "react-hook-form/react-hook-form" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/105-forms/101-formik.md b/src/roadmaps/react/content/102-react-ecosystem/105-forms/101-formik.md new file mode 100644 index 000000000..cc919f0ed --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/105-forms/101-formik.md @@ -0,0 +1,13 @@ +# Formik + +Formik is another famous opensource form library that helps with getting values in and out of form state, validation and error messages, and handling form submissions. + +{% resources %} + {% Official "https://formik.org/", "Official Website — Formik" %} + {% Official "https://formik.org/docs/overview", "Getting Started" %} + {% Blog "https://github.com/formik/formik", "formik/formik" %} +{% endresources %} + + + + diff --git a/src/roadmaps/react/content/102-react-ecosystem/105-forms/102-final-form.md b/src/roadmaps/react/content/102-react-ecosystem/105-forms/102-final-form.md new file mode 100644 index 000000000..3feb292a1 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/105-forms/102-final-form.md @@ -0,0 +1,9 @@ +# Final form + +High performance subscription-based form state management for React. + +{% resources %} + {% Official "https://final-form.org/react", "Final Form — Official Website" %} + {% Blog "https://github.com/final-form/react-final-form", "final-form / react-final-form" %} +{% endresources %} + diff --git a/src/roadmaps/react/content/102-react-ecosystem/105-forms/index.md b/src/roadmaps/react/content/102-react-ecosystem/105-forms/index.md new file mode 100644 index 000000000..02ea14384 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/105-forms/index.md @@ -0,0 +1,7 @@ +# Forms + +Although you can build forms using vanilla React, it normally requires a lot of boilerplate code. This is because the form is built using a combination of state and props. To make it easier to manage forms, we use some sort of library. + +{% resources %} + {% Blog "https://www.robinwieruch.de/react-form/", "How to use Forms in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/106-testing/100-jest.md b/src/roadmaps/react/content/102-react-ecosystem/106-testing/100-jest.md new file mode 100644 index 000000000..20c92dfc1 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/106-testing/100-jest.md @@ -0,0 +1,7 @@ +# Jest + +Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It works with projects using: Babel, TypeScript, Node, React, Angular, Vue and more! + +{% resources %} + {% Official "https://jestjs.io/", "Jest Website" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/106-testing/101-react-testing-library.md b/src/roadmaps/react/content/102-react-ecosystem/106-testing/101-react-testing-library.md new file mode 100644 index 000000000..da910512d --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/106-testing/101-react-testing-library.md @@ -0,0 +1,8 @@ +# React Testing Library + +The React Testing Library is a very lightweight solution for testing React components. It provides light utility functions on top of react-dom and react-dom/test-utils, in a way that encourages better testing practices. Its primary guiding principle is: The more your tests resemble the way your software is used, the more confidence they can give you. + +{% resources %} + {% Official "https://testing-library.com/docs/react-testing-library/intro/", "React Testing Library" %} + {% Blog "https://www.robinwieruch.de/react-testing-library/", "How to use React Testing Library" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/106-testing/102-cypress.md b/src/roadmaps/react/content/102-react-ecosystem/106-testing/102-cypress.md new file mode 100644 index 000000000..eed340d6e --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/106-testing/102-cypress.md @@ -0,0 +1,9 @@ +# Cypress + +Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha – a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework. + +{% resources %} + {% Blog "https://www.cypress.io/", "Official Website" %} + {% Blog "https://docs.cypress.io/guides/overview/why-cypress#Other", "Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=7N63cMKosIE", "Cypress End-to-End Testing" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/106-testing/103-vitest.md b/src/roadmaps/react/content/102-react-ecosystem/106-testing/103-vitest.md new file mode 100644 index 000000000..92f61d547 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/106-testing/103-vitest.md @@ -0,0 +1,9 @@ +# Vitest + +Vitest is a fast Vite-native unit test framework with out-of-box ESM, TypeScript and JSX support. +Works on React, Vue, Svelte and more projects created with Vite + +{% resources %} + {% Official "https://vitest.dev/", "Vitest Website" %} + {% Course "https://www.youtube.com/watch?v=cM_AeQHzlGg", "Testing with Vitest" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/106-testing/104-playwright.md b/src/roadmaps/react/content/102-react-ecosystem/106-testing/104-playwright.md new file mode 100644 index 000000000..7c4f44df3 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/106-testing/104-playwright.md @@ -0,0 +1,8 @@ +# Playwright + +Playwright Test was created specifically to accommodate the needs of end-to-end testing. Playwright supports all modern rendering engines including Chromium, WebKit, and Firefox. Test on Windows, Linux, and macOS, locally or on CI, headless or headed with native mobile emulation of Google Chrome for Android and Mobile Safari.Playwright leverages the DevTools protocol to write powerful, stable automated tests.Playwright can actually see into and control the browser rather than relying on a middle translation layer, it allows for the simulation of more insightful and relevant user scenarios. + +{% resources %} + {% Official "https://playwright.dev/", "Official Website: Playwright" %} + {% Blog "https://www.browserstack.com/guide/playwright-tutorial", "Playwright Tuotorial" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/106-testing/index.md b/src/roadmaps/react/content/102-react-ecosystem/106-testing/index.md new file mode 100644 index 000000000..5eaf2bfb6 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/106-testing/index.md @@ -0,0 +1,8 @@ +# Testing + +A key to building software that meets requirements without defects is testing. Software testing helps developers know they are building the right software. When tests are run as part of the development process (often with continuous integration tools), they build confidence and prevent regressions in the code. + +{% resources %} + {% Blog "https://www.guru99.com/software-testing-introduction-importance.html", "What is Software Testing?" %} + {% Blog "https://www.browserstack.com/guide/testing-pyramid-for-test-automation", "Testing Pyramid" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/107-state-management/100-context-state.md b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/100-context-state.md new file mode 100644 index 000000000..10ef54faa --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/100-context-state.md @@ -0,0 +1,10 @@ +# Context + +Context provides a way to pass data through the component tree without having to pass props down manually at every level. + +In a typical React application, data is passed top-down (parent to child) via props, but such usage can be cumbersome for certain types of props (e.g. locale preference, UI theme) that are required by many components within an application. Context provides a way to share values like these between components without having to explicitly pass a prop through every level of the tree. + +{% resources %} + {% Official "https://reactjs.org/docs/context.html", "Official React Context Docs" %} + {% Blog "https://www.robinwieruch.de/react-state-usereducer-usestate-usecontext/", "State with useContext and useState/useReducer" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/107-state-management/101-redux.md b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/101-redux.md new file mode 100644 index 000000000..dc86c6e74 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/101-redux.md @@ -0,0 +1,12 @@ +# Redux + +Redux is a predictable state container for JavaScript apps. It helps you write applications that behave consistently, run in different environments (client, server, and native), and are easy to test. On top of that, it provides a great developer experience, such as [live code editing combined with a time traveling debugger](https://github.com/reduxjs/redux-devtools). + +{% resources %} + {% Blog "https://redux.js.org/", "Official Website" %} + {% Blog "https://redux.js.org/introduction/getting-started", "Official Getting Started to Redux" %} + {% Official "https://redux-toolkit.js.org", "Redux Toolkit Official Website" %} + {% Course "https://redux.js.org/tutorials/essentials/part-1-overview-concepts", "Official Tutorial to Learn Redux" %} + {% Course "https://egghead.io/courses/fundamentals-of-redux-course-from-dan-abramov-bd5cc867", "Fundamentals of Redux Course from Dan Abramov" %} + {% Course "https://youtube.com/watch?v=zrs7u6bdbUw", "Redux Tutorial - Beginner to Advanced" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/107-state-management/102-mobx.md b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/102-mobx.md new file mode 100644 index 000000000..7a40b1708 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/102-mobx.md @@ -0,0 +1,8 @@ +# MobX + +MobX is an open source state management tool. MobX, a simple, scalable, and standalone state management library, follows functional reactive programming (FRP) implementation and prevents inconsistent state by ensuring that all derivations are performed automatically. + +{% resources %} + {% Official "https://mobx.js.org/", "MobX Official Website" %} + {% Blog "https://www.youtube.com/watch?v=WQQq1QbYlAw", "Intro to MobX Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/107-state-management/index.md b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/index.md new file mode 100644 index 000000000..31957996e --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/107-state-management/index.md @@ -0,0 +1,8 @@ +# State Management + +Application state management is the process of maintaining knowledge of an application's inputs across multiple related data flows that form a complete business transaction -- or a session -- to understand the condition of the app at any given moment. In computer science, an input is information put into the program by the user and state refers to the condition of an application according to its stored inputs -- saved as variables or constants. State can also be described as the collection of preserved information that forms a complete session. + +{% resources %} + {% Blog "https://www.techtarget.com/searchapparchitecture/definition/state-management", "What is State Management?" %} + {% Blog "https://www.robinwieruch.de/react-state/", "Overview of State in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/108-styling/100-chakra-ui.md b/src/roadmaps/react/content/102-react-ecosystem/108-styling/100-chakra-ui.md new file mode 100644 index 000000000..61a98eff8 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/108-styling/100-chakra-ui.md @@ -0,0 +1,12 @@ +# Chakra UI + +Chakra UI is a simple, modular and accessible component library that gives you the building blocks you need to build your React applications. + +{% resources %} + {% Official "https://chakra-ui.com/", "Chakra UI Website" %} + {% Official "https://chakra-ui.com/docs/getting-started", "Chakra UI Official Getting Started" %} + {% Course "https://egghead.io/courses/build-a-modern-user-interface-with-chakra-ui-fac68106", "Build a Modern User Interface with Chakra UI" %} + {% Blog "https://youtu.be/wI2vqXsjsIo", "Official Getting Started Video" %} + {% Blog "https://youtu.be/s-bIsz-NR3c", "Chakra UI Crash Course" %} + {% Blog "https://www.freecodecamp.org/news/why-should-you-start-using-chakraui/", "Why You Should Start Using Chakra UI" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/108-styling/101-material-ui.md b/src/roadmaps/react/content/102-react-ecosystem/108-styling/101-material-ui.md new file mode 100644 index 000000000..8ec39727e --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/108-styling/101-material-ui.md @@ -0,0 +1,9 @@ +# Material UI + +Material-UI is an open-source framework that features React components that implement Google’s Material Design. + +{% resources %} + {% Blog "https://mui.com/", "Official Website" %} + {% Blog "https://mui.com/getting-started/installation/", "Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=vyJU9efvUtQ", "Material UI React Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/108-styling/102-ant-design.md b/src/roadmaps/react/content/102-react-ecosystem/108-styling/102-ant-design.md new file mode 100644 index 000000000..fcb495d8e --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/108-styling/102-ant-design.md @@ -0,0 +1,10 @@ +# Ant design + +An enterprise-class UI design language and React UI library with a set of high-quality React components, one of best React UI library for enterprises. + +{% resources %} + {% Official "https://ant.design/", "Official Website: Ant Design" %} + {% Blog "https://github.com/ant-design/ant-design", "ant-design / ant-design" %} +{% endresources %} + + diff --git a/src/roadmaps/react/content/102-react-ecosystem/108-styling/103-styled-components.md b/src/roadmaps/react/content/102-react-ecosystem/108-styling/103-styled-components.md new file mode 100644 index 000000000..e304c7414 --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/108-styling/103-styled-components.md @@ -0,0 +1,10 @@ +# Styled components + +Styled-components is a CSS-in-JS library that enables you to write regular CSS and attach it to JavaScript components. With styled-components, you can use the CSS you’re already familiar with instead of having to learn a new styling structure. + +{% resources %} + {% Blog "https://styled-components.com/", "Official Website" %} + {% Blog "https://styled-components.com/docs", "Official Docs" %} + {% Blog "https://www.youtube.com/watch?v=02zO0hZmwnw", "Styled Components Crash Course & Project" %} + {% Blog "https://www.robinwieruch.de/styled-components/", "Best Practices for Styled Components" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/108-styling/104-emotion.md b/src/roadmaps/react/content/102-react-ecosystem/108-styling/104-emotion.md new file mode 100644 index 000000000..29d40434b --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/108-styling/104-emotion.md @@ -0,0 +1,8 @@ +# Emotion + +Emotion is a library designed for writing css styles with JavaScript. It provides powerful and predictable style composition in addition to a great developer experience with features such as source maps, labels, and testing utilities. Both string and object styles are supported. + +{% resources %} + {% Blog "https://emotion.sh/docs/introduction", "Official Website and Docs" %} + {% Blog "https://www.youtube.com/watch?v=yO3JU2bMLGA", "Styled components using emotion in React" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/108-styling/index.md b/src/roadmaps/react/content/102-react-ecosystem/108-styling/index.md new file mode 100644 index 000000000..e67f9156c --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/108-styling/index.md @@ -0,0 +1,7 @@ +# Styling + +While "CSS in JS" is the most predominant way of styling modern frontend applications, there are several different ways to style your React applications whether it is vanilla CSS, [CSS Modules](https://github.com/css-modules/css-modules), or [CSS in JS](https://css-tricks.com/a-thorough-analysis-of-css-in-js/) etc and each has several frameworks available. + +{% resources %} + {% Blog "https://www.robinwieruch.de/react-css-styling/", "Ways to CSS style a React application" %} +{% endresources %} diff --git a/src/roadmaps/react/content/102-react-ecosystem/index.md b/src/roadmaps/react/content/102-react-ecosystem/index.md new file mode 100644 index 000000000..47d678c8c --- /dev/null +++ b/src/roadmaps/react/content/102-react-ecosystem/index.md @@ -0,0 +1,9 @@ +# Ecosystem + +Thanks to its popularity, React has been enriched by a vast ecosystem of plugins and tools. A (long) list is available here: [awesome-react](https://github.com/enaqx/awesome-react). + +{% resources %} + {% Blog "https://github.com/enaqx/awesome-react", "Awesome React" %} + {% Blog "https://github.com/brillout/awesome-react-components", "Awesome React Components" %} + {% Blog "https://www.robinwieruch.de/react-libraries/", "Popular React Libraries" %} +{% endresources %} diff --git a/src/roadmaps/react/react.md b/src/roadmaps/react/react.md new file mode 100644 index 000000000..ad622fa39 --- /dev/null +++ b/src/roadmaps/react/react.md @@ -0,0 +1,45 @@ +--- +jsonUrl: "/jsons/react.json" +pdfUrl: "/pdfs/react.pdf" +order: 2 +featuredTitle: "React" +featuredDescription: "Step by step guide to become a React Developer in 2022" +title: "React Developer" +description: "Everything that is there to learn about React and the ecosystem in 2022." +hasTopics: true +dimensions: + width: 968 + height: 1316.33 +seo: + title: "React Developer Roadmap: Learn to become a React developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for react development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "react roadmap 2022" + - "react developer roadmap 2022" + - "guide to becoming a react developer" + - "react developer roadmap" + - "react roadmap" + - "become react developer" + - "react developer skills" + - "react skills test" + - "skills for react development" + - "learn react development" + - "what is react" + - "react quiz" + - "react interview questions" +relatedRoadmaps: + - "frontend" + - "javascript" + - "angular" + - "vue" + - "nodejs" + - "design-system" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/software-architect/content/100-software-architect-basics/100-what-is-software-architecture.md b/src/roadmaps/software-architect/content/100-software-architect-basics/100-what-is-software-architecture.md new file mode 100644 index 000000000..2ddea12f8 --- /dev/null +++ b/src/roadmaps/software-architect/content/100-software-architect-basics/100-what-is-software-architecture.md @@ -0,0 +1,9 @@ +# What is Software Architecture? + +Describes how an application is built including its components, how they interact with each other, environment in which they operate and so on. + +{% resources %} + {% Blog "https://webcache.googleusercontent.com/search?q=cache:ya4xvYaEckQJ:https://www.future-processing.com/blog/what-is-software-architecture-in-software-engineering/&cd=1&hl=es-419&ct=clnk&gl=ar", "What is Software Architecture in Software Engineering?" %} + {% Blog "https://www.freecodecamp.org/news/an-introduction-to-software-architecture-patterns/", "An Introduction to Software Architecture Patterns" %} + {% Blog "https://www.infoq.com/articles/what-software-architecture/", "Software Architecture: It might not be what you think it is" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/100-software-architect-basics/101-what-is-software-architect.md b/src/roadmaps/software-architect/content/100-software-architect-basics/101-what-is-software-architect.md new file mode 100644 index 000000000..a395cf319 --- /dev/null +++ b/src/roadmaps/software-architect/content/100-software-architect-basics/101-what-is-software-architect.md @@ -0,0 +1,7 @@ +# What is Software Architect? + +An expert developer who design software solutions from the ground up, making high-level decisions about each stage of the process including technical standards, tools, design principles, platforms to be used, etc., leading a team of engineers to create the final product. + +{% resources %} + {% Blog "https://www.redhat.com/architect/what-is-software-architect", "12 Skills a Software Architect Needs" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/100-application-architecture.md b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/100-application-architecture.md new file mode 100644 index 000000000..27eae786c --- /dev/null +++ b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/100-application-architecture.md @@ -0,0 +1,4 @@ +# Application Level Architecture + +The lowest level of architecture. Focus on one single application. Very detailed, low level design. Communication is usually within one development team. + diff --git a/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/101-solution-architecture.md b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/101-solution-architecture.md new file mode 100644 index 000000000..4fcd243e0 --- /dev/null +++ b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/101-solution-architecture.md @@ -0,0 +1,3 @@ +# Solution Level Architecture + +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. diff --git a/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/102-enterprise-architecture.md b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/102-enterprise-architecture.md new file mode 100644 index 000000000..1122e9368 --- /dev/null +++ b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/102-enterprise-architecture.md @@ -0,0 +1,7 @@ +# Enterprise Level Architecture + +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. +{% resources %} + {% Blog "https://medium.com/@hsienwei/enterprise-software-architecture-957288829daa", "Enterprise Software Architecture" %} + {% Blog "https://www.linkedin.com/pulse/enterprise-architect-vs-software-who-you-luigi-saggese/", "Enterprise Architect vs Software Architect" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/index.md b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/index.md new file mode 100644 index 000000000..4eaab4fa6 --- /dev/null +++ b/src/roadmaps/software-architect/content/100-software-architect-basics/102-levels-of-architecture/index.md @@ -0,0 +1,8 @@ +# Levels of Architecture + +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: + +* **Application Level:** The lowest level of architecture. Focus on one single application. Very detailed, low level design. Communication is usually within one development team. +* **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. +* **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. + diff --git a/src/roadmaps/software-architect/content/100-software-architect-basics/index.md b/src/roadmaps/software-architect/content/100-software-architect-basics/index.md new file mode 100644 index 000000000..354b1d87e --- /dev/null +++ b/src/roadmaps/software-architect/content/100-software-architect-basics/index.md @@ -0,0 +1,3 @@ +# Software Architect Basics + +Understand different concepts such as what is software architecture, software architect, different types of architects and so on. diff --git a/src/roadmaps/software-architect/content/101-architect-responsibilities.md b/src/roadmaps/software-architect/content/101-architect-responsibilities.md new file mode 100644 index 000000000..35707d0ae --- /dev/null +++ b/src/roadmaps/software-architect/content/101-architect-responsibilities.md @@ -0,0 +1,17 @@ +# Architect Responsibilities + +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: + +* Define and decide development technology and platform +* Define development standards, e.g., coding standards, tools, review processes, test approach, etc. +* Support identifying and understanding business requirements +* Design systems and take decisions based on requirements +* Document and communicate architectural definitions, design and decisions +* Check and review architecture and code, e.g., check if defined patterns and coding standards are implemented properly +* Collaborate with other architects and stakeholders +* Coach and consult developers +* Make sure that as implementation takes place, the architecture is being adhered to +* Play a key part in reviewing code +* Detail out and refine higher level design into lower level design + +_Note: Architecture is a continuous activity, especially when it is applied in agile software development. Therefore, these activities are done over and over again._ diff --git a/src/roadmaps/software-architect/content/102-important-skills/100-design-and-architecture.md b/src/roadmaps/software-architect/content/102-important-skills/100-design-and-architecture.md new file mode 100644 index 000000000..523781a6c --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/100-design-and-architecture.md @@ -0,0 +1,11 @@ +# Design and Architecture + +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: + +* **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). +* **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. +* **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. +* **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. +* **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. +* **Be curious and attend User Groups**. [Meetup](https://www.meetup.com/) diff --git a/src/roadmaps/software-architect/content/102-important-skills/101-decision-making.md b/src/roadmaps/software-architect/content/102-important-skills/101-decision-making.md new file mode 100644 index 000000000..83203c0b5 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/101-decision-making.md @@ -0,0 +1,10 @@ +# Decision Making + +An architect needs to be able to take decisions and guide projects or the entire organization into the right direction. + +* **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: + 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. + 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. +* **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. +* **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. +* **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. diff --git a/src/roadmaps/software-architect/content/102-important-skills/102-simplifying-things.md b/src/roadmaps/software-architect/content/102-important-skills/102-simplifying-things.md new file mode 100644 index 000000000..4967ffa4a --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/102-simplifying-things.md @@ -0,0 +1,8 @@ +# Simplifying Things + +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. + +* **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. +* **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. +* **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. +* **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. diff --git a/src/roadmaps/software-architect/content/102-important-skills/103-how-to-code.md b/src/roadmaps/software-architect/content/102-important-skills/103-how-to-code.md new file mode 100644 index 000000000..4ee5c12e8 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/103-how-to-code.md @@ -0,0 +1,14 @@ +# How to Code + +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: + +* Developers won’t accept your sayings. +* You do not understand challenges and needs of developers. +* **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. +* **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: + * Adopt: “strong feeling to be ready for enterprise usage”. + * Trial: “enterprise should try it in one project that can handle the risk”. + * Assess: “explore how it affects your enterprise” + * Hold: “process with caution”. + +With this categorization it is easier to get an overview of new things and their readiness to better evaluate which trend to explore next. diff --git a/src/roadmaps/software-architect/content/102-important-skills/104-documentation.md b/src/roadmaps/software-architect/content/102-important-skills/104-documentation.md new file mode 100644 index 000000000..9d64d2ba6 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/104-documentation.md @@ -0,0 +1,8 @@ +# Documentation + +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. + +* **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. +* **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. +* **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?”. +* **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. diff --git a/src/roadmaps/software-architect/content/102-important-skills/105-communication.md b/src/roadmaps/software-architect/content/102-important-skills/105-communication.md new file mode 100644 index 000000000..795342228 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/105-communication.md @@ -0,0 +1,10 @@ +# Communication + +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. + +* **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. +* **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. +* **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. +* **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. +* **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. +* **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. diff --git a/src/roadmaps/software-architect/content/102-important-skills/106-estimate-and-evaluate.md b/src/roadmaps/software-architect/content/102-important-skills/106-estimate-and-evaluate.md new file mode 100644 index 000000000..3102593e6 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/106-estimate-and-evaluate.md @@ -0,0 +1,8 @@ +# Estimate and Evaluate + +* **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. +* **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: + * 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? + * Development practices: Code guidelines in place and followed? How is the code versioned? Deployment practices? + * Quality assurance: Test automation coverage? Static code analysis in place and good results? Peer reviews in place? + * Security: Which security concepts are in place? Built-in security? Penetration tests or automated security analysis tools in place and regularly used? diff --git a/src/roadmaps/software-architect/content/102-important-skills/107-balance.md b/src/roadmaps/software-architect/content/102-important-skills/107-balance.md new file mode 100644 index 000000000..f20746d66 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/107-balance.md @@ -0,0 +1,7 @@ +# Balance + +* **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. +* **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: + 1. Developers and business need to understand the long term vision and their benefits in order to adapt their solution and + 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. +* **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. diff --git a/src/roadmaps/software-architect/content/102-important-skills/108-consult-and-coach.md b/src/roadmaps/software-architect/content/102-important-skills/108-consult-and-coach.md new file mode 100644 index 000000000..d0a6b8981 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/108-consult-and-coach.md @@ -0,0 +1,7 @@ +# Consult and Coach + +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. + +* **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. +* **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. +* **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. diff --git a/src/roadmaps/software-architect/content/102-important-skills/109-marketing-skills.md b/src/roadmaps/software-architect/content/102-important-skills/109-marketing-skills.md new file mode 100644 index 000000000..12e3f0407 --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/109-marketing-skills.md @@ -0,0 +1,10 @@ +# Marketing Skills + +Your ideas are great and you have communicated them well but still nobody wants to follow? Then you probably lack marketing skills. + +* **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. + * 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 in which you can create nice looking and clickable UI5 apps fast and easy. + * 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. +* **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. +* **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. +* **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. diff --git a/src/roadmaps/software-architect/content/102-important-skills/index.md b/src/roadmaps/software-architect/content/102-important-skills/index.md new file mode 100644 index 000000000..b0c1733ca --- /dev/null +++ b/src/roadmaps/software-architect/content/102-important-skills/index.md @@ -0,0 +1,14 @@ +# Important Skills + +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: + +* Design +* Decide +* Simplify +* Code +* Document +* Communicate +* Estimate +* Balance +* Consult +* Market diff --git a/src/roadmaps/software-architect/content/103-technical-skills.md b/src/roadmaps/software-architect/content/103-technical-skills.md new file mode 100644 index 000000000..35054383b --- /dev/null +++ b/src/roadmaps/software-architect/content/103-technical-skills.md @@ -0,0 +1,10 @@ +# Technical Skills + +* Experience in software development +* Experience in project management +* Knowledge of one or more programming languages, such as Java, Python, JavaScript, Ruby, Rust, and C +* Knowledge of different development platforms +* Understanding of web applications, cybersecurity, and open source technologies +* Proficiency in analyzing code for issues and errors +* Experience in database platforms +* Experience with Operations and DevOps Skills diff --git a/src/roadmaps/software-architect/content/104-programming-languages/100-java-kotlin-scala.md b/src/roadmaps/software-architect/content/104-programming-languages/100-java-kotlin-scala.md new file mode 100644 index 000000000..fac6d67a1 --- /dev/null +++ b/src/roadmaps/software-architect/content/104-programming-languages/100-java-kotlin-scala.md @@ -0,0 +1,10 @@ +{% Roadmap "/java", "Java" %} + +# Java/Kotlin/Scala + +{% resources %} + {% Blog "https://www.w3schools.com/java/", "Java Basics" %} + {% Blog "https://blog.teamtreehouse.com/absolute-beginners-guide-kotlin", "Learn the basics of Kotlin" %} + {% Blog "https://kotlinlang.org/docs/reference/basic-syntax.html", "Kotlin Docs" %} + {% Blog "https://docs.scala-lang.org/tour/basics.html", "Scala Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/104-programming-languages/101-python.md b/src/roadmaps/software-architect/content/104-programming-languages/101-python.md new file mode 100644 index 000000000..266081d35 --- /dev/null +++ b/src/roadmaps/software-architect/content/104-programming-languages/101-python.md @@ -0,0 +1,14 @@ +{% Roadmap "/python", "Python" %} + +# Python + +Python is a multi-paradigm language. Being an interpreted language, code is executed as soon as it is written and the Python syntax allows for writing code in functional, procedural or object-oriented programmatic ways. Python is frequently recommended as the first language new coders should learn, because of its focus on readability, consistency, and ease of use. This comes with some downsides, as the language is not especially performant in most production tasks. + +{% resources %} + {% Official "https://www.python.org/", "Python Website" %} + {% Blog "https://www.python.org/about/gettingstarted/", "Python Getting Started" %} + {% Blog "https://automatetheboringstuff.com/", "Automate the Boring Stuff" %} + {% Course "https://www.w3schools.com/python/", "W3Schools - Python Tutorial " %} + {% Course "https://ehmatthes.github.io/pcc/", "Python Crash Course" %} + {% Course "https://www.codecademy.com/learn/learn-python-3", "Codecademy - Learn Python 3" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/104-programming-languages/102-ruby.md b/src/roadmaps/software-architect/content/104-programming-languages/102-ruby.md new file mode 100644 index 000000000..1c5940a9d --- /dev/null +++ b/src/roadmaps/software-architect/content/104-programming-languages/102-ruby.md @@ -0,0 +1,9 @@ +# Ruby + +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. + +{% resources %} + {% Official "https://www.ruby-lang.org/en/", "Ruby Website" %} + {% Course "https://www.ruby-lang.org/en/documentation/quickstart/", "Learn Ruby in 20 minutes" %} + {% Course "https://www.codecademy.com/learn/learn-ruby", "Learn Ruby | Codecademy" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/104-programming-languages/103-go.md b/src/roadmaps/software-architect/content/104-programming-languages/103-go.md new file mode 100644 index 000000000..d84f7b8f9 --- /dev/null +++ b/src/roadmaps/software-architect/content/104-programming-languages/103-go.md @@ -0,0 +1,14 @@ +{% Roadmap "/golang", "Go" %} + + +# Go + +Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more. + +{% resources %} + {% Blog "https://go.dev/tour/welcome/1", "A Tour of Go – Go Basics" %} + {% Blog "https://go.dev/doc/", "Go Reference Documentation" %} + {% Blog "https://gobyexample.com/", "Go by Example - annotated example programs" %} + {% Course "https://www.codecademy.com/learn/learn-go", "Learn Go | Codecademy" %} + {% Course "https://www.w3schools.com/go/", "W3Schools Go Tutorial " %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/104-programming-languages/104-javascript-typescript.md b/src/roadmaps/software-architect/content/104-programming-languages/104-javascript-typescript.md new file mode 100644 index 000000000..c916485c0 --- /dev/null +++ b/src/roadmaps/software-architect/content/104-programming-languages/104-javascript-typescript.md @@ -0,0 +1,20 @@ +{% Roadmap "/javascript", "JavaScript" %} + +# JavaScript + +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. + +{% resources %} + {% Blog "https://www.w3schools.com/js/", "W3Schools – JavaScript Tutorial" %} + {% Blog "https://javascript.info/", "The Modern JavaScript Tutorial" %} + {% Course "https://www.codecademy.com/learn/introduction-to-javascript", "Codecademy - Learn JavaScript" %} + {% Blog "https://youtu.be/hdI2bqOjy3c", "JavaScript Crash Course for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=fBNz5xF-Kx4", "Node.js Crash Course" %} + {% Blog "https://www.youtube.com/watch?v=TlB_eWDSMt4", "Node.js Tutorial for Beginners" %} + {% Official "https://www.typescriptlang.org/", "Official Website" %} + {% Official "https://www.typescriptlang.org/docs/", "Official Docs for Deep Dives" %} + {% Official "https://www.typescriptlang.org/docs/handbook/intro.html", "The TypeScript Handbook" %} + {% Blog "https://www.tutorialspoint.com/typescript/index.htm", "TypeScript Tutorial" %} + {% Course "https://scrimba.com/learn/typescript", "Scrimba — TypeScript Basics" %} + {% Blog "https://www.youtube.com/watch?v=BwuLxPH8IDs", "TypeScript for Beginners" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/104-programming-languages/105-dotnet-framework.md b/src/roadmaps/software-architect/content/104-programming-languages/105-dotnet-framework.md new file mode 100644 index 000000000..3808ca85a --- /dev/null +++ b/src/roadmaps/software-architect/content/104-programming-languages/105-dotnet-framework.md @@ -0,0 +1,15 @@ +# .NET Framework + +.NET is an open-source platform with tools and libraries for building web, mobile, desktop, games, IoT, cloud, and microservices. + +Officially supported languages in .NET: C#, F#, Visual Basic. + + +{% resources %} + {% Official "https://dotnet.microsoft.com/en-us/", ".NET Website" %} + {% Blog "https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet", "What is .NET?" %} + {% Blog "https://dotnet.microsoft.com/en-us/platform/why-choose-dotnet", "Why Choose .NET?" %} + {% Official "https://learn.microsoft.com/en-us/dotnet/csharp/?WT.mc_id=dotnet-35129-website", "C# Documentation" %} + {% Official "https://learn.microsoft.com/en-us/dotnet/fsharp/?WT.mc_id=dotnet-35129-website", "F# Documentation" %} + {% Official "https://learn.microsoft.com/en-us/dotnet/visual-basic/?WT.mc_id=dotnet-35129-website", "Visual Basic Documentation" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/104-programming-languages/index.md b/src/roadmaps/software-architect/content/104-programming-languages/index.md new file mode 100644 index 000000000..a14baa504 --- /dev/null +++ b/src/roadmaps/software-architect/content/104-programming-languages/index.md @@ -0,0 +1 @@ +# Programming languages \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/100-oop.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/100-oop.md new file mode 100644 index 000000000..719bb6f85 --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/100-oop.md @@ -0,0 +1,11 @@ +# OOP + +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. + +{% resources %} + {% Blog "https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_programming", "Basic concepts of object-oriented programming" %} + {% Blog "https://www.geeksforgeeks.org/object-oriented-programming-oops-concept-in-java/", "geeksforgeeks - OOP Concepts" %} + {% Blog "https://www.w3schools.com/java/java_oop.asp", "w3schools - OOP Concepts" %} + {% Course "https://www.youtube.com/watch?v=wN0x9eZLix4", "FreeCodeCamp - (OOP) in C++" %} + {% Course "https://www.youtube.com/watch?v=Ej_02ICOIgs", "FreeCodeCamp - (OPP) in Python" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/101-mvc-mvp-mvvm.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/101-mvc-mvp-mvvm.md new file mode 100644 index 000000000..2211d1a95 --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/101-mvc-mvp-mvvm.md @@ -0,0 +1,12 @@ +# MVC MVP MVVM + +Model-view-controller, or MVC, is a pattern used to separate user-interface, data and application logic. +It does this by separating an application into three parts: Model, View, and Controller. The model holds the data, the view encompasses the user-interface, and the controller acts as a mediator between the two. + +Model-view-presenter, or MVP, was designed to ease automated unit testing and improve the separation of concerns in presentation logic. MVP is a variant of the MVC pattern, though differs in that it divides the application into the user-interface (view), data (model) and presentation logic (presenter). While the model and the view represent stay the same as in the model-view-controller pattern, the presenter differs from the controller in that it manipulates the model and updates the view. + +Another variant of the MVC is the model-view-viewmodel pattern. The Model-view-viewmodel, or MVVM, separates the application into three core components: Model, View, and View Model. While the view and model represent all that they did in their parent pattern, the view model acts as a link between the model and view, retrieves data from the model and exposes it to the view through two-way data binding and can manipulate the model's data. + +{% resources %} + {% Blog "https://medium.com/@ankit.sinhal/mvc-mvp-and-mvvm-design-pattern-6e169567bbad", "MVC, MVP and MVVM Design Pattern" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/102-cqrs-eventual-consistency.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/102-cqrs-eventual-consistency.md new file mode 100644 index 000000000..54abc104d --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/102-cqrs-eventual-consistency.md @@ -0,0 +1,8 @@ +# CQRS eventual consistency + +CQRS (Segregation of Responsibility for Command Queries) is an architecture pattern that comes with the idea of separating read and write operations into two distinct logical processes. + +{% resources %} + {% Blog "https://martinfowler.com/bliki/CQRS.html", "CQRS" %} + {% Blog "https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs", "Introduction to CQRS" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/103-actors.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/103-actors.md new file mode 100644 index 000000000..d93779a9e --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/103-actors.md @@ -0,0 +1,8 @@ +# Actors + +Actor Model is a model that represents actors as the basic unit of a system, they can only communicate through messages and have their own private state, and they can also manage other actors, resulting in an encapsulated and fault-tolerant system. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=ELwEdb_pD0k", "Actor Model Explained" %} + {% Blog "https://www.brianstorti.com/the-actor-model/", "The actor model in 10 minutes" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/104-acid-cap-theorem.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/104-acid-cap-theorem.md new file mode 100644 index 000000000..e98a44be8 --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/104-acid-cap-theorem.md @@ -0,0 +1,16 @@ +# ACID & CAP Theorem + +ACID (Atomicity, Consistency, Isolation, Durability) and CAP (Consistency, Availability, Partition Tolerance) are essential concepts in distributed systems. They are often used to explain the trade-offs between consistency and availability. + +CAP is an acronym for Consistency, Availability, and Partition Tolerance. According to the CAP theorem, any distributed system can only guarantee two of the three properties at any time. You can't guarantee all three properties at once. + +ACID is an acronym that stands for Atomicity, Consistency, Isolation, Durability. ACID is a set of properties of database transactions intended to guarantee validity even in the event of errors, power failures, etc. + +{% resources %} + {% Blog "https://www.bmc.com/blogs/cap-theorem/", "What is CAP Theorem?" %} + {% Blog "https://en.wikipedia.org/wiki/CAP_theorem", "CAP Theorem - Wikipedia" %} + {% Blog "https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/", "An Illustrated Proof of the CAP Theorem" %} + {% Blog "https://www.ibm.com/uk-en/cloud/learn/cap-theorem", "CAP Theorem and its applications in NoSQL Databases" %} + {% Blog "https://www.youtube.com/watch?v=_RbsFXWRZ10", "What is CAP Theorem?" %} + {% Blog "https://en.wikipedia.org/wiki/ACID", "ACID - Wikipedia" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/105-solid.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/105-solid.md new file mode 100644 index 000000000..2557d9b4c --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/105-solid.md @@ -0,0 +1,15 @@ +# SOLID + + +SOLID is a set of principles applied to object-oriented design (OOD) to create maintainable, understandable, and flexible code, while avoiding code smells and defects. The principles are: + +- Single Responsibility +- Open/Closed +- Liskov Substitution +- Interface Segregation +- Dependency Inversion + +{% resources %} + {% Blog "https://www.baeldung.com/solid-principles", "SOLID Principles" %} + {% Blog "https://www.digitalocean.com/community/conceptual_articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design", "SOLID: The First 5 Principles of Object Oriented Design" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-ddd.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-ddd.md new file mode 100644 index 000000000..a2980a0a2 --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-ddd.md @@ -0,0 +1,16 @@ +# Domain-Driven Design + + +Domain-driven design (DDD) is a software design approach focusing on modeling software to match a domain according to input from that domain's experts. + +In terms of object-oriented programming, it means that the structure and language of software code (class names, class methods, class variables) should match the business domain. For example, if a software processes loan applications, it might have classes like LoanApplication and Customer, and methods such as AcceptOffer and Withdraw. + +DDD connects the implementation to an evolving model and it is predicated on the following goals: + +- Placing the project's primary focus on the core domain and domain logic; +- Basing complex designs on a model of the domain; +- Initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems. + +{% resources %} + {% Official "https://matfrs2.github.io/RS2/predavanja/literatura/Avram%20A,%20Marinescu%20F.%20-%20Domain%20Driven%20Design%20Quickly.pdf", "Domain Driven Design Quickly" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-tdd.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-tdd.md new file mode 100644 index 000000000..a81007756 --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/106-tdd.md @@ -0,0 +1,10 @@ +# Test Driven Development + + +Test driven development (TDD) is the process of writing tests for software's requirements which will fail until the software is developed to meet those requirements. Once those tests pass, then the cycle repeats to refactor code or develop another feature/requirement. In theory, this ensures that software is written to meet requirements in the simplest form, and avoids code defects. + +{% resources %} + {% Blog "https://www.guru99.com/test-driven-development.html", "What is Test Driven Development (TDD)?" %} + {% Blog "https://www.ibm.com/garage/method/practices/code/practice_test_driven_development/", "Test-driven development" %} + {% Blog "https://youtu.be/uGaNkTahrIw", "Agile in Practice: Test Driven Development" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/105-patterns-and-design-principles/index.md b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/index.md new file mode 100644 index 000000000..fd26b2cf2 --- /dev/null +++ b/src/roadmaps/software-architect/content/105-patterns-and-design-principles/index.md @@ -0,0 +1 @@ +# Patterns and design principles \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/106-architect-tools/100-git.md b/src/roadmaps/software-architect/content/106-architect-tools/100-git.md new file mode 100644 index 000000000..97bfee6cc --- /dev/null +++ b/src/roadmaps/software-architect/content/106-architect-tools/100-git.md @@ -0,0 +1,9 @@ +# Git + +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. + +{% resources %} + {% Official "https://git-scm.com/", "Git" %} + {% Official "https://git-scm.com/doc", "Git Documentation" %} + {% Blog "https://www.atlassian.com/git/tutorials/what-is-git", "All about Git" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/106-architect-tools/101-slack.md b/src/roadmaps/software-architect/content/106-architect-tools/101-slack.md new file mode 100644 index 000000000..f62019917 --- /dev/null +++ b/src/roadmaps/software-architect/content/106-architect-tools/101-slack.md @@ -0,0 +1,9 @@ +# Slack + +Slack is a messaging app for business that connects people to the information that they need. By bringing people together to work as one unified team, Slack transforms the way that organisations communicate. + +{% resources %} + {% Official "https://slack.com", "Slack" %} + {% Blog "https://www.youtube.com/watch?v=q19RtuCHt1Q", "What is Slack?" %} + {% Official "https://slack.com/intl/en-in/help/categories/360000049043", "Getting Started" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/106-architect-tools/102-trello.md b/src/roadmaps/software-architect/content/106-architect-tools/102-trello.md new file mode 100644 index 000000000..3013c5819 --- /dev/null +++ b/src/roadmaps/software-architect/content/106-architect-tools/102-trello.md @@ -0,0 +1,9 @@ +# Trello + +Trello is the visual tool that empowers your team to manage any type of project, workflow, or task tracking. + +{% resources %} + {% Official "https://trello.com", "Trello" %} + {% Blog "https://www.youtube.com/watch?v=AyfupeWS0yY", "A Tour Of Trello" %} + {% Official "https://trello.com/guide", "Trello Guide" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/106-architect-tools/103-atlassian-tools.md b/src/roadmaps/software-architect/content/106-architect-tools/103-atlassian-tools.md new file mode 100644 index 000000000..6578a17dd --- /dev/null +++ b/src/roadmaps/software-architect/content/106-architect-tools/103-atlassian-tools.md @@ -0,0 +1 @@ +# Atlassian tools \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/106-architect-tools/index.md b/src/roadmaps/software-architect/content/106-architect-tools/index.md new file mode 100644 index 000000000..38da84032 --- /dev/null +++ b/src/roadmaps/software-architect/content/106-architect-tools/index.md @@ -0,0 +1 @@ +# Architect tools \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/107-architectures/100-serverless.md b/src/roadmaps/software-architect/content/107-architectures/100-serverless.md new file mode 100644 index 000000000..d2554b23c --- /dev/null +++ b/src/roadmaps/software-architect/content/107-architectures/100-serverless.md @@ -0,0 +1,8 @@ +# Serverless + +Serverless architecture (also known as serverless computing or function as a service, FaaS) is a software design pattern where applications are hosted by a third-party service, eliminating the need for server software and hardware management by the developer. Applications are broken up into individual functions that can be invoked and scaled individually. + +{% resources %} + {% Official "https://aws.amazon.com/lambda/serverless-architectures-learn-more/", "Serverless Architectures By AWS" %} + {% Blog "https://martinfowler.com/articles/serverless.html", "Serverless in Detail" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/107-architectures/101-microservices.md b/src/roadmaps/software-architect/content/107-architectures/101-microservices.md new file mode 100644 index 000000000..dfce067f3 --- /dev/null +++ b/src/roadmaps/software-architect/content/107-architectures/101-microservices.md @@ -0,0 +1,10 @@ +# Microservices + +Microservices are an architectural approach to software development that allows the creation of a distributed application from deployable services that allow communication through a well-defined API. Being a solution to monoliths. + +{% resources %} + {% Blog "https://developer.ibm.com/learningpaths/get-started-application-modernization/intro-microservices/introduction/", "Introduction to microservices" %} + {% Blog "https://microservices.io/index.html", "Microservice Patterns and Resources by Chris Richardson" %} + {% Blog "https://www.oreilly.com/content/microservices-antipatterns-and-pitfalls/", "Microservices AntiPatterns and Pitfalls - Mark Richards" %} + {% Blog "https://samnewman.io/books/building_microservices_2nd_edition/", "Building Microservices, 2nd Edition - Sam Newman" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/107-architectures/102-client-server-architecture.md b/src/roadmaps/software-architect/content/107-architectures/102-client-server-architecture.md new file mode 100644 index 000000000..e78540155 --- /dev/null +++ b/src/roadmaps/software-architect/content/107-architectures/102-client-server-architecture.md @@ -0,0 +1,5 @@ +# Client server architecture + +{% resources %} + {% Blog "https://www.simplilearn.com/what-is-client-server-architecture-article", "What is Client-Server Architecture" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/107-architectures/103-layered-architecture.md b/src/roadmaps/software-architect/content/107-architectures/103-layered-architecture.md new file mode 100644 index 000000000..7e390d111 --- /dev/null +++ b/src/roadmaps/software-architect/content/107-architectures/103-layered-architecture.md @@ -0,0 +1 @@ +# Layered architecture \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/107-architectures/104-distributed-systems.md b/src/roadmaps/software-architect/content/107-architectures/104-distributed-systems.md new file mode 100644 index 000000000..51e33ee7e --- /dev/null +++ b/src/roadmaps/software-architect/content/107-architectures/104-distributed-systems.md @@ -0,0 +1,5 @@ +# Distributed systems + +{% resources %} + {% Blog "https://www.distributed-systems.net/index.php/books/ds3/", "Free Distributed Systems book from Maarten van Steen" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/107-architectures/105-service-oriented.md b/src/roadmaps/software-architect/content/107-architectures/105-service-oriented.md new file mode 100644 index 000000000..4dfbefb7b --- /dev/null +++ b/src/roadmaps/software-architect/content/107-architectures/105-service-oriented.md @@ -0,0 +1,15 @@ +# Service oriented + +Service-oriented architecture (SOA) is an enterprise-wide approach to software development of application components that takes advantage of reusable software components, or services. + +SOA provides four different service types: + +1. Functional services (i.e., business services), which are critical for business applications. +2. Enterprise services, which serve to implement functionality. +3. Application services, which are used to develop and deploy apps. +4. Infrastructure services, which are instrumental for backend processes like security and authentication. + +{% resources %} + {% Official "https://aws.amazon.com/what-is/service-oriented-architecture/", "SOA Architecture By AWS" %} + {% Blog "https://www.geeksforgeeks.org/service-oriented-architecture/", "SOA Architecture" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/107-architectures/index.md b/src/roadmaps/software-architect/content/107-architectures/index.md new file mode 100644 index 000000000..2b9689138 --- /dev/null +++ b/src/roadmaps/software-architect/content/107-architectures/index.md @@ -0,0 +1 @@ +# Architectures \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/108-security/100-hashing-algorithms.md b/src/roadmaps/software-architect/content/108-security/100-hashing-algorithms.md new file mode 100644 index 000000000..531d00d0b --- /dev/null +++ b/src/roadmaps/software-architect/content/108-security/100-hashing-algorithms.md @@ -0,0 +1,9 @@ +# Hashing Algorithms + +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. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=b4b8ktEV4Bg", "Hashing Algorithms and Security - Computerphile" %} + {% Blog "https://www.youtube.com/watch?v=Plp4F3ZfC7A", "Top Hashing Algorithms In Cryptography | MD5 and SHA 256 Algorithms Expalined | Simplilearn" %} + {% Blog "https://www.youtube.com/watch?v=DMtFhACPnTY", "SHA: Secure Hashing Algorithm - Computerphile" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/108-security/101-pki.md b/src/roadmaps/software-architect/content/108-security/101-pki.md new file mode 100644 index 000000000..0860e14a5 --- /dev/null +++ b/src/roadmaps/software-architect/content/108-security/101-pki.md @@ -0,0 +1 @@ +# Pki \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/108-security/102-owasp.md b/src/roadmaps/software-architect/content/108-security/102-owasp.md new file mode 100644 index 000000000..4cd897c3b --- /dev/null +++ b/src/roadmaps/software-architect/content/108-security/102-owasp.md @@ -0,0 +1,10 @@ +# OWASP + +OWASP or Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security. + +{% resources %} + {% Blog "https://en.wikipedia.org/wiki/OWASP", "Wikipedia - OWASP" %} + {% Blog "https://github.com/0xRadi/OWASP-Web-Checklist", "OWASP Web Application Security Testing Checklist" %} + {% Blog "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/", "OWASP Top 10 Security Risks" %} + {% Blog "https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html", "OWASP Cheatsheets" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/108-security/103-auth-strategies.md b/src/roadmaps/software-architect/content/108-security/103-auth-strategies.md new file mode 100644 index 000000000..c49b0b1ee --- /dev/null +++ b/src/roadmaps/software-architect/content/108-security/103-auth-strategies.md @@ -0,0 +1,10 @@ +# Auth strategies + +{% resources %} + {% Blog "https://auth0.com/resources/ebooks/jwt-handbook", "JSON Web Token - Handbook" %} + {% Blog "https://www.youtube.com/watch?v=i8wFExDSZv0", "SAML Overview" %} + {% Blog "https://www.youtube.com/watch?v=l-6QSEqDJPo", "A Devlopers Guide to SAML" %} + {% Blog "https://www.youtube.com/watch?v=SvppXbpv-5k", "SAML 2.0: Technical Overview" %} + {% Blog "https://www.youtube.com/watch?v=t18YB3xDfXI", "An Illustrated Guide to OAuth and OpenID Connect" %} + {% Blog "https://www.youtube.com/watch?v=rTzlF-U9Y6Y", "OAuth 2.0 & OpenID Connect (OIDC): Technical Overview" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/108-security/index.md b/src/roadmaps/software-architect/content/108-security/index.md new file mode 100644 index 000000000..f76df344c --- /dev/null +++ b/src/roadmaps/software-architect/content/108-security/index.md @@ -0,0 +1 @@ +# Security \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/109-working-with-data/100-hadoop-spark-mapreduce.md b/src/roadmaps/software-architect/content/109-working-with-data/100-hadoop-spark-mapreduce.md new file mode 100644 index 000000000..61f4ce2e1 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/100-hadoop-spark-mapreduce.md @@ -0,0 +1,10 @@ +# Spark, Hadoop MapReduce + +[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. + +Hadoop 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. + +{% resources %} + {% Blog "https://www.integrate.io/blog/apache-spark-vs-hadoop-mapreduce", "Spark vs Hadoop MapReduce" %} + {% Blog "https://www.youtube.com/watch?v=aReuLtY0YMI", "Hadoop explained in 5 minutes" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/109-working-with-data/101-etl-datawarehouses.md b/src/roadmaps/software-architect/content/109-working-with-data/101-etl-datawarehouses.md new file mode 100644 index 000000000..3da97c765 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/101-etl-datawarehouses.md @@ -0,0 +1,14 @@ +# ETL Datawarehouses + +In the world of data warehousing, if you need to bring data from multiple different data sources into one, centralized database, you must first: + +* **EXTRACT** data from its original source +* **TRANSFORM** data by deduplicating it, combining it, and ensuring quality, to then +* **LOAD** data into the target database + +ETL 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. + +{% resources %} + {% Blog "https://www.snowflake.com/guides/what-etl", "What is ETL?" %} + {% Blog "https://www.youtube.com/watch?v=OW5OgsLpDCQ", "ETL explained" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/109-working-with-data/102-sql-databases.md b/src/roadmaps/software-architect/content/109-working-with-data/102-sql-databases.md new file mode 100644 index 000000000..9cb87db73 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/102-sql-databases.md @@ -0,0 +1,11 @@ +# Sql databases + +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 +* MariaDB and MySQL +* PostgreSQL + +{% resources %} + {% Blog "https://www.openlogic.com/blog/what-sql-database", "SQL Databases" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/100-apache-spark.md b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/100-apache-spark.md new file mode 100644 index 000000000..9714fbac3 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/100-apache-spark.md @@ -0,0 +1,7 @@ +# Apache spark + +Apache Spark is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters. + +{% resources %} + {% Blog "https://spark.apache.org/", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/101-hadoop.md b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/101-hadoop.md new file mode 100644 index 000000000..59fbfe7d7 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/101-hadoop.md @@ -0,0 +1,7 @@ +# Hadoop + +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. + +{% resources %} + {% Blog "https://hadoop.apache.org/", "Official Website" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/102-datawarehouses-principles.md b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/102-datawarehouses-principles.md new file mode 100644 index 000000000..7f1497065 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/102-datawarehouses-principles.md @@ -0,0 +1,7 @@ +# Datawarehouses principles + +It is based on the assumption that every system should take care of a concern in a way that such concern should be encapsulated by the system itself. + +{% resources %} + {% Blog "https://www.toptal.com/data-science/data-warehouse-concepts-principles", "Toptal Developers Website" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/index.md b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/index.md new file mode 100644 index 000000000..eb021f46e --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/103-analytics/index.md @@ -0,0 +1 @@ +# Analytics \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/109-working-with-data/103-nosql-databases.md b/src/roadmaps/software-architect/content/109-working-with-data/103-nosql-databases.md new file mode 100644 index 000000000..7b65c6286 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/103-nosql-databases.md @@ -0,0 +1,13 @@ +# Nosql databases + +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. + +Types of NoSQL databases +* Document databases Ex. MongoDB +* Key-value databases Ex. Redis +* Wide-column databases Ex. Cassandra +* Graph databases Ex. Neo4J + +{% resources %} + {% Blog "https://www.mongodb.com/nosql-explained", "NoSQL Databases" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/109-working-with-data/index.md b/src/roadmaps/software-architect/content/109-working-with-data/index.md new file mode 100644 index 000000000..1eae922a6 --- /dev/null +++ b/src/roadmaps/software-architect/content/109-working-with-data/index.md @@ -0,0 +1 @@ +# Working with data \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/110-apis-and-integrations/100-grpc.md b/src/roadmaps/software-architect/content/110-apis-and-integrations/100-grpc.md new file mode 100644 index 000000000..7a824d12c --- /dev/null +++ b/src/roadmaps/software-architect/content/110-apis-and-integrations/100-grpc.md @@ -0,0 +1,14 @@ +# gPRC + +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. + +It'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 + +{% resources %} + {% Official "https://grpc.io/", "gRPC Website" %} + {% Official "https://grpc.io/docs/what-is-grpc/introduction/", "gRPC Introduction" %} + {% Official "https://grpc.io/docs/what-is-grpc/core-concepts/", "gRPC Core Concepts" %} + {% Blog "https://youtu.be/XRXTsQwyZSU", "Stephane Maarek - gRPC Introduction" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/110-apis-and-integrations/101-esb-soap.md b/src/roadmaps/software-architect/content/110-apis-and-integrations/101-esb-soap.md new file mode 100644 index 000000000..9d7705614 --- /dev/null +++ b/src/roadmaps/software-architect/content/110-apis-and-integrations/101-esb-soap.md @@ -0,0 +1 @@ +# Esb soap \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/110-apis-and-integrations/102-graphql.md b/src/roadmaps/software-architect/content/110-apis-and-integrations/102-graphql.md new file mode 100644 index 000000000..2a5f3865a --- /dev/null +++ b/src/roadmaps/software-architect/content/110-apis-and-integrations/102-graphql.md @@ -0,0 +1,7 @@ +# GraphQL + +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. + +{% resources %} + {% Blog "https://www.apollographql.com/tutorials/", "Apollo GraphQL Tutorials" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/110-apis-and-integrations/103-rest.md b/src/roadmaps/software-architect/content/110-apis-and-integrations/103-rest.md new file mode 100644 index 000000000..d0a2bcb2e --- /dev/null +++ b/src/roadmaps/software-architect/content/110-apis-and-integrations/103-rest.md @@ -0,0 +1,10 @@ +# REST + +REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. + +{% resources %} + {% Blog "https://www.codecademy.com/article/what-is-rest", "What is REST?" %} + {% Blog "https://www.redhat.com/en/topics/api/what-is-a-rest-api", "What is a REST API?" %} + {% Blog "https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm", "Roy Fieldings dissertation chapter, Representational State Transfer (REST)" %} + {% Course "https://restapitutorial.com/", "Learn REST: A RESTful Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/110-apis-and-integrations/104-bpm-bpel.md b/src/roadmaps/software-architect/content/110-apis-and-integrations/104-bpm-bpel.md new file mode 100644 index 000000000..0cfb39157 --- /dev/null +++ b/src/roadmaps/software-architect/content/110-apis-and-integrations/104-bpm-bpel.md @@ -0,0 +1,17 @@ +# BPM BPEL + +## BPM: Business Process Management +Medium or large enterprises needs robust processes to streamline their business needs by reducing the cost incurred per process and diminishing the turn around time for each activity. +To achieve the above, there are various BPM tools like PEGA, IBM BPM, Appian, etc. Basically these tools automate the processes through a robust process modelling and implementation. + +## BPMN: Business Process Management Notations +Its is a standard for representing business processes graphically. While modelling the process, the notations used are complied with BPMN (there are other like EPC, etc.). So BPMN is a standard notation that BPM consultants follow to model the business process. BPMN has versions and now BPMN 2.0 is the standard one. + +## BPEL : Business Process Execution Language +Programmers use BPEL to define how a business process that involves web services will be executed. BPEL messages are typically used to invoke remote services, orchestrate process execution and manage events and exceptions. BPEL is often associated with Business Process Management Notation. In many organizations, analysts use BPMN to visualize business processes and developers transform the visualizations to BPEL for execution. + +{% resources %} + {% Blog "https://www.redhat.com/en/topics/automation/what-is-business-process-management", "What is BPM?" %} + {% Blog "https://www.ibm.com/docs/en/baw/19.x?topic=SS8JB4_19.x/com.ibm.wbpm.wid.main.doc/prodoverview/topics/cbpelproc.html", "BPEL described" %} + {% Blog "https://www.youtube.com/watch?v=V6nr5dnb1JQ", "BPM vs BPEL" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/110-apis-and-integrations/105-messaging-queues.md b/src/roadmaps/software-architect/content/110-apis-and-integrations/105-messaging-queues.md new file mode 100644 index 000000000..55afc4be9 --- /dev/null +++ b/src/roadmaps/software-architect/content/110-apis-and-integrations/105-messaging-queues.md @@ -0,0 +1,8 @@ +# Messaging queues + +Message queuing makes it possible for applications to communicate asynchronously, by sending messages to each other via a queue. A message queue provides temporary storage between the sender and the receiver so that the sender can keep operating without interruption when the destination program is busy or not connected. + +{% resources %} + {% Official "https://aws.amazon.com/message-queue/", "Messaging Queues" %} + {% Blog "https://www.tutorialspoint.com/inter_process_communication/inter_process_communication_message_queues.htm", "Messaging Queues Tutorial" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/110-apis-and-integrations/index.md b/src/roadmaps/software-architect/content/110-apis-and-integrations/index.md new file mode 100644 index 000000000..dc6c06d39 --- /dev/null +++ b/src/roadmaps/software-architect/content/110-apis-and-integrations/index.md @@ -0,0 +1 @@ +# Apis and integrations \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/111-web-and-mobile/100-reactive-functional-programming.md b/src/roadmaps/software-architect/content/111-web-and-mobile/100-reactive-functional-programming.md new file mode 100644 index 000000000..6c5f499dd --- /dev/null +++ b/src/roadmaps/software-architect/content/111-web-and-mobile/100-reactive-functional-programming.md @@ -0,0 +1,12 @@ +# Reactive and Functional programming + +Functional programming is a programming paradigm designed to handle pure mathematical functions. This paradigm is totally focused on writing more compounded and pure functions. + +Reactive programming describes a design paradigm that relies on asynchronous programming logic to handle real-time updates to otherwise static content. It provides an efficient means -- the use of automated data streams -- to handle data updates to content whenever a user makes an inquiry. + +{% resources %} + {% Blog "youtube.com/watch?v=e-5obm1G_FY", "Learning Functional Programming" %} + {% Blog "https://www.telerik.com/blogs/functional-programming-javascript", "Functional Programming with JavaScript" %} + {% Blog "https://www.freecodecamp.org/news/functional-programming-in-javascript/", "What is Functional Programming?" %} + {% Blog "https://www.techtarget.com/searchapparchitecture/definition/reactive-programming", "What is Reactive Programming?" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/111-web-and-mobile/101-react-vue-angular.md b/src/roadmaps/software-architect/content/111-web-and-mobile/101-react-vue-angular.md new file mode 100644 index 000000000..7f6150c60 --- /dev/null +++ b/src/roadmaps/software-architect/content/111-web-and-mobile/101-react-vue-angular.md @@ -0,0 +1,20 @@ +{% Roadmap "/react", "React" %} + +# React + +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. + +{% resources %} + {% Official "https://reactjs.org/", "React Website" %} + {% Blog "https://reactjs.org/tutorial/tutorial.html", "Official Getting Started" %} + {% Blog "https://beta.reactjs.org/", "Beta React Docs" %} + {% Course "https://egghead.io/courses/the-beginner-s-guide-to-react", "The Beginners Guide to React" %} + {% Blog "https://www.youtube.com/watch?v=nTeuhbP7wdE", "React JS Course for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=bMknfKXIFA8", "React Course - Beginners Tutorial for React JavaScript Library [2022]" %} + {% Blog "https://www.youtube.com/watch?v=i793Qm6kv3U", "Understanding Reacts UI Rendering Process" %} + {% Official "https://vuejs.org/", "Vue.js Website" %} + {% Official "https://vuejs.org/v2/guide/", "Official Getting Started" %} + {% Blog "https://www.youtube.com/watch?v=FXpIoQ_rT_c", "Vue.js Course for Beginners" %} + {% Blog "https://www.youtube.com/watch?v=qZXt1Aom3Cs", "Vue.js Crash Course" %} + {% Blog "https://angular.io/start", "Official - Getting started with Angular" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/111-web-and-mobile/102-spa-ssr-ssg.md b/src/roadmaps/software-architect/content/111-web-and-mobile/102-spa-ssr-ssg.md new file mode 100644 index 000000000..b45076dc8 --- /dev/null +++ b/src/roadmaps/software-architect/content/111-web-and-mobile/102-spa-ssr-ssg.md @@ -0,0 +1,10 @@ +# SPA vs SSG vs SSR + +- **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. +- **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. +- **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. + +{% resources %} + {% Blog "https://medium.com/codex/web-design-patterns-ssr-ssg-and-spa-fadad7673dfe", "Web design patterns — SSR, SSG, and SPA" %} + {% Blog "https://web.dev/rendering-on-the-web/", "Rendering on the Web" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/111-web-and-mobile/103-pwa.md b/src/roadmaps/software-architect/content/111-web-and-mobile/103-pwa.md new file mode 100644 index 000000000..15ab35a0a --- /dev/null +++ b/src/roadmaps/software-architect/content/111-web-and-mobile/103-pwa.md @@ -0,0 +1,11 @@ +# PWA + + +Progressive Web Apps (PWAs) are websites that are progressively enhanced to function like installed, native apps on supporting platforms, while functioning like regular websites on other browsers. + +{% resources %} + {% Blog "https://www.freecodecamp.org/news/what-are-progressive-web-apps/", "Progressive Web Apps for Beginners" %} + {% Blog "https://web.dev/learn/pwa/", "Learn PWA" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/", "MDN Web Docs: Progressive Web Apps " %} + {% Blog "https://www.youtube.com/watch?v=sFsRylCQblw", "Build a Progressive Web App" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/111-web-and-mobile/104-microfrontends.md b/src/roadmaps/software-architect/content/111-web-and-mobile/104-microfrontends.md new file mode 100644 index 000000000..6df5b6c17 --- /dev/null +++ b/src/roadmaps/software-architect/content/111-web-and-mobile/104-microfrontends.md @@ -0,0 +1,8 @@ +# Microfrontends + +Microfrontends is an architectural style where independently deliverable frontend applications built by different teams using different technologies are composed into a greater whole. Simply, a Micro-Frontend is a portion of a webpage (not the entire page). There is a “Host” or a “Container” page in the Micro-Frontend Architecture page that can host one or more Micro-Frontends. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=lKKsjpH09dU", "Micro-Frontends Course - Beginner to Expert" %} + {% Blog "https://micro-frontends.org/", "Micro Frontends" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/111-web-and-mobile/105-w3c-and-whatwg-standards.md b/src/roadmaps/software-architect/content/111-web-and-mobile/105-w3c-and-whatwg-standards.md new file mode 100644 index 000000000..61a990ed4 --- /dev/null +++ b/src/roadmaps/software-architect/content/111-web-and-mobile/105-w3c-and-whatwg-standards.md @@ -0,0 +1,10 @@ +# W3c and WHATWG Standards + +World Wide Web Consortium (W3C) standards define the best practices for web development to enable developers to build rich interactive experiences that are available on any device. Theses standards range from recommended web technologies such as HTML, CSS, XML to the generally accepted principles of web architecture, semantics and services. + +Web Hypertext Application Technology Working Group (WHATWG) is another set of web standards that came into existence after W3C announced that it was going to be focusing on XHTML over HTML. + +{% resources %} + {% Official "https://www.w3.org/standards/", "W3C Standards" %} + {% Official "https://spec.whatwg.org/", "WHATWG Standards" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/111-web-and-mobile/index.md b/src/roadmaps/software-architect/content/111-web-and-mobile/index.md new file mode 100644 index 000000000..2b50221a0 --- /dev/null +++ b/src/roadmaps/software-architect/content/111-web-and-mobile/index.md @@ -0,0 +1 @@ +# Web and mobile \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/112-architect-frameworks/100-babok.md b/src/roadmaps/software-architect/content/112-architect-frameworks/100-babok.md new file mode 100644 index 000000000..f70485de2 --- /dev/null +++ b/src/roadmaps/software-architect/content/112-architect-frameworks/100-babok.md @@ -0,0 +1,8 @@ +# Babok + +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. + +{% resources %} + {% Blog "https://www.iiba.org/career-resources/a-business-analysis-professionals-foundation-for-success/babok/", "Official Website" %} + {% Blog "https://en.wikipedia.org/wiki/A_Guide_to_the_Business_Analysis_Body_of_Knowledge", "Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/112-architect-frameworks/101-iaf.md b/src/roadmaps/software-architect/content/112-architect-frameworks/101-iaf.md new file mode 100644 index 000000000..1db3b6c63 --- /dev/null +++ b/src/roadmaps/software-architect/content/112-architect-frameworks/101-iaf.md @@ -0,0 +1,8 @@ +# Iaf + +The Integrated Architecture Framework (IAF) is an enterprise architecture framework that covers business, information, information system and technology infrastructure. + +{% resources %} + {% Blog "https://www.capgemini.com/wp-content/uploads/2018/03/architecture-for-the-information-age.pdf", "Official PDF" %} + {% Blog "https://en.wikipedia.org/wiki/Integrated_Architecture_Framework", "Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/112-architect-frameworks/101-uml.md b/src/roadmaps/software-architect/content/112-architect-frameworks/101-uml.md new file mode 100644 index 000000000..b1a583bd2 --- /dev/null +++ b/src/roadmaps/software-architect/content/112-architect-frameworks/101-uml.md @@ -0,0 +1,10 @@ +# UML + +The Unified Modeling Language, or UML, is a modeling language that is intended to provide a standard way to visualize and describe the design of a system. + +{% resources %} + {% Official "https://www.uml.org", "UML Website" %} + {% Blog "https://personal.utdallas.edu/~chung/Fujitsu/UML_2.0/Rumbaugh--UML_2.0_Reference_CD.pdf", "The Unified Modeling Language Reference Manual (Second Edition)" %} + {% Blog "https://www.ibm.com/docs/en/rational-soft-arch/9.6.1?topic=files-uml-pattern-frameworks", "IBM Docs" %} + {% Blog "https://en.wikipedia.org/wiki/Unified_Modeling_Language", "Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/112-architect-frameworks/102-togaf.md b/src/roadmaps/software-architect/content/112-architect-frameworks/102-togaf.md new file mode 100644 index 000000000..2a7341eb7 --- /dev/null +++ b/src/roadmaps/software-architect/content/112-architect-frameworks/102-togaf.md @@ -0,0 +1,8 @@ +# Togaf + +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. + +{% resources %} + {% Blog "https://www.opengroup.org/togaf", "Official Website" %} + {% Blog "https://en.wikipedia.org/wiki/The_Open_Group_Architecture_Framework", "Wikipedia" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/112-architect-frameworks/index.md b/src/roadmaps/software-architect/content/112-architect-frameworks/index.md new file mode 100644 index 000000000..a76aa9330 --- /dev/null +++ b/src/roadmaps/software-architect/content/112-architect-frameworks/index.md @@ -0,0 +1 @@ +# Architect frameworks \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/113-management/100-certifications/100-pmi-itil-prince2-rup.md b/src/roadmaps/software-architect/content/113-management/100-certifications/100-pmi-itil-prince2-rup.md new file mode 100644 index 000000000..f54744ee5 --- /dev/null +++ b/src/roadmaps/software-architect/content/113-management/100-certifications/100-pmi-itil-prince2-rup.md @@ -0,0 +1 @@ +# Pmi itil prince2 rup \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/113-management/100-certifications/index.md b/src/roadmaps/software-architect/content/113-management/100-certifications/index.md new file mode 100644 index 000000000..208afdd72 --- /dev/null +++ b/src/roadmaps/software-architect/content/113-management/100-certifications/index.md @@ -0,0 +1 @@ +# Certifications \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/113-management/101-agile-scrum/100-less.md b/src/roadmaps/software-architect/content/113-management/101-agile-scrum/100-less.md new file mode 100644 index 000000000..30afd5ee2 --- /dev/null +++ b/src/roadmaps/software-architect/content/113-management/101-agile-scrum/100-less.md @@ -0,0 +1 @@ +# Less \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/113-management/101-agile-scrum/101-safe.md b/src/roadmaps/software-architect/content/113-management/101-agile-scrum/101-safe.md new file mode 100644 index 000000000..d9a202895 --- /dev/null +++ b/src/roadmaps/software-architect/content/113-management/101-agile-scrum/101-safe.md @@ -0,0 +1 @@ +# Safe \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/113-management/101-agile-scrum/index.md b/src/roadmaps/software-architect/content/113-management/101-agile-scrum/index.md new file mode 100644 index 000000000..98dcdffe0 --- /dev/null +++ b/src/roadmaps/software-architect/content/113-management/101-agile-scrum/index.md @@ -0,0 +1 @@ +# Agile scrum \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/113-management/index.md b/src/roadmaps/software-architect/content/113-management/index.md new file mode 100644 index 000000000..669db3f43 --- /dev/null +++ b/src/roadmaps/software-architect/content/113-management/index.md @@ -0,0 +1 @@ +# Management \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/114-networks/100-osi-tcp-ip-model.md b/src/roadmaps/software-architect/content/114-networks/100-osi-tcp-ip-model.md new file mode 100644 index 000000000..1011afb47 --- /dev/null +++ b/src/roadmaps/software-architect/content/114-networks/100-osi-tcp-ip-model.md @@ -0,0 +1,9 @@ +# OSI and TCP/IP Models + +The OSI and TCP/IP model is used to help the developer to design their system for interoperability. The OSI model has 7 layers while the TCP/IP model has a more summarized form of the OSI model only consisting 4 layers. This is important if you're are trying to design a system to communicate with other systems. + +{% resources %} + {% Blog "https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/", "Cloudflare - What is the OSI model" %} + {% Blog "https://www.geeksforgeeks.org/layers-of-osi-model/", "Geeksforgeeks - Layers of OSI model" %} + {% Blog "https://www.geeksforgeeks.org/tcp-ip-model/", "Geeksforgeeks - TCP/IP model" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/114-networks/101-http-https.md b/src/roadmaps/software-architect/content/114-networks/101-http-https.md new file mode 100644 index 000000000..1b1a9e9c3 --- /dev/null +++ b/src/roadmaps/software-architect/content/114-networks/101-http-https.md @@ -0,0 +1,18 @@ +# Http Https + +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. + +HTTPS (**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. + +`HTTPS = HTTP + SSL/TLS` + +{% resources %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/", "What is HTTP?" %} + {% Blog "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview", "An overview of HTTP" %} + {% Blog "https://kamranahmed.info/blog/2016/08/13/http-in-depth", "Journey to HTTP/2" %} + {% Blog "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", "HTTP/3 From A To Z: Core Concepts" %} + {% Blog "https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/", "What is HTTPS?" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https", "Why HTTPS Matters" %} + {% Blog "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https", "Enabling HTTPS on Your Servers" %} + {% Blog "https://www.youtube.com/watch?v=iYM2zFP3Zn0", "HTTP Crash Course & Exploration" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/114-networks/102-proxies.md b/src/roadmaps/software-architect/content/114-networks/102-proxies.md new file mode 100644 index 000000000..7414bba67 --- /dev/null +++ b/src/roadmaps/software-architect/content/114-networks/102-proxies.md @@ -0,0 +1,3 @@ +# Proxies + +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. diff --git a/src/roadmaps/software-architect/content/114-networks/103-firewalls.md b/src/roadmaps/software-architect/content/114-networks/103-firewalls.md new file mode 100644 index 000000000..f2f5c9c11 --- /dev/null +++ b/src/roadmaps/software-architect/content/114-networks/103-firewalls.md @@ -0,0 +1,3 @@ +# Firewalls + +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. diff --git a/src/roadmaps/software-architect/content/114-networks/index.md b/src/roadmaps/software-architect/content/114-networks/index.md new file mode 100644 index 000000000..f7c7e4a8f --- /dev/null +++ b/src/roadmaps/software-architect/content/114-networks/index.md @@ -0,0 +1 @@ +# Networks \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/100-infrastructure-as-code.md b/src/roadmaps/software-architect/content/115-operations-knowledge/100-infrastructure-as-code.md new file mode 100644 index 000000000..7ac4b9fa2 --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/100-infrastructure-as-code.md @@ -0,0 +1,13 @@ +# Infrastructure as Code + +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. + +The 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. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=zWw2wuiKd5o", "What is Infrastructure as Code?" %} + {% Blog "https://www.youtube.com/watch?v=POPP2WTJ8es", "What is Infrastructure as Code? Difference of Infrastructure as Code Tools" %} + {% Blog "https://www.youtube.com/watch?v=zWw2wuiKd5o", "Video introduction to infrastructure as code" %} + {% Blog "https://thenewstack.io/guis-cli-apis-learn-basic-terms-of-infrastructure-as-code/", "GUIs, CLI, APIs: Learn Basic Terms of Infrastructure-as-Code" %} + {% Blog "(https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac", "What is infrastructure as code" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/101-cloud-providers.md b/src/roadmaps/software-architect/content/115-operations-knowledge/101-cloud-providers.md new file mode 100644 index 000000000..8db4b0a15 --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/101-cloud-providers.md @@ -0,0 +1 @@ +# Cloud providers \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/102-serverless-concepts.md b/src/roadmaps/software-architect/content/115-operations-knowledge/102-serverless-concepts.md new file mode 100644 index 000000000..0704d7600 --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/102-serverless-concepts.md @@ -0,0 +1,11 @@ +# Serverless Concepts + +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. + +{% resources %} + {% Blog "https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverless", "What is serverless?" %} + {% Blog "https://www.cloudflare.com/learning/serverless/what-is-serverless/", "What is serverless computing?" %} + {% Blog "https://aws.amazon.com/serverless/", "Serverless on AWS" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/103-linux-unix.md b/src/roadmaps/software-architect/content/115-operations-knowledge/103-linux-unix.md new file mode 100644 index 000000000..ade72cdb6 --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/103-linux-unix.md @@ -0,0 +1,10 @@ +# Linux / Unix + +Knowledge of UNIX is a must for almost all kind of development as most of the codes that you write is most likely going to be finally deployed on a UNIX/Linux machine. Linux has been the backbone of the free and open source software movement, providing a simple and elegant operating system for almost all your needs. + +{% resources %} + {% Blog "https://www.youtube.com/watch?v=ROjZy1WbCIA", "Linux Operating System - Crash Course" %} + {% Blog "https://www.coursera.org/courses?query=unix", "Coursera - Unix Courses" %} + {% Blog "https://dev.to/rudrakshi99/linux-basics-2onj", "Linux Basics " %} + {% Blog "https://www.tutorialspoint.com/unix/index.htm", "Unix / Linux Tutorial" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/104-service-mesh.md b/src/roadmaps/software-architect/content/115-operations-knowledge/104-service-mesh.md new file mode 100644 index 000000000..872b31577 --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/104-service-mesh.md @@ -0,0 +1,9 @@ +# Service Mesh + +A Service Mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In layman's terms, it's a tool which helps you to control how different services communicate with each other. + +{% resources %} + {% Blog "https://youtu.be/16fgzklcF7Y", "Service Mesh explained in 15 Minutes" %} + {% Blog "https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh", "Red Hat - What is a Service Mesh?" %} + {% Blog "https://platform9.com/blog/kubernetes-service-mesh-a-comparison-of-istio-linkerd-and-consul/", "Kubernetes Service Mesh - Blog Post" %} +{% endresources %} \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/105-ci-cd.md b/src/roadmaps/software-architect/content/115-operations-knowledge/105-ci-cd.md new file mode 100644 index 000000000..12dd075a4 --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/105-ci-cd.md @@ -0,0 +1,8 @@ +# CI / CD + +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"). + +{% resources %} + {% Blog "https://www.redhat.com/en/topics/devops/what-is-ci-cd", "What is CI/CD?" %} + {% Blog "https://www.infoworld.com/article/3271126/what-is-cicd-continuous-integration-and-continuous-delivery-explained.html", "What is CI/CD? Continuous integration and continuous delivery explained" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/106-containers.md b/src/roadmaps/software-architect/content/115-operations-knowledge/106-containers.md new file mode 100644 index 000000000..951b51b3a --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/106-containers.md @@ -0,0 +1,12 @@ +# Containers + +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. + +These images are designed for portability, allowing for full local testing of a static image, and easy deployment to a container management platform. + +{% resources %} + {% Blog "https://cloud.google.com/learn/what-are-containers", "What are Containers?" %} + {% Blog "https://www.docker.com/resources/what-container/", "What is a Container?" %} + {% Blog "https://www.youtube.com/playlist?list=PLawsLZMfND4nz-WDBZIj8-nbzGFD4S9oz", "What are Containers?" %} + {% Blog "https://thenewstack.io/category/containers/", "Articles about Containers - The New Stack" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/107-cloud-design-patterns.md b/src/roadmaps/software-architect/content/115-operations-knowledge/107-cloud-design-patterns.md new file mode 100644 index 000000000..718e7f8ce --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/107-cloud-design-patterns.md @@ -0,0 +1,9 @@ +# Cloud Design Patterns + +These design patterns are useful for building reliable, scalable, secure applications in the cloud. + +The 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. + +{% resources %} + {% Blog "https://learn.microsoft.com/en-us/azure/architecture/patterns/", "Cloud Design Patterns" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/115-operations-knowledge/index.md b/src/roadmaps/software-architect/content/115-operations-knowledge/index.md new file mode 100644 index 000000000..ce6d5d788 --- /dev/null +++ b/src/roadmaps/software-architect/content/115-operations-knowledge/index.md @@ -0,0 +1 @@ +# Operations knowledge \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/116-enterprise-software/100-ms-dynamics.md b/src/roadmaps/software-architect/content/116-enterprise-software/100-ms-dynamics.md new file mode 100644 index 000000000..4c4ae7e12 --- /dev/null +++ b/src/roadmaps/software-architect/content/116-enterprise-software/100-ms-dynamics.md @@ -0,0 +1,8 @@ +# MS Dynamics + +Microsoft Dynamics 365 is a combination of both Enterprise Resource Planning (ERP) software and Customer Relationship Management (CRM) software. + +{% resources %} + {% Blog "https://www.nigelfrank.com/insights/everything-you-ever-wanted-to-know-about-dynamics-crm", "Everything you ever wanted to know about Microsoft Dynamics" %} + {% Blog "https://www.youtube.com/watch?v=ogfclHWgqgE", "What is Microsoft Dynamics?" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/116-enterprise-software/101-sap-epr-hana-business-objects.md b/src/roadmaps/software-architect/content/116-enterprise-software/101-sap-epr-hana-business-objects.md new file mode 100644 index 000000000..b3ccebd3a --- /dev/null +++ b/src/roadmaps/software-architect/content/116-enterprise-software/101-sap-epr-hana-business-objects.md @@ -0,0 +1 @@ +# Sap epr hana business objects \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/116-enterprise-software/102-emc-dms.md b/src/roadmaps/software-architect/content/116-enterprise-software/102-emc-dms.md new file mode 100644 index 000000000..b86f9fbf6 --- /dev/null +++ b/src/roadmaps/software-architect/content/116-enterprise-software/102-emc-dms.md @@ -0,0 +1 @@ +# Emc dms \ No newline at end of file diff --git a/src/roadmaps/software-architect/content/116-enterprise-software/103-ibm-bpm.md b/src/roadmaps/software-architect/content/116-enterprise-software/103-ibm-bpm.md new file mode 100644 index 000000000..ac7a86c8d --- /dev/null +++ b/src/roadmaps/software-architect/content/116-enterprise-software/103-ibm-bpm.md @@ -0,0 +1,8 @@ +# IBM BPM + +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. + +{% resources %} + {% Blog "https://www.ibm.com/docs/en/bpm/8.5.5?topic=manager-business-process-overview", "BPM overview" %} + {% Blog "https://www.youtube.com/watch?v=6yn4nCWMNLI", "BPM Demo" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/116-enterprise-software/104-salesforce.md b/src/roadmaps/software-architect/content/116-enterprise-software/104-salesforce.md new file mode 100644 index 000000000..7b939500a --- /dev/null +++ b/src/roadmaps/software-architect/content/116-enterprise-software/104-salesforce.md @@ -0,0 +1,8 @@ +# Salesforce + +Salesforce is a cloud platform helping companies to manage relationships with their customers + +{% resources %} + {% Blog "https://ascendix.com/blog/what-is-salesforce-what-salesforce-is-used-for/", "What is Salesforce and what is it used for?" %} + {% Blog "https://www.youtube.com/watch?v=xx2sK-QiBjw", "What is Salesforce?" %} +{% endresources %} diff --git a/src/roadmaps/software-architect/content/116-enterprise-software/index.md b/src/roadmaps/software-architect/content/116-enterprise-software/index.md new file mode 100644 index 000000000..5c0b3723d --- /dev/null +++ b/src/roadmaps/software-architect/content/116-enterprise-software/index.md @@ -0,0 +1 @@ +# Enterprise software \ No newline at end of file diff --git a/src/roadmaps/software-architect/software-architect.md b/src/roadmaps/software-architect/software-architect.md new file mode 100644 index 000000000..fd26d96db --- /dev/null +++ b/src/roadmaps/software-architect/software-architect.md @@ -0,0 +1,53 @@ +--- +jsonUrl: "/jsons/software-architect.json" +pdfUrl: "/pdfs/software-architect.pdf" +order: 8 +featuredTitle: "Software Architect" +featuredDescription: "Step by step guide to become a Software Architect in 2022" +title: "Software Architect" +description: "Step by step guide to becoming a Software Architect in 2022" +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 1882.18 +seo: + title: "Software Architect Roadmap: Learn to become a modern Software Architect" + description: "Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "solution architect roadmap" + - "enterprise architect roadmap" + - "guide to becoming a software architect" + - "guide to becoming a Software Architect" + - "software architect roadmap" + - "db administrator roadmap" + - "software architect roadmap" + - "software architect skills" + - "db administrator skills" + - "become software architect" + - "modern software architect skills" + - "software architect skills test" + - "skills for software architect" + - "skills for software architect" + - "learn software architect" + - "what is software architect" + - "software architect quiz" + - "software architect interview questions" +relatedRoadmaps: + - "backend" + - "software-design-architecture" + - "python" + - "python" + - "nodejs" + - "golang" + - "java" + - "devops" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "role-roadmap" +--- + diff --git a/src/roadmaps/software-design-architecture/software-design-architecture.md b/src/roadmaps/software-design-architecture/software-design-architecture.md new file mode 100644 index 000000000..09bc7a327 --- /dev/null +++ b/src/roadmaps/software-design-architecture/software-design-architecture.md @@ -0,0 +1,47 @@ +--- +jsonUrl: "/jsons/software-design-architecture.json" +pdfUrl: "/pdfs/software-design-architecture.pdf" +order: 11 +featuredTitle: "Software Design" +featuredDescription: "Guide to learn software design and architecture" +title: "Software Design and Architecture" +description: "Step by step guide to learn software design and architecture" +isNew: true +hasTopics: false +dimensions: + width: 968 + height: 1764.66 +seo: + title: "Software Design and Architecture Roadmap" + description: "Learn software design and architecture with this step by step guide and resources." + keywords: + - "guide to learn software design and architecture" + - "software design roadmap" + - "software architecture roadmap" + - "software design and architecture roadmap" + - "modern software design and architecture roadmap" + - "fullstack software design and architecture roadmap" + - "design and architecture roadmap" + - "scalable design roadmap" + - "software design patterns roadmap" + - "software architecture patterns roadmap" + - "design architecture patterns roadmap" + - "application architectures" + - "software architecture guide" +relatedRoadmaps: + - "backend" + - "software-architect" + - "devops" + - "python" + - "java" + - "nodejs" + - "golang" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/system-design/system-design.md b/src/roadmaps/system-design/system-design.md new file mode 100644 index 000000000..67299a532 --- /dev/null +++ b/src/roadmaps/system-design/system-design.md @@ -0,0 +1,43 @@ +--- +jsonUrl: "/jsons/system-design.json" +pdfUrl: "/pdfs/system-design.pdf" +order: 12 +featuredTitle: "System Design" +featuredDescription: "Guide to learn system design" +title: "System Design" +description: "Step by step guide to learn system design" +isUpcoming: true +hasTopics: false +dimensions: + width: 968 + height: 1764.66 +seo: + title: "System Design Roadmap" + description: "Learn system design with this step by step guide and resources." + keywords: + - "guide to learn system design" + - "system design roadmap" + - "software architecture roadmap" + - "system design roadmap" + - "modern system design roadmap" + - "fullstack system design roadmap" + - "design and architecture roadmap" + - "scalable design roadmap" + - "software architecture patterns roadmap" + - "design architecture patterns roadmap" + - "application architectures" + - "software architecture guide" +relatedRoadmaps: + - "backend" + - "software-architect" + - "software-design-architecture" + - "devops" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/100-vue-cli.md b/src/roadmaps/vue/content/100-fundamental-topics/100-vue-cli.md new file mode 100644 index 000000000..1cb50df90 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/100-vue-cli.md @@ -0,0 +1,19 @@ +# Vue CLI + +Vue CLI is a full system for rapid Vue.js development, providing: + +- Interactive project scaffolding via `@vue/cli`. +- A runtime dependency (`@vue/cli-service`) that is: + - Upgradeable; + - Built on top of webpack, with sensible defaults; + - Configurable via in-project config file; + - Extensible via plugins +- A rich collection of official plugins integrating the best tools in the frontend ecosystem. +- A full graphical user interface to create and manage Vue.js projects. + +Vue CLI aims to be the standard tooling baseline for the Vue ecosystem. It ensures the various build tools work smoothly together with sensible defaults so you can focus on writing your app instead of spending days wrangling with configurations. At the same time, it still offers the flexibility to tweak the config of each tool without the need for ejecting. + +{% resources %} + {% Official "https://cli.vuejs.org/guide/", "Vue CLI Guide" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/101-components/100-single-file-components.md b/src/roadmaps/vue/content/100-fundamental-topics/101-components/100-single-file-components.md new file mode 100644 index 000000000..fbaf75e10 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/101-components/100-single-file-components.md @@ -0,0 +1,8 @@ +# Single File Components + +Vue Single-File Components (a.k.a. `*.vue` files, abbreviated as SFC) is a special file format that allows us to encapsulate the template, logic, and styling of a Vue component in a single file. + +{% resources %} + {% Official "https://vuejs.org/guide/scaling-up/sfc.html", "Single File Components" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/101-components/101-component-registration.md b/src/roadmaps/vue/content/100-fundamental-topics/101-components/101-component-registration.md new file mode 100644 index 000000000..5f0063d33 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/101-components/101-component-registration.md @@ -0,0 +1,7 @@ +# Component Registration + +A Vue component needs to be "registered" so that Vue knows where to locate its implementation when it is encountered in a template. There are two ways to register components: global and local. + +{% resources %} + {% Official "https://vuejs.org/guide/components/registration.html", "Component Registration" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/100-fundamental-topics/101-components/102-props.md b/src/roadmaps/vue/content/100-fundamental-topics/101-components/102-props.md new file mode 100644 index 000000000..dfea3081c --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/101-components/102-props.md @@ -0,0 +1,12 @@ +# Props + +If we are building a blog, we will likely need a component representing a blog post. We want all the blog posts to share the same visual layout, but with different content. Such a component won't be useful unless you can pass data to it, such as the title and content of the specific post we want to display. That's where props come in. + +Props are custom attributes you can register on a component. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/component-basics.html#passing-props", "Props Basics" %} + {% Official "https://vuejs.org/guide/components/props.html", "Props in Depth" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/101-components/103-events.md b/src/roadmaps/vue/content/100-fundamental-topics/101-components/103-events.md new file mode 100644 index 000000000..8a7dd27ce --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/101-components/103-events.md @@ -0,0 +1,9 @@ +# Events + +As we develop our applications we may need to communicate with the parent component in order to notify of some actions e.g. when a user clicks on a button. In order to do this we need to use events. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/component-basics.html#listening-to-events", "Listening to Events" %} + {% Official "https://vuejs.org/guide/components/events.html", "Events in Detail" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/101-components/104-attribute-inheritance.md b/src/roadmaps/vue/content/100-fundamental-topics/101-components/104-attribute-inheritance.md new file mode 100644 index 000000000..ee2b390af --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/101-components/104-attribute-inheritance.md @@ -0,0 +1,8 @@ +# Attribute Inheritance + +Attribute inheritance aka "fallthrough attributes" is a feature of Vue.js that allows you to inherit attributes from a parent component. + +{% resources %} + {% Official "https://vuejs.org/guide/components/attrs.html", "Fallthrough Attributes" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/101-components/index.md b/src/roadmaps/vue/content/100-fundamental-topics/101-components/index.md new file mode 100644 index 000000000..1257b8531 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/101-components/index.md @@ -0,0 +1,9 @@ +# Components + +Components allow us to split the UI into independent and reusable pieces, and think about each piece in isolation. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/component-basics.html", "Components Basics" %} + {% Official "https://vuejs.org/guide/components/registration.html", "Components in Depth" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/102-templates.md b/src/roadmaps/vue/content/100-fundamental-topics/102-templates.md new file mode 100644 index 000000000..5315f6d98 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/102-templates.md @@ -0,0 +1,7 @@ +# Templates + +Vue uses an HTML-based template syntax that allows you to declaratively bind the rendered DOM to the underlying component instance's data. All Vue templates are syntactically valid HTML that can be parsed by spec-compliant browsers and HTML parsers. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/template-syntax.html", "Template Syntax" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/100-fundamental-topics/103-directives.md b/src/roadmaps/vue/content/100-fundamental-topics/103-directives.md new file mode 100644 index 000000000..d918b097f --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/103-directives.md @@ -0,0 +1,8 @@ +# Directives + +Directives are special attributes with the `v-` prefix. Vue provides a number of [built-in directives](https://vuejs.org/api/built-in-directives.html). + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/template-syntax.html#directives", "Directives Documentation" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/100-options-api.md b/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/100-options-api.md new file mode 100644 index 000000000..92d6ebf35 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/100-options-api.md @@ -0,0 +1,11 @@ +# Options API + +We use Options API in a Vue application to write and define different components. With this API, we can use options such as data, methods, and mounted. + +To state it simply, Options API is an old way to structure a Vue.JS application. Due to some limitations in this API, Composition API was introduced in Vue 3. + +{% resources %} + {% Official "https://vuejs.org/guide/typescript/options-api.html", "TypeScript with Options API" %} + {% Blog "https://vuejs.org/api/#options-api", "Options API Documentation" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/101-composition-api.md b/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/101-composition-api.md new file mode 100644 index 000000000..aff28ac7d --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/101-composition-api.md @@ -0,0 +1,11 @@ +# Composition API + +With the release of Vue 3, developers now have access to the Composition API, a new way to write Vue components. This API allows features to be grouped together logically, rather than having to organize your single-file components by function. Using the Composition API can lead to more readable code, and gives the developer more flexibility when developing their applications. + +{% resources %} + {% Official "https://vuejs.org/guide/typescript/composition-api.html", "TypeScript with Composition API" %} + {% Official "https://vuejs.org/guide/extras/composition-api-faq.html", "Composition API FAQ" %} + {% Blog "https://vuejs.org/api/#composition-api", "Composition API" %} + {% Blog "https://www.thisdot.co/blog/vue-3-composition-api-ref-and-reactive", "Vue 3 Composition API" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/index.md b/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/index.md new file mode 100644 index 000000000..3e3cc66b2 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/104-api-styles/index.md @@ -0,0 +1,7 @@ +# API Styles + +Up until Vue 2, there was one way to create components in Vue. With Vue 3, a new methodology was introduced called the Composition API. Now, if we want to make a component in Vue, we have two ways to do it. You might be wondering what the difference is, exactly, so let’s take a look at how the newer Composition API differs from the Vue 2 methodology, which is now known as the Options API + +{% resources %} + {% Blog "https://fjolt.com/article/vue-composition-api-vs-options-api", "The Difference Between the Composition API and Options API in Vue" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/100-fundamental-topics/105-app-configurations.md b/src/roadmaps/vue/content/100-fundamental-topics/105-app-configurations.md new file mode 100644 index 000000000..52500e107 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/105-app-configurations.md @@ -0,0 +1,8 @@ +# App Configurations + +Every application instance exposes a `config` object that contains the configuration settings for that application. You can modify its properties before mounting your application. + +{% resources %} + {% Official "https://vuejs.org/api/application.html#app-config", "Official Documentation" %} + {% Official "https://vuejs.org/api/application.html", "official API Documentation" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/100-fundamental-topics/106-rendering-lists.md b/src/roadmaps/vue/content/100-fundamental-topics/106-rendering-lists.md new file mode 100644 index 000000000..76f8a34ca --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/106-rendering-lists.md @@ -0,0 +1,8 @@ +# Rendering Lists + +We can use the `v-for` directive to render a list of items based on an array. The `v-for` directive requires a special syntax in the form of `item in items`, where `items` is the source data array and `item` is an alias for the array element being iterated on. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/list.html", "Rendering Lists in Vue.js" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/107-conditional-rendering.md b/src/roadmaps/vue/content/100-fundamental-topics/107-conditional-rendering.md new file mode 100644 index 000000000..96af2bf71 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/107-conditional-rendering.md @@ -0,0 +1,9 @@ +# Conditional Rendering + +The directive `v-if` is used to conditionally render a block. The block will only be rendered if the directive's expression returns a truthy value. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/conditional.html", "Conditional Rendering" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/108-lifecycle-hooks.md b/src/roadmaps/vue/content/100-fundamental-topics/108-lifecycle-hooks.md new file mode 100644 index 000000000..026d8246d --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/108-lifecycle-hooks.md @@ -0,0 +1,8 @@ +# Lifecycle Hooks + +Each Vue component instance goes through a series of initialization steps when it's created - for example, it needs to set up data observation, compile the template, mount the instance to the DOM, and update the DOM when data changes. Along the way, it also runs functions called lifecycle hooks, giving users the opportunity to add their own code at specific stages. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/lifecycle.html", "Life Cycle Hooks" %} + {% Blog "https://dev.to/amolikvivian/the-lifecycles-of-vue-js-lhh", "The Lifecycles of Vue.js" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/100-fundamental-topics/109-forms-handling.md b/src/roadmaps/vue/content/100-fundamental-topics/109-forms-handling.md new file mode 100644 index 000000000..122f830ad --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/109-forms-handling.md @@ -0,0 +1,9 @@ +# Forms Handling + +You can use the `v-model` directive to create two-way data bindings on form input elements. It automatically picks the correct way to update the element based on the input type. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/forms.html", "Form Input Bindings" %} + {% Blog "https://www.youtube.com/watch?v=T-AE-GtSlN4", "Vue JS 3 Tutorial - Form Handling" %} + {% Blog "https://blog.logrocket.com/an-imperative-guide-to-forms-in-vue-js-2/", "A complete guide to forms in Vue.js" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/100-fundamental-topics/110-events-handling.md b/src/roadmaps/vue/content/100-fundamental-topics/110-events-handling.md new file mode 100644 index 000000000..e18902409 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/110-events-handling.md @@ -0,0 +1,8 @@ +# Events Handling + +When you build a dynamic website with Vue you'll most likely want it to be able to respond to events. For example, if a user clicks a button, submits a form, or even just moves their mouse, you may want your Vue site to respond somehow. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/event-handling.html", "Event Handling in Vue.js" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/111-computed-properties.md b/src/roadmaps/vue/content/100-fundamental-topics/111-computed-properties.md new file mode 100644 index 000000000..28d62d9d3 --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/111-computed-properties.md @@ -0,0 +1,8 @@ +# Computed Properties + +In-template expressions are very convenient, but they are meant for simple operations. Putting too much logic in your templates can make them bloated and hard to maintain. Computed properties allow us to simplify the complex logic that includes reactive data. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/computed.html#computed-properties", "Computed Properties" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/100-fundamental-topics/index.md b/src/roadmaps/vue/content/100-fundamental-topics/index.md new file mode 100644 index 000000000..63a9c4a5d --- /dev/null +++ b/src/roadmaps/vue/content/100-fundamental-topics/index.md @@ -0,0 +1,9 @@ +# Fundamental Topics + +Vue is a JavaScript framework for building user interfaces. It builds on top of standard HTML, CSS and JavaScript, and provides a declarative and component-based programming model that helps you efficiently develop user interfaces, be it simple or complex. + +{% resources %} + {% Official "https://vuejs.org/", "Vue.js Official Website" %} + {% Official "https://vuejs.org/guide/introduction.html", "Official Documentation" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/100-ref.md b/src/roadmaps/vue/content/101-advanced-topics/100-ref.md new file mode 100644 index 000000000..b5673bc28 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/100-ref.md @@ -0,0 +1,11 @@ +# Ref + +`ref()` and `reactive()` are used to track changes of its argument. When using them to initialize variables you give Vue information: “Hey, I want you to re-build or re-evaluate everything that depends on those variables every time they change”. + +{% resources %} + {% Blog "https://medium.com/@bsalwiczek/ref-vs-reactive-in-vue-3-whats-the-right-choice-7c6f7265ce39", "Ref() vs Reactive() in Vue 3 — what’s the right choice?" %} + {% Official "https://vuejs.org/api/reactivity-core.html#ref", "Reactivity API — ref" %} +{% endresources %} + + + diff --git a/src/roadmaps/vue/content/101-advanced-topics/101-torefs.md b/src/roadmaps/vue/content/101-advanced-topics/101-torefs.md new file mode 100644 index 000000000..9239cd012 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/101-torefs.md @@ -0,0 +1,10 @@ +# toRefs + +`toRefs` converts a reactive object to a plain object where each property of the resulting object is a ref pointing to the corresponding property of the original object. Each individual ref is created using `toRef()`. + +{% resources %} + {% Blog "https://vuejs.org/api/reactivity-utilities.html#toref", "Reactivity API — toRefs" %} + {% Blog "https://www.youtube.com/watch?v=sAj6tdVS2cA", "Vue 3: Reactivity Made Easy (ref, reactive, toRefs... oh my!)" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/101-advanced-topics/102-reactive.md b/src/roadmaps/vue/content/101-advanced-topics/102-reactive.md new file mode 100644 index 000000000..62dd8c4f3 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/102-reactive.md @@ -0,0 +1,9 @@ +# reactive + +`reactive` allows us to create reactive data structures. Reactive objects are [JavaScript Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) and behave just like normal objects. The difference is that Vue is able to track the property access and mutations of a reactive object. + +{% resources %} + {% Official "https://vuejs.org/api/reactivity-core.html#reactive", "Reactivity API — reactive" %} + {% Blog "https://developers.deepgram.com/blog/2022/02/diving-into-vue-3-reactivity-api/", "Diving into Vue 3 - The Reactivity API" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/103-computed.md b/src/roadmaps/vue/content/101-advanced-topics/103-computed.md new file mode 100644 index 000000000..3a893ef5e --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/103-computed.md @@ -0,0 +1,8 @@ +# computed + +`computed` takes a getter function and returns a readonly reactive `ref` object for the returned value from the getter. It can also take an object with `get` and `set` functions to create a writable ref object. + +{% resources %} + {% Official "https://vuejs.org/api/reactivity-core.html#computed", "Reactivity Core — computed" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/104-watch.md b/src/roadmaps/vue/content/101-advanced-topics/104-watch.md new file mode 100644 index 000000000..105daa52c --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/104-watch.md @@ -0,0 +1,9 @@ +# watch + +`watch` watches one or more reactive data sources and invokes a callback function when the sources change. + +{% resources %} + {% Official "https://vuejs.org/api/reactivity-core.html#watch", "Reactivity API — watch" %} + {% Blog "https://blog.logrocket.com/understanding-watchers-vue/", "Understanding watchers in Vue" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/105-next-tick.md b/src/roadmaps/vue/content/101-advanced-topics/105-next-tick.md new file mode 100644 index 000000000..d424a9fb4 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/105-next-tick.md @@ -0,0 +1,7 @@ +# nextTick + +`nextTick` is a utility for waiting for the next DOM update flush. + +{% resources %} + {% Official "https://vuejs.org/api/general.html#nexttick", "Global API — nextTick" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/101-advanced-topics/106-composables.md b/src/roadmaps/vue/content/101-advanced-topics/106-composables.md new file mode 100644 index 000000000..cf5cb0ed9 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/106-composables.md @@ -0,0 +1,11 @@ +# Composables + +In the context of Vue applications, a "composable" is a function that leverages Vue's Composition API to encapsulate and reuse stateful logic. + +When building frontend applications, we often need to reuse logic for common tasks. For example, we may need to format dates in many places, so we extract a reusable function for that. This formatter function encapsulates stateless logic: it takes some input and immediately returns expected output. There are many libraries out there for reusing stateless logic - for example lodash and date-fns, which you may have heard of. + +{% resources %} + {% Official "https://vuejs.org/guide/reusability/composables.html", "Vue.js Composables" %} + {% Blog "https://www.youtube.com/watch?v=h8yveYCbFQM", "What is a Composable? (Vue 3)" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/107-async-components.md b/src/roadmaps/vue/content/101-advanced-topics/107-async-components.md new file mode 100644 index 000000000..5a1fe4bf6 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/107-async-components.md @@ -0,0 +1,7 @@ +# Async Components + +In large applications, we may need to divide the app into smaller chunks and only load a component from the server when it's needed. To make that possible, Vue has a `defineAsyncComponent` function. + +{% resources %} + {% Official "https://vuejs.org/guide/components/async.html", "Async Components" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/101-advanced-topics/108-teleport-components.md b/src/roadmaps/vue/content/101-advanced-topics/108-teleport-components.md new file mode 100644 index 000000000..d69f6dc9a --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/108-teleport-components.md @@ -0,0 +1,7 @@ +# Teleport Components + +Sometimes we may run into the following scenario: a part of a component's template belongs to it logically, but from a visual standpoint, it should be displayed somewhere else in the DOM, outside of the Vue application. This is where the `` component comes in. + +{% resources %} + {% Official "https://vuejs.org/guide/built-ins/teleport.html", "Teleport Components" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/101-advanced-topics/109-provide-inject.md b/src/roadmaps/vue/content/101-advanced-topics/109-provide-inject.md new file mode 100644 index 000000000..0fdcdc8b8 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/109-provide-inject.md @@ -0,0 +1,8 @@ +# Provide / Inject + +Usually, when we need to pass data from the parent to a child component, we use props. However, imagine the case where we have a large component tree, and a deeply nested component needs something from a distant ancestor component. With only props, we would have to pass the same prop across the entire parent chain. We can solve props drilling with `provide` and `inject`. + +{% resources %} + {% Official "https://vuejs.org/guide/components/provide-inject.html", "Provide / Inject in Vue.js" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/110-custom-directives.md b/src/roadmaps/vue/content/101-advanced-topics/110-custom-directives.md new file mode 100644 index 000000000..4c26966f1 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/110-custom-directives.md @@ -0,0 +1,7 @@ +# Custom Directives + +So far you may have covered two forms of code reuse in Vue: [components](https://vuejs.org/guide/essentials/component-basics.html) and [composables](https://vuejs.org/guide/reusability/composables.html). Components are the main building blocks, while composables are focused on reusing stateful logic. Custom directives, on the other hand, are mainly intended for reusing logic that involves low-level DOM access on plain elements. + +{% resources %} + {% Official "https://vuejs.org/guide/reusability/custom-directives.html", "Custom Directives" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/101-advanced-topics/111-custom-events.md b/src/roadmaps/vue/content/101-advanced-topics/111-custom-events.md new file mode 100644 index 000000000..ec851c411 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/111-custom-events.md @@ -0,0 +1,7 @@ +# Custom Events + +Sometimes you may need to define custom events that can be used in your components. Vue.js allows you to do this by emitting custom event objects using `$emit`. + +{% resources %} + {% Blog "https://auth0.com/blog/custom-events-in-vue/", "Custom Events in Vue" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/101-advanced-topics/112-plugins.md b/src/roadmaps/vue/content/101-advanced-topics/112-plugins.md new file mode 100644 index 000000000..2c2a343a6 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/112-plugins.md @@ -0,0 +1,8 @@ +# Plugins + +Plugins are self-contained code that usually add app-level functionality to Vue. + +{% resources %} + {% Official "https://vuejs.org/guide/reusability/plugins.html", "Plugins in Vue.js" %} + {% Blog "https://www.linode.com/docs/guides/how-to-write-vue-js-plugins/", "How to Write Your Own Vue.js Plugin" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/101-advanced-topics/113-watchers.md b/src/roadmaps/vue/content/101-advanced-topics/113-watchers.md new file mode 100644 index 000000000..c3152fc28 --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/113-watchers.md @@ -0,0 +1,9 @@ +# Watchers + +Computed properties allow us to declaratively compute derived values. However, there are cases where we need to perform "side effects" in reaction to state changes - for example, mutating the DOM, or changing another piece of state based on the result of an async operation. + +With Composition API, we can use the watch function to trigger a callback whenever a piece of reactive state changes. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/watchers.html", "Watchers in Vue.js" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/101-advanced-topics/114-slots.md b/src/roadmaps/vue/content/101-advanced-topics/114-slots.md new file mode 100644 index 000000000..4f2dda7ba --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/114-slots.md @@ -0,0 +1,10 @@ +# Slots + +In some cases, we may want to pass a template fragment to a child component, and let the child component render the fragment within its own template. The `` element is a slot outlet that indicates where the parent-provided slot content should be rendered. + +{% resources %} + {% Official "https://vuejs.org/guide/components/slots.html", "Slots in Vue.js" %} +{% endresources %} + + + diff --git a/src/roadmaps/vue/content/101-advanced-topics/115-transition.md b/src/roadmaps/vue/content/101-advanced-topics/115-transition.md new file mode 100644 index 000000000..2944af8db --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/115-transition.md @@ -0,0 +1,11 @@ +# Transition + +Vue offers two built-in components that can help work with transitions and animations in response to changing state: + +* `` for applying animations when an element or component is entering and leaving the DOM. This is covered on this page. +* `` for applying animations when an element or component is inserted into, removed from, or moved within a `v-for` list. This is covered in the next chapter. + +{% resources %} + {% Official "https://vuejs.org/guide/built-ins/transition.html#transition", "Transition Component" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/116-transition-group.md b/src/roadmaps/vue/content/101-advanced-topics/116-transition-group.md new file mode 100644 index 000000000..643e57cde --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/116-transition-group.md @@ -0,0 +1,8 @@ +# Transition Group + +`` is a built-in component designed for animating the insertion, removal, and order change of elements or components that are rendered in a list. + +{% resources %} + {% Official "https://vuejs.org/guide/built-ins/transition-group.html", "TransitionGroup Component" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/101-advanced-topics/index.md b/src/roadmaps/vue/content/101-advanced-topics/index.md new file mode 100644 index 000000000..53e96801f --- /dev/null +++ b/src/roadmaps/vue/content/101-advanced-topics/index.md @@ -0,0 +1,3 @@ +# Advanced Topics + +Now that you have covered the basics, next we have the advanced topics such as Async Components, Teleports, Provide/Inject, Custom Directives, Custom Events, Plugins, Watchers, Slots and more. diff --git a/src/roadmaps/vue/content/102-ecosystem/100-routing/100-vue-router.md b/src/roadmaps/vue/content/102-ecosystem/100-routing/100-vue-router.md new file mode 100644 index 000000000..6eda481f2 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/100-routing/100-vue-router.md @@ -0,0 +1,8 @@ +# Vue Router + +Vue Router is the official router for Vue.js which allows creating static/dynamic routes, has support for navigation interception, allows for component based configuration and much more. + +{% resources %} + {% Official "https://router.vuejs.org/", "Vue Router" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/102-ecosystem/100-routing/index.md b/src/roadmaps/vue/content/102-ecosystem/100-routing/index.md new file mode 100644 index 000000000..e05bc2c28 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/100-routing/index.md @@ -0,0 +1,3 @@ +# Routing + +Routing is an essential concept in Single Page Applications (SPA). When your application is divided into separated logical sections, and all of them are under their own URL, your users can easily share links among each other. diff --git a/src/roadmaps/vue/content/102-ecosystem/101-forms/100-vue-formulate.md b/src/roadmaps/vue/content/102-ecosystem/101-forms/100-vue-formulate.md new file mode 100644 index 000000000..b9c751159 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/101-forms/100-vue-formulate.md @@ -0,0 +1,9 @@ +# Vue formulate + +Vue formulate's built-in validation, error handling, grouped & repeatable fields, form generation, and more — make complex form creation a breeze. + +{% resources %} + {% Official "https://vueformulate.com/", "Official Website: Vue Formulate" %} + {% Blog "https://github.com/wearebraid/vue-formulate", "wearebraid/vue-formulate" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/102-ecosystem/101-forms/101-vee-validate.md b/src/roadmaps/vue/content/102-ecosystem/101-forms/101-vee-validate.md new file mode 100644 index 000000000..0a93e226e --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/101-forms/101-vee-validate.md @@ -0,0 +1,10 @@ +# Vee validate + +OpenSource plugin to handle form validations in Vue.js + +{% resources %} + {% Official "https://vee-validate.logaretm.com/v4/", "Official Website: Vee Validate" %} + {% Blog "https://github.com/logaretm/vee-validate", "logarem/vee-validate" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/102-ecosystem/101-forms/102-vuelidate.md b/src/roadmaps/vue/content/102-ecosystem/101-forms/102-vuelidate.md new file mode 100644 index 000000000..5a40e7467 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/101-forms/102-vuelidate.md @@ -0,0 +1,9 @@ +# Vuelidate + +Simple, lightweight model-based validation for Vue.js. + +{% resources %} + {% Official "https://vuelidate.js.org/", "Official Website: Vuelidate" %} + {% Blog "https://github.com/vuelidate/vuelidate", "vuelidate/vuelidate" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/102-ecosystem/101-forms/index.md b/src/roadmaps/vue/content/102-ecosystem/101-forms/index.md new file mode 100644 index 000000000..58622ebc7 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/101-forms/index.md @@ -0,0 +1,8 @@ +# Forms + +Apart from the built-in form-binding support, there are several options available that allow for handling forms and data in much convenient manner. + +{% resources %} + {% Official "https://vuejs.org/guide/essentials/forms.html", "Form Input Bindings" %} + {% Blog "https://vueschool.io/lessons/user-inputs-vue-devtools-in-vue-3?friend=vuejs", "User Inputs in Vue 3" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/102-ssr/100-quasar.md b/src/roadmaps/vue/content/102-ecosystem/102-ssr/100-quasar.md new file mode 100644 index 000000000..35fda5c57 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/102-ssr/100-quasar.md @@ -0,0 +1,11 @@ +# Quasar + +Quasar Framework is an open-source Vue.js based framework for building apps, with a single codebase, and deploy it on the Web as a SPA, PWA, SSR, to a Mobile App, using Cordova for iOS & Android, and to a Desktop App, using Electron for Mac, Windows, and Linux. + +{% resources %} + {% Official "https://quasar.dev/", "Official Website: Quasar" %} + {% Course "https://www.youtube.com/watch?v=opmng7llVJ0&list=PLAiDzIdBfy8iu_MZrq3IPuSFcRgCQ0iL0", "Quasar Framework: Vue.js Cross Platform App" %} + {% Course "https://www.youtube.com/watch?v=czJIuHyPPXo", "How to Build an App using Quasar Framework" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/102-ecosystem/102-ssr/101-nuxt-js.md b/src/roadmaps/vue/content/102-ecosystem/102-ssr/101-nuxt-js.md new file mode 100644 index 000000000..792c89b00 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/102-ssr/101-nuxt-js.md @@ -0,0 +1,11 @@ +# Nuxt.js + +Nuxt.js is a free and open source JavaScript library based on Vue.js, Node.js, Webpack and Babel.js. Nuxt is inspired by Next.js, which is a framework of similar purpose, based on React.js. + +{% resources %} + {% Official "https://nuxtjs.org/", "Nuxt Website" %} + {% Blog "https://nuxtjs.org/docs/get-started/installation", "Nuxt Docs" %} + {% Course "https://explorers.netlify.com/learn/get-started-with-nuxt", "Get Started with Nuxt" %} + {% Course "https://vueschool.io/courses/nuxtjs-fundamentals", "Nuxt.js Fundamentals" %} + {% Blog "https://nuxtjs.org/tutorials", "Nuxt Tutorials" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/102-ssr/index.md b/src/roadmaps/vue/content/102-ecosystem/102-ssr/index.md new file mode 100644 index 000000000..f463f2a39 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/102-ssr/index.md @@ -0,0 +1,11 @@ +# Server-side rendering + +Server-side rendering refers to the process that the service side completes the HTML structure splicing of the page, sends it to the browser, and then binds the status and events for it to become a fully interactive page. + +{% resources %} + {% Blog "https://www.educative.io/answers/what-is-server-side-rendering", "what is server side rendering" %} + {% Blog "https://medium.com/@mbleigh/when-should-i-server-side-render-c2a383ff2d0f", "When should I Server-Side Render?" %} + {% Blog "https://vuejs.org/guide/scaling-up/ssr.html", "Server-Side Rendering (SSR)" %} + {% Blog "https://www.youtube.com/watch?v=GQzn7XRdzxY", "what is server side rendering?" %} + {% Blog "https://www.youtube.com/watch?v=okvg3MRAPs0", "What is server-side rendering for web development?" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/103-ssg/100-gridsome.md b/src/roadmaps/vue/content/102-ecosystem/103-ssg/100-gridsome.md new file mode 100644 index 000000000..964c540b4 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/103-ssg/100-gridsome.md @@ -0,0 +1,8 @@ +# Gridsome + +Gridsome is a Vue.js powered Jamstack framework for building static generated websites & apps that are fast by default. + +{% resources %} + {% Official "https://gridsome.org/", "Gridsome Website" %} + {% Blog "https://gridsome.org/docs/", "Gridsome Documentation" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/103-ssg/101-vuepress.md b/src/roadmaps/vue/content/102-ecosystem/103-ssg/101-vuepress.md new file mode 100644 index 000000000..8770a4cd8 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/103-ssg/101-vuepress.md @@ -0,0 +1,9 @@ +# Vuepress + +VuePress is composed of two parts: a minimalistic static site generator (opens new window)with a Vue-powered theming system and Plugin API, and a default theme optimized for writing technical documentation. It was created to support the documentation needs of Vue’s own sub projects. + +{% resources %} + {% Blog "https://vuepress.vuejs.org/", "Official Website" %} + {% Blog "https://vuepress.vuejs.org/guide/getting-started.html", "Official Docs for Getting Started" %} + {% Blog "https://www.youtube.com/watch?v=lIv1ItUzktc", "Introduction to VuePress" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/103-ssg/index.md b/src/roadmaps/vue/content/102-ecosystem/103-ssg/index.md new file mode 100644 index 000000000..fb7c97cff --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/103-ssg/index.md @@ -0,0 +1,10 @@ +# Static Site Generators + +A static site generator is a tool that generates a full static HTML website based on raw data and a set of templates. Essentially, a static site generator automates the task of coding individual HTML pages and gets those pages ready to serve to users ahead of time. Because these HTML pages are pre-built, they can load very quickly in users' browsers. + +{% resources %} + {% Blog "https://www.cloudflare.com/learning/performance/static-site-generator/", "What is a static site generator?" %} + {% Blog "https://nextjs.org/docs/advanced-features/static-html-export", "Next.js SSG" %} + {% Blog "https://www.gatsbyjs.com/docs/glossary/static-site-generator/", "Gatsby SSG" %} + {% Blog "https://www.smashingmagazine.com/2021/10/building-ssg-11ty-vite-jam-sandwich/", "SSG — An 11ty, Vite And JAM Sandwich" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/104-state-management/100-pinia.md b/src/roadmaps/vue/content/102-ecosystem/104-state-management/100-pinia.md new file mode 100644 index 000000000..8f21c9668 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/104-state-management/100-pinia.md @@ -0,0 +1,7 @@ +# Pinia + +Pinia is a store library for Vue.js, and can be used in Vue 2 and Vue 3, with the same API, except in SSR and its installation. It allows state sharing between pages and components around the application. As the documentation says, it is extensible, intuitive (by organization), has devtools support (in Vue.js devtools), inferred typed state even in javascript and more. In Pinia you can access, mutate, replace, use getters that works like computed, use actions, etc. The library is recommended by the official Vue.js documentation. + +{% resources %} + {% Blog "https://pinia.vuejs.org/", "Official Documentation" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/104-state-management/index.md b/src/roadmaps/vue/content/102-ecosystem/104-state-management/index.md new file mode 100644 index 000000000..5c857e03a --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/104-state-management/index.md @@ -0,0 +1,7 @@ +# State Management + +Application state management is the process of maintaining knowledge of an application's inputs across multiple related data flows that form a complete business transaction -- or a session -- to understand the condition of the app at any given moment. In computer science, an input is information put into the program by the user and state refers to the condition of an application according to its stored inputs -- saved as variables or constants. State can also be described as the collection of preserved information that forms a complete session. + +{% resources %} + {% Blog "https://www.techtarget.com/searchapparchitecture/definition/state-management", "What is State Management?" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/100-capacitor.md b/src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/100-capacitor.md new file mode 100644 index 000000000..e2c62eebd --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/100-capacitor.md @@ -0,0 +1,10 @@ +# Capacitor + +Since Vue.js is a web framework, it does not natively support mobile app development. So how do we get access to native mobile features such as the camera and geolocation? Ionic has an official native runtime called Capacitor. With Capacitor’s plugin, you can access the native API of the device your app is running on and build truly native mobile application with Ionic Vue. + +{% resources %} + {% Blog "https://blog.logrocket.com/building-cross-platform-apps-with-capacitor-and-vue-js/", "Building cross-platform apps with Capacitor and Vue.js" %} + {% Blog "https://www.smashingmagazine.com/2018/07/mobile-apps-capacitor-vue-js/", "Building Mobile Apps With Capacitor And Vue.js" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/index.md b/src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/index.md new file mode 100644 index 000000000..0e0b4a3f9 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/105-mobile-apps/index.md @@ -0,0 +1,7 @@ +# Mobile Apps + +Building a mobile application with Vue.js is not impossible. In fact, you can build production-ready apps that look and feel like native mobile apps with Vue.js. + +{% resources %} + {% Blog "https://blog.logrocket.com/comparing-vue-js-mobile-app-development-frameworks/#whyusevuejstobuildmobileapps", "Comparing Vue.js mobile app development frameworks" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/106-api-calls/100-apollo.md b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/100-apollo.md new file mode 100644 index 000000000..288bc754f --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/100-apollo.md @@ -0,0 +1,10 @@ +# Apollo + +Apollo is a platform for building a unified graph, a communication layer that helps you manage the flow of data between your application clients (such as web and native apps) and your back-end services. + +{% resources %} + {% Official "https://www.apollographql.com", "Apollo Website" %} + {% Blog "https://www.apollographql.com/docs/", "Official Docs" %} + {% Blog "https://www.youtube.com/c/ApolloGraphQL/", "Official YouTube Channel" %} + {% Blog "https://www.youtube.com/watch?v=YyUWW04HwKY", "GraphQL With React Tutorial - Apollo Client" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/106-api-calls/101-vue-relay.md b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/101-vue-relay.md new file mode 100644 index 000000000..ca5d2ff63 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/101-vue-relay.md @@ -0,0 +1,8 @@ +# Relay Modern + +Relay is a JavaScript client used in the browser to fetch GraphQL data. It's a JavaScript framework developed by Facebook for managing and fetching data in React applications. It is built with scalability in mind in order to power complex applications like Facebook. The ultimate goal of GraphQL and Relay is to deliver instant UI-response interactions. + +{% resources %} + {% Official "https://relay.dev/", "Official Website" %} + {% Blog "https://relay.dev/docs/", "Introduction to Relay modern" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/106-api-calls/102-axios.md b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/102-axios.md new file mode 100644 index 000000000..ee3bbf4ea --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/102-axios.md @@ -0,0 +1,12 @@ +# Axios + +The most common way for frontend programs to communicate with servers is through the HTTP protocol. You are probably familiar with the Fetch API and the XMLHttpRequest interface, which allows you to fetch resources and make HTTP requests. + +Axios is a client HTTP API based on the XMLHttpRequest interface provided by browsers. + +{% resources %} + {% Official "https://axios-http.com/docs/intro", "Axios Getting Started" %} + {% Blog "https://blog.logrocket.com/how-to-make-http-requests-like-a-pro-with-axios/#why", "How to make HTTP requests with Axios" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/102-ecosystem/106-api-calls/103-unfetch.md b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/103-unfetch.md new file mode 100644 index 000000000..bbae5d41d --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/103-unfetch.md @@ -0,0 +1,9 @@ +# Unfetch + +Unfetch is the bare minimum 500b [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) polyfill. + +{% resources %} + {% Blog "https://github.com/developit/unfetch", "Official GitHub Repository" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/102-ecosystem/106-api-calls/104-superagent.md b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/104-superagent.md new file mode 100644 index 000000000..a766896af --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/104-superagent.md @@ -0,0 +1,9 @@ +# Superagent + +Small progressive client-side HTTP request library, and Node.js module with the same API, supporting many high-level HTTP client features + +{% resources %} + {% Official "https://visionmedia.github.io/superagent/", "Official Website" %} + {% Blog "https://github.com/visionmedia/superagent", "GitHub Repository" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/102-ecosystem/106-api-calls/index.md b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/index.md new file mode 100644 index 000000000..44aab8259 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/106-api-calls/index.md @@ -0,0 +1,8 @@ +# API Calls + +There are several options available to make API calls from your Vue.js applications. + +{% resources %} + {% Blog "https://medium.com/bb-tutorials-and-thoughts/how-to-make-api-calls-in-vue-js-applications-43e017d4dc86", "How To Make API calls in Vue.JS Applications" %} +{% endresources %} + diff --git a/src/roadmaps/vue/content/102-ecosystem/107-jest.md b/src/roadmaps/vue/content/102-ecosystem/107-jest.md new file mode 100644 index 000000000..c4a202d9e --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/107-jest.md @@ -0,0 +1,8 @@ +# Jest + +Jest is a delightful JavaScript Testing Framework with a focus on simplicity. +It works with projects using: Babel, TypeScript, Node, React, Angular, Vue and more! + +{% resources %} + {% Official "https://jestjs.io/", "Jest Website" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/108-vue-testing-library.md b/src/roadmaps/vue/content/102-ecosystem/108-vue-testing-library.md new file mode 100644 index 000000000..724f8ae54 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/108-vue-testing-library.md @@ -0,0 +1,7 @@ +# Vue Testing Library + +The Vue Testing Library is a very lightweight solution for testing Vue components. Its primary guiding principle is: The more your tests resemble the way your software is used, the more confidence they can give you. + +{% resources %} + {% Official "https://testing-library.com/docs/vue-testing-library/intro/", "Getting Started with Vue Testing Library" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/109-cypress.md b/src/roadmaps/vue/content/102-ecosystem/109-cypress.md new file mode 100644 index 000000000..eed340d6e --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/109-cypress.md @@ -0,0 +1,9 @@ +# Cypress + +Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha – a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework. + +{% resources %} + {% Blog "https://www.cypress.io/", "Official Website" %} + {% Blog "https://docs.cypress.io/guides/overview/why-cypress#Other", "Official Documentation" %} + {% Blog "https://www.youtube.com/watch?v=7N63cMKosIE", "Cypress End-to-End Testing" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md b/src/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md new file mode 100644 index 000000000..b050e8f65 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/110-tailwind-css.md @@ -0,0 +1,11 @@ +# Tailwind CSS + +CSS Framework that provides atomic CSS classes to help you style components e.g. `flex`, `pt-4`, `text-center` and `rotate-90` that can be composed to build any design, directly in your markup. + +{% resources %} + {% Blog "https://tailwindcss.com", "Tailwind Website" %} + {% Blog "https://www.youtube.com/c/TailwindLabs/videos", "Official Screencasts" %} + {% Blog "https://www.youtube.com/watch?v=hdGsFpZ0J2E", "Should You Use Tailwind CSS?" %} + {% Blog "https://www.codemag.com/Article/2105091/Tailwind-CSS-An-Introduction", "Tailwind CSS: An Introduction" %} + {% Course "https://www.youtube.com/watch?v=UBOj6rqRUME", "Tailwind CSS Crash Course" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/111-vuetify.md b/src/roadmaps/vue/content/102-ecosystem/111-vuetify.md new file mode 100644 index 000000000..43002e394 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/111-vuetify.md @@ -0,0 +1,8 @@ +# Vuetify + +Vuetify is a Vue UI Library with beautifully handcrafted Material Components. No design skills required — everything you need to create amazing applications is at your fingertips. + +{% resources %} + {% Official "https://vuetifyjs.com/en/", "Official Website" %} + {% Blog "https://vuetifyjs.com/en/getting-started/installation/", "Getting started with Vuetify" %} +{% endresources %} diff --git a/src/roadmaps/vue/content/102-ecosystem/112-element-ui.md b/src/roadmaps/vue/content/102-ecosystem/112-element-ui.md new file mode 100644 index 000000000..030c7f2b4 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/112-element-ui.md @@ -0,0 +1,10 @@ +# Element UI + +Element UI is another Vue.js component library with several built-in components to style your Vue.js applications. + +{% resources %} + {% Official "https://element-plus.org/en-US/", "Official Website" %} + {% Blog "https://element-plus.org/en-US/guide/design.html", "Official Getting Started" %} +{% endresources %} + + diff --git a/src/roadmaps/vue/content/102-ecosystem/index.md b/src/roadmaps/vue/content/102-ecosystem/index.md new file mode 100644 index 000000000..63d1f27e7 --- /dev/null +++ b/src/roadmaps/vue/content/102-ecosystem/index.md @@ -0,0 +1,8 @@ +# Ecosystem + +Thanks to its popularity, Vue has been enriched by a vast ecosystem of plugins and tools. A (long) list is available here: [awesome-vue](https://github.com/vuejs/awesome-vue). + +{% resources %} + {% Blog "https://github.com/vuejs/awesome-vue", "Awesome Vue.js" %} +{% endresources %} + diff --git a/src/roadmaps/vue/vue.md b/src/roadmaps/vue/vue.md new file mode 100644 index 000000000..60043327b --- /dev/null +++ b/src/roadmaps/vue/vue.md @@ -0,0 +1,54 @@ +--- +jsonUrl: "/jsons/vue.json" +pdfUrl: "/pdfs/vue.pdf" +order: 4 +featuredTitle: "Vue" +featuredDescription: "Step by step guide to become a Vue Developer in 2022" +title: "Vue Developer" +description: "Everything that is there to learn about Vue and the ecosystem in 2022." +isNew: true +hasTopics: true +dimensions: + width: 968 + height: 1657.07 +seo: + title: "Vue Developer Roadmap: Learn to become a Vue developer" + description: "Community driven, articles, resources, guides, interview questions, quizzes for vue development. Learn to become a modern Vue developer by following the steps, skills, resources and guides listed in this roadmap." + keywords: + - "guide to becoming a vue developer" + - "guide to becoming a vue.js developer" + - "vue developer roadmap" + - "vue.js developer roadmap" + - "vue roadmap" + - "vue.js roadmap" + - "become vue developer" + - "become vue.js developer" + - "vue developer skills" + - "vue.js developer skills" + - "vue skills test" + - "vue.js skills test" + - "skills for vue development" + - "skills for vue.js development" + - "learn vue development" + - "learn vue.js development" + - "what is vue" + - "what is vue.js" + - "vue quiz" + - "vue.js quiz" + - "vue interview questions" + - "vue.js interview questions" +relatedRoadmaps: + - "frontend" + - "javascript" + - "react" + - "angular" + - "nodejs" +sitemap: + priority: 1 + changefreq: "monthly" +tags: + - "roadmap" + - "main-sitemap" + - "skill-roadmap" +--- +