I am about to embark on a journey in to learning to code. (I have decided on python). I would love to hear from those that also learnt to code themselves and what resources you used. What problems did you experience and what would you do different second time over?
Yes, I'm self-taught.
Very simply, I'd advise learning by doing. Pick a project, something real and useful, something you really want to exist in the world, not just an exercise. Learn what you need to know to complete that project.
That way, your learning will never be abstract, it'll always be real and useful.
This is 100% the way I learn best based off previous experience.. Thanks for reconfirming my belief that this is the best approach.
That's exactly my approach.. I simply can't be focused in the same way if I'm trying to learn something that one day may be useful versus learning something that has an immediate impact on something I think is important to create
Very true Mark.
I am self taught too.
From my personal experience, your advise is the absolute best way to learn programming.
I am. Ruby/Javascript. Started learning Aug 2015. Hired in June 2017 as a lead engineer here in NYC.
I started with an online bootcamp. 7 month self serve program cost $7,000. I finished the content in 2 months so I wound up only paying $2k.
On finishing early: It's not because I'm secretly some coding wizard. I actually never thought 2x about computers prior to beginning. I just put in like 60 hour weeks on it.
On other resources: Google & stack overflow and a mish mosh of other websites. + Books. (Well Grounded Rubyist)
On problems faced: Impostor syndrome is a motherfucker. haha. It's natural, you'll feel it. It'll go away. It has for me.
Also for a while I felt like I needed to be a full fledged self sufficient engineer like yesterday (while learning). That only caused unnecessary stress.
My suggestion to you: Breathe. Take your time and when you face something you can't seem to understand - try to make a real world connection to it. I have plenty of examples where I can explain coding concepts to the layman now because of this.
It's a journey. But you CAN and you WILL come out the other side a self sufficient software engineer if you do two things.
Be comfortable knowing that you don't know anything.
Persevere and code often.
If you need help. I'm just a DM away.
I've found that hack useful for learning a lot of things!
Yeah. Sometimes you have to just go all in on something for a while.
Thanks Matthew. A lot to be taken away from your experiences on this.
So based on the feedback you’ve gotten from everyone, have you started to shape your plan yet?
🙋♂️
Spent 6 months sitting in a library with a pile of books and a laptop. I was 26 and had just left a glamorous consulting job. It was painful but totally worthwhile.
You've got to tailor your approach to how you learn. I need to know the theory of things or I can't remember them, but learning language intricacies doesn't have obvious, visible progress and I struggled with that. Ended up balancing reading a bit of a "your first webapp" style book alongside a "Python the hard way" style one - that worked pretty well.
Stick at it. Learning to code is a horribly non-linear process, where it sometimes feels like you're going backwards. You're not, and you'll get there.
Someone I admire very much once said: if you find yourself frustrated while learning something new, you're on the cusp of fully grasping it.
A beautiful notion, and one I've found to be entirely true.
I've been frustrated with JavaScript for 10 years. This is a long cusp 😅
Lol, real funny Ryan
I learned by just copying tutorials and removing lines of code to understand what happen.
Not sure if it's effective but it made me research commands and critically think of the problem.
When I was 8, I was playing with the scart socket of my NES. The goal? Changing the color of the games on the screen.
Sometimes I was moving the cartridge itself for some games to crash. At that point I could display every tiles of them. It was magical. It was like discovering the "behind the scene" of the game!
Why all of that? Because I wanted to create. I wanted to make my own games.
The day my dad came back with the first family's computer, it was like Christmas multiplied by my birthday raised to the power of 100000.
I obviously tried to finally create. First it was on BASIC (the computer was very old...) on a game called Gorilla. It was in English, I'm French, so I translated it. I changed as well the physic of the game to make it more difficult.
At 14 I had a descent computer. My parents bought me a book to lean C for my birthday. I learnt the basics from it: loops, memory allocation, pointers and so on. Every day I was spending hours learning about bit operations and other low level pleasures.
There was no Internet so I learnt the hard way, without any help, copying each lines of code from the book. At the end I was able to make a little text based RPG with (what a surprise!) a Dwarf, an Elf and a Dragon.
Thanks to a magazine I bought some time later I was able to create a very very simple RPG with directx and C++.
Then I discovered Game Maker and I did a remake of a NES game I loved, Adventure of Lolo. I never published it, even if it's almost complete.
I'm now 32. I'm web developer for 8 years, learning first PHP and now writing only Golang.
To answer your question:
I would not do anything different if I had to do it again. Learning the hard way is, for me, the only way. I think copying code from a book is the best, since a book will first taught you much more than any tutorial / article on Internet. Plus you can copy the code in it in order to practice.
Practice and practice more. Learning from books is important, but useless if you don't practice at the same time. Why? Because without practice, you will never know if you really understood. Plus you will forget everything very quickly.
When you are ok with the syntax and how to do things roughly with your language of choice, contribute to side projects (fixing bug is a good beginning) / begin a small side project. I insist on small, otherwise your motivation will go down very quickly.
I am, but my path won't help you. I used ww.freecodecamp.org (only web and javascript).
But my overall strategy might apply:
Spend 3 months only studying through structured courses (that might include small projects) the fundaments of the language you chose.
After that, start building your own projects (small things you think would be nice to exist) and "learning by demand" - i.e. learn what you need to build the product. Use official documentation, tutorials, and Stack Overflow to learn this.
This small projects will become your portfolio if you decide to apply to soft dev jobs.
Hoi Colin,
TL;DR: My newbie suggestions:
I.Think critically of what do you need this new skill for and pick the programming language accordingly.
II. Keep the eyes on the ball - set the learning objective and resist temptation to deviate from it (you still would but at least you would be conscious of it) .
I am self-taught (well, enough to do front& backend+ deploy w basic security, plus dubbed in solidity a wee bit) and started fairly recently. Be warned (subject to your prev. background) that it would be a royal pain to get the fundamentals. And the biggest problem in my path were not the concepts and language quirks, but lack of quality tutorials and capable tutors. (Again whatever follows is my perception at the ground zero, when I was just getting started and is not reflective of my current viewpoint) For instance, very often tutors would impose on you their own styles// favourite frameworks// tooling // etc sort of unconsciously, because it is how they use it in production environment vs getting down to bare minimum and explaining the actual topic at hand. <rant>
Might sound nitpicking, but is really necessary to setup express framework and all the scaffolding if your title says how to make an http request in NodeJs, which comes out of the box.</rant>
Being newbie it is hard to separate this noise from the learning objective and represents a significant overhead in the learning process. IMO, there are actually very few good tutors that are consciously are aware of this and tailor the learning experience with this in mind. So, my advise to you - try to find them (coursera // udemy // edX is a good start) in your respective language. Speaking of language - As learning programming represents significant investment, you might also consider your end objective, what do you want to get out of it in the end? Is it because you were bitten by startup bug (perhaps MEAN stack is shortest path) or do you want to gain an employment? If the latter then proceed to think in what fields: big data (Python, Scala), corporate envo (Java, Ruby on Rails), web (JS) or IoT ...
This is just the points I tried to address in my journey and I hope it would help to start it. Unfortunately, my language of choice is JS, so can't be much of the help with tutorials I used for my studies, but I hope that this info helps. Once again this is my personal opinion and I am still in my learning journey, so take it with a grain of salt. Also, If I could be of any help feel free to contact me.
Why python?
I have the goal of applying it to machine learning.
Hey @cwinhall! When I was first starting out, I used (and loved) TeamTreehouse...their teaching style is video based and they outline a path which makes you feel like you have a next step always.
For my podcast, I interview self-taught developers that are now employed full-time as an engineer, and the number one advice they give is to code consistency ...you'll learn a TON if you can code everyday for a few month.
Feel free to check out all the learn to code stories...they're seriously inspiring! www.icodehireme.com (feel free to reach out to me too sean@icodehireme.com)
Just keep trying and breaking things. Doesn't matter which languages, keep doing until you learn how something works! :)
Even though I've been tinkering with HTML, CSS and Javascript since I was very young, there's still concepts I struggle to understand now, but get my head around them with just pure repetition and failure.
Start small and slowly increment on a project. :)
Sort of: they tried to teach me in school and uni but I barely understood loops. Taught myself in two months by making my first Flash game that was sold for over $1k. Learned OOP and CS basics later.
I have a computer science degree. But I learnt to code mostly on my own.
Here is the thing.
You have to choose which method of learning is best for you. Videos, PDF, hard copy books, bootcamps, or a combination of these.
Any method you choose, make sure you do as many exercises on each chapter as possible. Later, you will use the codes you wrote to solve the exercises to write real programs.
If you come across a these two tutorials "learn Python in 7 days. ( number of pages in the book: 50)"
And " learn python in 4months ( number of pages in the book:1200)"
Choose the second tutorial.
Good luck on journey...
As coding has the potential to be the language of the future...
I've been learning to code since Jan.
Just before I dived in, I posted this ... the advice has been pretty solid.
https://www.indiehackers.com/forum/10-things-you-wish-youd-known-when-you-started-programming-254d49dad0
I am and, like many others, I started at a fairly young age while in HS.
I then went for a CS degree into one of the best universities for it in the US and throughout my time there it became very clear that self-teaching is the only real way to really move forward.
I would say that all coders are self-taught. Some take a couple of dozen courses at the beginning, but that's just the beginning. It's a career that absolutely requires continued learning.
The most useful things I've found were:
Keep reading and learning new things
But spend most of your time building things, not studying
At the beginning try to work with something that gives you immediate, visual feedback.
Building small projects with two or fewer dependencies is a great way to make productive use of your building time.
Learning one language well will help you more than learning a little bit of twelve languages.
Once you do know one language well, learn at least the basics other languages in other paradigms—at least one popular dynamic scripting language (like JS, Ruby, Python or PHP), at least one immutable functional language (like Haskel, Ocaml, Erlang/Elixir or Elm), at least one statically typed OO language (like Java, .Net or TypeScript) and at least one language with manual memory management (like C, Obj C, C++, Fortran or Rust), one language like Prolog and SQL.
Get comfortable with Unix/Linux. It's the gift that keeps giving.
Don't worry too much about following strict methodologies or whether if you're doing things "the right way". Just get things working first and over time you'll likely start seeing situations where various design patterns, etc make sense.
The single most important thing is the ability to focus for a long time in front of the computer. Reading the first 20% of Cal Newport's Deep Work will probably pay off better than any individual book about programming.
I did!
I started with Team Treehouse to get comfy with CSS and basic JS. Once I had the basics, the best leaning has come from starting a project, finding a challenge that I needed to solve (eg. When this button is clicked, I need this other thing to appear) and then googling to find out how to do it. I've also taken some advanced web dev courses that are really helpful. It's hard to find good courses for the intermediate level, so I think a lot of that just has to be trial and error.
Self taught.
Objects and classes.
Understanding objects and classes was the hardest thing and I still find myself avoiding them when I shouldn't. It takes a conscious effort to think about things in terms of objects or classes.
No idea how common that is but it is a definite blind spot.
Hi, thomas1964. I have trouble with the concept of classes and objects, too. But this explanation helped me a bit: Imagine creating a spreadsheet containing a list of all the employees of your local superstore. The spreadsheet would have their first and last names, department they worked in, how long they worked there, employee number, age..etcetera. That entire spreadsheet is a CLASS…a CLASS named EMPLOYEE. The columns– FirstName, LastName, Age, Department, etc.. would be PROPERTIES of the CLASS. The rows are the OBJECTS of the CLASS, so, if one of the employees is John Smith, John Smith is an OBJECT of the Employee CLASS. And finally…METHODS act on OBJECTS of a CLASS.
I have yet to fully get the power of it - CLASS, OBJECT, METHOD. I kind of get it in terms of UserProfiles and Roles. I mean, most users of any system have to have the same data captured for who they are…but their permissions within a system will differ based on their roles.
I appreciate any further enlightenment!
I sort of understand that - it's trying to think when coding "this is just crying out to be treated as an object".
By the time I get to that point, I have written so much code that I am highly reluctant to go back on it!
HTML > JS > PHP > Rails > Python
every step there was project that needed it, that's how you'll learn as well
Just dive into coding and figure out how to solve problems that matter to you. The sooner you use code to solve your problems instead of doing tutorials/copycatting things the sooner you will try to apply code to real problems in your head.
I'm self-taught and been doing web development since I was in Middle School. I made my own CMS in high school and continue to write code for myself to learn and experience different stacks and tools.
Taught myself at 12, left the programming world at 18, as I didn't want to be involved in computers. Went into security for a bit, realizing it was a dead end job, and as I sat there, reading endlessly, I thought, "Why not do something more with this 'free' time?" I went to college for psychology and got a bachelors. Moved to another country and taught English, but I really had no desire to teach kids. It wasn't bad, but it wasn't my passion. Returned back to the US, applied across the boards of Craigslist and other places for jobs in my field. Nothing. Absolutely nothing.
Then I applied across the boards again, but this time with things I didn't particularly have much comfort in doing, including programming professionally. I had only done it personally. A software company that coded in Visual Basic 6.0 hired me, trained me for 3 months to get me up to the standards, and welp, the rest is history. I became a full-fledged programmer and web developer and have been doing it since 2011.
I've had several jobs since then, as that very first job, I worked for peanuts and for a tyrant boss, who didn't realize the value a programmer has with a college degree. Now I have a college degree in psychology and I work in web design for one of the largest media companies in the world. Never thought I'd ever be doing what I'm doing now.
As for my not wanting to be involved with computers: got over that real quick. I had wanted to go back for my Masters degree as a Career Consultant for Universities and knowing what I know now: I research the value of something before I invest and commit myself to learning it and doing it. Unfortunately, there's no value in helping human beings. There's more value in getting humans to be consumers and buying products and services. In other words, my desired field might pay $40,000 a year for entry level and upwards of $60,000 for experience. Whereas 10 years experience as a software engineer is a far better payout.
Nice summary.
I understand when you say "There's no value in helping humans beings" but I politely disagree, and I think the industry as well
There's a huge potential both human-wise and profit-wise. What motivates me is helping humans although I'm not a psychologist.
Jonathan, you misunderstand what I said.
As someone who creates technology for other humans, you are likely to be paid more than someone actually helping human beings. Look up the salaries of people who are strictly in the business of helping human beings overcome their own problems, such as addiction or mental health, and then look at the salaries of software engineers who might be in the business of creating applications that help human beings.
Even the self-help apps, whose getting paid? The creator of the app. Maybe they've got a psychology degree and learned how to or paid a developer, but nonetheless, it's a software engineer getting paid, or the company that owns the software, not a psychologist.
I believe the reason is bc tech is scalable whereas human interaction is not. Making $1 from a million in tech is not unreasonable. Making a million from dealing with one person is almost impossible, most ppl have $1 but not $1MM. This is why I get frustrated with medicine. Why is it so inefficient and why do we have to repeat the exact same script over and over and over. Sorry, started ranting. Anyways TLDR: I might not have had the same experience as you but I feel you man.
Started to code html websites almost 20 years ago, and now I'm a self-taught software developer with background in mobile, games frontend and backend. My day job is at software consulting.
If I'd start today (or would advise my firend to start), I'd start with JavaScript. Yes, it has its gimmicks but it's easy to get a lot of stuff going on with small amount of effort.
What I loved about coding PHP in 2005 was that it was really easy to get something visible if you had a PHP server available. I like how next.js tries to achieve the same effect in 2018.
But another thing is to focus on whatever gets you going. If you'd like to do games, go with Unity's JScript.net. If you want to do websites, go with JavaScript. If you like to do math stuff, go with Python. Just find something that really gets you excited. In the end, the tech doesn't matter that much.
Pro tip would be to have someone to mentor you. It saves you a ton of time if you have someone that can point you to the right direction when you get stuck.
Started when I was 12 after I saw people use apps (called proggies back then) on AOL. I learned Visual Basic by trial and error and programming chat rooms on IRC when I got stuck. I later wanted to build websites so I picked up a book on Perl and learned HTML/CSS as I went.
I always enjoyed building things and seeing people use the things I built. Learning to program was not my end-goal but I found it fun, and I still do. If I could start again I would have taken CS in college. Surrounding yourself with like-minded people, especially those with more experience, is incredibly helpful.
Best of luck, stick with it even when it gets hard!
Started when I was a teenager with some books and a python shell. Then moved onto web stuff. I think if I could do it over I would have focused more on understanding patterns when I was younger and building more things.
Self-taught, but then did formal education later:
1999-2002, self-taught via T-85 Calculator.
2002, some formal education via military (though not very good).
2003-2006, college education.
Majority of what I've learned has been self-taught though. Formal education did help with things like algorithms though.
Learned BASIC as a teenager playing with several 8-bit home computers back in the 80ies. Later on I taught myself C and Pascal using books. No Stackoverflow. In college I minored in computer science so I'm only half self taught ...
Learning to code means coding. Try to write real world programs as much as you can. Python is a great choice. I'd even recommend to learn a simple UI toolkit like Tk early on. That way you can write impressive programs that might even do something useful.
And find a topic you're really interested in and try to write code to solve problems for that topic. So you stay curious even when you get stuck.
I started programming when I was eleven using QBasic. I took courses in middle school, high school, and college. I consider myself self-taught, but I did just complete a MS CS a year ago, so I guess I don't know if I still can :P.
There are so many resources to learn programming these days it's ludicrous. I think you have to have zero motivation or time to not learn to program.
If you want more practical knowledge - get a PluralSight subscription or take some Udacity courses for free.
If you want academic knowledge - there's plenty of courses on Coursera and edX.
The internet wasn't available when I first started to program. I can remember getting 10 hours a month, and then eventually unlimited access through AOL on a 28.8k modem.
I learned from books and the help documentation installed with the IDE for years.
I started with HTML and CSS as a child, followed by actionscript and javascript once I entered high school. (Or middle school depending where you are, Grade 8)
From there I just kept trying out different projects, making weird websites or javascript games as I tried things out for a few years.
From there I briefly played around with Java on Android, which I learned from the Team Treehouse tutorials. Since then I've been steadily improving in both PHP and Ruby, using WordPress or Rails for the appropriate projects.
People say devs have it easy now with so many resources available on any topic you can imagine. But I think that can also lead to fatigue and overwhelm, so I think you need to take care of your own focus and goals now.
I started with an Apple 2 after learning BASIC was built-in. There was a lot I didn't understand, basically with the code of programs on the disks and some random samples in math books at the time.
It was hard and took a looong time to learn, but loving computers and not having endless tutorials (or the Internet for distraction) helped a lot.
Stay curious and focused on your goals :)
For python, do checkout https://learnpythonthehardway.org/ It used to be free to read online but I guess it's behind a paywall but this was a very-hands on type-every-line-of-code-in-by-yourself sort of teaching method which I believe actually is the best way to learn to code.
Alternatively, Python4Everyone https://www.py4e.com/ , a free online class taught by a University of Michigan provessor
Stack overflow, lots of trial and error, lots of swearing.
I had to learn MATLAB a few years ago in my masters, then moved on to web languages (html, css, js) and golang. I think its important to recognize that you're never really finished learning to code. You can go at it for years, and you will still hit roadblocks that you need to learn to navigate through. Learning how to learn is just as important as learning the language syntax and paradigms themselves.
I learned code (python) about 2-3 years ago through codecademy.com and a lot youtube videos. I found, i can learn better with video,than books.
Python crash course https://youtu.be/oy4GOI9vn5M
Flask tutorial
https://www.youtube.com/playlist?list=PLillGF-RfqbbbPz6GSEM9hLQObuQjNoj_
I learned HTML at a young age on my own and then I learned the basics of Python recently using tutorials I found online. Good luck!
I started as a GIS analyst many years ago and learned on the job as a means to overcome the tedium of repetitive assignments, moved over to the development department soon after and have been doing it ever since. Funny thing is I hated programming back in school, pretty sure I cheated my way through my high school Basic class :/
Having a real world scenario back-drop to the learning process definitely helps to accelerate your abilities.
Yes, I learned by reading and practicing.
I learnt over many years just by reading random online resources and following roughly this steps:
choose what to build
break it down
read online how to go about building each bit
fail
start again with something new
Now this might not be the perfect plan and I have been doing it for at leat 10 years now but I managed to find my first full time job after only 3/4
I did when I was 15. Started with basic HTML pages at 2007 it was easy you can read the webpages html source and learn something. For 6 months every night after high school I cloned one lazy version of templatemonster.com's templates for myself. That make me expert on cloning and understanding full css box-model, element order ...
After that point started classic ASP (it was too late (due Microsoft's discontinue at 2000) hence I am living in Turkey and it was still popular and easy to find exercises) and started working a company as a rookie intern and they gave me bunch of e-commerce sites to clone and make simple changes. That gave me the concept of server side.
The rest was easy. It took 2.5 years to be a called full stack developer. I could say that it is possible but you have decide what do you want to code.
It is like math, solving a question may easy however a question set and deep understanding of the topic takes too much time. It is really easy to use pip and start importing libraries and doing something really fast without the hustle however you will not learn much.
I would suggest do only vanilla coding until you understand everything fully. (I am not against libraries, frameworks... they are essentials of good production but not good learning.)