This is not a valid Show HN. Please read the rules: <a href="https://news.ycombinator.com/showhn.html" rel="nofollow">https://news.ycombinator.com/showhn.html</a>.<p>We've taken "Show HN" out of the title now.
Projects are great but there's a deceptively challenging step in "formulate a small and feasible project idea". It's really hard to come up with a small and feasible project when you're a beginner.<p>First, beginners don't know what's feasible. To a beginner all of programming is computer magic. There's not a lot of difference to a beginner between training a machine learning system for classifying different apples and a proper auth flow with OAuth[1]. Second, beginners don't have experience with product skills like scope cutting, setting milestones, etc. Some may say "that's all business nonsense!" but the lack of these skills has an effect.<p>When I'd mentor underclassmen in college, they'd always say something like "let's build a mobile app that lets people create accounts for their pets and then uses machine learning to pair them with the best possible dog walker" as their "small and feasible" project. And I'd have to be like woah there buddy let's get us to "a mobile app that lets you create an account and sign in" first.<p>What I always tell people is that they should make an outrageously simple project. One of my first projects was a blog in Rails. That's literally the first tutorial for Rails! But it turns out if you add stuff like comments and responsive design and deploy the blog, you end up learning a lot. Start stupidly simple and you'll be surprised how much you learn.<p>[1]: <a href="https://xkcd.com/1425/" rel="nofollow">https://xkcd.com/1425/</a>
This misses a big part of why books and lectures are much more effective than the author presents. In books and lectures a practitioner is offering you shortcuts and advice to avoid pitfalls and accelerate your learning in a polished well thought out way (if the author/instructor is good - big if). Sure, not everyone retains them. But for those who do they can practice by doing without banging their head against the wall as much.<p>My experience is that those who can pay attention to a book/lecture <i>and</i> do plenty of practice by doing are the fastest learners.
I mostly agree with this, but there's one thing missing: beginners find it very difficult to come up with good projects. Just yesterday someone asked me for resources to learn how to write an operating system. It turned out he barely knew what a pointer is.<p>Doing stuff is the best way to learn, 100%. But recommending interesting and simple stuff to do is a huge help. Since they don't quite understand computers, they also don't quite understand the complexity of different things. I remember what kinds of things I wanted to do as a beginner, I thought I could do it all.<p>Also, a quick note: it would be great if you'd support prefers-color-scheme, my browser is set to light but I'm reading this in dark mode, which is harder for me.
I agree that working on a project is the best way to learn programming, but I have to emphasize: it's the structured learning that ties it all together and allows you to get a better understanding on how to tackle such projects, whether self-learning or guided. You need to be methodically exposed to available tools, solutions, and common practices you may not have come across when working on a project.
> Now, to be clear, nothing about this model is scientific, [...]<p>This one always gets me. I've been trying hard these days to give better, clearer, more actionable advice to beginners who want to learn how to program.<p>I think, at the most basic level, we understand that our estimation of how much we learn from some particular teacher/course/method is <i>wildly</i> inaccurate, and it's a poor way to assess how effective that teacher/course/method is. Someone constructing a cute pyramid diagram is not much better.<p>It's also not about maximizing retention. That's a very one-dimensional way of looking at effectiveness. All of these ways of learning have their own place.<p>We DO have decades of qualitative and quantitative research into computer science pedagogy. We CAN do better than draw up a pyramid like this. It's nice to acknowledge that the pyramid is not scientific, but why would we not then dig through the journals a little bit to find some papers on computer science pedagogy?
> I don’t think anyone would disagree that actually doing a task is the best way to learn more about it.<p>Eh, for me, reading would be my 90%. I have almost a photographic memory for anything I read.<p>Audio-visual, demonstration, and group discussion are absolutely my worst ways to learn anything.<p>Practice by doing would be second to reading for me. Teaching others is helpful once I have read up on the subject, but is abysmal if I’m not already almost an expert on the subject.
<i>If you’re spending your time reading programming resources and following tutorials directly, regularly checking against a guide to ensure your program matches the example, you’re almost surely doing yourself a disservice. Your success in following a guide lies in your ability to grasp the concepts, not to type a working program.</i><p>i like tutorials to give me a starting point. when i want to build something that i don't know how to do from scratch i look for a tutorial that builds something similar, and then start making changes until i get the result i want. that's where the learning happens.
Who are these beginner devs? Do people actually get a bachelors degree and proceed to not work in the field?<p>Who are these people who take up a <i>craft</i> of creating software and need to be told to, create software, to get better at it?<p>Presumably, people who get into this, already <i>want</i> to create stuff. If they have some other motivation, I don't want anyone telling them the 'secret' :)
"<i>Create Project Idea</i>" seems a rather unnecessary step. We already have a canon of CS exercises (<i>sorts/searches, trees/graphs, parsers, ray-tracers, etc...</i>)--all of which can be easily verified against their more battle-tested counterparts, and serve as superior preparation for the inevitable leetcode interview.
As a beginner programmer currently learning Django, the biggest challenge I have is working out how to structure data models (E.g what should be a separate model that is referenced with a foreign key, vs just a field, or a sub class etc)<p>Does anyone have any recommendations for learning good practices when designing these models?<p>But also not super academic data structures etc
For me it was learning by practice. I had to build something, get stuck, and then search till I found the answer and repeat until the thing was built. And the thing was never important but just something to practice on. Like “make a countdown clock”
Most “programming” or at least where most of the value lies is actually data modeling.<p>It’s easy to explain data modeling (excel, sheet of paper). From there things start to make sense.
>Chat room helpers often will try and lead you to discover the right answer yourself. It may feel frustrating, but play their game and you will learn. This is the discussion level of the pyramid.<p>I fucking hate this so much. You spend hours trawling through Google search results and finally decide the answer isn't out there. Stack overflow is caustic so you don't want to ask there. Hop on IRC and ask "how do I do X?" and now you have to deal with a bunch of "well what happens if you do <tangentially-related-thing>?"<p>Fucking answer the question or don't offer yourself as a helper.