Making the commitment to post more to my blog has had me thinking about my path into software development.
It's definitely been a bumpy road but I'm happy with the progress I've made. I'm not going to share my entire story (maybe in the future) but I wanted to share some insight that I've found useful along the way and wish I had known at the start.
You will struggle
I don't say this because I think learning software development is some insurmountable task. In fact, I truly believe the competency needed for most development work is well within reach.
But when it comes to taking up the challenge of learning any new skill, there will be times where it feels impossible.
You will flounder and feel you are making zero progress. You might even think about giving up.
Embrace these times and learn to tolerate (even enjoy) the feeling of being out of your comfort zone. There is no doubt that this mindset can be applied to other aspects of life too.
Never be afraid to ask a question. It's better to ask someone else than to waste time running in circles.
If you don't have any direct connections to ask, there are loads of people willing to help on the internet:
One caveat would be to ensure you've done your due diligence. Make sure you've exhausted the resources you have available to you before asking others or it can become a bother.
Don't repeat the same questions
If you ask someone a question and you get a solid answer, write it down - whether in documentation or your own personal notes.
One of the quickest ways to bother someone is to make a habit of asking questions they've already answered.
Do everyone a favor and just jot it down. It will take seconds to copy it into your notes and I promise that you will thank yourself in the future.
Pay no mind to gatekeepers
Software development, as a community and industry, has some amazing people in it. Of course, this must be balanced out by awful gatekeepers.
My advice is to pay them little attention.
Understand why you wish to learn software development and don't let anyone else tell you otherwise.
If you want to learn as a hobby, that's awesome.
If your goal is to work for a big N company, that's great.
Understanding software development is a skill that I am happy to have learned no matter how far I take it or what I end up doing with my career. I recommend it to anyone who has the time and appetite for it.
Never let others place it on a pedestal and tell you what it takes to be a true developer.
Of course, always be realistic about your skillset and experience. It's always best to acknowledge where you can improve.
Focus on the fundamentals, not frameworks
All programming languages and frameworks are the same fundamentals bundled up in different packages.
Don't get me wrong, some are better at solving specific problems then others, but don't get too stuck on which you spend your time with at first (though, I do advise something that has a solid community around it).
Instead, focus on learning the concepts that apply to all aspects of computer science. This will include: algorithms, data structures, design patterns and software architecture.
Once you've become familiar with the fundamentals, it becomes recognizing what your needs are and learning how each new language or framework is capable of providing them.
This is slightly counter to my last point. Every programming language and framework will have important and sometimes subtle distinctions that may only reveal themselves when you spend time digging.
While I don't recommend overwhelming yourself as a new developer, knowing when to dive a bit deeper and follow your curiosity is important.
Instead of googling a solution and copy/pasting what you find, try to ask yourself questions like:
Why does this solve my problem?
Can I improve on this solution for my specific use case?
Keep comparisons at bay
I know this is tired advice but it never hurts to remind yourself.
I'm still guilty of this.
It's easy to look at someone's work and wonder why you're not at their level or if you'll ever get there. Do whatever you can to put these comparisons out of your mind.
Focus on yourself and what you can do to learn. Remember, a little bit of work each day will eventually add up, so just be patient.
Keep your ego at bay
You will write code.
You will get it reviewed.
It will get ripped apart.
This is part of the process and all you can do is put your ego aside and learn from it. Always remember, they are picking apart your code, not you.
You won't progress without building something. It's that simple.
That would be like a writer thinking they can improve without writing (guilty) or a violinist progressing without ever picking up their violin.
Of course, finding something that interests you and might be useful software in the future helps but when you get started, just build.
And don't get stuck on which stack should be used. I see this question asked all the time (again, guilty). This goes back to my earlier point about focusing on the fundamentals, but it doesn't matter all that much. Just pick something that interests you.
An example for me would be my web application Thought Reps. I've never done much web development but wanted to give React a try. I just dove in and started building.
While I'm sure there is plenty I could have done differently, I learned a ton along the way and that's all that I could have asked for.
If you're not applying what you learn, you won't get far.
It's not always about code
I think one thing that is often overlooked is the value of what happens outside of code.
Sure code is great and it makes all of the fun stuff happen but in reality there's a lot more to being a software developer.
For example, solid writing and communication. It's seriously important and how many great ideas eventually find their way into code.
Some of the most useful work I've done has been on clear documentation to keep my team or customers informed.
If I'm being honest, none of the above really changes as you progress.
It applies to everyone - whether you're writing your first hello world program or have 20+ years of experience. At least, this is what my experience so far has shown me.
Don't take any advice too seriously
No, seriously. Even what I just wrote above.
I'll always be the first person to admit that I have no clue what I'm talking about. The experience of learning software development will be different for everyone.
Always be curious, question things and form your own opinions.
And more importantly, have fun with the process of learning a seriously useful skill.
Feel free to comment on this post or reach out on Twitter!
This post was also published on Medium.