Schools 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.
- 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".
> 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.
Gatekeeping 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.
The 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?
To 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.
> Gatekeeping means limiting access to something. I never said that we should forbid kids from learning programming.
Not giving people the training that is required to be a good programmer is gatekeeping.
Not having a mandatory programming course is gatekeeping. It prevents people who don't have exposure to programming outside of school from even contemplating that career, mostly people already disadvantaged.
I 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 ;-)
Programming 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.
Smalltalk 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)
Perhaps you don't know that 50 years ago Smalltalk was being taught to middle school and high school students?
> Nothing so simple exists in smalltalk
Have you actually used Smalltalk?
----
`I will always remember a debug emergency call I received during one of our student classes. A girl was experimenting with numbers in Smalltalk-80, and suddenly her system froze when she tried to reframe a window. Although the UI was unresponsive, the "emergency evaluator" window was still operating so I was able to take a look at what had happened. Her window was trying to display itself, but was encountering an error because BitBlt, responsible for painting the border, had a width that was. . . wait a minute. . . a Fraction? We did not even have fractions in the student system, but she said, "Oh yes, I added a Fraction class".
Interestingly, BitBlt was written to be resilient, in that if it received a non-integer argument, it would call itself again after sending the message asInteger to that argument. However, her fractions did not have such a method, so the debugger had stopped at that point and was not even able to show the problem because of another such infraction (er, sorry). I asked whether she had a conversion to integer and she replied no, but that her fractions did have a makeFloat message. We talked about the problem, and I got her to suggest defining
We were able to type this into the emergency evaluator, at which point the debugger miraculously displayed itself, the window she had tried to reframe reappeared, and everything in the system seemed to work again. Probably hundreds of methods in the system were now operating just fine with rectangles whose coordinates were instances of a student’s newly defined Fraction class. This illustrates the astounding ability of message-sending systems to absorb unanticipated constructions.`
Daniel Ingalls "The Evolution of Smalltalk" 85:63
Proc. ACM Program. Lang., Vol. 4, No. HOPL, Article 85. Publication date: June 2020
I don't think "smalltalk was taught 50 years ago" is a good argument. When I was a kid we used MSX machines with no storage.. your program would be just gone at the end of the lesson (or if you messed your POKE's). If you wanted to save, you copied code to your notebook. Were we able to get things done as middle-school students? Yes. Would I recommend this environment to anyone else today? No.
And yes, I get this, if you have on-call expert for student classes (preferably principal architect of the system), then you can use Smalltalk. But I've never seen "on-call experts" at any time during the university... the closest thing is sometimes there are TAs during labs, but those TAs are just slightly older students.
What would that girl do if Daniel were not around? Would she have to reset the environment and lose all of her work?
(For comparison, later on we got PCs with MS-DOS. I've crashed those machines so many times with all sorts of crazy or stupid code.. and I never needed anyone's assistance to recover - hit RESET, wait for machine to reboot, reopen your files..)
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.
Nitpick: Epstein's book is called "Range: _Why_ Generalists Triumph in a Specialized World", not "Range: How Generalists Triumph in a Specialized World"
I 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.
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.
If I'm hiring a stranger for my company it's nice to have an esteemed institution willing to officially vouch for them having some baseline of knowledge in the field.
While there are always exceptions, the esteemed institutions in question are generally not willing to vouch for some baseline vocational knowledge in the field. In fact, that's what the entire discussion is about, with debugging being a prime example of baseline knowledge they are often not willing to vouch for. Their esteem does not stem from that sort of offer.
No doubt you keep on top of who are the exceptions, and ensure they stay that way on a continual basis, however that is going to be way more work in the end. More power to you if that's what enthrals you, but that's not work I would consider "nice". That sounds like drudgery to me...
...and most everyone else it seems. Indeed, there was those couple of years there where this notion of yours made it into the mainstream, but it disappeared as quickly as it came.
I'm not saying universities are perfect. I'm just saying a university education is useful, or at least that it was to me and I think it will be to anyone who puts effort into it.
I have actually remarked to colleagues about this exact topic, I think it's strange that debugging was a topic I had to learn on my own and teach to struggling students when I was a TA.
The flip side of that is that debugging is easy. It is definitely a skill that you can develop over time but learning the basics and getting started debugging your code is something you can do in less than an hour.
This is a minor criticism, not a justification for declaring universities useless. I learned tons of other useful stuff. I learned multiple programming languages, math, DSA, databases, networking, all kinds of things I use on a frequent basis.
Whenever I hear people say they didn't learn anything useful in university i think that says a lot more about them than it does about the university.
> I'm just saying a university education is useful
Sure. I expect there is no activity you can do in life that isn't useful. But the specific claim was that universities officially vouch for a baseline knowledge for the sake of corporate hiring interest. But the larger discussion is about how universities by and large do not vouch for such things.
And why would they? That is decidedly not the business they are in. In fact, if you found yourself hiring someone out of an esteem institution who still lacks those baseline skills and you tried suing the institution for false representation I expect you would be laughed out of the courts as there is no such promise actually made.
> It is definitely a skill that you can develop over time but learning the basics and getting started debugging your code is something you can do in less than an hour.
Sure. There is no programming-related skill that you can't start with in less than an hour. The only thing that really separates a great developer and a beginner is practice, practice, practice. Same with everything in life, really. You can learn what you need know to play baseball in less than an hour, but it is still a long road to the major leagues.
However, an expectation of baseline knowledge already being present would expect that the hours were already put in. If we accept "it is easy to get started" as good enough, then who cares about the baseline knowledge?
> Whenever I hear people say they didn't learn anything useful in university i think that says a lot more about them than it does about the university.
From my vantage point it says most about neither, but about the one who has not accurately read between the lines. But anyway...
I 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.
Definitely 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.
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.
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.
> 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?
Why 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.
My 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.)
> 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!
There'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.
Reality 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.
I 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.
Universities 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.
In the case of debugging I would say that the academic side would benefit from the teaching of the fundamentals of debugging: this is because debugging at its core is just science, the process of measuring and perturbing a system to understand something about how it works. You can teach someone gdb but if they don't get the fundamentals then they will struggle to actually debug anything
I think you are right when you frame debugging as a scientific process. It really is about observing and measuring while perturbing a system in some way to provoke it to provide you with observation.
But as roenxi points out, academia doesn't see programming as something they are supposed to teach. Academia sees programming as a vocational skill. Something to be learned "on the job" - or done by "other people" (whoever they might be). They see it as their job to, mostly, teach you the math that is needed to model behaviors of software and systems.
I think the closest I ever got to something that was practical was system design/modeling. And as to demonstrate how terrible academia is at keeping itself updated, the methods we learned were, without fail, known to be impractical, outdated and wasteful. Nobody who took that class would ever apply anything they had learned in that class later in life.
Computer science is a bit odd. If you become an architect (the kind that draws houses) it is understood that you are not going to be actually building houses. You will probably never even touch a hammer in any professional capacity. You will work with someone who understands the mechanical bits, building code etc and together you produce a package of instructions that someone else has to realize.
However, if you are a CS grad, it is fairly likely that you will be writing software. Which makes the whole thing a bit absurd. It is as if you expected architects (the house-designing kind) to build houses, but never even give them any training in how to nail two planks together.
The academia teaches practical programming. The CS department usually doesn't, as it's not their job.
You can see the same situation with the mathematics department. They teach mathematics, not doing calculations. If another department has a need for more practical mathematical skills (physics is the usual example), they often teach their own classes.
Like many other biases in the academia, this is mostly a matter of self-selection. If you want a career in software, the industry is clearly the better option. If you want a career specifically in CS, there are not that many good alternatives to the academia. Which means that CS departments are populated by people with no particular interest in software.
> Which means that CS departments are populated by people with no particular interest in software.
This is bunk, from my experience at UC Berkeley (PhD) - the professors I knew/worked with loved to program. One explained to me that teaching+research+academic duties left no time for programming on campus, so he spent another 40 hours a week programming at home.
Your experience supports the statement. If the professors you knew had a particular interest in software, they would turn their work focus towards that, not focusing on teaching, research, and other academic duties that are at odds with software.
They prioritize the latter as those are in line with their particular interest. Software is just a sideline, just like I'm sure most of us here have some kind of other interest that we partake in at home.
I see. So anyone flipping burgers at McDonald's must have a passionate interest in and life goal to be flipping burgers. Otherwise, why would they spend so much time on it?
If I understand your argument correctly, you're saying that if someone in practice spends their time doing X and not Y, then they cannot actually be more interested in Y. I believe this flies in the face of human experience.
If you love software, there are a limited number of careers that involve writing software. If you do not have the privilege of a large trust fund, you're looking at industry or academia. Neither tends to involve just sitting in a room and coding all day. (Those situations that do probably won't satisfy a post-teenaged love of software.) Especially if you have a more academic love of software, academia is not a stupid option, even though you realize that your time is going to be filled with a lot of non-programming duties. Yes, you would probably spend more of your time programming if you got a corporate programming job, but loving software does not mean automatically loving any situation where you are typing code into an editor.
This doesn't fit with my experience. Most (90+%) of the developers I've worked with have a CS degree. Those who didn't mostly had math, physics or chemistry degrees. A small minority have no degree at all.
This strikes me as so odd. My CS degree had tons of practical classes but it was all application of things you learned because, being quasi vocational, the best way to learn to program is by doing so the learning to program portion of the degree were the assignments to the classes. We had loads; your standard welcome to Java course, the second level where we had some of the early Google Nexus phones and experimented with building little apps [0], then a whole class on development methodologies which had a lab/group project portion where we were adding to a little digital health document system that was actually passed from class to class taking the best version(s) from each semester and adding to it on the next, and at the end a Senior capstone project. Each semester generally had at least one largely practical class.
> It is as if you expected architects (the house-designing kind) to build houses, but never even give them any training in how to nail two planks together.
Well architects don't build houses, they design them. The learning of computer programming is best to learn by doing after an introduction to the basics of some language. I have a hard time believing programs just fail to mention the existence of debuggers over the entirety of their program. There's a lot of the programs that expect you to figure out the precise tools you want to use for yourself.
[0] The core assignment of this actually kind of failed because it was flawed from the beginning but it was still quite useful. We were supposed to build a lock screen that "locked" the phone when we went above a configurable speed. The main issue was the GPS data available to the apps in that early version of Android was very spotty.
Maybe universities would benefit from a formal programing lab discipline, like they have for physics and chemistry. One where you document what you are going to do, go into the lab and do it, and document what you concluded from it.
And yeah, finding bugs on code that was already there when you came can be an exercise.
Or just require CS students to take at least one lab science course. I started in the engineering program and switched to CS, but by then had already taken lab-based chemistry and physics. Those courses taught me more about “debugging” than any dedicated engineering or computer science course I took (and I did take the software engineering courses that were offered). In fact, at a reception dinner during graduation week I was seated at the same table as one of the deans, who asked if I had any recommendations for improving the program. I said that they should require students to take physics and he was shocked - what would that do for students??? I explained my reasoning and he understood what I was getting at. But I don’t believe they ever acted on my suggestion.
There isn't a single fine arts program in the world that will teach you how to draw lines on a piece of paper. If that isn't something you have figured out how to do in the first 18 years of your life, you probably shouldn't be pursuing it at university.
The people who control the syllabus? The research staff? Adminsitrators?
Take your pick. Universities teaching academic skills is not some novel innovation, these are traditions that have been ongoing for centuries. If they were interested in practical skills, entire departments would be removed immediately.
> [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.
Counter 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.
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.
> ...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.
Ex 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.
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.
For 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.
This is very true. The whiteboard portions of the practical programming classes were among the most boring when I was going through school but actually trying to solve a problem myself was quite enjoyable and much better for learning. If I remember right we had a brief introduction to debuggers as a concept for better debugging but we were largely left to our own devices to figure out the features because everyone would need different things from it at different times.
It'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?
That'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.
This 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.
The 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 ...
I 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.
Great 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"
Yeah, 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.
> 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:
The 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.
I'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.
ChatGPT will also teach you important skills of "trust but verify" and "how to detect straight-face lying"
I've experimented with asking GPT-4 technical questions, and the moment you have something moderately complex, you start occasionally getting outright incorrect information (library functions which do not exist, missing correct answers entirely, products of entirely wrong category, descriptions of completely wrong things...)
I'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.)
155 comments
[ 152 ms ] story [ 3756 ms ] threadWhat'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.
Because the demand is very high.
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".
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.
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.
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?
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.
Not giving people the training that is required to be a good programmer is gatekeeping.
Not having a mandatory programming course is gatekeeping. It prevents people who don't have exposure to programming outside of school from even contemplating that career, mostly people already disadvantaged.
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 - a modern Smalltalk
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.
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)
Perhaps you don't know that 50 years ago Smalltalk was being taught to middle school and high school students?
> Nothing so simple exists in smalltalk
Have you actually used Smalltalk?
`I will always remember a debug emergency call I received during one of our student classes. A girl was experimenting with numbers in Smalltalk-80, and suddenly her system froze when she tried to reframe a window. Although the UI was unresponsive, the "emergency evaluator" window was still operating so I was able to take a look at what had happened. Her window was trying to display itself, but was encountering an error because BitBlt, responsible for painting the border, had a width that was. . . wait a minute. . . a Fraction? We did not even have fractions in the student system, but she said, "Oh yes, I added a Fraction class".Interestingly, BitBlt was written to be resilient, in that if it received a non-integer argument, it would call itself again after sending the message asInteger to that argument. However, her fractions did not have such a method, so the debugger had stopped at that point and was not even able to show the problem because of another such infraction (er, sorry). I asked whether she had a conversion to integer and she replied no, but that her fractions did have a makeFloat message. We talked about the problem, and I got her to suggest defining
We were able to type this into the emergency evaluator, at which point the debugger miraculously displayed itself, the window she had tried to reframe reappeared, and everything in the system seemed to work again. Probably hundreds of methods in the system were now operating just fine with rectangles whose coordinates were instances of a student’s newly defined Fraction class. This illustrates the astounding ability of message-sending systems to absorb unanticipated constructions.`Daniel Ingalls "The Evolution of Smalltalk" 85:63
Proc. ACM Program. Lang., Vol. 4, No. HOPL, Article 85. Publication date: June 2020
https://dl.acm.org/doi/pdf/10.1145/3386335
And yes, I get this, if you have on-call expert for student classes (preferably principal architect of the system), then you can use Smalltalk. But I've never seen "on-call experts" at any time during the university... the closest thing is sometimes there are TAs during labs, but those TAs are just slightly older students.
What would that girl do if Daniel were not around? Would she have to reset the environment and lose all of her work?
(For comparison, later on we got PCs with MS-DOS. I've crashed those machines so many times with all sorts of crazy or stupid code.. and I never needed anyone's assistance to recover - hit RESET, wait for machine to reboot, reopen your files..)
> Would she have to reset the environment and lose all of her work?
Why would she lose her work?
https://cuis-smalltalk.github.io/TheCuisBook/The-Change-Log....
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.
Still my favorite class and professor from my time at school.
[0]: https://a.co/d/g0y80gW
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...
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.
Are you apt to forget that you put time into it?
No doubt you keep on top of who are the exceptions, and ensure they stay that way on a continual basis, however that is going to be way more work in the end. More power to you if that's what enthrals you, but that's not work I would consider "nice". That sounds like drudgery to me...
...and most everyone else it seems. Indeed, there was those couple of years there where this notion of yours made it into the mainstream, but it disappeared as quickly as it came.
I have actually remarked to colleagues about this exact topic, I think it's strange that debugging was a topic I had to learn on my own and teach to struggling students when I was a TA.
The flip side of that is that debugging is easy. It is definitely a skill that you can develop over time but learning the basics and getting started debugging your code is something you can do in less than an hour.
This is a minor criticism, not a justification for declaring universities useless. I learned tons of other useful stuff. I learned multiple programming languages, math, DSA, databases, networking, all kinds of things I use on a frequent basis.
Whenever I hear people say they didn't learn anything useful in university i think that says a lot more about them than it does about the university.
Sure. I expect there is no activity you can do in life that isn't useful. But the specific claim was that universities officially vouch for a baseline knowledge for the sake of corporate hiring interest. But the larger discussion is about how universities by and large do not vouch for such things.
And why would they? That is decidedly not the business they are in. In fact, if you found yourself hiring someone out of an esteem institution who still lacks those baseline skills and you tried suing the institution for false representation I expect you would be laughed out of the courts as there is no such promise actually made.
> It is definitely a skill that you can develop over time but learning the basics and getting started debugging your code is something you can do in less than an hour.
Sure. There is no programming-related skill that you can't start with in less than an hour. The only thing that really separates a great developer and a beginner is practice, practice, practice. Same with everything in life, really. You can learn what you need know to play baseball in less than an hour, but it is still a long road to the major leagues.
However, an expectation of baseline knowledge already being present would expect that the hours were already put in. If we accept "it is easy to get started" as good enough, then who cares about the baseline knowledge?
> Whenever I hear people say they didn't learn anything useful in university i think that says a lot more about them than it does about the university.
From my vantage point it says most about neither, but about the one who has not accurately read between the lines. But anyway...
For example consider the following:
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.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.
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.
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?
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.
- 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
> 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!
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.
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.
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.
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-ce...
But as roenxi points out, academia doesn't see programming as something they are supposed to teach. Academia sees programming as a vocational skill. Something to be learned "on the job" - or done by "other people" (whoever they might be). They see it as their job to, mostly, teach you the math that is needed to model behaviors of software and systems.
I think the closest I ever got to something that was practical was system design/modeling. And as to demonstrate how terrible academia is at keeping itself updated, the methods we learned were, without fail, known to be impractical, outdated and wasteful. Nobody who took that class would ever apply anything they had learned in that class later in life.
Computer science is a bit odd. If you become an architect (the kind that draws houses) it is understood that you are not going to be actually building houses. You will probably never even touch a hammer in any professional capacity. You will work with someone who understands the mechanical bits, building code etc and together you produce a package of instructions that someone else has to realize.
However, if you are a CS grad, it is fairly likely that you will be writing software. Which makes the whole thing a bit absurd. It is as if you expected architects (the house-designing kind) to build houses, but never even give them any training in how to nail two planks together.
You can see the same situation with the mathematics department. They teach mathematics, not doing calculations. If another department has a need for more practical mathematical skills (physics is the usual example), they often teach their own classes.
Like many other biases in the academia, this is mostly a matter of self-selection. If you want a career in software, the industry is clearly the better option. If you want a career specifically in CS, there are not that many good alternatives to the academia. Which means that CS departments are populated by people with no particular interest in software.
This is bunk, from my experience at UC Berkeley (PhD) - the professors I knew/worked with loved to program. One explained to me that teaching+research+academic duties left no time for programming on campus, so he spent another 40 hours a week programming at home.
They prioritize the latter as those are in line with their particular interest. Software is just a sideline, just like I'm sure most of us here have some kind of other interest that we partake in at home.
If I understand your argument correctly, you're saying that if someone in practice spends their time doing X and not Y, then they cannot actually be more interested in Y. I believe this flies in the face of human experience.
If you love software, there are a limited number of careers that involve writing software. If you do not have the privilege of a large trust fund, you're looking at industry or academia. Neither tends to involve just sitting in a room and coding all day. (Those situations that do probably won't satisfy a post-teenaged love of software.) Especially if you have a more academic love of software, academia is not a stupid option, even though you realize that your time is going to be filled with a lot of non-programming duties. Yes, you would probably spend more of your time programming if you got a corporate programming job, but loving software does not mean automatically loving any situation where you are typing code into an editor.
> It is as if you expected architects (the house-designing kind) to build houses, but never even give them any training in how to nail two planks together.
Well architects don't build houses, they design them. The learning of computer programming is best to learn by doing after an introduction to the basics of some language. I have a hard time believing programs just fail to mention the existence of debuggers over the entirety of their program. There's a lot of the programs that expect you to figure out the precise tools you want to use for yourself.
[0] The core assignment of this actually kind of failed because it was flawed from the beginning but it was still quite useful. We were supposed to build a lock screen that "locked" the phone when we went above a configurable speed. The main issue was the GPS data available to the apps in that early version of Android was very spotty.
And yeah, finding bugs on code that was already there when you came can be an exercise.
This was my (limited) experience with (introductory) formal CS.
Which is sort of amazing to me as art schools seem in broad agreement that “how to draw” can be taught, albeit in many different ways.
The passive voice does a lot of rhetorical heavy lifting in this sentence. Who supposes that?
Take your pick. Universities teaching academic skills is not some novel innovation, these are traditions that have been ongoing for centuries. If they were interested in practical skills, entire departments would be removed immediately.
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.
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.
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.
> ...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.
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.
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.
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.
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?
But they don’t filter applicants the same way, which is kinda weird.
When and where was this? Perhaps they have changed over time.
I say this as the son of two teachers who enjoyed their craft. Boy did I hear a lot of stories growing up ...
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.
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"
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
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.
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.
Now we built AI for the cognition, but it will turn out that the patience is almost more important."
You never used a 3D printer or other kind of slow robot, have you?
Computers are infinitely patient and relentless. That has huge implications.
I've experimented with asking GPT-4 technical questions, and the moment you have something moderately complex, you start occasionally getting outright incorrect information (library functions which do not exist, missing correct answers entirely, products of entirely wrong category, descriptions of completely wrong things...)
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.)