I recently installed sod in my backyard along with an automatic sprinkler system. I performed all the work myself (with the help of some friends and family when necessary, of course) and that included laying the sprinkler pipe and hooking it up to the copper mainline.
I didn’t know much about sprinklers at the time I started – I new it was PVC, and you used the glue and stuck ‘em together and water was carried through them to the sprinkler heads. But installing a system requires a bit more knowledge, so I researched all of it until I felt comfortable enough to do it. I learned about valves, timers, how to sweat copper and test for leaks. I installed the system on my own and it’s been running perfectly since. All of this was done because I wasn’t afraid to ask a question and figure out the answer myself.
All too often I see young developers take abstraction at face value. They have no idea what’s going on under the hood of a framework and have no idea why their code works. Abstraction is great until it starts to hinder your maturation as a developer. So many problems I see people run into can be solved by a better understanding of the underlying issue at hand. This applies from technical challenges to business rules to life itself.
You don’t solve this by just gazing into the stars and wondering. You take that wonder a step further by investigating and applying it towards gaining knowledge. I wondered how to install a sprinkler system, and now I have a lawn that gets automatically watered once a week.
Don’t just assume. Don’t be blind. Wonder why things work the way they do. Ask. Research. Learn. As Pragmatic Programmer Tip #8 says:
Invest Regularly in Your Knowledge Portfolio
When you see something you don’t know, question what it is and how it works. I’m calling on all people to ask more questions. Combating nescience is how you advance your skills and suck less every year. Please, don’t just walk on top of abstraction, dig a little and uncover the mystery.