9 ms·
I will now send this to beginner programmers
A look at a common issue I see beginner devs go through. Probably the thing that weeds the most people out of development.
- na85 4y ago>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. 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>?" Fucking answer the question or don't offer yourself as a helper.
- CGamesPlay 4y agoAbsolutely not. If you've actually done the research that leads the knowledge gatekeeper to ask these, these questions are easy for you to answer. If you haven't then you're wasting their time.
- na85 4y ago>Absolutely not. If you've actually done the research that leads the knowledge gatekeeper to ask these, these questions are easy for you to answer. Depending on the specifics of the question being asked, sure, I agree. But speaking only for myself, I abhor playing silly coy games of cat and mouse. I only come to chat rooms as a third/last resort exactly because so often you can't get a direct answer without satisfying somebody's ego first. It's basically hazing. I've got a thousand things to do and it would be more expedient for both asker and giver if the response to "How do I do X?" was a simple "via Y".
- Groxx 4y agoThe people in the chatroom interact more with people who do not do this. They're trying to prevent wasting their own time, and leaving askers with precise answers to questions they didn't need answered, or sending them down the wrong path and fielding tons of opaque questions rather than finding out what's actually going on. I get that you don't want to waste your time, that's entirely reasonable... but by asking for help you are asking others to donate their time. Refusing to acknowledge that their strategy helps them preserve their time just makes you the asshole, not them.
- deleted 4y ago[deleted]
- 878654Tom 4y agoThe question you ask is quite broad so the answer you'll receive will be broad as well.
- na85 4y agoRight, as if my "How do I do X?" wasn't merely illustrative. Standard HN pedantry pls go.
- craz8 4y agoI’m new to Clojure, coming from Ruby and C and Pascal - there is no way I’m am leading myself to use ‘juxt’ and possibly combining it with ‘into {}’ (ruby’s each_with_object gets you close, but it’s not as powerful) There are a bunch of paradigms that are really useful, but you can’t get to from here without specific help or examples
- MarcelOlsz 4y agoIf it wasn't for #startups people spending hours holding my stupid hand through mundane problems for hours I would be nowhere and likely homeless. Imagine being able to frequent a pub with super smart people ready to help at any given time. IRC is/was that.
- deleted 4y ago[deleted]
- defanor 4y agoAfter hours of searching, it is annoying when the reply is something like "does this chat look like Google to you?" (though fortunately those are pretty rare), but the answers trying to teach you how to discover answers to your original question are closer to "teaching a man to fish", or the Socratic method: you'll probably discover the answer soon (possibly with additional help), and will be able to discover similar ones in the future. That approach is both more educational and may be easier on helpers themselves; answering the same (or very similar) questions, often from the same people, isn't particularly fun or productive.
- osullip 4y agoI am self taught at most things I know. What I would have given for someone to explain objects to me when I was trying be an object oriented programmer. >objects are the things you think about first in designing a program and they are also the units of code that are eventually derived from the process. Huh? Classes would confuse me. Methods would confuse me. I could get things to work but not understand why or how to extend and abstract properly. At some point of learning you just need to be told the answer so you can move on.
- edflsafoiewq 4y agoBonus points for playing the game only to discover when you reach the end that they were wrong all along.
- BrandoElFollito 4y agoI agree with you completely. I am in IT/dev for 35 years and love to discover new stuff, and to help others to start. I am a HUGE fan of what I call "bootstrapping" knowledge. Say I know Python and want to code in Go. I craft a question that shows that I understand the problem but could not find the documentation that would explain this in Go. This is obviously not "how to assign a variable" but rather "how to asses the kind of error returned by the function" (in Python you would do that with an exception, in Go this is borderline voodoo to understand that the error is because there is no network, rather than a DNS issue for instance). I then get either downvoted because my question is not elitist enough, or someone plays kindergarten teacher by saying "you have toooo ... u... un... unwraaaa...?" These people are fucking annoying and the site become s shitshow (yes - I am looking at you Stack Overflow questions tagged with golang) Just say "you need to unwrap the error by doing this and that, the documentation is here). I do not want them to explain me what an error is, or why there can be many, or the philosophical religion of the one who coded it that way. I. Just. Want. To. Start. Somewhere.
- goto11 4y ago> Stack overflow is caustic so you don't want to ask there. I have only positive experiences with asking on Stack Overflow. Nine times out of ten I have gotten a useful answer. In one case, an answer provided a 20-line code snippet, which would have taken me days to figure out on my own. The key is to ask clear and focused questions, and explain what you have already tried and why it didn't work. Sure, there are always some answers or comments which are unhelpful or which completely miss the point of the question. But the value of a QA forum is given by the value of the best answers, not the worst.
- braingenious 4y agoI like how the percentages add up to 280%
- anonred 4y agoYou mean the retention rate for each learning method? Those are mutually exclusive… I guess this is a good example of OP’s claim that reading is only 10% effective.
- 0xthrowaway 4y ago>I like how the percentages add up to 280% well he did say it's not scientific
- deleted 4y ago[deleted]
- elcomet 4y agoHow is there a text and a link in this HN post ? I thought it was only possible to have one of them.
- asicsp 4y agoShow HN allows you both.
- imustbeevil 4y ago"If there is a url, text is optional": https://news.ycombinator.com/submit https://news.ycombinator.com/submit
- richard0 4y ago
- richard0 4y ago
- hardwaregeek 4y agoProjects 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. 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. 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. 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. [1]: https://xkcd.com/1425/ https://xkcd.com/1425/
- intelVISA 4y agoAgreed, a common misconception, imo, is that programming's some sort of math or language skill when really it's just learning how to break down computer magic into the simple underlying logic and systems that generate it.
- 082349872349872 4y agoNote that the flowchart given (with its explicit instructions for beginners to back off —hopefully exponentially— upon discovering one has bitten off more than one can chew) may be applicable even for non-beginner programmers: Dealing with failure is easy: Work hard to improve. Success is also easy to handle: You've solved the wrong problem. Work hard to improve. — Alan Perlis.
- zelphirkalt 4y ago
- jbverschoor 4y agoMost “programming” or at least where most of the value lies is actually data modeling. It’s easy to explain data modeling (excel, sheet of paper). From there things start to make sense.
- WoodenChair 4y agoThis 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. My experience is that those who can pay attention to a book/lecture and do plenty of practice by doing are the fastest learners.
- tstrimple 4y agoWhich lesson will you carry with you longer? The time you saw a presentation and the speaker warned against X, or the time that X bit you in the ass and you learned from experience why it’s a bad idea? Much of the detail you’re referring to can absolutely be learned valuably from a presentation, but folks with more experience can grok the lesson and reasons behind it much better. Presentation and book learning absent practical experience leads to things like everything being forced through an OOP lens for example.
- WoodenChair 4y agoI said both together is best. You can glean insight from both. It's not an either/or.
- klodolph 4y ago> Now, to be clear, nothing about this model is scientific, [...] 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. I think, at the most basic level, we understand that our estimation of how much we learn from some particular teacher/course/method is wildly 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. 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. 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?
- munch117 4y agoI suggest reading the summary of https://www.semanticscholar.org/paper/The-Learning-Pyramid%3A-Does-It-Point-Teachers-in-the-Lalley-Miller/e7aa7d1e9ce93224f6f2d06bb478cad3e88754fb https://www.semanticscholar.org/paper/The-Learning-Pyramid%3... which I was pointed towards by https://theeconomyofmeaning.com/2016/07/08/an-update-to-the-learning-pyramid/ https://theeconomyofmeaning.com/2016/07/08/an-update-to-the-...
- personalidea 4y agoActually, there is a framework used in education. I learned about it when teaching foreign languages. It is about how to structure a unit about any given topic: 1. Presentation/ Introduction to the topic with examples 2. Explanation 3. Verification that topic was understood in theory 4. Practice with isolated exercises 5. Transfer new knowledge to personal context So lectures, articles and such can serve as an introduction to a topic. Step 3 is difficult when learning on your own. I would suggest the Feynman method here. If you can explain it, you understood. Then look for exercises. Tutorials are great here. Try to solve it on your own, then look at the (possible) solution. Then lastly, go and using it in your own context, outside of a tutorial, will solidify your knowledge.
- alexashka 4y agoWho are these beginner devs? Do people actually get a bachelors degree and proceed to not work in the field? Who are these people who take up a craft of creating software and need to be told to, create software, to get better at it? Presumably, people who get into this, already want to create stuff. If they have some other motivation, I don't want anyone telling them the 'secret' :)
- na85 4y ago>Who are these beginner devs? Hi, I was one at one point. I'm an aerospace engineer, not a software guy. I merely dabble in coding and as such I don't know how to implement a quadtree or what Dijkstra's Algorithm is for. I've been coding off and on in some capacity since the early 2000s. I learned what closures were a year or two ago. Not everyone who slings code has a comp sci/software eng degree.
- csydas 4y agoIt happens a lot more than you'd think. Programming continues to be big money even if you're awful at it. To give a lousy comparison, imagine a story with a really lousy wizard; they can mess up/fail most of the time, but as long as a few times a year they make some pretty lights and woo their audience, probably they'll stay in favor, since it's still magic to everyone else. The failures likely are written off as "well it just happens like that sometimes." The big issue is that even if new programmers understand the basics of programming and how to get a functional program, the discipline of identifying when the problem you're dealing which actually has well defined business rules is another craft altogether. Blank Page Anxiety is just as real for code I suppose as it is for other types of writing, and having a system with structured "write something that does X Y Z" is often essential for a lot of people as it's the only way they know how to produce code. As an example, we sometimes take in fresh from University trainees for some general datacenter/IT work who come from compsci/bootcamps, and they always say they want to develop this skillset more, but never write a single line of code (we stress heavily that this would be paid work you get time set aside for; usually no takers). I'm not a programmer by trade, but I am very lazy and have gotten pretty good at figuring out when spending a week to write some tooling is less time than the total time over a year I would spend on a common task and write tooling accordingly. Finding problem and developing a solution is not a skill that is out there by default, but it is fairly easy to learn. I like technical problems and hearing about them because it's fun to think about, and once some basic code got into my skillset, it was an additional solution to many of these problems. Listening to people describe their challenges is a great source of projects to practice on. The satisfaction of someone telling me "wow, you have no idea how much time this saves me every week" is a pretty good inspiration to keep learning and doing more; it's "production code" and the benefit is immediately apparent. I never go out seeking a problem to code a solution for, but instead just like talking about technical things. Inevitably, a problem comes up that I think "how hard could that be to write a program for?" and a new project is born. (Sometimes the answer turns out to be "very hard", but those are really fun projects once I'm past the frustration :) )
- georgia_peach 4y ago"Create Project Idea" seems a rather unnecessary step. We already have a canon of CS exercises (sorts/searches, trees/graphs, parsers, ray-tracers, etc...)--all of which can be easily verified against their more battle-tested counterparts, and serve as superior preparation for the inevitable leetcode interview.
- ht_th 4y agoLearners need projects they care about, project they feel ownership about. Most students aren't motivated to do some standard project. In formal education, we make them care about these standard projects by giving credit. But that sort of extrinsic motivation isn't that helpful for deep learning, I've found. It'd be better if a student has a problem they truly care about, somehow. Unfortunately, turning their need into a workable project isn't as easy as you'd hope.
- georgia_peach 4y agowax on, wax off
- irrational 4y ago> I don’t think anyone would disagree that actually doing a task is the best way to learn more about it. Eh, for me, reading would be my 90%. I have almost a photographic memory for anything I read. Audio-visual, demonstration, and group discussion are absolutely my worst ways to learn anything. 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.
- 35mm 4y agoAs 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) Does anyone have any recommendations for learning good practices when designing these models? But also not super academic data structures etc
- switch007 4y agoThat’s definitely a data modelling learning topic and not Django. (You just use django to implement your design decisions) I’m on mobile so can’t easily locate specific recommendations but if you Google data/database modelling/design, normalization etc you should find a wealth of info.
- 35mm 4y agoThanks, will look into it!
- zelphirkalt 4y agoThere are multiple things that come to mind, that you can look into, perhaps find a good explanatory text or video about: ERM - Entity Relationship Model 1., 2., and 3. normal form for relational databases (usefule to avoid redundancy and designing it, so that it can be extended later, and avoiding pitfalls like non atomic values). User stories and thinking about, whether they can be comfortably implemented using the proposed model. SQL - for understanding what might happen behind the ORM (Object Relational Mapper). Those things are however not Django specific, which might be the reason, why one might struggle with them, if one is just starting out coding with Django. Django tutorials will usually not cover these. However for a personal project, maybe a not perfect database design is OK as well. Do not despair because of it.
- 35mm 4y agoThanks! I’m trying to define a product model which can have multiple types, each of which has required attributes. For example a solar panel has to have a peak output, but no energy storage. But a battery type of product is required to have a storage capacity.
- em-bee 4y agoIf 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 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.
- unsafecast 4y agoI 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. 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. 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.
- Traubenfuchs 4y agoCongratulations, you reinvented Bloom‘s taxonomy.
- avnigo 4y agoI 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.
- deleted 4y ago[deleted]
- throwoutway 4y agoFor 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”
- dang 4y agoThis is not a valid Show HN. Please read the rules: https://news.ycombinator.com/showhn.html https://news.ycombinator.com/showhn.html. We've taken "Show HN" out of the title now.
- headline 4y agoThanks! I'll keep that in mind going forward.