Photo by Rohit Tandon on Unsplash
A few years ago I decided to transition career and become a professional web developer. Married, with a young son, and a full time job as a management consultant (i.e. long hours and lots of travel) this was not an easy undertaking. Yet - 🎉 👍 - as I write this now I have worked as a professional full stack engineer for six months.
This blogpost is the advice and tips I wish I’d had at the beginning of my learning journey, and I hope some of these prove useful to you too.
Know your goal and be focussed on what you learn and when
I’m curious in nature and always like to play with shiny new things. Whilst this has advantages, there are clearly disadvantages such as getting distracted and not working on moving closer to your actual goal. Early on when learning I would often dive off into a rabbit hole learning something which whilst perhaps useful didn’t directly get me to my goal: becoming a professional web developer.
My solution was to develop a flexible framework with specific goals and objectives to reach my goal. Completing the Intro to Programming Udacity Nanodegree was an early objective. Anything that wasn’t directly related to this I questioned, asking myself “what will I gain my doing this?”. It stopped me on several occasions from wasting time on unnecessary diversions. Sometimes though I would allow myself to learn something which was useful, fun (it should always be fun) and would indirectly benefit me to reaching my goal. For example, I learned some Gulp which wasn’t part of any qualification but it taught me about web development processes and helped improve my productivity, automating some key processes.
So if you’re like me, then pick what you learn and work on carefully and make sure it’s moving you forwards.
Find your learning style
Related to knowing your goal, find out how you learn best and put some structure around your learning in order to reach your goal.
Let’s unpack that statement.
What I mean by this is putting some structure around what you learn. I credit freeCodeCamp with providing initial structure for me to learn some of the basics of web development and most importantly at the time that I really enjoyed it and wanted to pursue it as a career.
At Udacity I studied two Nanodegrees, first the Introduction to Programming to build on the basics I learned from freeCodeCamp. Next I studied the Full Stack Nanodegree and I credit this fantastic course as being instrumental in successfully transitioning career to become a professional web developer.
In fact, I’m such a fan of Udacity that at the time of writing I’m studying my third Nanodegree on React, Redux and React Native, but more on this another time.
I need community and people to turn to help guide me in the right direction. Learning to code is hard, but with the right support you can learn. I will always appreciate freeCodeCamp because it helped me to discover coding but I found the self directed nature of freeCodeCamp wasn’t for me. Udacity on the other hand with mentor support and code reviews was a much better fit. A mentor/coach system worked wonders for me. So find what works for you and go with that.
Learn by doing
I’m no good just working on learning algorithms just for the sake of learning an algorithm. I get they are important, and learning some is very important. But just trying to learn them on their own I quickly find boring. Only doing Codewars isn’t for me. I learn best my doing. Build something and work out along the way the best way to do this. Sure this means knowing your
reduce from your
filter but use them whilst you’re building a project.
The best way to learn to code is to code.
I don’t know who this quote can be attributed to but I wholeheartedly agree with it. It builds on my point above to learn by doing.
Use abstractions to your advantage
There’s an absolute ton of stuff to learn. It’s impossible to learn it all. So lean on others for some of the heavy lifting. A great example of this is I started learning React a few months ago. Using create-react-app to create a React app with no build configuration (e.g. not having to worry about WebPack) is awesome. Just run
create-react-app my-app and then get coding in React.
In other words, be smart about what you learn. I want to learn about WebPack but for me personal there’s more benefit to learning React and React Native first.
I had no complete idea of what it meant to be a professional web developer and six months in I’m still learning huge amounts everyday on what it is and what it means. But you can make some assumptions based on blogposts and articles and build that into your learning.
Having technical expertise and writing good code is just one part of it. Writing good documentation, using git and a service such as GitHub, working proficiently with your editor/IDE of choice in a local environment are just some of the parts of being an engineer. This means during your own studying, you could for example:
- Write great documentation in your project READMEs
- Use git and Github (or Gitlab, Bitbucket if you prefer). By the way, if you find git on the command line intimidating, then use a GUI such as GitKraken or SourceTree. Just start using git as soon as possible!
- Develop locally rather than an online service such as Codepen. There is nothing wrong with Codepen and there’s some fantastic stuff in there. It’s also a great way to abstract away alot of the set-up. At the same time I quickly became frustrated with using it as my develop environment and so…
- Pick an Editor/IDE e.g. Sublime, Atom, VS Code etc and configure it to your liking and master it’s functionality, key bindings etc. I much prefer using my editor because I can set it up how I like and work efficiently.
Showcase your ability, commitment and ability to learn. I have learned a lot since I started coding, and have learned even more in six months working as a web developer. My knowledge feels like a drop in ocean compared to my more experienced colleagues. But I think one of the reasons I was hired was my desire and ability to learn. Just writing this on a CV or saying this in an interview won’t get you very far, you need evidence to back it up. And this is where Github (or similar service ) comes in to play. It’s a marketplace for you, your projects, your code, your documentation and your desire to learn.
So start using git today already!
Join a community
Learning on your own can be tough. Seek out community for people also learning to code. This could be with the organisation you’re learning with e.g. freeCodeCamp or Udacity. Or if you’re following your own path, or to complement them, definitely check out CodeNewbie and the 100daysOfCode hashtag on Twitter organised by @ka11away. Both communities are superb and very supportive.
Get familiar with terminology and what developers talk about, as well as emerging trends and technologies. I find Podcasts are a great way of doing this. I listen to podcasts on my commute to work and it’s a good way of relaxing but still learning. There’s lots of great podcasts out there but some personal favourites are:
Reading news, articles, blogposts and email newsletters are further good sources of information to help keep abreast of latest developments. Some recommendations include:
What are you afraid of?
Best advice I've heard and followed re my career: “What would you do if you weren't afraid?
My motivating force was thinking “where do I want to be in 5 years time?”. I was nervous about changing careers but the fear of being stuck in the same job in 5 years time was a far bigger fear. In other words, doing nothing was a bigger risk than attempting to change careers. I set a plan, had some contingency and fall back options and went for it.
Think what your motivating force is and use that to remind yourself of why you are doing this. I kept a log of my achievements, however minor or trivial, so in moments of despair I could look at it and remind myself of how much I had already learned, and the progress I was making to achieve my goal.
So make a plan, get learning and I look forward to welcoming you in the future as a fellow professional software engineer.