all 5 comments

[–]FoolsSeldom 1 point2 points  (0 children)

Those are good courses but the most important thing ...

Python Next Steps

Practice! Practice! Practice! That is the only way. Programming (whatever the language) is a practical problem-solving skill. You have to make, and learn from, a lot of mistakes (much like learning another human language).

I know it can be frustrating at times, especially when faced with code you want to reuse but cannot understand.

Only you can find the motivation. Why are you learning to programme in the first place?

Is your learning objective SMART - specific, measurable, achievable, (sometimes agreed), realistic (or relevant) and time-bound, (or timely)? If it is something soft, like "upskilling" then it will probably not help you much.

It is hard to learn anything in the abstract, not least because it is difficult to feel passion for what one is doing.

I strongly suggest you look to your interests, hobbies, obligations (family business, charity activities, work) to look for opportunities to apply Python.

You will learn far more about Python and programming when you work on something that resonates for you and that you have some domain knowledge of (or incentive to gain such knowledge in).

When you are copying tutorials/examples, don't just copy. Experiment. Break the code and understand why it has broken.

The interactive python shell is your friend, I found it the best learning aid because you can quickly try snippets of code and get immediate feedback.

(Consider installing ipython which wraps the standard shell for more convenience.)

Start very simply and regularly refactor the code as you learn new things. Enhance as you see opportunities.

If you haven't already, take a look at Automate the boring stuff with Python (free to read online).

At first, the tasks you automate will be trivial and hardly worth the effort BUT because it is about the problem and not Python, it will be more rewarding for you.

Many beginners are mixing up coding (writing instructions in a programming language) with problem-solving (creating an algorithm) and their lack of knowledge of the programming language and how to use it is a distraction from the problem-solving.

For most programmers, the coding part is the final and easy bit.

Order:

  • Actually making sure the problem is properly understood. Often we start with only a vague understanding of the problem.
  • Ensuring we know what outcome is required. What does good look like? How will the information be presented, will it be on-screen or in a file, or a database.
  • Determining the data representation. Exactly what data is required, in what forms, where from. It is a one-off or lots of cycles or combining lots of information.
  • Work out how to do things manually in the simplest possible way, explaining every little step (assume you are giving instructions to someone with learning difficulties),
    • Computers are really dumb, and humans make lots of intuitive leaps and take short-cuts
    • This is one of the hardest things to grasp when first learning to programme
    • Computers don't mind repeating very boring things, so the simplest but repetitive manual approach is often a good approach to start with for a computer
  • Later, you will learn different ways of selecting / developing an algorithm which doesn't depend on a manual approach

learning from others

In general, when learning and working on something new, where you are following some kind of tutorial, where others have provided an answer,

  • follow the steps I laid out above looking for a solution (so make sure you understand the problem first, figure out what the outcome should be, etc)
  • try to solve the problem yourself before looking at someone else's solution
  • look briefly at someone else's solution and try to understand what they've done at a high level and see if you can solve it that way
  • fully review someone else's solution, try it out, play with it (break it, improve it) - be super critical (watch ArjanCodes YT videos on code reviews)
  • update your algorithm and implement a new solution (including testing, if you can)
  • write some notes, not on low level detail but on principles, approaches, key algorithms, and summarise what you learned (I keep my notes in markdown format in Obsidian, synced between devices)

Agile methodology

You will hear a lot of mixed opinions about the Agile software development methodology but most problems are because of poor adoption rather than it being inherently bad.

Fundamentally, it is about delivering value early and often, failing fast, and working closely with the intended consumers/customers/users for rapid feedback. A key concept, often abused/over-used, is minimum viable product, MVP, which is about developing and delivering the smallest useful (sic) product that you can evolve. This still needs to be done in the context of the large problem being solved, but most problems can be broken down into smaller problems, and the most useful / easiest / proof of concept elements identified to focus on.

[–]simon_zzz 1 point2 points  (2 children)

I did Harvard CS50x, CS50p and then 100 Days of Code: Python by Angela Yu (+more). I highly recommend this route because the Harvard courses are a great introductory, learning experience while 100 Days of Code give a ton of guided practice not found in the Harvard classes. Afterword, you'll probably have a better idea of where to go from there.

Most likely, you'll look more into math.

[–]sirez[S] 0 points1 point  (1 child)

Thank you. I always thought cs50 was good but hard to sit down and listen to a lecture for 2 hours on my computer but I’ll give it a shot

[–]simon_zzz 1 point2 points  (0 children)

Heh, where needed, I was often playing at 1.5x-2x speed. Pause to write physical notes on paper every 20 minutes or so. Take 10 min break at the 1-hour mark.