Too many new learners are stuck unable to make the leap out of the browser based IDE and into running their own code locally on a machine or on a server.
Learning multiple languages (of different paradigms) led me to implement code in one language to one in another. Even though the first set may have been heavily based on some tutorial, when translating my own code, I had to be able to reason about it, break it apart, and re-compose it.
This line of thought helped make me more capable of talking about and thinking through my code as an idea, where the implementation was just an exercise.
If anyone else is teaching themselves, I would advise the following:
+ Learn a high-level OOP language
+ Learn a high-level functional language
+ Translate programs between the two, focusing on really working with the respective paradigm.
+ Move on to something lower level. Many people will say go with C to learn manual memory management. I found Rust interesting, if not difficult at first. Up to you, just seek lower-level understanding.
+ Learn an assembler, fake or real. Shenzhen I/O and Human Resource Machine are good introductions to this.
+ Build skills in your languages through katas. Learn to think and write in a language with minimal reference. This is simple, persistent, repetitive practice.
+ Read about a discrete math you find interesting. You will likely not be as strong at math as educated people. Discrete maths can help at least give you some good flair.
+ Seek constant review from peers.
+ Don't always agree with peers. Find ways to defend your viewpoint. Good arguments- not "Java sucks." Be able to say why you have the right idea.
+ Learn simple circuits. They help you think atomically. There are even sites that have virtual breadboards so that you can experiment and learn for free.
Recipes can work, but they are just the first step. Learning how to "remix" a recipe and make it your own is the next. It's a long journey, for sure. I would agree that online resources that are the most visible are generally very entry-level and hand-holdy. I would also add that there is a vast amount of deep knowledge freely available for those wishing to go further.
Loksa, D., Ko, A. J., Jernigan, W., Oleson, A., Mendez, C. J., & Burnett, M. M. (2016, May). Programming, problem solving, and self-awareness: effects of explicit guidance. In Proceedings of the 2016 CHI Conference on Human Factors in Computing Systems (pp. 1449-1461). ACM.
University of Washington
I think self-sufficiency should include building a local environment you can work work in without having to rely on some SAAS / Cloud service based IDE.