Favorite Resources for Learning?

Hi all!

As I’m working on the Intro to Dev course, I’m looking to hear your recommendations for learning resources you’ve used as you’ve learned both basic skills and Open edX concepts. What do you send to candidates? What do you find useful? Here are some example categories:

  • Basic Git
  • Advanced Git
  • Python/Django resources, courses or tutorials
  • Javascript/React resources, courses or tutorials
  • Env tools (docker, venv, nvm) and favorite ways to customize your local env (ex, I use https://starship.rs/)

Open edX-specific resources

  • Developing plugins with Tutor
  • MFE development
  • Backend development
  • I18n
  • A11y
  • …, and any other guides we have or previous tutorials/talks you’ve liked

Thanks team - I really value your opinions!

5 Likes

Hearing crickets, I posted this to the Open edX forums. Favorite Resources for Dev Learning? - Development - Open edX discussions

I’m most likely very opinionated, but I thought I’d post it anyway.

Git

I always tend to recommend the official Git Book. I remember, I personally struggled with Git initially, before one evening I decided to spend just a couple of hours reading the official book, and then followed it up with some practice at work (at that place we used to use SVN, and I really hated that I couldn’t do branches easily, so when I learned you can use git on top of the SVN and just push it to SVN, I was delighted and it made a huge difference for me). Since then I felt pretty confident in using git cli (I tried GUI and TUI, and it just didn’t do it for me, except may be for resolving huge merge conflicts).

For the basics, the chapters 1, 2, 3 and 5 are a must. Everything else I think is optional.
For the advanced, it really depends on your use case - most of the people I’ve talked to just do add, commit, push. My personal list of features that are a must know are:

  • If you’re using CLI, install git autocomplete
  • Merge, rebase and the difference between the two
  • Understanding reset and checkout (chapter 7.7)
  • Stashing (chapter 7.3)
  • Reflog makes you feel more confident that it’s hard to loose stuff (and knowing more of how it works under the hood, iirc, if something has been at least staged once, and even if it hasn’t been committed, there is a chance you can restore it)
  • Bisecting is sometimes comes in clutch when you’re trying to find a commit that breaks something
  • For quality of life:
    ** git add --interactive # or just -i
    ** git rebase --interactive # or just -i
    ** git add/reset/stash --patch # or just -p
    ** .git/info/exclude is like .gitignore but only local (e.g. useful if you like me like to create python’s venvs in the same directory as the project, but don’t want git status to constantly show it)
    ** git clean -dxi
    ** There are many more, which will depend on your use cases.

May be I missed something, but the point is that, imho, it’s relatively easy to pick the basics of git - just don’t let the knowledge fade away and find a way to practice the things you find in the book ASAP. And once you’re confident with it, you will from time to time stumble upon something that you think git can might be able to help you solve, and then you look it up in the book or google it :slight_smile:

Python

YouTube

There are quite a few YouTube tutorials that are great, which I don’t remember of the top of my head. But there are two specific creators that I still remember being impressed by.

Corey Schafer (link)

I think some of his videos on simple things in python are very good. I wish I saw them when I was learning Python.

James Powell (look up his talks on YouTube)

James Powell’s talks helped me greatly to understand Python more in depth. The main theme of his talks is breaking down the interfaces Python has, which are useful for:

  • Understanding how things works under the hood
  • Knowing how to hack around to leverage Python’s flexibility and create interesting stuff
  • Stop being afraid of the languages building blocks e.g. loops, generators/iterators, inheritance, decorators, classes

Practicing

When you’re just starting, doing small coding problems can help a lot to practice understanding of syntax, basic flow control and using built-in functions and libraries. Imho, CodeWars is great (not only for Python, but for any language that is supported there), because most of the problems are more interesting that the usual LeetCode problems, and after you’ve solved a problem, you can see solutions of others, which is incredibly useful for evaluating your own solution and learning different approaches. Most of the top rated solutions will at the very least heavily use built in libraries, which, especially as a beginner, helps you widen your awareness of what tools are available (I don’t think there is anyone who went through the whole python documentation to learn all the libraries that come by default with the language). There will also be many oneliners - you shouldn’t aim to write code like that, especially in the real code base, as they are often unreadable. However, breaking them down and trying to understand all the quirks and tricks that were used to create it is very interesting and will likely teach you a lot about the language.

JavaScript

I don’t remember how I learned JS or what was the break through. My advice is grok the fundamentals. Then anything built on top of it will be relatively easy to understand.

Env tools

I think this is very personal. I tend to use very basic things most of the time. My advice (although I think it doesn’t work for everyone) here would be again to learn the basics (or at least the principles behind how things work), if you can. For example, I’ve seen that python’s venv are a mystery for many beginners (or even experienced devs who only program from an IDE), and when it breaks they have no idea how to debug it.

Take backups, make sure they work, so you can be confident that you can recover whenever, and then go break things :wink:

3 Likes

Honestly that’s perfect! I am looking for a range of resources because everyone thinks differently. These are all great, ty!

@sarina I’ve always been one to reach for a book when learning a big new thing. Most of the items on this list I didn’t read a book for, but a couple I did.

I read a big chunk of ‘The Linux Administration Handbook’ when I was younger, which helped a great deal in making me aware of the nuts and bolts of system administration, which is always a bottleneck in making your code actually run in the intended environment in a practical manner.

For Python, I originally read the two main O’Reilly books. They’re pretty decent:

More recently, however, I was trying to teach my wife Python. We got derailed for reasons unrelated to the subject matter, but I ended up using Learn Python the Hard Way to do it. While we didn’t get all that far into the text, I really liked how the exercises and ‘bottom-up’ approach the text took helped build a solid grasp of the material. For instance, before you learn Python, you learn basic use of the shell.

JavaScript: The Good Parts is a solid text for learning good patterns in vanilla JS, but if I recall it does assume some programming knowledge already.

There are guides for git, but I can’t really recommend any in particular. Git in is one of those technologies that you struggle with until one day it ‘clicks’ and you’re using it pretty much without issue. I don’t know a way to shortcut that process, but I haven’t been reading materials on it since it clicked for me, since I didn’t need them anymore.

That’s all I’ve got-- everything else I don’t have a specific resource I run for but just Google around until I get what I need when I’m missing knowledge or need to remind myself how to do something. I’ll also note that a lot of these technologies, especially Django, have really solid tutorials on their official sites that are worth following.

4 Likes

Thanks @Fox !

1 Like

Funny enough, the second version of this book was the very first programming book I read, back in high school, when this book used to be free. Although this book might not be for everyone, as it requires discipline and putting in effort, if you do enjoy it, it will likely teach you some solid principles that don’t only apply to Python, but to programming in general.

Some random Open edX-specific resources that were useful to me:

If I could go back in time, first thing I’d do is take some random small course and then another course about Studio to know the platform better from the product perspective, i.e. what problems the platform solves for both students and teachers. This could save me a huge amount of time. There is an old book on this topic and also StudioX and Studio Advanced courses from this program.

3 Likes

I don’t typically use books or courses for coding stuff, but one that I really liked is Game Programming Patterns. It’s not directly related to Python or React or Ops, but I think it’s one of the best explanations of programming patterns in general that I’ve seen, and many of the same ways of thinking are widely applicable outside of game dev. One downside: it does assume a significant base level of programming knowledge and the ability to read C++ syntax. Big upside: it’s free.

4 Likes