Learning to be a competent programmer is a complex concept and is not easily learned by the “banking model” of education where a teacher makes a “deposit” of knowledge or skill and the student receives it as a “credit”.
Google everythingThat’s what the professionals do.
And keep Googling until you find a tutorial or Stack Overflow answer that you understand.
If you don’t, go on to something else and you’ll learn enough that eventually you’ll be able to understand the original thing.
Decide what you want to do in advanceI find writing down what each line of code is supposed to do as a comment then writing the code underneath it once I’ve worked out how to do it.
This has the advantage of making sure your code is commented which is essential when you come back to it.
Have smaller goalsI am trying to write a function a day for the main project I’m working on.
Sometimes I do a lot more and that’s great but I’m always making steady progress.
It’ll also force you to write smallish functions that you can test easily and then string them together when you’re done.
Make it easy to see what you’ve done beforeUse comments in your code, and use a Todo list or a kanban board like Trello even if you don’t need it to remember what to do, because you can use it to see what you’ve done.
Be able to take advantage of any opportunitiesHave a Python app on your phone and you’ll be able to do your one function on there and copy it into your actual project later.
Or keep a notebook with you and write down precisely what you want your program to do.
I planned this year’s irrigation system waiting for a train the other day.
Move on if it’s hardI said this above but it bears repeating.
If there’s an aspect you completely don’t get, ignore it and use what you do know how to do to solve your problems.
If it’s that essential, eventually you’ll have a problem that you can clearly define where it’ll be obvious how to use the previously head-twisting technique.
I’m thinking of things like machine learning with TensorFlow here.
Just use AutoML until it can’t solve your problem anymore, then you’ll have a good understanding and will be able to work it out.
Only do things onceSave copies of things you do repeatedly so you can just copy and paste into another project, or, keep a note of what you’ve done in which project so you can easily find it again.
Hardware is goodParticularly the Raspberry Pi I’ve found.
But physical computing, as it’s known, really helps you visualise what you’re trying to do.
Plus the Raspberry Pi resources are great — I used the Physical Computing and Flask tutorials to get started.
You can also use MicroPython on the BBC Micro:Bit and CircuitPython on many low-cost boards from Adafruit.
Use these tutorials to get set upI set up a Crouton Linux environment on my Chromebook using this article.
I’ve set this up as well but I still usually use Crouton.
I’m using Ubuntu, I have no experience with any of the other flavours.
RealPython is a brilliant site and they have a tutorial here covering installing Python on Windows, Mac or Linux.
This is how to run your scripts.
This is the first bit of Python I ever wrote, on a Raspberry Pi.
Here’s some ideas for small projects.
This is a good introduction to Git and GitHub.
Git is a way of keeping track of what you’ve done with your code so you can undo it when you screw up, and GitHub is a web service where you can keep your code as a backup or to share it.
Get these booksThese are the books I’ve either bought and found useful, or borrowed from the university library until they made me give them back.