Okay so this is a post i've wanted to write for a while, looking back to when I first started to learn how to code. Thinking back to how I went about things, what projects I built, where I found resources & towards the end i'll cover what I would do differently if I was starting to learn today.
Now first off, when it comes to development there are a number of different styles, I'd say that first & foremost i'm a problem solver, I like to look at different challenges and problems that can be solved with code & think
"How can I solve this in the quickest possible way"
After that I then look into how the code could be improved, make it scale etc.. compared to other developers who might take longer to work out how they're going to tackle this problem in the best possible way from the very start.
Whereas I like to get something working really quickly & then improve it over time. This helps to keep me motivated and see progress being made, but at the same time it also means whenever you first come up with something it might be... ugly. This can knock your confidence a bit (especially at the start) when you look at your code & perhaps feel it's not up to scratch.
Over time however, i've learned that within startups in particular, if you can get something to work really quickly (even if it's not the most polished) it's can often be an advantage as development is expensive! It can also help put you ahead of the competition & things can always be improved or optimised later. (Within limits... technical debt)
Where it all started
For me this journey started in 2008, I knew a little bit of HTML beforehand but it was towards the end of 2008 I really decided to focus and dedicate some time towards this.
In the end it took around four years of building and trying things to get to a position of confidence in my skills & what I was doing. Looking back now I was probably more prepared than I needed to be, to start working professionally as a developer.
Saying that, when you are self-taught & not going down the traditional degree route I think it definitely helps to have more experience (background of trying and building things)
Back then there were not as many high quality resources around as today, I mostly browsed a website called tizag.com (I think it's still around) which explained in really simple terms a number of different languages & had examples on how to go about things.
Compared to the resources today it looks quite basic, but when you're learning & just starting out, this is perfect to help get to grips with how things work and avoid distraction. Other sites that were quite handy included StackOverflow which I'm sure every developer would reference a useful resource. Back then it was still newly launched & did not have as many answers but when there was it always helped & quickly became a great place to look. Alongside this I found a number of active developer forums which helped add a sense on community of others learning at the same time.
Back then and still now PHP had a very interesting reputation & by this I mean some people absolutely hated it but that has slowly started to change a lot recently with the introduction of frameworks like Laravel coming out & basically standardized the way PHP is written. Pre 2010 PHP was such a well used language & also due to the amount of time it had been around many bad practices had slipped in and caused knock on effects down the line for legacy projects. Laravel and other frameworks have come out (Including my favorite Slim) and provided a much needed structure to PHP!
After going through and reading lots of tutorials from places like Tizag my confidence had slowly grown, the next step was to start taking on small projects.
Starting and building actual real projects was and still is in my opinion the best way to learn. The big benefit of doing things this way is that you start encountering problems, it's just inevitable. The real challenge is how you overcome it & the more times and the more problems you encounter you start to remember. That is to me the progress & process of learning, especially when you're self-taught, coming up to a problem and then finding a way to fix it.
Projects to work on
As I mentioned I started to work on a number of projects to try and develop skills & experience in a number of areas.
Forum System — The first thing I start to work on was a forum system. Including a way for people to create different categories, boards, threads & posts. Users could signup could interact with a simple 1-to-1 DMs.
This was useful in many ways but mostly to get a real understanding of databases (I used MySQL) it was a massive challenge, jumping in at the deep end.
An interesting outcome from this project as well, it turned out that after I finished the first rough version, there was a community of people who actively wanted to use & iterate on the code base, a big surprise to me. This turned into my first foray into working with other developers on the same on the same project, at one point we had about eight developers working on it.
Having eight people working on one piece of software definitely helps speed up the process but it also brings other challenges. To counter such issues you need some form of "version control" enter Git & GitHub. Using Git helps to make sure no one overwrites anyone else's code, avoid conflicts and also introduces the concept of branches for features and releases. All of these things were really useful to keep moving forward when working with other developers
Accounting System — Next the plan was to create a simple bookkeeping system, called rBooks. Again it was just building on what i had learned before, interacting with databases but more number based, making sure that things could calculate correctly. This was essentially a micro version of Xero, the plan was to keep things as simple as possible but this time attempting to solve a core business problem.
Stock Management — My next project was an inventory management system which would link up to an Ecommerce front-end. However this was before Stripe, so it didn't have the payment side connected, but you could make an order and that would update the inventory levels on the back end.
This was intended more for offline companies to keep control of their stock levels with a view to then expanding this to help bring them online. It was a really interesting one & again involved lots of database interaction.
Diet Tracker — Up next was a project more focused on the front end & in particular for mobile browsers. This was named rDiet and was a food tracking web app that would display calories, it was a big database of all different types of foods. To do this I had to search through different shops like Tesco, Asda etc.. to find the calorie contents of products. I also looked into different ways to collect this data including scraping the information from web pages & using an API.
The next step was to put this all into one place so you could easily scan the barcode or enter a product name & to display the calorie details and this to your daily count.
Budget App — After this I created a simple a little product called rCoins was a basic budget tracker web app, you could enter how much money you wanted to have each month & then add your different expenses & it will calculate your monthly budget in a super simple UI.
Cricket Simulator — Finally I set about building a very basic sports game, a cricket simulator. I would still consider this to be one of the most complicated things i've ever tried to build.
It would take in a number of different parameters about a players strengths, weaknesses, weather, match situation and then an algorithm would calculate what would happen to try to deliver a realistic outcome. I found some of the source code from this the other day, the code was painful to look at compared to today but the actual gameplay still works & it was interesting to see how realistic it is today.
The main way to improve over time is simple. Continually look to work on different projects & think of new ideas.
These days I prefer the "idea stage" scoping out what a product needs, how it can be improved, what the actual customers & users are going to get from this & the main question, is this going to solve a core problem?
Over time you realize where your main strength is, and for me it's definitely within product ideation but thats a different post altogether. From a development perspective to me I always felt I had "leveled up" whenever I encountered a problem I could remember solving in the past.
It helps to keep notes whenever this situation happens so the next time you can quickly look this up within your own "mind".
The next challenge is to be persistent, throughout the whole journey there will be (many) points it can feel daunting & overwhelming almost as if it's impossible. The key is to keep at it, stick to it and keep trying, it will always get easier over time.
Then and Now
Compared to when I started to learn back in 2008 there are now so many more resources available, which is a really good thing. You've got sites like CodeAcademy, Lambda School, countless channels on YouTube creating helpful videos, loads of courses on sites like Udemy which is absolutely brilliant & is really helping people get started.
The is only one slight downside to this, because there is so much content it can lead to slight overlapping and conflicting of styles and methods. Alongside a feeling on distraction and overload.
How do you avoid this? Take the responsibility yourself to try and really push & test things yourself. If possible use one form of content as your main focus and only look for other input if you really get stuck.
What would I do differently if I was starting to learn today? The only thing that would really change for me is how I found read/watched information to begin with. I'd still definitely try to build a bunch of products at the start, as this really is the best way to build skills, confidence & encounter problems and issues you can learn to fix & overcome.
— Finally after you have built that confidence I would suggest to explore different industries, as that can really help in the long term.
It does not matter what if you want to work as a developer within a large company, startup or go down the IndieHackers or Startup route. If you have an understanding already of how different industries work, as opposed to sticking in one area or bubble it will really help down the line & in the future.
Thanks for reading the post. Feel free to follow me on Twitter for more updates.