What makes a Software Developer?
Often I get asked by friends and family about being a software developer and how to learn to code. Recently, more and more of those conversations led to people actually wanting to really explore that path as a possible career and I found myself suggesting different courses/technologies. But I thought it would be good to have a short, visual overview of what makes a software engineer, and this is my attempt at that.
Obviously, I might make mistakes and forget topics, so please send your PRs to GitHub, and let’s make it better together 🚀.
Programming
- Languages (C++, Python, etc.)
- Data Structures (stacks, hash maps, etc)
- Algorithms (BFS, Dijkstra, etc,)
- Paradigms (Imperative, object-oriented, declarative, functional, etc.)
- Concurrency (threads, processes, IPC, etc.)
- Testing (unit tests, integration tests, load tests)
- Extras/specializations: Regular expressions, Graphics, CUDA, etc.
Hardware
- Components (CPU, GPU, RAM memory, etc.)
- Digital Electronics and development boards (Arduino, Raspberry Pi, etc.)
Operating Systems
Unix-like (Linux, macOS, etc.), Windows, Android, iOS
Collaboration
- Version control systems or VCS (git, svn, etc.)
- Linting, team-specific naming conventions
- Development Methodologies (Scrum, Extreme programming, etc.)
Web and Networking
- Protocols, Layers model
- Browsers (Mozilla, Chrome, etc.)
- Servers (Nginx, Apache, etc.)
- Security
Deployment
- Containers, virtualization
- Hosting/cloud providers
- Domains and DNS
Thanks for making it all the way down 🎉. Let me know what you think and do feel free to contribute via GitHub: