Where I’m at
-
Trying to brush up on my foundational skills — being a self-taught developer, it’s important that I have at least a competent understanding of these topics, so I’ve gone ahead and diagnosed myself into these categories:
- Beginner
- Novice
- Intermediate
- Competent
- Expert
These are the topics:
-
Computer Science Fundamentals (Beginner)
- Algorithms and data structures
- Computational theory
- Discrete mathematics
-
Programming Fundamentals (Novice)
- Multiple programming languages (e.g., Java, C++, Python)
- Object-oriented programming
- Functional programming
-
Computer Architecture (Beginner)
- Digital logic design
- Assembly language programming
- Computer organization
-
Operating Systems (Beginner)
- Process management
- Memory management
- File systems
-
Networking (Beginner)
- Network protocols
- Distributed systems
-
Database Systems (Novice)
- Relational algebra
- Query optimization
- Transaction processing
-
Software Engineering Principles (Intermediate)
- Design patterns
- Software architecture
- Version control systems (e.g., Git)
-
Web Development (Intermediate to Competent)
- Frontend technologies (HTML, CSS, JavaScript)
- Backend technologies
- Web frameworks
-
Systems Programming (Beginner)
- Low-level programming
- Compiler design
-
Cybersecurity (Intermediate)
- Security principles
- Cryptography basics
- Ethical hacking concepts
-
Software Development Projects (Beginner)
- Individual and group projects
- Agile methodologies
-
DevOps and Deployment (Beginner)
- Continuous Integration/Continuous Deployment (CI/CD)
- Containerization (e.g., Docker)
- Cloud services
Moving forward with learning:
Basically where I’m a beginner, or novice I realise that that represents an opportunity to start to get a stronger foundation to build on. I think in general terms this order is a good approach in what’s good to improve and study:
- Programming Fundamentals
- Computer Science Fundamentals
- Database Systems
- Networking
- Computer Architecture
- Systems Programming
That’s in order of the most immediately applicable, to least.
What I learnt
-
Coding is both a science and an art (that’s not the learnt part) but that more or less you can equate the science to grasping the theoretical aspects and applying them, while the art you can say is how to avoid the common pitfalls of being a coder.
- The science is the hard skills; and
- The art is the soft skills (more or less wisdom).
-
Avoid context switching!
What I did
- Ended up ordering a copy of “Javascript: The Definitive Guide, 7th Ed” by O’Reilly books. I thought that the most practical thing to learn right now is probably improving my syntax, and that’s mostly in TypeScript, so I got JavaScript to make sure that I’m not missing foundational knowledge.