Skip to content

ads1986/software-engineer-roadmap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

Software Engineer Roadmap

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.

1. Checklist of Learning

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 :

1.1. Study Guide

I included the file Study_Guide.txt. Is the starting point every time a I decide to start studyng something.

2. Algorithm & Data Structure

2.1. Algorithms

2.2. Datastructures

2.3. Concepts

  • Bit Manipulation
  • Memory (Stack vs Heap)
  • Recursion
  • Dynamic Programming
  • Big O Time & Space

3. Software Architecture

3.1. Programming Paradigms

  • [1] Structured Programing
  • Functional Programing
  • [1] Object-oriented Programing

3.2. ¹Design Patterns (Solve a localised problem)

3.2.1. Creational

3.2.2. Structural

3.2.2. Behavioral

3.3. ²Enterprise Integration Patterns (Solve the problems related to the integration between systems)

3.3.1. Messaging

  • [1] Message Channel
  • Message
  • [1] Pipes and Filters
  • [1] Message Router
  • [1] Message Translator
  • [1] Message Endpoint

3.3.2. Message Channel

  • Point-to-Point Channel
  • Publish-Subscribe Channel
  • Datatype Channel
  • Invalid Message Channel
  • Dead Letter Channel
  • Guaranteed Delivery
  • Channel Adapter
  • Messaging Bridge
  • Message Bus

3.3.3. Message Construction

  • Command Message
  • Document Message
  • Event Message
  • Request-Reply
  • Return Address
  • Correlation Identifier
  • Message Sequence
  • Message Expiration
  • Format Indicator

3.3.4. Message Router

  • Content-Based Router
  • Message Filter
  • Dynamic Router
  • Recipient List
  • Splitter
  • Aggregator
  • Resequencer
  • Composed Message Processor
  • Scatter-Gather
  • Routing Slip
  • Process Manager
  • Message Broker

3.3.5. Message Transformation

  • Envelope Wrapper
  • Content Enricher
  • Content Filter
  • Claim Check
  • Normalizer
  • Canonical Data Model

3.3.6. Message Endpoint

  • Messaging Gateway
  • Messaging Mapper
  • Transactional Client
  • Polling Consumer
  • Event-Driven Consumer
  • Competing Consumers
  • Message Dispatcher
  • Selective Consumer
  • Durable Subscriber
  • Idempotent Receiver
  • Service Activator

3.3.6. System Management

  • Control Bus
  • Detour
  • Wire Tap
  • Message History
  • Message Store
  • Smart Proxy
  • Test Message
  • Channel Purger

3.4. ³Pattern-Oriented Software Architecture (POSA)

3.4.1. Software architecture

  • [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

3.4.2. Distribution Infrastructure

  • [1] Publisher-subscriber
  • [1] Message Broker
  • [1] Client proxy
  • [1] Requestor
  • [1] Invoker
  • [1] Client request handler
  • [1] Server request handler

3.4.3. Adaptation and execution

  • [1] Object Adapter
  • [1] Interceptor
  • [1] Execute-Around Object
  • [1] Null Object
  • [1] Wrapper Facade
  • [1] Declarative component configuration

3.4.4. Resource management

  • [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

3.4.5. Database access

  • [1] Database Access Layer
  • [1] Data mapper
  • [1] Row Data Gateway
  • [1] Table Data Gateway
  • [1] Active Record

3.5. Enterprise Patterns

  • [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)

3.6. Archtectural Principles

  • [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
3.6.1. Package Cohesion Principles
  • [1] Reuse-Release Equivalent Principle (REP)
  • [1] Common-Reuse Principle (CCP)
  • [1] Common-Clojure Principle (CRP)
3.6.2. Package Coupling Principles
  • [1] Acyclic Dependency Principle (ADP)
  • [1] Stable-Dependencies Principle (SDP)
  • [1] Stable-Abstractions Princple (SAP)
3.6.3. SOLID
  • [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)

3.7.1. Structural

  • [1] Component-based
  • [1] Monolithic
  • [1] Layered

3.7.2. Messaging

  • [1] Event-Driven
  • [1] Publish-Subscribe

3.7.2. Distributed

  • [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

4. Backend Ecosystem

4.1. Internet

  • [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 ?

4.2. Basic Frontend Knowledge

  • [1] HTML
  • [1] CSS
  • [1] JavaScript

4.3. OS and General Knowledge

  • [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)

4.4. Learn a Language

  • Java

4.5. Relational Databases

  • PostgreSQL

4.6. NoSQL Databases

  • Cassandra
  • Mongo DB

4.7. More about Databases

  • ORMs
  • ACID
  • Transactions
  • N+1 Problem
  • Data Replication
  • Sharding Strategies
  • CAP Theorem

4.8. Learn about APIs

  • HATEOAS
  • Open API Spec and Swagger
  • JSON APIs
  • SOAP
  • [1] gRPC

4.8.1. Authentication

  • Cookie Based
  • [1] OAuth2
  • Basic Authentication
  • Token Authentication
  • JWT
  • Open ID
  • SAML

4.9. Networking, Security and Protocols

  • [1] HTTP
  • FTP
  • Port Forwarding
  • [1] WebSockets

4.9.1. Emails

  • SMTP
  • IMAPS
  • POP3S
  • DMARC
  • SPF
  • Domain Keys

4.10. Web Security Knowledge

  • HTTPS
  • Content Security Policy
  • CORS
  • SSL/TLS
  • OWASP Security Risks
  • SSH

4.10.1. Hashing Algorithms

  • MD5 and why not to use it
  • SHA Family
  • scrypt
  • bcrypt

4.11. Caching

  • CDN
  • Client Side

4.11.1. Server Side

  • Redis
  • Memcached

4.12. CI/CD

4.13. Design and Development Principles

  • [1] Domain Driven Design
  • Test Driven Development

4.14. Message Brokers

  • Rabbit MQ
  • [1] Kafka

4.15. GraphQL

  • Apollo
  • Relay Modern

4.16. Graph Databases

  • Neo4j

4.17. Systems Integration

  • [1] Apache Camel

4.18. Web Servers

  • Nginx
  • Apache

4.19. Building for Scale

4.19.1. Understand the Diff.

  • Instrumentation
  • Monitoring
  • Telemetry

4.19.2. Migration Strategies

4.19.3. Horizontal vs Vertical Scaling

4.19.4. Building with Observability in mind

5. Devops

5.1. Operating System

5.1.1. Linux

  • Ubuntu
  • CentOS
  • RHEL

5.1.2. Unix

  • FreeBSD

5.2. Learn to live in Terminal

  • 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)

5.3. What is and how to setup a ____

  • Reserve Proxy
  • Forward Proxy
  • Caching Server
  • Load Balancer
  • Firewall

5.4. Web Server

  • Ngnix
  • Apache

5.5. Learn Infrastructure as Code

5.5.1. Containers

  • Docker
  • LXC
  • RKT

5.5.2. Configuration Managment

  • Ansible
  • Salt
  • Chef
  • Puppet

5.5.3. Container Orchestration

  • [1] Kubernetes
  • Docker Swarm
  • Mesos
  • Nomad

5.5.4. Infrastructure Provisiong

  • Terraform
  • CloudFormation
  • Pulumi

5.5.5. Learn some CI/CD Tool

  • Gitlab CI
  • Jenkins
  • GiHub Actions

5.6. Learn how to monitor sofware and infrastructure

5.6.1. Infrastructure Monitoring

  • Prometheus
  • Grafana

5.6.2. Application Monitoring

  • Dynatrace
  • Jaeger
  • New Relic

5.6.3. Logs Management

  • Elastic Stack (Kibana)
  • Splunk
  • GrayLog
  • Papertrail

5.6.3. Cloud

  • [1] PaaS (Platform as a Service)

  • SaaS (Software as a Service)

  • Faas (Function as a Service)

5.6.3.1. Providers
  • AWS
  • Google Cloud
  • Azure
  • Digital Ocean
5.6.3.1. Design Patterns
  • Availabillity
  • Data Management
  • Design and Implementation
  • Management and Monitoring

6. Fonts

7. Notes

  • ¹ 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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages