Hindsight is always 20/20 and nothing good can really come from lamenting the past. However, you can look back on some mistakes you made, share your thoughts and experiences, and hope others can learn. If you're just starting out deciding you want to get into tech, I hope this article will help you start stronger than I did.
Quick Background
My original career was military, and very non-technical. Let's leave it at that. I decided I wanted to get into IT so I went to college and studied Computer Information Systems. I got my first tech job in January of 2018 as a QA engineer and transitioned into development a year ago today
I knew I wanted to be a developer so that's the subject I concentrated most on in the four years between separating and getting that first job, but having been paid to sling code for a year now, I realize there are so many better ways I could've spent my time.
Lesson 1: Don't fret over language
I spent WAY too much time researching languages and which were the best to start with. Every day I spent wondering if should start with Python or Java was another day I spent not learning either.
It ended up being a waste of time because ultimately I decided on C++, then Python, then Java because that's what my degree program really focused on. The language I used in my first job as a developer? C#. The language of my current job? R U B Y
So lesson 1 is: pick a language today and start learning it.
Lesson 2: Too much breadth, not enough depth
When I did "learn" a programming language, I would go through a tutorial in about a month and say that I "knew" that language. If you've been coding for a while now, you know that going though an introductory Python course is not the same as knowing Python.
Knowing the syntax of a language isn't the same as knowing a language. I stopped learning C++ after I figured out classes then moved onto Python. What I should've done is continued with C++ and learned more about object oriented programming, design patterns, and ideas like DRY, YAGNI, and other mantras. These things apply to all programming languages, whether they're compiled, interpreted, statically or dynamically typed, or whatever.
Lesson 2 is: don't stop at syntax, learn the concepts that transcend languages.
Lesson 3: Learn Peripheral Technologies
In my first developer job, I spent as much time in the database as I did in the code. I'm not sure if this is the exception or the rule, but I know that the more I learn about databases, operating systems, networking, and security, the more "well rounded" I am as a developer.
I have not met one senior developer that couldn't hack it as a DBA or sysadmin at a junior or even mid-career level. Knowing Python and MySQL makes you more employable than knowing Python and Ruby.
So, lesson 3: There's more to development than programming languages
Lesson 4: Be nicer to JavaScript
I have a confession. I used to hate JavaScript. I hated it so much and during school, I never learned any more than I needed. But it's everywhere, everywhere I tell you! And it's not just vanilla JavaScript, I've had to write jQuery, Knockout, React, and CoffeeScript professionally.
I really really wish I had spent more time learning JavaScript and really understanding it on a deeper level. Nowadays, I feel like I'm playing catch-up in the JS world because I never built a great foundation.
Lesson 4: Learn JavaScript. More importantly, learn to love JavaScript
Lesson 5: Pay more attention to theory
Data structures? Pff. Algorithms? I can't even spell that. Automata? Never heard of her. I was condescendingly and willfully resistant to learning any fancy tHeOrY oF cOmPuTaTiOn because I reasoned that no one cared about this kind of thing in the professional world.
My experience, so far, is that I was kinda right. People don't generally look at a problem and think "Oh! I should use a linked list for this." But, I think maybe they should. Recently, I have been trying to get better acquainted with things like data structures, algos, operating systems, design patterns, etc. In the course of learning these things, I started to realize that there were a lot of problems I solved in stupid ways because I didn't know of the pre-existing solutions. These things have been around for a long time for a reason.
If your goal is to gain employment, there is a line of diminishing returns when it comes how deeply you learn about these things. But do learn about them, you will be happy you did.
Lesson 5 is, respect computer science enough to learn what you need from it.
Lesson 6: Stop Idolizing other programmers
The head developer at my first dev gig was an absolute genius, perhaps even literally. Naturally, he commanded a lot of respect for his knowledge, and in my junior-developer-fresh-out-of-undergrad eyes, he was just short of god himself.
This is a pretty crappy way to view other developers people. In this career field, it's easy to see someone as better than you, even when they only know slightly more than you. But they're still people. Regarding your coworkers with deity-like levels of admiration is unhealthy and will exacerbate the ever pervasive imposter syndrome. Furthermore, it's not fair to the objects of your admiration to be held to such high standards when they're people just like you.
Junior developers are people, senior developers are people, VPs of development are people. Everyone has flaws, gaps in their knowledge, and so on. You can learn a lot from the people who know more than you, but they are not better than you. Likewise, you are not better than anyone else because you know a little bit more than them. Be generous with your knowledge and patient with those that are behind you in terms of skill.
Conclusion
Hopefully, someone somewhere can read through this list of mistakes I made as an aspiring developer and avoid some of the mistakes I made. If you do, I'll be jealous, because you'll start off on a much stronger foundation than I did. Good luck, and thanks for reading!