The Importance of Independence
One of the major goals I've had in recent years was to build independent learners. Students who could respond to challenges by finding the resources they need to problem solve on their own with limited oversight by the teacher. My goal is and always will be to have students succeed without me holding their hand. I struggle to find the right balance of helpful intervention and allowing students to struggle before figuring things out on their own. The main question I want to explore here is why I think it's so important to be independent.
"If you want to do cool stuff and make high quality work, you're not going to be able to do that with someone holding your hand...you're capabilities are limited by that person holding your hand"
That was quote from one of the most talented and successful students I have ever had. Kazi Jawad was an incredible independent learner as a high school student. I had given him my Udemy login so he could work through dozens of courses in his own time. He took that independence to CMU where he joined and lead multiple on campus projects. Kazi also went on to intern and work at some of the best development studios in the country...all before he even became a junior. Kazi is one of many incredible students I've now had the honor to watch succeed beyond the borders of my classroom. So what makes Kazi, and notable other alums, so successful? They don't need help until they do.
The most successful students I have ever taught didn't need me. Well, they did, they just only asked for help when they really needed it. Everyone needs help. Everyone has questions. Everyone has more to learn. The key is learning when you need help. Like REALLY need help. I've seen a lot of students ask a lot of really bad questions. Students are used to having questions answered. It's why there's a teacher right? Then they go to college. Or they get a job. Suddenly no one wants to answer ALL their questions. Professor's pawn off the students onto TA's. Employers can't spend all their time training the new person who can't keep up. One alum described his college experience as "paying to learn from a textbook".
Learning from a textbook
I have no idea if "learning from a textbook" is the norm. I have plenty of former students who love the TA's at their school and their classes. The experiences of my friends, colleagues and myself is that of learning independently through textbooks and other resources. It doesn't just stop with school or academics though. Being an adult who pays taxes, buys a car or home, saves for retirement or has to fix things around the house is often left to either figure it out or find the best resource on their own. We live in an age where Google makes it so much easier to become educated in matters we are unfamiliar with. It's never been easier to be independent but first we have to identify the right resources and be able to pick up concepts without as much oversight.
How can we learn quickly and independently in CS?
It may be boring but it's important to mention fundamentals. Anyone I've spoke with regarding learning CS, even the most advanced concepts, note how important the fundamentals are. The concepts of data structures, algorithms, problem-solving etc. are concepts that apply to all languages and situations. When teaching VueJS I get asked "Why didn't we start with this, it's so much better!". The students don't understand how important the fundamentals of HTML, CSS and JS are crucial to understand before learning a framework. Beyond that, build processes, Node packages and the DOM itself are all important before picking up a framework. The framework doesn't matter. The framework that you use today may not be the framework you use tomorrow or your next job. The fundamentals are forever. The DOM is always the DOM. Vue, React, Svelte are all wonderful, magical layers on top of the HTML, CSS, JS core concepts.
The next piece of advice was to learn where the puzzle pieces go. You may not always understand all aspects of the puzzle but if you're following documentation, YouTube or a colleagues code you can at least see where everything goes and how it should look. In time, we can start to look at and research why certain things work the way they do. Even recently I was asked about the directive :key in Vue. I understood I needed it in V-for. I didn't really understand why I needed it and when else to use it. I looked through the documentation and had the "ah-ha" moment. The lack of understanding of :key did not prevent me from building numerous projects in Vue. Instead it allowed for an understanding of the other concepts in Vue and I could delay my research and learning of :key. I've heard similar stories from alums and friends who learned "where to put the puzzle pieces" and understanding of some of those pieces came much later as their familiarity with other core concepts developed.
While the post so far has been about learning independently, a key aspect of independent learning is asking for help. The important skill is asking for help when you need it and not because it's convenient. No one wants to help you if you didn't bother to Google your error from the console. No one wants to help you fix syntax errors. People do want to help you understand concepts like authentication, call stack or program architecture. Don't be afraid to ask for help or guidance but do be sure you took the time to really look at your issue. While we're on the topic of debugging and asking for help; make sure you take time to walk away from the computer and think through your problems/projects away from a keyboard. So much of software development is thinking and problem solving, not necessarily clacking away on our keyboards.
Wrap Up
I want to close this out by paraphrasing Kazi's quote from earlier. You're limited by the person holding your hand. My most successful and impressive students bounced ideas off me. They asked for directions to a resource. I've had students eclipse me tremendously while they were enrolled here. That's because they didn't limit themselves to our curriculum. They didn't limit themselves to what I know or what I taught. They sought advice and resources when needed but largely sought to explore and solve their own problems. I've now watch a number of alumni thrive in their university environments. They've lead major on campus projects, developed businesses, and gained academic achievement. Their success coincided with their willingness to explore on their own and ask the right questions.