My Own Study Program

My Own Study Program

Web Development

Frontend Web Development

TopicTheoryPracticeTODO
HTML✅ Books, Videos✅ Over 40 projectsstay current
CSS✅ Books, Videos✅ Over 40 projectsstay current - .container()
CSS Pre-Processors - SCSS✅ Books, Videos✅ Over 40 projectsTailwind CSS
JavaScript📖 Books, Videos✅ Over 20 projectscan always improve - practice and read more
TypeScript📖 Books, Videos✅ Over 15 projectscan always improve - practice and read more - custom types
Responsive web design✅ Books, Videos✅ Over 40 projectsstay current
Accessibility standards✅ Books, Videos✅ Over 40 projectsstay current
Cross-browser compatibility✅ Books, Videos✅ Over 40 projectsstay current
Front-end frameworks - Angular, React📖 Books, Videos✅ Over 15 Angular 📖 Over 5 React· Signals Angular, keep spewing more apps - apparently, nothing is ever impressive enough - just flood the freakin' net
Server-Side Rendering - Analog

Back-end development

TopicTheoryPracticeTODO
Node.JS📖 Books, Videos✅ practiced a bitpractice more
Express📖 Books, Videos✅ practiced a bitlearn & practice more
Python📖✅ practiced a bitlearn & practice more
Flask, Fast API📖✅ practiced a bitlearn & practice more
API design and development - REST API📖✅ practiced a bitlearn & practice more
Postman✅Used frequentlyuse more, better and more convenient ways to use - collections
Relational DBs - SQL📖Sophia Course✅ practiced a bit
NoSQL databases - MongoDB📖read a bit✅ practiced a bit

DevOps and deployment

TopicTheoryPracticeTODO
Continuous integration and deployment (CI/CD📖✅set up for a few projectsset up more projects
Version control (e.g., Git)📖✅Used frequentlypractice more
Infrastructure as code (e.g., Docker, Kubernetes)📖📖use more
Cloud computing platforms (e.g., AWS, Azure)📖✅Used - few jobspractice more

Security and performance

TopicTheoryPracticeTODO
OWASP top ten vulnerabilities📖📖learn better, learn how to protect against
Web application security best practices📖📖learn more, practice too
Performance optimization techniques (e.g., ca📖📖learn more, practice too
Load testing and scalability📖📖learn more, practice too

Project management and collaboration

TopicPractice
Agile methodologies (e.g., Scrum, Kanban)
Project management tools (e.g., JIRA, Trello)
Communication and collaboration tools (e.g., Slack, Zoom)

Other technologies and concepts

  • Mobile app development (e.g., React Native, Swift)

  • Machine learning and artificial intelligence

  • Blockchain technology

  • Chatbots and voice assistants

  • Web analytics and SEO


Programming

Object-Oriented Programming (OOP)

TopicTheoryPracticalTODO
Fundamental concepts of OOP✅ JS & jQuery - Jon Duckett✅ Used in over 10 appslearn more, practice too
Abstraction✅ CS50, Google IT Cert✅Practiced all the timepractice more
Encapsulation📖learn more, practice too
Polymorphism📖learn more, practice too
Inheritance📖learn more, practice too
Interfaces✅ Used in over 20 appslearn more, practice too
Abstract classes📖learn more, practice too
Refactoring📖learn more, practice too
Code smells📕learn more, practice avoiding
Design patterns (e.g., factory, decorator, observer, strategy)📖learn more, practice too
Design principles (e.g., SOLID, DRY, KISS)📖learn more, practice too
Reactive programming and event-driven architecture📖Udemy✅Used -> RxJSlearn more, practice too - COOL STUFF
Clean Code📖Book, Videoslearn more, practice more

Functional Programming

TopicTheoryPracticeTODO
Pure Functions📖📖
First-class functions📖📖
Higher-order functions📖✅Used
JavaScript functional programming libraries like Lodash and Ramda📖✅Used
Immutability and side effects📖📖
Closures and currying📖📖
SKI combinators and lambda calculus📖📖REALLY COOL STUFF - LEARN IT MORE
Monads and monad transformers📖📖
Lazy evaluation and infinite lists📖📖

more programming paradigms

Data Structures and Algorithms (DSA)

TopicTheoryPracticalTODO
Time and space complexity analysis of algorithms📖
Data structures (e.g., arrays, linked lists, stacks, queues, hash tables, trees, graphs)📖
Sorting and searching algorithms (e.g., quicksort, mergesort, binary search)📖
Graph algorithms and traversal techniques📖
Dynamic programming and memoization📖
Hashing and hash tables📖
Big O notation📖
Computational complexity📕
Asymptotic analysis📕
Recursion📖
Induction📕
Advanced data structures (e.g., Fibonacci heaps, skip lists, suffix trees)📖
How to choose the right data structure and algorithm for a given problem

Design Patterns

Design patterns are specific solutions to common software design problems. They are tried and tested solutions that have been developed and refined by experienced developers over time. Design patterns help developers solve common problems in a structured and efficient way. Design patterns are usually expressed in terms of code structures and relationships, and they often involve the use of object-oriented programming concepts like inheritance, encapsulation, and polymorphism.

TopicTheoryPracticeTODO
Domain-specific patterns (e.g., web design patterns, UI patterns)✅ Experience 6y +
Test-driven design (TDD)📖
Behavior-driven design (BDD)📖
Functional design patterns (e.g., map/filter/reduce, monoids, combinators)📖
Enterprise integration patterns (e.g., message queues, routing, mediation)📕
Microservices and service-oriented architecture (SOA)📖
Event sourcing and CQRS (Command Query Responsibility Segregation)📕
Distributed systems and consensus algorithms (e.g., Paxos, Raft)📕
Creational patterns (e.g., SINGLETON, builder, abstract factory, prototype)📖
Structural patterns (e.g., adapter, bridge, composite, decorator, facade)📕
Behavioral patterns (e.g., observer, mediator, chain of responsibility, visitor, command)📖
Anti-patterns (e.g., spaghetti code, copy-paste programming, over-engineering)✅ I have seen too much❌ Not practiced willingly
Architectural patterns (e.g., Model-View-Controller, Model-View-ViewModel, Layered architecture)📖

Design Principles

Design principles are guidelines or best practices for writing clean, maintainable, and extensible code. They are general principles that apply to all software development paradigms, including object-oriented programming, functional programming, and procedural programming. Some examples of design principles are SOLID, DRY, KISS, and Single Responsibility.

TopicTheory
DRY (Don't Repeat Yourself)📖
SOLID principles (e.g., single responsibility, open/closed, Liskov substitution)📖
KISS (Keep It Simple, Stupid)📖
Separation of Concerns principle📖
Single Responsibility principles for better architecture and maintainability📖

App Architecture / Software Architecture

App architecture is the structure and organization of a software application, including decisions about its components, programming paradigms, design patterns, and design principles. It aims to solve common software design problems in a structured and efficient way, creating scalable, maintainable, and robust software systems that are easy to understand and evolve over time.

TopicExample
REST (Representational State Transfer)A web application using HTTP to request and transfer data between a client and server.
Client-Server ArchitectureA chat application where the client sends messages to the server, which relays them to other connected clients.
Microservices ArchitectureAn e-commerce website where the checkout, payment, and shipping functions are split into separate microservices.
Monolithic ArchitectureAn inventory management system where all the components are tightly integrated into a single application
Event-Driven ArchitectureA stock trading platform that uses a messaging system to notify users of price changes and other events
Model-View-Controller (MVC) ArchitectureA web application using Angular as the frontend framework and a RESTful API as the backend.
Service-Oriented Architecture (SOA)A banking application where different services, such as account management and loan applications, are provided as separate web services.
Layered ArchitectureA social media platform where the presentation layer, business logic layer, and data access layer are separate and distinct.
Reactive ArchitectureAn online gaming platform that uses event-driven programming to handle real-time interactions between players
Clean ArchitectureA news website that separates its business rules and use cases from the UI, making it easier to test and maintain
Serverless ArchitectureA ride-hailing app where the backend code is divided into smaller functions that can be executed on-demand, and managed by a cloud provider like AWS Lambda, Azure Functions or Google Cloud Functions.

Performance Optimization

TopicTheoryPracticeTODO
Profiling and benchmarking tools (e.g., flame graphs, heap profiling Valgrind, Gprof, Perf)📖
Profiling and debugging techniques to identify performance bottlenecks📖
Techniques for optimizing code, such as caching, lazy loading, and asynchronous programming📖
Cache optimization and memory locality📖
Cloud computing and autoscaling📖
Parallelization and concurrency
Memory management and garbage collection📖
Just-in-time (JIT) compilation and optimization
Asymptotic analysis and big-O notation📖
SIMD (Single Instruction Multiple Data) optimization
Lock-free programming and atomic operations
GPGPU (General-Purpose Graphics Processing Units) and CUDA📖
Machine learning and neural networks
How to choose the right tools and techniques for optimizing the performance of web applications📖

Testing

TopicTheoryPracticeTODO
Tools such as Mocha, Jasmine, Karma and Jest for testing JavaScript code📖✅ used - Jasmine, Karmaget into it more, practice more
Test coverage and mutation score
Property-based testing and fuzzing
Load testing and stress testing📖
Contract testing and consumer-driven contracts
Continuous testing and continuous verification📖
Integration testing and end-to-end testing📖
Integration testing frameworks (e.g., Selenium, Appium, JMeter)📖
Performance testing and benchmarking
Unit testing frameworks (e.g., JUnit, NUnit, PHPUnit)
Test-driven development (TDD)📖
Behavior-driven development (BDD)📖
Mocking and stubbing frameworks (e.g., Mockito, EasyMock, Sinon)📖get into it more
Mutation testing and fuzz testing

Debugging

TopicTheoryPracticeTODO
Logging and tracing📖
Breakpoints, watch windows and call stacks📖
Using a debugger (e.g., GDB, LLDB, WinDbg)📖
Remote debugging and debugging over SSH📖 Google IT Cert
Post-mortem debugging and crash analysis📖 Google IT Cert

Version Control

TopicTheoryPracticeTODO
Distributed version control systems (e.g., Git, Mercurial)📖
Branching and merging strategies (e.g., Gitflow, Trunk-based development)
Collaborative workflows and code review tools (e.g., GitHub, GitLab, Bitbucket)
Versioning conventions and release management
Continuous integration and deployment (CI/CD) pipelines📖✅set up for a few projects

Security

TopicTheoryPracticeTODO
OWASP (Open Web Application Security Project) Top Ten📖 OWASP Top Ten
Authentication and authorization protocols (e.g., OAuth, OpenID Connect)📖
Input validation and sanitization techniques📖✅ Used in over 10 apps
Cryptography and encryption algorithms (e.g., AES, RSA, SHA)📖 Google IT Cert
Security standards and compliance frameworks (e.g., PCI-DSS, HIPAA, ISO 27001)📖 Google IT Cert

Legend

  • ✅ - gained theoretical knowledge and/or practice

  • 📖 - familiar with it, can improve on theory and/or practice

  • 📕- have not explored it enough yet

I just want to be a front-end web developer and play with buttons... What the heck did I get myself into...


More Technologies

Gulp

Gulp is a popular task runner used in web development. It is a build automation tool that helps automate repetitive tasks in the development process, such as minifying CSS and JavaScript files, optimizing images, compiling Sass or Less, concatenating and uglifying files, and more.

Gulp uses a simple yet powerful API to define and execute tasks, and it can be integrated with various plugins and modules to extend its functionality. Gulp is typically used in conjunction with other web development tools and technologies such as Node.js, NPM, and various front-end frameworks.

By automating common development tasks, Gulp can help streamline the development process, save time, and reduce errors. It is widely used in web development for creating more efficient workflows and improving the overall quality of web applications.

Docker

Docker is a popular containerization platform used to create, deploy, and run applications in a self-contained environment called a container. The container allows developers to package an application with all its dependencies, including libraries, frameworks, and other components, into a single package that can run consistently across different environments, such as development, testing, and production.

Here are some of the primary use cases for Docker:

  1. Application deployment: Docker simplifies the deployment of applications by providing a lightweight and portable environment that can be easily moved across different servers or cloud platforms.

  2. Microservices: Docker is widely used to deploy microservices-based applications, where each microservice is packaged as a separate container and deployed independently.

  3. DevOps: Docker helps streamline the DevOps process by allowing developers to create and test applications locally before deploying them to production.

  4. Continuous Integration and Continuous Deployment (CI/CD): Docker can be integrated with CI/CD tools like Jenkins, allowing developers to automate the entire software development and deployment process.

  5. Cloud computing: Docker is commonly used in cloud computing environments like Amazon Web Services (AWS) and Google Cloud Platform (GCP) to deploy and manage containerized applications.

Overall, Docker provides a simple and efficient way to manage and deploy applications, making it a popular choice among developers and DevOps professionals.

Vercel

Vercel is a cloud platform for building, deploying and scaling websites and web applications. It was formerly known as Zeit and was rebranded as Vercel in 2020. Vercel offers a variety of services including hosting, serverless functions, continuous deployment, and collaboration tools. It is especially popular for its support of Next.js, a React-based framework for building server-side rendered websites and applications. With Vercel, developers can easily deploy their projects to a global network of servers, ensuring fast and reliable performance for users around the world.

While Vercel, Firebase, and Supabase are all cloud platforms for building web applications, they differ in their focus and the services they offer.

Firebase is primarily focused on providing a backend-as-a-service (BaaS) platform that enables developers to build serverless applications without having to manage servers. It provides a variety of services such as authentication, database, storage, hosting, and more.

Supabase is an open-source alternative to Firebase that provides similar BaaS services such as authentication, database, storage, and hosting. It also offers some additional features such as real-time subscriptions and APIs for building backend functionality.

Vercel, on the other hand, is focused on providing a platform for deploying and scaling web applications, with a strong emphasis on performance and developer experience. It offers hosting, serverless functions, continuous deployment, and collaboration tools to help developers build and deploy their applications quickly and easily.

So while there may be some overlap in the services offered by these platforms, they each have their own strengths and focuses that make them unique.