As a Software Engineer I've been facing the same dilemma when deciding what I should learn to improve my skills and learn new things. There's no a right or wrong answer, but I started to dig more about what I should learn that I could improve and evolve in my career.
Based on very good books and articles, I created a Software Engineer Roadmap, that have helping me to keep track of my learning and give me the big picture of the hole key points I should learn.
To have the control of what I learned and how many times I visited a specific topic, I include a number inside square brackets before the topic`s name. This number will be increased every time I revisited the topic. If the learning generate any artefact, a link will be included in the topic as in the example below :
I included the file Study_Guide.txt. Is the starting point every time a I decide to start studyng something.
- [1] Breadth-First Search
- [1] Depth-First Search
- Binary Search
- Merge Sort
- Quick Sort
- [1] LinkedList
- [1] Trees
- [1] Tries
- [1] Graphs
- Stacks
- Queues
- [1] Heaps
- Vectors
- ArrayLists
- Hash Tables
- Bit Manipulation
- Memory (Stack vs Heap)
- Recursion
- Dynamic Programming
- Big O Time & Space
- [1] Structured Programing
- Functional Programing
- [1] Object-oriented Programing
- [1] Adapter
- [1] Bridge
- [1] Decorator
- [1] Composite
- [1] Proxy
- [1] Flyweight
- [[1] Facade](
- [1] Chain of Responsability
- [1] Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
3.3. ²Enterprise Integration Patterns (Solve the problems related to the integration between systems)
- [1] Message Channel
- Message
- [1] Pipes and Filters
- [1] Message Router
- [1] Message Translator
- [1] Message Endpoint
- Point-to-Point Channel
- Publish-Subscribe Channel
- Datatype Channel
- Invalid Message Channel
- Dead Letter Channel
- Guaranteed Delivery
- Channel Adapter
- Messaging Bridge
- Message Bus
- Command Message
- Document Message
- Event Message
- Request-Reply
- Return Address
- Correlation Identifier
- Message Sequence
- Message Expiration
- Format Indicator
- Content-Based Router
- Message Filter
- Dynamic Router
- Recipient List
- Splitter
- Aggregator
- Resequencer
- Composed Message Processor
- Scatter-Gather
- Routing Slip
- Process Manager
- Message Broker
- Envelope Wrapper
- Content Enricher
- Content Filter
- Claim Check
- Normalizer
- Canonical Data Model
- Messaging Gateway
- Messaging Mapper
- Transactional Client
- Polling Consumer
- Event-Driven Consumer
- Competing Consumers
- Message Dispatcher
- Selective Consumer
- Durable Subscriber
- Idempotent Receiver
- Service Activator
- Control Bus
- Detour
- Wire Tap
- Message History
- Message Store
- Smart Proxy
- Test Message
- Channel Purger
- [1] Domain model
- [1] Layers
- [1] Model-View-Controller
- [1] Presentation-Abstraction-Control
- [1] Microkernel
- [1] Reflection
- [1] Shared repository
- [1] Blackboard
- [1] Domain object
- [1] Publisher-subscriber
- [1] Message Broker
- [1] Client proxy
- [1] Requestor
- [1] Invoker
- [1] Client request handler
- [1] Server request handler
- [1] Object Adapter
- [1] Interceptor
- [1] Execute-Around Object
- [1] Null Object
- [1] Wrapper Facade
- [1] Declarative component configuration
- [1] Container
- [1] Component Configurator
- [1] Object manager
- [1] Lookup
- [1] Virtual Proxy
- [1] Lifecycle callback
- [1] Task coordinator
- [1] Resource pool
- [1] Resource cache
- [1] Lazy Acquisition
- [1] Eager Acquisition
- [1] Partial Acquisition
- [1] Activator
- [1] Evictor
- [1] Leasing
- [1] Automated Garbage Collection
- [1] Counting Handle
- [1] Disposal Method
- [1] Database Access Layer
- [1] Data mapper
- [1] Row Data Gateway
- [1] Table Data Gateway
- [1] Active Record
- [1] Transaction Script
- [1] Data Transfer Object (DTO)
- [1] Identity Maps
- [1] Interactors
- [1] Use Cases
- [1] Repositories
- [1] Comands/Queries (CommandQuerySeparation)
- [1] Value Object
- [1] Entities
- [1] Object/Relational mapping (ORM)
- [1] Policy(What should happen and when) vs Detail(Implementation of Policies)
- [1] Coupling & cohesion (high cohesion + low coupling)
- [1] Composition over inheritance
- [1] Encapsulate what varies
- [1] Program against abstractions
- [1] Holiwood principle (Don't call me, I you call you.)
- [1] Don't Repeat Yourself (DRY)
- [1] You aren't gonna need it (YAGNI)
- [1] Keep it simple, Stupid (KISS)
- [1] Law of Demeter
- [1] TellDontAsk
- [1] Reuse-Release Equivalent Principle (REP)
- [1] Common-Reuse Principle (CCP)
- [1] Common-Clojure Principle (CRP)
- [1] Acyclic Dependency Principle (ADP)
- [1] Stable-Dependencies Principle (SDP)
- [1] Stable-Abstractions Princple (SAP)
- [1] Single Responsability Principle (SRP)
- [1] Open Close Principle (OCP)
- [1] Liskov Substitution Principle (LSP)
- [1] Interface Segragation Principle (ISP)
- [1] Dependency Inversion Principle (DIP)
3.7. Archtectural Styles (How to organize our code - Application design at the highest level of abstraction)
- [1] Component-based
- [1] Monolithic
- [1] Layered
- [1] Event-Driven
- [1] Publish-Subscribe
- [1] Client-Server
- [1] Peer-to-peer
3.8. Archtectural Patterns (Solve the problems related to the Architectural Style - a way to implement an Architectural Style)
- [1] CQRS
- [1] Event Sourcing
- [1] Domain-Driven Design
- [1] Hexagonal Archtecture (Archtecture Design Pattern)
- [1] Sagas
- [1] Software Orchestrated
- [1] Software Choreography
- [1] Message Queues
- [1] Event Streaming
- [1] Blackboard pattern
- [1] Servless Archtecture
- [1] Microkernel
- [1] Microservices
- [1] Three-tier
- [1] Model-View-Controller
- [1] Model-View-View-Model
- [1] SOA
- [1] How does the internet work ?
- [1] What is HTTP ?
- [1] Browsers and how they work ?
- [1] DNS and how it works ?
- [1] What is Domain Name
- [1] What is hosting ?
- [1] HTML
- [1] CSS
- [1] JavaScript
- [1] Terminal Usage
- [1] How Os work in General
- [1] Process Managment
- [1] Threads and Concurrency
- [1] Basic Terminal Command
- [1] Memory Managment
- [1] Interprocess Communication
- [1] I/O Managment
- [1] POSIX Basics
- [1] Basic Networking Concepts
- [1] Process Managment
- [1] Sockets
- [1] Networking Concepts
- [1] Virtualization
- Memory/Storage
- File System
- Startup Managment (intid)
- Service Managment (systemd)
- Java
- PostgreSQL
- Cassandra
- Mongo DB
- ORMs
- ACID
- Transactions
- N+1 Problem
- Data Replication
- Sharding Strategies
- CAP Theorem
- HATEOAS
- Open API Spec and Swagger
- JSON APIs
- SOAP
- [1] gRPC
- Cookie Based
- [1] OAuth2
- Basic Authentication
- Token Authentication
- JWT
- Open ID
- SAML
- [1] HTTP
- FTP
- Port Forwarding
- [1] WebSockets
- SMTP
- IMAPS
- POP3S
- DMARC
- SPF
- Domain Keys
- HTTPS
- Content Security Policy
- CORS
- SSL/TLS
- OWASP Security Risks
- SSH
- MD5 and why not to use it
- SHA Family
- scrypt
- bcrypt
- CDN
- Client Side
- Redis
- Memcached
- [1] Domain Driven Design
- Test Driven Development
- Rabbit MQ
- [1] Kafka
- Apollo
- Relay Modern
- Neo4j
- [1] Apache Camel
- Nginx
- Apache
- Instrumentation
- Monitoring
- Telemetry
- Ubuntu
- CentOS
- RHEL
- FreeBSD
- Learn Bash Scripting
- Vim/Nano/PowerShell/Emacs
- Compiling apps from source (gcc, make and other related stuff)
- System Performance (nmon, iostat,sar,vmstat)
- Others (strace, dtrace, systemtap, uname, df and history)
- Text Manipulation Tools (awk, sed, grep , uniq, cat, cut, echo, fmt, tr, nl, egrep, fgrep and WebSockets)
- Process Monotoring (ps, top, htop, atop and lsof)
- Reserve Proxy
- Forward Proxy
- Caching Server
- Load Balancer
- Firewall
- Ngnix
- Apache
- Docker
- LXC
- RKT
- Ansible
- Salt
- Chef
- Puppet
- [1] Kubernetes
- Docker Swarm
- Mesos
- Nomad
- Terraform
- CloudFormation
- Pulumi
- Gitlab CI
- Jenkins
- GiHub Actions
- Prometheus
- Grafana
- Dynatrace
- Jaeger
- New Relic
- Elastic Stack (Kibana)
- Splunk
- GrayLog
- Papertrail
-
[1] PaaS (Platform as a Service)
-
SaaS (Software as a Service)
-
Faas (Function as a Service)
- AWS
- Google Cloud
- Azure
- Digital Ocean
- Availabillity
- Data Management
- Design and Implementation
- Management and Monitoring
- Backend RoadMap
- DevOps RoadMap
- Cracking The Code Interview (Page 61)
- Archtecture 1 Roadmap
- Archtecture 2 Roadmap
- ¹ Patterns presented here where removed in "²Pattern-Oriented Software Architecture (POSA)" topic, just for not repeat patterns in both topics.
- ² Patterns presented here where removed in "²Pattern-Oriented Software Architecture (POSA)" topic, just for not repeat patterns in both topics.
- ³ Patterns presented here, where removed in "Enterprise Patterns" topic, just for not repeat patterns in both topics.