Here are 10 things that I’ve learned as a software engineer that are somewhat non-obvious but super-important.
- A college “degree” (or lack thereof) is what you make of it. You will either use it as a crutch or an excuse or something that limits your growth or you can completely ignore it… or you can use whatever you have and not let it get in your way. You decide.
- In the beginning, you’ll spend more time writing code than thinking about it. Later, this will reverse course. Allowing this to happen naturally and without freaking out is healthy. It means that there will be more opportunity in different areas of the industry and the organization that desperately needs your help. This is how “great” software careers are made.
- Becoming a “T” shaped programmer or a “Jack of All Trades” doesn’t really matter — clearly, either one can work. Your value to the business is what the business is willing to pay for your supposed services and skills. Make it count.
- Programming in the context of a team requires more psychology and sociological frameworks to succeed than raw production horsepower. In fact, it might be towards the magnitude of 10 to 1, maybe more.
- Memorization makes you look cool at dinner parties and social gatherings but is a total waste of brain space. Application is everything and applied science isn’t something you memorize — rather, it’s something you contextualize in near real-time. Facts might help as a starting block, but, ignition requires time and experience.
- Programming is not your life; get over your fucking self. You need hobbies and you need stuff to do that isn’t software engineering.
- If you want to learn programming fast, do it with others. If you want to become an “expert” — usually at the cost of everything else — learn by yourself.
- If you want to survive as a software engineer (and build a career), you’re going to want to index 100% on the people, not the project, when choosing an opportunity and/or job. Even the greatest paying job with the hippest missions in the world isn’t worth getting up and working with / for folks that you hate. Trust me on this one.
- Being good at math and/or science is not a prerequisite for excellent programming (or an amazing programmer) — anyone who tells you otherwise is a liar. Hell, I’m not great at either! In fact, I’m generally terrible (I can get away with a lot of stuff… but, the truth is that I’m not particularly gifted in these areas — never have been and… most likely never will be).
- Much of the verbiage in our industry like the different “meanings” between what a “software engineer” or “software programmer” or “software developer” does are useful for folks who want to create division and exclusivity and does little to help introduce and welcome new folks into our technology world. Generally-speaking, it’s better to avoid folks who obsess over these arcane and pedantic things.
I’m sure there are more, but, I’ll stop there for now.