Table of contents
Web Development
Frontend Web Development
Topic | Theory | Practice | TODO |
HTML | ✅ Books, Videos | ✅ Over 40 projects | stay current |
CSS | ✅ Books, Videos | ✅ Over 40 projects | stay current - .container() |
CSS Pre-Processors - SCSS | ✅ Books, Videos | ✅ Over 40 projects | Tailwind CSS |
JavaScript | 📖 Books, Videos | ✅ Over 20 projects | can always improve - practice and read more |
TypeScript | 📖 Books, Videos | ✅ Over 15 projects | can always improve - practice and read more - custom types |
Responsive web design | ✅ Books, Videos | ✅ Over 40 projects | stay current |
Accessibility standards | ✅ Books, Videos | ✅ Over 40 projects | stay current |
Cross-browser compatibility | ✅ Books, Videos | ✅ Over 40 projects | stay 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
Topic | Theory | Practice | TODO |
Node.JS | 📖 Books, Videos | ✅ practiced a bit | practice more |
Express | 📖 Books, Videos | ✅ practiced a bit | learn & practice more |
Python | 📖 | ✅ practiced a bit | learn & practice more |
Flask, Fast API | 📖 | ✅ practiced a bit | learn & practice more |
API design and development - REST API | 📖 | ✅ practiced a bit | learn & practice more |
Postman | ✅ | ✅Used frequently | use 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
Topic | Theory | Practice | TODO |
Continuous integration and deployment (CI/CD | 📖 | ✅set up for a few projects | set up more projects |
Version control (e.g., Git) | 📖 | ✅Used frequently | practice more |
Infrastructure as code (e.g., Docker, Kubernetes) | 📖 | 📖 | use more |
Cloud computing platforms (e.g., AWS, Azure) | 📖 | ✅Used - few jobs | practice more |
Security and performance
Topic | Theory | Practice | TODO |
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
Topic | Practice |
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)
Topic | Theory | Practical | TODO |
Fundamental concepts of OOP | ✅ JS & jQuery - Jon Duckett | ✅ Used in over 10 apps | learn more, practice too |
Abstraction | ✅ CS50, Google IT Cert | ✅Practiced all the time | practice more |
Encapsulation | 📖 | ✅ | learn more, practice too |
Polymorphism | 📖 | ✅ | learn more, practice too |
Inheritance | 📖 | ✅ | learn more, practice too |
Interfaces | ✅ | ✅ Used in over 20 apps | learn 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 -> RxJS | learn more, practice too - COOL STUFF |
Clean Code | 📖Book, Videos | learn more, practice more |
Functional Programming
Topic | Theory | Practice | TODO |
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 | 📖 | 📖 |
Data Structures and Algorithms (DSA)
Topic | Theory | Practical | TODO |
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.
Topic | Theory | Practice | TODO |
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.
Topic | Theory | ||
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.
Topic | Example | |
REST (Representational State Transfer) | A web application using HTTP to request and transfer data between a client and server. | |
Client-Server Architecture | A chat application where the client sends messages to the server, which relays them to other connected clients. | |
Microservices Architecture | An e-commerce website where the checkout, payment, and shipping functions are split into separate microservices. | |
Monolithic Architecture | An inventory management system where all the components are tightly integrated into a single application | |
Event-Driven Architecture | A stock trading platform that uses a messaging system to notify users of price changes and other events | |
Model-View-Controller (MVC) Architecture | A 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 Architecture | A social media platform where the presentation layer, business logic layer, and data access layer are separate and distinct. | |
Reactive Architecture | An online gaming platform that uses event-driven programming to handle real-time interactions between players | |
Clean Architecture | A news website that separates its business rules and use cases from the UI, making it easier to test and maintain | |
Serverless Architecture | A 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
Topic | Theory | Practice | TODO |
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
Topic | Theory | Practice | TODO |
Tools such as Mocha, Jasmine, Karma and Jest for testing JavaScript code | 📖 | ✅ used - Jasmine, Karma | get 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
Topic | Theory | Practice | TODO |
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
Topic | Theory | Practice | TODO |
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
Topic | Theory | Practice | TODO |
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:
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.
Microservices: Docker is widely used to deploy microservices-based applications, where each microservice is packaged as a separate container and deployed independently.
DevOps: Docker helps streamline the DevOps process by allowing developers to create and test applications locally before deploying them to production.
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.
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.