17 ms·
Why don't schools teach debugging, or, more fundamentally, fundamentals?
- BiteCode_dev 3y agoSchools are only partially made to teach. They are also serving the interests of the people running them, and of course, they are filters. What's more, many teachers actually don't produce anything with what they teach, and have a curiculum forced on them by people making it up on theorical basis. The result is that half of the professional training I give have to cover those holes. Having to teach debuggers to pro devs is weird but a reality. In fact, shameless plug, but this is why I have a articles dedicated to pdb, venv and pip on http://bitecode.dev http://bitecode.dev. Because the demand is very high.
- sparrowInHand 3y agoThey were also made to train a workforce for industrial production. Some part of the school curiculum is detrimental for todays tasks.
- ajsnigrutin 3y agoSome things can actually be taught... some can't. To program something, you need two things: - to learn the language (syntax, rules, specifics) - to break up the real-world problem into smaller step-by-step blocks, that can then be written in a chosen programming language. The first part (language) is simple and can be taught in schools. But some people are just unable to do enough mental abstract processing to do the second part. I've intentionally chosen programming as a first example (because of where we are), but this is true for human-languages too.. rules of the language are simple, articulating and in a more extreme example, writing a book require more than that. Same for woodworking... saw, drill, chisel, router, sander... simple. Being able to mentally transform wood into something useful in your head is hard. I have no problems with coding pretty much anything, given enough resources (time), but writing a short story (and other texts) in school was always a pain that involved a lot of counting words (back in my time, written by hand on a piece of paper) and "oh shit, I need two more paragraphs of something".
- Ensorceled 3y ago> But some people are just unable to do enough mental abstract processing to do the second part. Even accepting that this is true, not teaching it because some people may not be able to learn it and instead leaving everybody to figure it out for themselves, some of whom might have figured it out with help, is really fucking shitty gatekeeping behaviour and you should be embarrassed for defending it.
- ajsnigrutin 3y agoGatekeeping means limiting access to something. I never said that we should forbid kids from learning programming. What i was saying, and am saying again is, that programming is a thing that will be done by a small percentage of students, and having a mandatory course in that subject is useless, because those who can't do programming will only "suffer", and those who can, won't learn much, because otherwise the majority would fail the class. Make it an elective, sure.. Mandatory? No. A class about basic finances? That should be mandatory.. everyone will get a job, work, pay taxes, save for stuff, get a loan, have unexpected expenditures, etc. Everyone should know at last the basics. A general computing class (internet, emails, documents and basic editing, etc.), sure. Coding, no.
- randomdata 3y agoThe opportunity to debug something is something everyone will encounter at some point. Not necessarily with respect to code, but the debugging process applies to all things. Surely that is a more useful use of time than a dedicated basic finance class; a topic that is already thoroughly covered in the standard math curriculum?
- PH95VuimJjqBqy 3y agoTo add on to this, in college I knew a woman who could read code just fine but could not write it. It was really odd, but I paired with her (she was 2 years ahead of me) and basically had to write the entire thing myself. But once I was done she understood it perfectly, to your point about abstract mental processing, she just couldn't come up with the algorithms on her own.
- melvinroest 3y agoI think in part it's because the idea that programming is text and math-based is too ingrained in society. For example, we talk about programming languages. But IMO there are also programming systems such as Smalltalk [1]. I've programmed 2 years professionally in it, currently looking for an engagement in a different language (a curiosity thing, also a resume thing). I think Smalltalk has a lot to offer by switching the programmer's view of thinking about programming systems rather than programming languages. Moreover, programming systems is also not where it is at. One downside that Pharo in particular has is that the community is small. A lot of plugins/libraries that are a given in other languages aren't there! For some, however, this is a strength because one gets to learn much better how to build stuff from the ground up and tinker on it by yourself. Given that there is still a lot of low hanging fruit it is easy to become a contributor. But this part, whether a community is big or small means that I think it's smarter to think about programming ecosystems where a programming language or programming system is the central hub connecting the programming community together. Why don't schools teach about programming communities? See my first sentence ;-) [1] https://pharo.org https://pharo.org - a modern Smalltalk
- argiopetech 3y agoProgramming is logic, language, and practical skill (like welding or riding a bike). The logic is basic enough that you can get most of it in a single class. You can get a good bit of the language idea (since the syntaxes change) in class(es), but you can't be fluent without immersion. The practical skill (which is what people get paid for) can't be directly taught and requires significant personal effort practicing over a long period of time. In my experience, most students fall on the practical hurdle.
- theamk 3y agoSmalltalk is image-based though, which means the amount of things you can break is much bigger than in traditional systems, and you need to apply a real effort to keep things consistent. Which would be especially hard for beginner students. Take a classical C or Python programing assignment for example: it all fits on a single screen or few screens, and that's all there is (most assignments usually do not include third-party packages or persistence mechanisms like files/databases). When you run it, the state resets from scratch every time, and the run is normally deterministic. If you revert your file to previous version, program will function as before. You can show this file to someone and they'll have the full picture of what you have done. Compare it to Smalltalk where your program is spread throughout the system inside lots of tiny functions. You might have a good code which does not work because there are objects created by previous versions. Or maybe you changed a system-provided function during debugging and accidentally broke it in the process. ("notebook" environments like Jupyter notebook have the similar problems. But at least there, you can tell a student: "please restart the kernel and reproduce the problem". Nothing so simple exists in smalltalk)
- cafard 3y agoMy school did--at least it taught debugging. In his memoir of his secondary school years, <i>What's to Become of the Boy: Or, Something to do with Books</i>, Heinrich Boll talked about his older brother's method of tutoring him in Latin and mathematics: work back to sound knowledge and then build up from there. Boll writes that he used the technique in tutoring classmates also.
- cfors 3y agoMy system’s programming teacher spent an entire week of a 12 week semester (3 classes) going over how to use gdb/vim for one of our projects. Still my favorite class and professor from my time at school.
- pards 3y agoNitpick: Epstein's book is called "Range: _Why_ Generalists Triumph in a Specialized World", not "Range: How Generalists Triumph in a Specialized World" [0]: https://a.co/d/g0y80gW https://a.co/d/g0y80gW
- jasode 3y ago>Epstein's book is called "Range: _Why_ Generalists Triumph in a Specialized World", not "Range: How It looks like the blog author remembered the older title that had the word "How" but linked the url for the newer title that changed it to "Why". Previous title with "_How_" : https://www.amazon.com/Range-Generalists-Triumph-Specialized-World/dp/1509843493 https://www.amazon.com/Range-Generalists-Triumph-Specialized...
- ajuc 3y agoI don't know how it works in USA but here in Poland you earn like 4 times more as a developer compared to a computer science PhD at an university. The incentives aren't exactly healthy. And the programming culture is basically - learn it yourself, go to university so you have a paper proving you can do it.
- sfn42 3y agoUniversity provides much more than paper. What many don't seem to understand is that it is the student's responsibility to learn. The best lecturer in the world can't teach you anything if you don't pay attention, or if you don't have the prerequisite knowledge and understanding. I could attend a lecture on advanced neuroscience and I would be left with pretty much nothing because I have no idea about any of that stuff. In order to gain from it I would need a solid base of knowledge on which the lecturer could build. So university students fall on a spectrum. Some are really interested, they started writing code on their own before they even enrolled. They challenge themselves and do their own projects for fun and learning. Others don't care, they do as little as they can get away with. A trick I picked up that I found very helpful was to study before each lecture. They would publish a list of all the lectures and which chapter the lecture was about, so I would study the chapter before the lecture. This allowed me to much better understand the lecture, and I felt like it really helped me gain value from the lectures and learn the material. My point is nobody can put knowledge in your head but yourself. My experience was that the people complaining most about our studies and lecturers were the people who didn't take responsibility for their own learning. If a lecturer sucked I just skipped the lectures and read the book instead, I didn't care. I don't need a lecturer. Good lectures are just a bonus, they're not supposed to be your main source of learning. You're supposed to study on your own time, even when nobody has given you a specific task and deadline. If you do that, university is a great way to guide your learning and keep you going - and get a paper proving you have put the time in.
- randomdata 3y ago> and get a paper proving you have put the time in. Are you apt to forget that you put time into it?
- austin-cheney 3y agoI have noticed that data structures are foreign to many less experienced developers with a computer science education. That blows my mind, but then I am self taught. For example consider the following: var1[var2[index][index1]][0] It’s just a combination arrays and objects, but may as well be its own language. The practical problem then is that many developers cannot navigate larger structures that come over a network, cannot recursively walk a file system, cannot traverse a DOM, and cannot do so much more. To me, the person without the computer science education, it looks like their education was a waste of time and money. Understanding data structures is among the most important of all skills in programming.
- projektfu 3y agoDefinitely a good question, and one I wondered a lot when I worked in the field. There's probably something satisfying to certain teachers watching a bunch of reasonably smart kids fail, especially the ones who used to skate through with intuitive understanding of everything until they get to that one class where they might have to apply themselves. There is also a type of student that traditionally tries all combinations of tricks they learned until something gets the green light and these students are probably annoying in office hours, where the TA or professor has to try to understand a very foreign way of approaching problems to tell the student what's wrong, just for the student to add something to their bag of tricks instead of learning the more general principle they are missing. Those students often fail weed-out classes. There may be some students who cannot learn to generalize properly, I do not know. I like what is being asked by the OP. Why do we see it as a benefit to gatekeep and weed out rather than educate? If you get to first year CS or EE without a complete understanding of basic algebra, or first year creative writing without comma-use skills, you have been failed in your previous education. A remedial approach will hopefully get a bunch of students back on level. However, if you get through CS without debugging skills or creative writing without being able to edit and improve piece, then your university failed you. Even those educated with a focus on getting it right the first time will still produce products that need debugging or editing.
- nyc111 3y agoI’m not sure about his insistence on teaching comme rule in class. I don’t think knowing comma rule is fundamental. And anyone who wants to learn grammar can look it up. The information is freely available online. But I agree that education is not about teching it’s about creating jobs for academic professionals. Money is the most fundamental topic in our society. But I don’t remember ever being in a classroom where how money works was explained.
- BeFlatXIII 3y ago> I’m not sure about his insistence on teaching comme rule in class. I don’t think knowing comma rule is fundamental. And anyone who wants to learn grammar can look it up. The information is freely available online. It's explained in TFA: you teach them to take a moment to ensure everyone is properly exposed to the knowledge. Why do people continually act surprised when something that is supposed to have been taught simply isn't?
- incomingpain 3y agoWhy don't schools teach so many things? Why doesn't high school teach you how to balance your budget? spawning many conspiracies. But the answer is, they don't know. Teachers usually dont control what they are teaching. Go up the chain and the person who did pick what they are teaching is balancing so many things and trying to tighten everything as much as possible. That some things dont make it into the curriculum.
- recursivedoubts 3y agoMy second day of classes, after an overview of the courses, I teach students: - How to use a debugger - How to set up a Github account A good computer programmer needs to be able to evaluate/simulate the code they are looking at in their head, and the debugger (and other visual tools) are excellent for developing that ability. This is particularly the case for students that aren't "naturals" at CS (I was not a natural.) https://grugbrain.dev/#grug-on-tools https://grugbrain.dev/#grug-on-tools > grug always recommend new programmer learn available debugger very deeply, features like conditional break points, expression evaluation, stack navigation, etc teach new grug more about computer than university class often!
- bnolsen 3y agoThere's a difference between general "debugging" and "using a debugger". In my experience using a debugger is generally abused. Students need to learn to modularize and modularize and modularize so that what they write can be unit tested with logic errors detected by the tests. Tossing in quick print statements, compiling and rerunning ends up encouraging better design. When someone can't debug without an interactive debugger generally that means the code has hit ball of spaghetti status. This becomes especially helpful when writing heavily threaded code as interactive debuggers are almost entirely worthless when it comes to finding and fixing race conditions. I find I use debuggers for post crash analysis, either unintentional during a program run, or intentionally forced by me. Specific tests designed to crash the system in these cases can be cleaned up and added to the general test suite.
- elteto 3y agoReality is that some schools do and some don’t. Like most things in life it isn’t black and white. I took an intro to computing systems once and we spent all semester using GDB to debug homeworks. We even had some extra credit assignment that were simple CTF-like challenges, all within GDB. Also I’m pretty certain if you take a binary explotation class or similar you will learn to use debuggers and even more advanced tools.
- CodexArcanum 3y agoI learned debugging (with the VS IDE and .NET tools) on my first job. School never taught me anything about debugging. Certainly not how to use the tools, but more critically never taught me: how to use binary divide techniques to track down which change caused a bug, how to use deductive reasoning to narrow down what can't be the problem, and even how to carefully read error messages to pinpoint the issue. Schools teach theory, and sometimes they teach some versions of practical job skills. But it's pretty hard for a for-profit educational institution to make good decisions regarding education when students are the product and for-profit businesses are the actual customers. You end up maximizing recruiters' ideas of what makes a good worker and makes them marketable products, rather than what other working people have experienced as being important job skills. People say software devs need stronger unions but what we really need is to bring back guilds.
- roenxi 3y agoUniversities are supposed to teach academic skills - ie, things that are believed to be true by the academy. "How to program" isn't something the academy understands, so they generally can't teach it [0]. By extension, they can't teach debugging either. People will need some sort of trade skill system to pick that stuff up. I'm tempted by both sides of the argument, but I think the professors have a point about leaving students to sink or swim. At the end of the day a professor generally has a lot of teaching experience and most of the younger ones I've seen seem go through a phase where they think they can teach every student. Very few (none?) of the older ones. I think that is an important clue. [0] Observe that teaching language semantics and syntax are different from learning how to program using that language. As far as I know among professors there is a strong consensus on what C is, and no consensus on how to use it to solve practical problems. EDIT Dear me, this sounds awful. Poor man. https://jakeseliger.com/2023/07/22/i-am-dying-of-squamous-cell-carcinoma-and-the-treatments-that-might-save-me-are-just-out-of-reach/ https://jakeseliger.com/2023/07/22/i-am-dying-of-squamous-ce...
- sfink 3y ago> [Younger profs] think they can teach every student. Very few (none?) of the older ones. I buy that argument, but I would ask: if they can only teach some of the students, then are they teaching the right ones? Bess's example in the article suggests the answer is "no". It is easy to "teach" only the students who don't need to be taught, and pat yourself on the back for your success. The students who sink are a mixture of people who are going to sink no matter what, and people who are only sinking because the teacher isn't giving them what they need. The students who swim are a mixture of people who have the right background to take advantage of what is being taught, and people who already know enough to not need to be taught (either by knowing the material already, or by being far enough along to pick it up along the way when working on the next step). It sounds like professors today only care about swimmers, not sinkers. They would produce more value by ignoring some of the swimmers and paying attention to some of the sinkers. (Not saying this is possible within the current system, just that it would be better.) If your goal is to fill up a bucket, you will fail if either the bucket has a hole in it, or if it's already full.
- rcxdude 3y ago
- seattle_spring 3y agoMy university taught all of this stuff in CS101, and it was reinforced throughout the curriculum.
- locococo 3y agoCounter point. My CS program had a class specifically for low level programming that required massive amounts of debugging C code using GDB. That same program also required students to take an OS class in C where the knowledge from the low level programming class came in very handy. For higher level languages I don't think much of an introduction is warranted since it's just using tools provided to you by the IDE and should be left to the students to figure out.
- aaron695 3y agoYou have to read Dan Luu's post to understand the meaning of "debugging" - https://danluu.com/teach-debugging/ https://danluu.com/teach-debugging/ Everyone learns software debugging in high school (If you do programming) and university, I'm not sure why people are agreeing with the premise with this mistaken definition. I don't agree with Dan Luu, he seems to wave his hands and say it should be taught, but that's exactly what happened to him, that is traditional university, I'm not exactly sure how you'd learn it otherwise. His comment re systematic debugging - "It takes, at most, half an hour to teach the absolute basics" is somewhat embarrassing. Then he moves onto "fundamental skills" which is a different topic.
- eschatology 3y agoI really think you misunderstood what he wrote > ...he seems to wave his hands and say it should be taught, but that's exactly what happened to him, that is traditional university That's not true; he did experience the traditional university, but that's really not what he said how it should be taught > I'm not exactly sure how you'd learn it otherwise. By teaching differently (what he calls systematic debugging): figure out why students fail to grasp a concept, and fill in whatever gap of knowledge is causing it. Teach how to self-perform this process. Instead of throwing in the towel and say they won't hack their way through the rest of the course i.e. the traditional university way.
- headofcs 3y agoEx teacher here. This was a common complain from other university departments. We did not include debugging in the curricula, instead we taught debugging when a student got lost in their own code. Experience showed that was the moment they grok it the easiest. When they had their own code, their own baffling test case, and suddenly a new tool made it transparently easy to fix. They loved it immediately. When we tried differently, the times we used to taught debugging in the whiteboard , it was a mess. Debugging requires carrying a lot of context line by line. Having 80 eyeballs watching the same debugging exercise, made the bug shallow and stole the aha experience from individual students.
- ozim 3y agoThat comment right here is spot on. It is the same like driving a car - you cannot teach someone driving a car by having a lecture, you also cannot teach someone driving a car when all they need is train line and they are happy with it. Most of the discussion about "people not fit for the job" is mostly about if a person has real interest in topic to grind through and find their way around the topic. I find people who are not interested in computers who suck at using them, but a lot of times it is only that they are not interested while having to use it for some things. All people that put effort and are interested get by quite well.
- kiba 3y agoThe comment actually demonstrate desirable difficulty, not the fact that you can't teach someone. The way they taught debugging is flawed.
- ozim 3y agoFor me "demonstrate desirable difficulty" seems like "can't teach in a class setting" which in context of "why don't schools teach debugging" seems like "can't teach someone". You most likely can teach someone in 1on1 setting and it would be easy to setup something to work together but that won't work at school. Even when we had laboratories at university there was not enough time to get everyone through laboratory exercise in smaller group than a lecture.
- jackcosgrove 3y agoIt's been said here before, but university CS programs tend to expect the most crystallized knowledge of incoming students of any program. I did not code in my free time in high school nor did I have formal CS education in high school, and I always felt that my university CS courses weren't designed for me. They were designed primarily for the student who self-taught during high school. As to why this is, I think it's the path of least resistance for the teaching staff and it seems to work so why change it?
- wharvle 3y agoThey expect the kind of incoming skill an arts program does. Music or what have you. But they don’t filter applicants the same way, which is kinda weird.
- AlexAndScripts 3y agoThat's interesting. As someone who does a lot of programming in my free time and does (hopelessly simplistic) compsci at school, I'm avoiding CS degrees precisely because they assume you know nothing and move slowly. My info for this is the course structure and talking to current students. I'm in the UK. When and where was this? Perhaps they have changed over time.
- jackcosgrove 3y agoThis was in the early 2000s in the US. I wouldn't be surprised if the programs have become more accessible over the years. CS was still pretty niche when I was taking the classes.
- danesparza 3y agoThe hard truth is: Some teacher's don't know the material (and surrounding skills) as well as they should. They are embarrassed to have students inadvertently point this out with questions and would rather have that embarrassing "problem" just "go away" instead of learn to be a better teacher. I say this as the son of two teachers who enjoyed their craft. Boy did I hear a lot of stories growing up ...
- xkfm 3y agoI have found that many things are learnable, but they have to be taught in a way that you can understand. Most teachers only know one or two ways to explain something. Additionally, they just don't have the time to tailor materials to people. I get really skeptical when people say they can't learn things or have trouble with something. People start acting like you need to be a genius to understand how a comma works or know algebra. I would feel bad as a teacher if I could not explain to an 18 year old how a comma works. Its not that the student is bad, the teacher is bad. The more time I have spent trying to teach things to people, I think its mostly a failure of the teacher to be able to explain things in a way that people can understand. You listen to them explain what they are having trouble with, and it seems like they just had bad/incomplete information which makes the process 10x harder. Many people are only really going to learn things if you explain it in X terms, where X is something they really like and think about all the time. Edit: I see complaining about dumb/bad students like comedians complaining that the crowd is bad and does not like their jokes. Maybe you just need better jokes, because there are comedians that can get that crowd to laugh.
- eschatology 3y agoGreat title; really exposes who didn't even bother reading and just goes straight out typing words If you're wondering: the article (and the original article by Dan) is not talking about software debugging tools or techniques. Not at all. (Systematic) Debugging here is used in a loose meaning: the process of (re)reviewing information at hand and finding gaps and errors in your understanding — "to start at the symptom of a problem and trace backwards to find the source"
- filleduchaos 3y agoYeah, I thought it was a very clear and though-provoking article about many academics' inability/unwillingness to teach, and then the comments were all just people talking about literal debuggers.
- tkgally 3y ago> My O-chem professor … told me to quit when I didn’t just understand it immediately… He wanted to appear helpful, but then acted resentful when I asked questions, “wasting his time” … Stories like that really leap out at me these days. For the past few months, I’ve been experimenting with learning through interaction with GPT-4. While some subjects work better than others and GPT-4’s lack of personality can make the lessons a bit dry, it never gets annoyed at my questions or belittles my ignorance. I suspect more and more people will find that they prefer learning from chatbots to being taught by humans. (Later) As one example of how I have been learning from GPT-4, below is a conversation I have had with it over the past few days: https://gally.net/temp/20241017exchangewithGPT-4.pdf https://gally.net/temp/20241017exchangewithGPT-4.pdf
- mschuster91 3y agoThe core problem I think seems to be time. Everyone lower than C-level is packed full with work, no matter if in academia, government or the private sector. So, when someone comes to me with an issue and shows they have done at least done the basic legwork, I'll be more likely to help them out than someone who just says "xyz doesn't work" but has done zero work on their own to troubleshoot it, because I don't have time to guide some junior on utterly basic stuff - and that is why so many job postings say "x years of experience" required: the existing staff is drowning and can't handle the enormous workload of training juniors. Obviously that has negative mid- to long-term consequences as when no juniors get trained you'll eventually run out of seniors, but I have no idea how to get this fixed, especially not on a societal level.
- pratnala 3y agoWhat makes you think that the C-level is not packed with work?
- __MatrixMan__ 3y agoI've been doing the same. Sometimes chatting with with bot gives me something I can confirm and the process feels like I'm learning more than I would had I been reading the textbook. Sometimes the bot can't help, but by the time I come to that conclusion I'm now familiar enough to ask the professor in a way that doesn't feel like a waste of his time. Your O-chem professor sounds like a jerk, but there probably is some merit, in general, to the idea that we can maximize the efficacy of teachers by thinking a bit harder about the questions first.
- jp57 3y agoI'm not sure that all the examples in the article really demonstrate the same thing. Debugging is not the same thing as knowing the rules for how to use commas. Students who are behind on basic punctuation and grammar can be put in remedial classes -- and often are, that's what happened at my university. But debugging seems very different. The condition of "I wrote a program, but it doesn't work and I don't know why," and I don't know if teaching a set of debugging skills or techniques will help a student who can't even form a hypothesis of why their program is broken. The bigger question is about the teaching of fundamentals generally. Of course schools should teach them, but it is fair for classes to have prerequisites and to expect students to have met them on arrival to a class. It is unfair to the students who have done the work to slow down the class for stragglers who haven't met the prerequisites. Those skills should be taught in a different class that the students take first. As for the chem professor who didn't want to help the student during office hours, he sounds like a professor who doesn't really like to teach. This is an endemic problem of major research universities that is probably really at the heart of the main question of the article, but which won't be solved by structural changes to curricula, but rather by changes to the incentive structure of university faculty. Professors at major research universities (in the US, at least) aren't incented to teach well, nor are they selected for their teaching ability. (They are incented to get good student feedback evaluations, but that's hardly the same thing.)
- PH95VuimJjqBqy 3y agoI didn't read through the entire article, but I disagree with the overall premise. I remember being in college courses where the entire class would come to a standstill because 1 or 2 individuals just didn't get it. I can't count how many hours were wasted not getting into new material because of this issue, I would have much preferred the professor ask them to self-study and/or take advantage of the professor's office hours. This is a case of "who do you harm?". The ones who aren't getting it or the ones who are but are forced to wait? If you can't self-study then perhaps you should fail out. I myself had hearing problems while in college, couldn't hear the professor talking while in class. I still graduated with a double major in CS and Math because I passed all the coursework despite not being able to hear the professor speak (and this did cause problems for me on occassion when professors would call on me). Having said all of that, I do have some sympathy. I once (late 90's) asked a professor why they didn't teach us many of the skills I was picking up on my own outside of class. His response is that they only have so much time so they must be directed in what they teach and therefore they strive to give a base of knowledge so that you can learn on your own. OTOH, I once walked into a math class I had been basically skipping for a while only to have the professor out and he gave a group assignment for everyone to work on. I ended up having to argue with _everyone_ in that class (this despite me barely attending) that they're wrong. At one point one of the students claimed what they were doing is how the professor taught them to do it, I told them there's no way the professor taught them to do it that way since that's wrong. I ended up being right. At some point people have to be there to learn, not to be spoon-fed knowledge.
- kayodelycaon 3y agoUnfortunately, this doesn’t stop at school. Half of my work meetings feel like this. :(
- filleduchaos 3y ago> I didn't read through the entire article, but I disagree with the overall premise. Actually reading through the article would probably have helped, considering that the author lays out that [part of] the problem is with professors refusing to help and/or denigrating students for needing help during office hours.
- NoZebra120vClip 3y agoFrom my perspective in IT tech support, I didn't take any programming/coding classes, but for our CompTIA A+ preparation, we did learn the essential steps of troubleshooting any system. In fact, I prepared a custom presentation to demonstrate such a troubleshooting session as my final project. I thought that this troubleshooting process was indispensable to anyone at a Help Desk or in an IT Support role. Unfortunately, on the front lines you are usually not able to choose a course of action, but you must stick to a script. That is why Tech Support gets such a bad reputation for asking people to turn it off and back on again, to clear their cookies and cache, and other stupid busywork, because the Support rep needs to recite the script and follow it slavishly, rather than following an actual troubleshooting process, which takes intelligence, a lot of discernment, and usually a lot of cooperation from the user.
- ckemere 3y agoAs a professor, I appreciated this article; the poignancy from the ending reminded me to reflect on how I choose to spend my time. I think the one nuance that’s missing is the concept of “prerequisites”. Most courses at a university have them - other courses or concepts that are expected to be understood before the current material. While I completely agree that it’s almost always a good idea to review the prerequisites, there is a dark underbelly that goes unmentioned here. I don’t know if this is just more prevalent at a smaller university, but I’ll occasionally encounter students in my (graduate level) machine learning class who are excited and passionate to learn the material, but who’ve chosen to forgo taking the two or three prerequisite courses. (Note that this is often undergrads who can’t fit the sequence into their schedule, rather than because of simple arrogance.) In these cases students often would like to spend a lot of my time outside of class learning the material they were supposed to know already. While that is a more efficient way for them to learn the material better, it takes time that I need to allocate to other things. (After all, it’s well known that 1-1 tutoring is the most successful form of teaching!) So usually at the beginning of class I’ll threaten and harangue to try to convince them not to do this.
- farhanhubble 3y agoI remember a lesson from a literature course titled "How I Learnt to Swim". The author had read books and watched the experts and got tips from them but until he floated in the water he had not even begun to learn swimming. This is the issue with academia too. Too much of the stuff be it electronics, theory of computation, algorithms or software engineering is taught before most learners had even had a taste of programming. No wonder very learn much from school.
- __MatrixMan__ 3y agoDebugging is a computer science fundamental in the same way that grinding lenses is an astronomy fundamental: it's really not. I did learn debugging in school. I came to learn Computer Science and a left with a head full of Software Engineering instead. I wonder if I find one of these schools which doesn't teach debugging if they'll actually teach me some Computer Science.
- sanderjd 3y agoMost students at universities are not there to study computer science, they are there to study software engineering. A relatively small number of people are there to study academic computer science, and that's great too, it's just not the predominant interest. It's also good for the software engineering focused folks to learn some computer science and vice versa, but it's weird to focus on preparing people for a career in academic computer science research when their goal is to work at Facebook or whatever. This is not new. Mechanical engineers learn a bunch of physics, but their courses prepare them for a career as a mechanical engineer, not a career doing academic research into physics.
- __MatrixMan__ 3y agoYes but those students are enrolled in a program called "mechanical engineering" so it makes sense that it would be the focus and not physics. I'm not sure how to encourage this change, but if we want educators to take software engineering seriously then I think we ought to disentangle it from computer science.
- sanderjd 3y agoYep, this is a very fair point. My opinion is really, "we're doing this all wrong", but I also don't have any idea how to redirect the ship. My university had the CS program under the engineering department, and I think it served me very well as someone planning on a career building software, but I doubt it served the people hoping to do actual computer science research nearly as well. And I doubt they would have known that when they signed up for the program. It was called "computer science", after all, so to your point, it seems reasonable to assume that's what it would prepare one for.
- sanderjd 3y agoYep, as the article notes, the reason for this is simple: Universities don't employ teachers, they employ academics. Professors are pretty much universally researchers, not teachers. Teachers know all these things, that if most people in the class don't know how to use commas, you teach them that, or if they don't know how to debug, you teach them that. Teachers don't tell students to quit a subject because they don't know all its fundamentals already, they are there to teach. But academics aren't there to teach, they are there to find new academics to work with. And certainly it's a quicker and easier path for that goal, to focus their time on students who already know everything. But the article is spot that this is a bad thing and is a major hindrance to our society's ability to educate people. And it's also a hindrance to our ability to do research! To a person, all my professor friends hate teaching undergraduate courses, both because they know they are bad at it (they aren't teachers!) and because it is a huge distraction from their research (which is their actual profession!). Most undergraduate courses, certainly for the first couple years, should be taught by people trained as educators, who also have advanced knowledge of the fundamentals of the subject they are teaching (which is generally not true of high school teachers, for instance). By the graduate level, most time should be spent on learning how to contribute to real academic research in the field, and professors are the right partner for that, for sure. The last couple years of undergrad should be a mix of these two, maybe by flipping the professor / teaching assistant relationship to instead have a primary teacher with a professor assistant. Teaching material more advanced than the high school level is an important niche that we do an awful job of.
- pjmlp 3y agoDepends on the quality of the university, I surely had it as part of my software engineering degree, not that deep, but enough.
- paxys 3y agoIn my first CS class at university the professor started with "We are not going to teach you programming. You can do it on your own time. This program is called computer science, and that's what it will cover." It was a bit harsh at the time, but over the next semester or two plenty of students switched majors when they couldn't keep up with graph theory, combinatorics, linear algebra, advanced algorithms, computer architecture, compilers. Too many people are enrolling in CS programs these days because they want a quick ticket to a cushy tech job, and I'm happy that's not what reputed programs are catering to. Funny enough there were a few classes on debugging, but it wasn't about the process of finding bugs in code but rather "here's the GNU debugger, crack it open and figure out what's going on inside". I also don't understand how one can even "teach" debugging like the author envisions. It's like saying why don't schools teach problem solving or why don't schools teach intelligence. If students are getting regular non-trivial programming assignments they have no choice but to develop the skill themselves.
- Swizec 3y ago> In my first CS class at university the professor started with "We are not going to teach you programming. You can do it on your own time. This program is called computer science, and that's what it will cover." That was my school. Because of the education system in Slovenia, we even looked down on software engineering a little. Engineering was the vocational college. We were a university program thankyouverymuch. In reality, our program took 7.5 years to complete on average because people got jobs in industry and forgot to graduate. BUT we did have 2 programming classes in the first year. It was considered necessary to give everyone an even playing field so they could do the tutorials. Those were heavy on “You learned all this theory, now put it to work”. We implemented programs in ARM assembler, various graph algorithms, numerical computation methods, stuff like that. Just writing lots of code also taught you debugging. Many classes evaluated homework and even exams by running your code through a test suite. Your grade was percentage of tests passed. And then there was the compilers class. Holy shit do you learn a lot about debugging when you’re fixing your code and your compiler at the same time. That was fun.
- viraptor 3y agoThere's still a mix of "cs courses aren't up-front about not being about programming" and "programming courses are not advertised enough". I totally agree with the approach and the split, but... often it looks like people are set up for failure. I've definitely seen that happen during my time at uni. There's a lot left to fix at the system level.
- glitchc 3y agoThe answer is no. What you propose is teaching to the lowest common denominator, which is precisely what happens in the public (grade) school system in America, and is also precisely why our high school students are falling behind their global contemporaries. A bachelor's in computer engineering indicates a certain minimum bar of proficiency. Those who cannot meet the bar will not earn the degree. A typical semester has twelve weeks of instruction, three hours per week. Spending time on remedial algebra comes at the cost of not covering a relevant curriculum topic. If each course did this, engineers would graduate with major gaps in knowledge. This is why catering to the lowest common denominator can only lower the bar, and would result in engineers that can't problem-solve their way out of a paper bag, let alone compete globally.
- zozbot234 3y agoThere is a difference between teaching to the lowest common denominator and teaching for mastery. The latter requires making students aware of where their gaps are, even if they must address them on their own for time scheduling reasons. You don't have to spend hours on covering remedial algebra, but you can spend a few seconds reminding students that fluency with algebra is a prereq for the course, and they can't expect to pass unless they address that promptly.
- kiba 3y agoYou could have separate remedial classes for these students if they don't already exists.
- glitchc 3y agoYup, and many universities, recognizing the gaps in public education, already do. But they are extra courses that one has to take in addition to the degree requirements. They make it the student's problem, not theirs, which is indeed how it should be. A university isn't a place that trains a person. That's what colleges and vocational schools are for. Rather, a university is a place where resources are made available so that a person can learn for themselves.
- joshka 3y agoLearning unit testing as one of the first things to start with, and then having that always be a part of every future programming class would be something I'd choose.
- BurningFrog 3y agoPutting the "why" aside, debugging is an important skill that is not taught in school. What kind of startup could fill that need and become a sustainable business?
- schneems 3y agoThe sentiment from most of the replies, that others have to learn the way you did and that there’s not an accelerated way to learn a topic through explicit practice is deeply exhausting. Will people learn on their own? Yes. Is there a better or faster way possible? Hopefully.
- bob1029 3y agoIt's a cursed problem. As mentioned elsewhere, immersion in the actual problem domain is the only way you can deeply learn certain things. You can create synthetic problems for students to solve all day, but these won't move the needle on many of the fundamentals. Most of my debugging expertise came out of working at Samsung's semiconductor plant as a systems engineer for a few years. Nothing else I experienced comes close in terms of rate of learning. By week 4 they have most of the novice assumptions beaten out of you. It is like a vocational program for engineers that does exactly what the author of this article is looking for. The skills I learned there I use literally every day - root cause analysis, asking why a bunch of times, suppressing my urge to jump on a simple answer, coordinating issues between multiple teams & vendors, etc.
- 6R1M0R4CL3 3y agoi guess they want to teach you generic skills you can use everywhere. then you select a few langages, write programs with those and learn the debugging tools that come with each (considering those debuggers as tools specific to each langage - implementation details) ?
- TehShrike 3y agoA surprising number of responses here seem to be arguing that universities aren't intended to educate, they are intended to provide a series of tests or challenges to prove an education. I agree with Jake Seliger, I think universities would be more useful if they were trying to optimize for education.
- edward28 3y agoBut then they wouldn't be able to make as much money.
- ben7799 3y agoI think this is probably dependent on the college/university in question and is not necessarily universal. The author is right to think it's a problem, and I think many of the examples show weaknesses in those professors or departments. Debugging strikes me as a much more complicated skill and process than using commas or many other writing skills. Using commas is largely memorizing and internalizing the rules. They are much simpler than debugging, and fixing comma usage in prose is a one person job, it does not necessarily require multiple people brainstorming like debugging can. I went to Rensselaer, our CS department was more closely aligned with the Math department, unlike some schools where CS is more closely aligned with the engineering school and the Computer Systems or EE programs. So we did have a very high load of required theory classes where practice like debugging was not relevant. But we had a parallel track of required classes which were much more hands on along with a track of elective courses, and there was ample opportunity in those classes for learning debugging. We were often in a lab sitting at the computer working on assignments with the professor + grad students circulating helping with problems, and this is where hands on debugging was taught. I suppose I am not a good example though either. I'm basically a second generation software engineer. I got my first lessons in debugging with my father when I was 10 years old and I had made errors typing BASIC program listings in from books or magazines I'd grabbed at the library. So I had a solid 8 years of struggling with debugging before I ever got to college. My debugging skills were tested because in a lot of cases I didn't yet understand important programming concepts needed to solve a problem and I was then trying to solve the problem with a limited set of tools. (E.x. not understanding dynamic memory until I was around 18, so I did lots of things with only static allocation of memory, making some problems much harder.) In any case it became a pleasant and unpleasant skill. I can often debug problems so quickly that managers figure out I might be better to look at a problem than the person who wrote the module that is creating an emergency. I get credit, but I always feel like I'm being punished. I can agree though, this is not something to be taught in a big lecture hall with 100+ students in the class as that certainly would derail the class. It's for smaller breakout sessions where the teacher:student ratio is much smaller. If breakout sessions aren't a thing maybe the program isn't that great.
- oftenwrong 3y agoThis article is not really about debugging, but I would like to add something about debugging, and how the author relates it to programming: I recall one time I helped a relative diagnose and fix a problem with the plumbing at his cottage. My relative was so elated afterward because he enjoyed the evidence gathering, proposing a hypothesis, going down one path of investigation, crossing that off, going down another path, trying experiments, etc. That was all a new experience for him. I didn't want to ruin his excitement by saying what I was thinking: that it was exactly the same debugging I have done all day at work nearly every day for years, and so I did not share his excitement, although I always enjoy a good debugging session. This is all to say that I don't think debugging should be seen as exclusively a programming skill. It's a general skill that can be applied to certain types of problem solving. I probably learned it initially by playing with toys like train sets and wooden blocks. Later, I would use it when repairing things around the home. The schools I attended never attempted to teach debugging. My parents never knew how to debug. I think it is a useful skill for any person to know, but maybe I am biased. If we wanted to, we could teach children how to do it with physical mechanisms, and it would probably be intuitive, and maybe even fun.
- igouy 3y ago"Coding in the Debugger" KENT BECK 2007 https://tidyfirst.substack.com/p/coding-in-the-debugger https://tidyfirst.substack.com/p/coding-in-the-debugger
- slowmovintarget 3y agoTeaching how to debug is craft. Teaching how debuggers work can be science (human computer interaction, abstraction, state machines...). Teaching craft is vocational training. Teaching science is university-level stuff. When I hire developers fresh from univeristy, I hope they have a solid foundation in how things work. I want them to know the science. I'll train them on craft.
- johnea 3y agoUS public schools are still teaching that the digit 0 comes after 9. Why? Because that's what the teachers were taught...