Or the subtle art of becoming a 10x leader
My story begins several years back in time. After eight years of studying business administration at university and four years working as project manager I still felt extremely uneducated.
Sure, I was working long hours, was continuously improving my management skills and dealt with projects in the six digits area. But in the end it felt to me like I have little to no impact on the outcome of my projects.
Back then I didn’t know that there is a name for this perception developers often suffer on: imposter syndrome. The feeling that you are fooling all the others by doing something that only looks like it contributes to the result but in reality has no impact. I felt really bad and even got depressed about my situation.
The tip of the iceberg was a developer that told me that we need to delay a software release one week because they had to merge a branch into the trunk which is not that easy. I had the perception that he was tricking me but I could not tell because these words meant nothing to me.
I decided that this will never happen again. I will get the control about my job back and learn computer science.
Part I: The Basics
Quickly I had to admit that I didn’t understood half of the topics in this beginner book. (Later it became obvious to me that there are two types of computer books. The ones for non tech people and the ones for tech people that are just beginner in one field. A gigantic difference.) So I felt even more dumb and had to search for another approach to wrap my head around computer science.
MOOC (Massive Open Online Courses) to the rescue
I got took one step back and thought about how I learned topics in the past. There was always a higher authority that came up with a curriculum, established courses with teachers that where somewhat skilled in those topics. To mimic this I searched the web for syllabus of computer since classes, analysed the topics and created my own schedule focusing on general informatics and web development (the domain I was working in).
It turned out that I had to start with the basics which are software programming, databases and networking. It became handy that a new movement called MOOC (Massive Open Online Courses) was rising at this time and major universities started to make several computer science courses freely available to the outside world.
Most MOOCs are completely FREE if you do not require a certificate.
That caught my interest and I quickly signed up for the following courses:
- Introduction to Computer Science (CS50) @ Havard University
- Introduction to Databases @ Stanford University
- Introduction to Computer Networking @ Stanford University
- Algorithms and Data Structures @ University of Osnabrück
Note: I’m not linking the exact courses here for two reasons: a) the content may be outdated a bit because it’s been a while since I was studying the topics and b) there are probably better contents already available. Instead I will list the most important sources of information at the end of the article so everyone can build a personalises curriculum.
Studying computer science beside a full time job
Getting through the courses was not easy but I was extremely motivated and pushed by the opportunity to study at the world greatest universities. It turned out that most of the courses had more or less the same content that on site students have to go through as well. With the same home works, assignments and exams.
So, I was working from 9 to 5 in my regular job and spend the time in the evening to study computer science. Back then I did not know that this journey will go on for five years with an average of one hour studying time every day.
A few month went by and I finally finished my first course. With the gathered knowledge I felt more and more like a part of the technical stuff in our company and the developer community.
Part II: Basic Web-Development
Next up where some courses related on the work I was trying to understand in particular: Web Development. If I would have worked in BioTech or IOT my courses probably would have been very different.
I divided this section in 3 Modules:
Web Client Basics
- Web Engineering I — III @ Technical University Mittelhessen
- HTML5 and CSS3 @ Video2Brain (DVD courses)
- Web Design for Web Developers @ Udemy
Web Server Basics
- Introduction to Linux @ The Linux Foundation
- Configuring Linux Web Servers @ Udacity
- PHP 5.4/ MySQL 5.5 @ Video2Brain (DVD courses)
Software Engineering and Management
- Software Development Process @ Georgia Institute of Technology
- Product Management Scrum Product Owner @ Scrum Alliance
- Mastering Agile Scrum Project Management @ Udemy
Next to my courses I was pleased with an unexpected opportunity at work. An existing client was looking for an extension to one of the services my company has established with them. The developers that had build the service in the first place was occupied for several months and other partner of us had no time or interest. I couldn’t let this opportunity pass.
A few weeks later I was a full time PHP-Developer with my own project. Looking back from todays perspective I wrote really bad code. All the measures an experienced developer takes to stay in control of the ever growing code base where still unknown to me and so I learned the downside of spaghetti code (or the big ball of mud) the hard way.
In the MOOCs and courses you usually write you only build pretty small and more or less simple projects to learn exactly one aspect of development. In the real world it turned out that it’s much more important to have code that you and someone else can easely read and make sense of even if you haven’t looked at it for month.
With this first experiences in mind I was going to model the third part of my journey.
Part III: Advanced Web-Development
In this section I continued looking into the topics from Part II but in much more detail. The choice of this courses was not as obvious as the courses I took until now. Advanced practical stuff is mostly not what they teach in universities. Especially new Web-Frameworks, development languages and the latest most interesting trends often cannot quickly find a place in the static curriculums.
So I shifted my focus more and more on online courses from private providers and books.
Udemy courses are sold for 90–95% off every few month. Just pick the ones you like to to participate on your watchlist and wait for the next discount.
Web Client Advanced
- Shaping up with Angular.JS @ www.codeschool.com
- User Experience for the Web @ Open Universities Australia
- Rapid Prototyping @ Udacity
- Master ReactJS @ Udemy
- Vue JS 2 @ Udemy
Web Server Advanced
- Object Oriented PHP @ Udemy
- Nginx Fundamentals @ Udemy
- Programming Foundations with Python @ Udacity
- Django @ Udemy
- C# Masterclass @ Udemy
- Designing RESTful APIs @ Udemy
- GraphQL @ Udemy
- Getting Started with Elasticsearch @ Udemy
Software Development Advanced
- Weniger schlecht Programmieren (Coding less bad) @ Book
- Git and GitHub Masterclass @ Whitepeak Akademy
- Software Testing @ Udacity
- Software Design @ Udacity
- IT-Documentation @ Book
Learning additional languages was helpful. But most helpful was hearing from developers that made mistakes in projects (because of the same beginner mistakes I made) and how they overcome this situations.
There are two kinds of developers on YouTube. The ones that prepare and cut their coding efforts so that it looks like they are magicians that know everything and can code hundred times as quick as you ever can. And the second ones that really show you what a developer really does (which is 90% of your time planning, googling and debugging). Do not get fooled by the first ones. Working on a real project looks like: https://www.youtube.com/watch?v=xnAlK8YZO5k and your speed of progress highly depends on the quality of documentation and your previous experience in the topic.
At this time I also got the opportunity to participate in the architecture and software design of a brand new system for asset and workflow management. I got the chance to work with very experienced developers and learned a lot. Especially how to enable a development process that streamlines the efforts of multiple developers in one projects and that could automatically build and deploy software. I read about this before but never imagined the impact an organisational change can have to the outcome of a developer team.
After finishing the advanced courses I really felt that I can easely keep up with my developer peers. Still there where topics that where somehow related to the quality of my work I could not really grasp and I felt having a look would be the best thing I can do.
Part IV: Specialisation
Software Design and Architecture Specialisation
- Software Architecture & Design @ Udemy
- Microservices @ Book
- Domain-Driven Design @ Book
- Enterprise Integration Patterns @ Book
- Become a Solution Architect @ Udemy
- Internet-Security @ Hasso Plattner Institut
- Hacking the Art of Exploitation @ Book
Cloud and SaaS (Software as a Service) Specialisation
- Introduction to Cloud Computing @ Pennsylvania State University
- The Build a SAAS App with Flask Course @ Udemy
- Cloud Computing With Amazon Web Services @ Udemy
- Serverless Concepts @ Serverless Academy
Internet of Things Specialisation
- The Internet of Things @ King’s College London
- Hands on Industrie 4.0 @ acatech
- Intro to DevOps @ Udemy
- Master Jenkins CI For DevOps and Developers @ Level up
- The Docker for DevOps course: From development to production @ Udemy
- Mastering Ansible @ Udemy
- Learn DevOps: The Complete Kubernetes Course @ Udemy
- Release it! @ Book
- TypeScript @ Udemy
- Rx JS @ Udemy
- Understanding JSON Schema @ Space Telescope Science Institute
- Functional Programming Light @ GetiPub & Leanpub
- Automate Web Development With Gulp JS @ Udemy
This knowledge helped me to stand out of the average developer and because I could apply this knowledge in my professional work there was always a very helpful feedback loop between the theory and the real world.
At the same time I was pushed more and more in the lead developer position. Which was an obvious move due to my previous management and leading skills. Nevertheless the thing that brought me the most joy was the process to deeply understand a problem space and model a solution according to this requirements.
Linus Torvalds (The creator of Linux) stated in his book: “Just for Fun” that a good developer always strives for an elegant solution. This solution is well thought through and can only be found after understanding the whole scope of a problem. This sounds very abstract until you have spend days on an application design, discarded 10 possible solutions already and then all of a sudden you have this one idea you where looking for. It is like the shortening of a formula in math. You reduce everything to the bare minimum and that mostly turns out to be a solution that is very easy to understand and that can quickly be implemented.
In my professional live I had the opportunities to come up with some of this design solutions. And all in a sudden you are perceived as a 10x developer because you can solve an issue within days or hours where others need weeks. And everything not because you are smarter, it’s because you took the time to think a little longer about the problem.
Part V: What now?
After my specialisation courses I stopped listing the courses i participate and books I read. But I can ensure you that the most important thing is to never stop learning. As everything you are doing constantly over a longer period of time it became natural to me and I don’t think I can ever stop my learning journey again.
On the other side there are so many fascinating IT topics to discover and new ones are added constantly. And to be honest: You are already prepared to digest all those topics with the skills gathered in the Part I and II above.
Most trending topics I started to wrap my head around in the past years where:
- Artificial Intelligence
- Quantum Computing
- Edge Computing
Was it worth it?
The reason for starting my learning journey was the lack of control about my IT projects and the feeling that I could achieve much more with a deeper understanding of computer science. As you can imagine I’m more than happy with my newly gathered super powers.
I’m working as “Head of Development” today, my management skills got skyrocketed to a whole new level and I’m much more confident in running IT projects nowadays. If a deadline is coming close or developers need a helping hand I can easely step in and help out.
Another not unimportant subject are the costs and time. I decided to not pay for certificates in the MOOC classes and tried to spend as less as possible on books and online courses.
- MOOCs on universities: 0€
- Other online courses: ~250€
- Books: ~150€
But it took ~1500 hours of learning and another ~4500 hours of practical exercise to get here.
If there would be one thing I could do different on my journey it would be to start much earlier. But others told me that this is not possible and I was too long stupid enough to listen to them.
Where to find courses?
I would be more then happy if you got inspired by my article and are now thinking about starting your own journey. Here is my ranking of the most helpful online resources:
- Class Central (a search engine for MOOCs and other online courses) https://www.classcentral.com/
- Udemy (a platform for online courses of private providers) https://www.udemy.com/
- My favorite MOOC platforms: Coursera(https://www.coursera.org/), EDX(https://www.edx.org/), Udacity(https://www.udacity.com/), OpenHPI(https://open.hpi.de/)
- There are a lot developers on YouTube that mentor you with their videos: https://stackify.com/youtube-channels-developers/