6 ms·
As a university lecturer in a non-STEM subject who is currently self-learning both 'hard CS' and the more practical side of development, I have often thought ab
by cehrlich 5y ago
As a university lecturer in a non-STEM subject who is currently self-learning both 'hard CS' and the more practical side of development, I have often thought about what an effective CS curriculum would be, and the thing I keep coming back to is something along the lines of guided self-learning. Nothing is as effective as curiosity, but having someone with broad knowledge and experience in the field can help guide students to not get caught up in dead ends.
In my own academic studies the teachers that were the most valuable to me were ones who nudged me in the right direction, and then mostly stayed out of the way and let my hunger for knowledge and results do its thing. But now I perceive a fundamental shift in higher education, one towards spoon-feeding in order to satisfy a strict curriculum, and I worry strongly that this sort of model is very dishonest and doesn't produce good graduates.
The biggest problem that I see in present-day academia is the bureaucratic desire to quantify and measure things, which might be reasonable if you see universities as trade schools, but is in my opinion doing irreparable damage. I'm sure there are some bad teachers out there, but the bigger problem I see is institutions that prevent good teachers from doing their thing, until only the bad ones remain.
- enriquto 5y ago> something along the lines of guided self-learning. I don't know about the solution of this problem, but giving programming challenges to students (in groups of two) is extremely effective. Ideally, forcing the students to use a different language each time. The evaluation is automatic and both the correctness and the speed of the solution over large inputs need to be evaluated. I've seen groups of otherwise passive and uninterested students spent weekends working really hard on a problem to try to beat the challenge.
- throwaway287391 5y ago> in groups of two I wouldn't doubt there's good research showing pair programming is a great way to learn, but anecdotally/observationally I really have trouble believing it's effective. In my experience, in at least half of pairs there will be one more skilled programmer and one less skilled programmer and the better one does the lion's share (if not all) of the work -- this is doubly true if the partnerships are randomly assigned. Even if the worse one is trying their best to stay engaged and follow along, it's just hard to do if the other person is faster than you, and you might even feel like you're being a bit of a useless nuisance by asking questions when the other person is clearly capable of working on their own. (I've been on both sides of this in different contexts, BTW.) But I imagine my intuition must be wrong since this is such a popular teaching method -- interested to read any research/counterpoints on the subject.
- enriquto 5y agoI only have anecdotal evidence. But in my lab we have tried all combinations (working in groups of n, for n=1 to 4, randomly assigned or not). All setups may fail, for different reasons, but the setup that is consistently less likely to fail is two students that get along well with each other. The case when one of them is more skilled is actually very good, because then they teach the other one. There's often other work to do, like presenting the solution, or writing a short report, and they can share that work as they see fit. As a student, many years ago, I have been in both situations: the more skilled of the group who taught the other, or the less skilled that was taught (and worked really hard because I was ashamed to be a "useless nuisance"). Both experiences have been very positive in my case.
- mkingston 5y agoI was swayed by the argument against working in pairs, then swayed back by your argument in favour of working in pairs. I think the key part that changed my mind was "two students that get along well with each other". I wonder if you emphasise this in your instructions to students? And if so, how?
- enriquto 5y agoWe just let them group themselves. If there's an odd number of students, a group of three is allowed. Every couple of years there's a "bad experience", in which one of the students does all the work, or some kind of conflict. But so far it seems to be a good choice overall (after the deal, the students generally say that it was a happy experience).
- throwaway287391 5y ago> The case when one of them is more skilled is actually very good, because then they teach the other one. Right, I get that that's the theory, it's just that I've never personally seen it work out so well in practice. I can imagine how it's extremely useful and rewarding for both partners if you have two very motivated people, and the better one is keen to teach and even genuinely open to suggestions from the "worse" one, and the "worse" one is keen to learn. That's the model for a good partnership that most people probably have in mind when they propose doing a project like this. I've just never actually seen a partnership work out like that -- it feels like it requires both members of the parternship have top ~quartile motivation/empathy/communication skills (which as you could imagine might end up being pretty rare among randomly selected CS students...). In any case thanks for sharing your experience -- good to know that it actually can/does happen!
- ModernMech 5y ago> the thing I keep coming back to is something along the lines of guided self-learning. As a university lecturer in CS, I agree this would be a great thing for a lot of students. The thing about CS though is a lot of students hear that programming is a path to a high paying job, and they are really not motivated to learn the subject in the way that people who frequent HN might be. They don't want to self-learn, they want to be told what they need to learn to achieve an end-goal of earning a high salary when they graduate in 4 years. If you sit them down and ask them about their curiosity, interests, or ambitions related to CS, they give you a blank stare. They just want to get paid. This perception also means that our program is the biggest at my institution. Students from every college want to take our classes. Our department is not so big (in terms of faculty, fewer than 20), so our class sizes are huge. My PL class last year was 200 students. My systems course last semester was 160. What this means is that I can't offer the kind of guidance for self-learning. Maybe if my class sizes were 30-40 students, but not for classes of 100+ students. And then there's the issue of what students imagine a self-guided education looks like. They want to do things like mobile app development and AI. Most students don't self-guide themselves into fields like compilers and operating systems in my experience. They just aren't interested. Hell, I wasn't interested in these topics, until I was forced to take these classes as part of the standard curriculum. Now compilers are pretty much the only thing I'm interested in! I guess that's where the "guided" part comes in, but the point is that if students are left to their own devices, I worry we'll end up with a generation of programmers who are experts at making predictive AI models and iPhone apps, but have no idea how an OS or compiler works. Then who is going to teach the next generation how to make an OS? Already we have problems hiring people in these fields. 90% of the tenure track applications from our last round of hiring were from AI/ML type researchers, with only a few systems people (2-3 if we're lucky). I even have trouble getting TAs for my PL class, because all of our available grad students only know Python and C++ for their ML research. I see this only getting worse in the future.
- Cybotron5000 5y agoOoft …’trendiness’/hype to blame…(for want of a better way of describing it - nothing against trendiness per se… :) …short-sighted also as technology moves so fast and what garnered the highest salaries in this generation could easily change in the next… (esp. if over-subscribed)… I teach guitar/bass/music production (though trying to slowly educate myself about CS as much as I can), but I get what you’re saying about learning basics - you can go blue in the face trying to explain to someone that if they learnt eg. basic harmony or acoustics or how MIDI works etc etc that they would understand eg. how to make any style of music they happen to like potentially more quickly/effectively, or that instead of learning eg. only specific interfaces/ individual siloed DAWs/platforms, they would see that they all work on basically the same underlying principles and be able to pick up and use any they wish from then on/make their own… (…counter to a lot of ‘magic’ marketing speak/youtube vids etc…). Perhaps as CS ideas become more widely used/diffused/familiar to teachers/practitioners of all other subjects, and indeed programming etc. potentially becomes ‘higher level’/more abstracted/built on specialised API’s/libraries/AI/autocomplete/visual paradigms etc. those subjects will incorporate the teaching of CS/programming/AI and eg. biology will inevitably integrate teaching of what might at the moment be called ‘computational biology’, or literature will incorporate analysis of texts using AI as a standard component of the course etc. etc.? …that might then free your dept. to focus on core concepts/constructing the underlying platforms that all these other subjects use as a base? all the best! (good article btw.)