This was originally posted on my blog.
Software development is a huge field, I mean huge. You've got front-end folks, back-end folks, database specialists, architects, the engineers, the folks with the people skills to talk to the engineers, and countless others; it's overwhelming. With technology evolving as fast as it does, it's challenging enough to keep track of your own world, much less the big world revolving around you.
And that's why I'm writing this post. I'm writing it to let you know that it's completely fine to not know something, and often, a simple "I don't know" can make everyone's lives, including your own, much, much easier.
Why don't you know?
Software development is a huge field that casts an immense net.
Networking, embedded systems, front-end, back-end, machine learning, web services, architecture, CSS, mobile development, and so many more. Countless facets of the field that you could easily spend your entire career within a single one. Each of them continuously evolving with new features, languages, paradigms, and patterns: it's impossible and not realistic to keep up.
So, don't try.
Learn to say "I don't know" occasionally. Embrace it, think of it not as a weakness but as a strength and a tool that will save you time, energy, and likely heartache.
By putting your pride aside and admitting that you don't know something, you immediately become one step closer to solving your problem.
Let's say you are fresh out of college. You graduated top of your class from a premier computer science program, are on a first name basis with folks at many of the top tech firms in the country and could write any algorithm or solve any programming puzzle thrown your way.
Everything has been a breeze thus far, but after taking your first engineering position, you'll realize that knowing all those facts is very different from being able to solve real-world problems. Your hours of practicing optimizing red-black trees for whiteboard interviews is going to be thrown out the window once you get asked to "update the CSS and fix an issue with the z-index".
You might chalk this up to simply being asked about a topic you hadn't prepared for or that you were just getting into the field. You'd spend a few hours mastering z-indexes and feel on top of the world, at least, until the next curve-ball scenario like that reared its ugly head and started the cycle all over.
The point is this: software simply evolves too rapidly and in too many directions for you to keep up with everything, so don't.
Why do you think I don't need to know?
Learning new things takes time, effort, and usually some dedicated practice and experimentation. Building software, despite how it might be depicted on movies and television, is seldom an individual effort.
Professionally, your co-workers and employers generally won't give a damn if you know 100 programming languages, can code a merge-sort blindfolded, or if you know what exactly the volatile keyword in C# does. They do want someone that can do the following:
- Solve a problem
- Play well with others
- Get the job done
I cannot emphasize enough how crucial these three skills are in the day of an everyday developer. While two of them may seem directly technical, the other "plays well with others" is probably the most important of them all and isn't something that is likely going to be taught in a classroom, Pluralsight course, or elsewhere.
Technical ability matters a great deal within your career, but not nearly as much as being able to Google something and play well with others.
You'll likely come across some stellar developers throughout your career, men and women that will just knock your socks off with how amazing they are. It's generally because they can check those three boxes that I mentioned earlier, not because they can regurgitate every keyword in your favorite programming language or write their own sort.
As developers, we are here to ultimately create value by getting things done. Sometimes we might just "know how" to solve a problem, but often we slam open a new tab and end up at a blog post, Stack Overflow page, or some thread deep in the bowels of our technology of choice to figure it out.
Focus on learning how to be resourceful and how to go about finding an answer instead of trying to keep all of that "in memory" if you don't have to.
Everyone Else Doesn't Know Everything
It's worth knowing that if you don't know something then you are in luck - it's likely that a lot of other people don't know it either. You aren't alone, and in all likelihood, it isn't just the particular issue that you are stuck on - but most things you run into.
Even the best of developers will have days that are unproductive and countless hours that are wasted away in the abyss of useless search results. It doesn't take a ton of time to dredge through Twitter to find engineers of the highest caliber ranting about forgetting some keyword or command or fighting the entire day with some CSS issue. It happens to all of us and it’s just par for the course when you spend your days creating software.
Focus on learning how to research problems and find solutions instead of attempting to commit everything to memory. It'll save you time, energy, brainpower, and a bit of sanity.
Don't feel down when you find yourself battling a problem or issue because you just simply don't know the answer right away. Find solace in the fact that most other developers, from the most junior to senior, would be in your same shoes, opening their favorite browser and searching their hearts out to find the right way to solve the problem.
Just know if you don't know the answer, the odds are most of us don't know it either and that's completely okay.