I have been professionally developing software for almost two years now. In those two years, I have been exposed to a cornucopia of technologies, languages, and paradigms — from the network level all the way up to making nice little animations on page load. In this short time, I have learned that the most valuable tool I have in my toolbox are these three words — "I don't know" (although debugging an ajax request is a close second). It has been an arduous process to come to this conclusion and one that has taught me more about myself and my skills than I could have foreseen. Why do I say this is my most valuable tool?
Let me outline a couple of key concepts that I hope will help you understand my point.
The software industry is continually evolving, developing and turning over on itself When I first entered the industry, I wanted to know everything I could about the latest and greatest. I am confident that if a framework had a todo list tutorial, that I had done it. Hacker News opened in every new Chrome tab; I had too many bookmarks to count on topics that I told myself "I'd get around to one day", and I was hungry for knowledge. All of this whilst not actually understanding much of what I was doing. In an ever-changing industry, it is easy to become overwhelmed with the current software darling. However, one thing I know to be true is that the basics will always be the foundation. If you are stumped on
Learn to detach yourself from your work This was a hard one for me to understand. Early on in my career I found myself holding on tightly to the work I had done. After all, it was a labor of love. I would try and re-try more times than I could count. I read up on architectural patterns and language constructs so that I could craft a well-thought out solution to the problem at hand. Things were going well — until someone decided to offer their opinion. See, I would take it personally; as if a critique on my work was a critique on myself. My solution? — I believed that my co-workers had good intentions. Once I understood that criticism was applied simply because my co-workers wanted to see me perform at a high level, it was then that I could freely expose my work and become better. What a relief to know that others are on your side!
There will (more times than not) be someone else smarter than you in the room This has always been a fun one! After I learned #2, this became a key component of why I love my job. More experience and knowledge in the room means that I have the opportunity to "fast-track" (please don't read this as "cheat the system" — you still have to put in your own due diligence). Use other people's experience to help you build skill in your career. More often than not, senior-level engineers are willing to talk you through a problem and offer advice so long as they see that you are putting in the effort to learn and grow from their wisdom.
Keep failing Failing, for me, accompanied a cyclical thought process
a. Crisis of confidence — "Why can't I do this? I mean, I did something way harder last week"
b. Crisis of career — "Am I even good at this whole programming thing? Maybe I should try a different field"
If you find yourself feeling this way I ensure you that 1) other people go through the same things and 2) keep failing. With perseverance and the right support, you will be able to tackle the task at hand. And each task accomplished is just another finished problem that you can always look back on and say "I did that!"
I have what it takes I kept reminding myself of this over and over again. When a task seemed overwhelming (as most of them always do), I would remind myself that "I have what it takes." Remember that each task finished beforehand is just another notch in your confidence belt. Utilize all the strategies and snippets that helped you complete everything before — you have what it takes.