First of all, there’s nothing special about what you do! Brilliance has existed in humanity for thousands of years, and the recipe to accomplish brilliance in your field, is the exact same recipe as accomplishing brilliance in any other field. A Greek pottery artist from 500 years BC, Bruce Lee, and Miles Davis for that matter, had to go through the exact same thing as you need to in order to truly master your field; That thing is first of all practice, practice and practice!
It doesn’t matter how many books you read about how to play the trumpet. Unless you actually blow your horn, you’ll never become Miles! The same is true for software development! 10 hours of actually creating code, is worth 100 hours of reading books! Don’t get me wrong, every now and then reading a book, is a precious thing, and will give you input and new ideas – Both in regards to how to play the trumpet, in addition to how to create software – But in the end, what separates brilliance from the herd, is practice alone!
Burn your books, and join a handful of software projects over at GitHub. There are thousands of projects over there, and most of them could need a couple of extra hands. Unless you’ve contributed majorly to at least 10 Open Source projects, preferably in at least 10 different programming languages, you literally don’t exist! This was what made StackOverflow such a brilliant website, and learning ground, since it allowed everyone to contribute by answering questions, which implied they had to create code in order to help their peers. This made rock stars out of the early adopters, such as Jon Skeet, and boosted their expertise and community ranking up to the point, where they were literally worshipped for their skillsets!
Software architects and vicious hamsters!
Then read up about architecture and software design principles. When you’ve done so, forget everything about it!
Most architectural design principles are religious and superstitious dogmas, not worth jack shit in the end, and simply nothing but fancy acronyms, trying to solve problems, the underlaying language or paradigm created, as a side-effect of unsuccessfully trying to solve the same problems, that the design principles themselves are unsuccessfully trying to solve.
“Design principles” is a vicious recursive circle of “astronaut architecture”, implying billions of lines of code, before you can even start creating a simple Hello World application!
And if you find it hard to understand the above sentence in the grey blockquote, you need to practice recursion! It’s the “black magic” of software development, and you cannot ever expect to become brilliant, unless you can recurse yourselves out from a black freakin’ hole!
DDD was basically invented to make crappy people sound like they knew what they were doing, to make them feel as if they could discuss software, with guys who actually know what they’re doing!
Anybody coming into a job interview with me, telling him he “knows everything about DDD” – I swear to God, I would feel tempted to literally “put him out of his misery!” I’ve got 6 words for DDD and Martin Fowler, and they’re summed up in the image below!
A LISP guru once went through every single “design pattern” from the GoF book, and concluded with that 19 out of the 23 core design patterns, made absolutely no sense at all in LISP. LISP was created in 1958, and is still today considered the “Holy Grail” when it comes to programming languages! Talking about DDD in regards to LISP is like talking about chicks with dicks! And yes, I do know everything there is to know about DDD!
However, understanding the “lingo” is important as you enter the next step on my list.
Join a community, either of pre-existing developers, or create your own community of people wanting the same as you. Teach them what you know, and learn from what they know. This creates a positive upwards spiral, resulting in that both parties end up richer in all regards. Besides, you never really know anything about a subject, before you have taught it. Teaching allows you to sharpen your ideas, since it results in questions. Questions are the most valuable gifts you can be given, since they result in finding places where you did not do a good job in the first place. NEVER dismiss or ignore a question! If you don’t believe me, try tossing over my question in the above meme to Martin Fowler … 😉
As you join an existing community, make sure you ask more questions than you give answers. People who ask twice as many questions as they give answers, tends to last longer as community members. Besides, asking intelligent questions, tends to avoid that your community becomes an “echo chamber of pre-existing opinions and dogmas”.
“Answers leads to the fear, fear leads suffering, suffering leads to the dark side! Questions leads to the light! Use the force Luke!” — Yoda Lambda!
There you go son. 5 impossible answers, leading hopefully to a flaming debate, eventually destined to having the world taken over by vicious hamsters, suffocating the moon, and flooding the rivers with functional programming and lambda objects …
… or something …?
And for God sake, get some fucking taste in music …!! 😉