How I learned to code & built a real software product in ~ 6 months
Tags: beginners, webdev, python, django
Published: 2020-11-20 13:18:12

On May 21st, 2020. I wrote my first ever line of code as part of Harvard’s CS50 online course. Six months later, I pushed a production ready web application (see https://joyful.gifts/ ) for the whole world to use. Below is how I approached learning, the journey, and some unconventional advice for those learning to code to build products.

![Alt text of image](https://dev-to-uploads.s3.amazonaws.com/i/3uh9gfxmhw2gkytk5hjl.png)
<figcaption> First line of Code in C! </figcaption>

## How I learned.

Please note, this journey from the very beginning was about being flexible as an entrepreneur and a builder as well as be able to use the best tools available to solve real-world problems. Take it with a grain of salt if your goal is primarily to take an entry-level job as a software developer, it may not apply.

Here is how I approached learning,

1. I focused on building and getting joy from what I built. If it felt like grinding, I knew I was doing it the wrong way

2. I didn’t compare where I am or my tech stack with anyone. If it works, it’s reliable and joy to work with, it means I was in the right place
3. I put a lot of effort in searching for true experts in the field, and ignored marketers trying to sell me the latest hyped tutorial

4. I kept a close eye on and validated advice in developer to developer platforms (super-technical podcasts, developer forums, niche subreddits are good places to start)

5. I familiarized myself with new tech as needed, but only dived deep if it solved a specific problem that I have now! (Sorry — I still don’t have a problem that SPA’s would solve)

6. I didn’t shy away from “hard” things if they solved a problem. Docker is hard, but solved a problem that I had, so I went there.

7. Given a choice, I always choose the proven and tried technology over the new and shiny.

##Journey. 

This should be as an overall guide rather than a specific step by step direction, software development evolves very quickly and resources gets outdated quickly. Additionally, there are smaller topics that one needs to learn along the way to ship products where a simple tutorial will do (GIT, Bootstrap, third party integrations, deployment, etc.)

1. C & Intro to Algorithms via [CS50] (https://www.edx.org/course/cs50s-introduction-to-computer-science)
2. HTML/CSS fundamental via [FreeCodeCamp](https://www.freecodecamp.org/)
3. JavaScript via [eloquentjavascript](https://eloquentjavascript.net/)
4. Python/Flask via [CS50] (https://www.edx.org/course/cs50s-introduction-to-computer-science)
5. Django — Beginner via the book [“Django for beginners”](https://djangoforbeginners.com/introduction/) 
6. Using Django + Modern JavaScript via [CS50W](https://courses.edx.org/courses/course-v1:HarvardX+CS50W+Web/course/)
7. Docker via Dive [into docker](https://diveintodocker.com/)
8. Django — Professional & best practices via [“Django for professionals”](https://djangoforprofessionals.com/) and [“Two scoops of Django”](https://www.feldroy.com/products/two-scoops-of-django-3-x)

##Unconventional Advice (maybe?).
1. If you want to learn, learn something brand new. If you want to build, build using what you already know and proven to work.
2. Popular tools doesn’t equal useful tools.
3. Seek the advice of older developers who had seen a disaster or two. Avoid tech-hype guys/gals.
4. Learning to code is like learning to read or write. Only useful if you have something meaningful to say.

I am happy to answer any specific questions about my journey or [joyful.gifts](https://joyful.gifts/) — Best way is at [Twitter](https://twitter.com/jonathan_adly_)