8 ms·
Teaching other teachers how to teach CS better
- ggm 5y agoIt's incredibly easy to learn how to hack, and not how to abstract good design in a problem. Anyone who opened a 1980s PC mag could be shown how to implement basic FOR or WHILE or if/then/else expression logic in BASIC and achieve huge outcomes: playable games, interesting solutions. Learning how to craft code so its "better" is really hard. Abstraction is a distinct skill. The mathematical underpinnings of code lie in things like logic, and group theory, higher order functions, recursion, you name it. These are not things to acquire by asking your kid next door to show you how his mod-scene ASM works. I studied CS over 40 years ago. I think I'm still deficient, at the end of my career. CS is hard. Understanding the implications of code on memory, performance, critical paths, safety, provability, type-safe all come with rules of thumb (engineering) which can often be acquired by the kid-next-door path, and fundamentals in their theory which really cannot. FP is at the extreme end of hard-to-acquire, especially if your entry was imperative hacking.
- hejdjdjdkkss 5y ago> I studied CS over 40 years ago. I think I'm still deficient, at the end of my career. CS is hard. Name one system you worked on in your career that was “abstracted well” and built to the quality uncle bob thinks is good. I bet you can’t. Because they don’t exist. Not in the framework that this industry now measures “abstract well” in. It’s a square peg in a round hole. Writing software is more like composing music than it is an engineering or maths discipline no matter how much people really want it to be. (Hardware is a different story) Come at me bro :)
- ggm 5y agoNo system I worked on in my career still exists and is abstracted well. Music is a sub-arc of Maths. You know that, right?
- throwaway77770 5y agoI don't think Bob's standards are preferable. Or, in the likeness of Yegge's Execution in the Kingdom of Nouns, I present: void get_coffee() { /* ... */ } void move_away_from_obstacles(auto what_to_move_away) { /* .... */ } void place(auto object_to_place, auto to_be_placed_on) { move_away_from_obstacles(where_to_place); put_object_on(to_place, to_be_placed_on); } void sit() { place(butt, seat); } void prepare_mind() { get_coffee(); sit(); } void get_opinion(int on_whom) { /* .... */ if (on_whom == UNCLE_BOB) { return create_opinion("too many short functions"); } } void get_opinion_of_uncle_bob() { prepare_mind(); opinion my_opinion = get_opinion(UNCLE_BOB); return my_opinion; }
- frant-hartm 5y agoHaha, this is really good, never seen it. But one piece of the uncle bob's advice says you should order your functions from higher level abstraction to lower level, then it reads like a book and you can stop at any time you get the understanding of the code. So your example reordered: void get_opinion_of_uncle_bob() { prepare_mind(); opinion my_opinion = get_opinion(UNCLE_BOB); return my_opinion; } void prepare_mind() { get_coffee(); sit(); } void get_opinion(int on_whom) { /* .... / if (on_whom == UNCLE_BOB) { return create_opinion("too many short functions"); } } void get_coffee() { / ... / } void sit() { place(butt, seat); } void place(auto object_to_place, auto to_be_placed_on) { move_away_from_obstacles(where_to_place); put_object_on(to_place, to_be_placed_on); } void move_away_from_obstacles(auto what_to_move_away) { / .... */ }
- Zababa 5y agoI've always found this advice confusing and contradicting. Higher level to lower level doesn't read like a book. To make it read like a book (or an essay), you have to "flatten the tree", do something like: void get_opinion_of_uncle_bob() { prepare_mind(); opinion my_opinion = get_opinion(UNCLE_BOB); return my_opinion; } void prepare_mind() { get_coffee(); sit(); } void get_coffee() { / ... / } void sit() { place(butt, seat); } void place(auto object_to_place, auto to_be_placed_on) { move_away_from_obstacles(where_to_place); put_object_on(to_place, to_be_placed_on); } void move_away_from_obstacles(auto what_to_move_away) { / .... / } void get_opinion(int on_whom) { / .... / if (on_whom == UNCLE_BOB) { return create_opinion("too many short functions"); } }
- jmkr 5y agoAny recommendations for getting more of the fundamental knowledge and not being the next store neighbor? I feel like I'd be a much better programmer had I studied CS, but it's difficult to also self study when working so I'm trying to find some balance to learning. Like, easy reads that will show immediate improvement to keep me interested, instead of picking random dry textbooks.
- wagslane 5y agoThis is particularly interesting to me as I've been building a CS education platform this year (https://qvault.io https://qvault.io). My favorite bit was right at the end: > In computer science, we often have a model of teaching that is heavily focused on content matter knowledge—if you know your CS, you'll likely be a good teacher. But all our evidence about quality teaching says that that's wrong. There's a lot of knowledge involved in teaching computer science well, and perhaps the most important is pedagogical content knowledge. Basically, its not enough to understand your CS, you have to understand how to teach the CS.
- redis_mlc 5y agoWorking in IT but having a commercial pilot license, it's bizarre how continuing education in IT is non-existent, yet mandatory in the aviation world - and IT people don't even know it. To teach in aviation in the US, you need a Chief Flight Instructor (CFI) rating, where you demonstrate to an examiner how to teach the various maneuvers. IT could learn a lot from regulated industries like aviation. https://en.wikipedia.org/wiki/Flight_instructor https://en.wikipedia.org/wiki/Flight_instructor
- seanmcdirmid 5y agoThe analogy doesn’t really stack up, flying a plane is nothing like designing software or even managing software systems. Imagine if aviation had a few million kinds of planes to worry about where pilots were expected to modify their planes in flight, in might begin to resemble IT.
- TuringTest 5y agoThat's the reason why CS degrees teach core principles, not a collection of every possible platform and technology.
- seanmcdirmid 5y agoYes, and teaching such very abstract things is very different from teaching flight.
- deleted 5y ago[deleted]
- drewcoo 5y agoFrom the title, I expected deepities. It failed to even meet that bar. It's a CS prof. Was the article generated?
- iaabtpbtpnn 5y agoDid you really read the article? It's packed with references, so you can go as deep as you like...
- YesThatTom2 5y agoThis was printed in the articles section of CACM yet it has more citations than some peer-reviewed pieces. What article did you read?
- leed25d 5y agoWhen I was in college --names are elided to protect the guilty-- the school of education was a hot mess. There was a verbal meme around the campus that went something like this: those who can do those who cannot do teach those who cannot teach teach teachers.
- yarky 5y agoI thought this was true until I learnt bjarne did some teaching.
- EvilEy3 5y agoBjarne is an exception.
- zabzonk 5y agoBrian Kernighan also teaches.
- yellow_lead 5y agoMy brother had him at A&M. Heard he was great.
- ModernMech 5y agoI thought this was true until I tried to teach. Then I realized you have to really know what you're talking about if you want to explain it to someone else.
- paxys 5y agoI thought it was those who cannot teach teach gym
- comprev 5y agoSome years ago in the UK when teachers were leaving the profession in droves (stress, paperwork, and result of little actual teaching hours), one of the newspapers (The Guardian, I think) had a front page headline: "Those who can, leave"
- 5y ago
- dehrmann 5y agoI'm amazed at how teaching isn't a core competency of universities.
- arkitaip 5y agoIt's crazy that the people doing some of the most complex and demanding research on the planet are the ones who teach under graduates too, trying to get tons of papers published, etc, etc. Obviously the educational quality suffers when davulty have to do so many complex and different things at the same.
- dehrmann 5y agoSome of that research is also unreproducable BS, but that's another rant. I agree, though. Combining teaching and research into one job makes no sense, especially for how much the students pay.
- CobrastanJorji 5y agoIt's been nearly 20 years since I took a course taught by Mark Guzdial. What I remember most from it wasn't anything about his teaching style but that the correct answer to nearly any exam question that starts "what is the best programming language to use for X" was going to be "Squeak," and there definitely would be such a question on the exam.
- deleted 5y ago[deleted]
- the-smug-one 5y agoTeaching the course content through lectures is overrated, in my opinion. I rarely went to lectures, but the ones I did go to I was there not because I felt a need to learn the course material but because I could in some way engage with the lecturer. One lecturer would talk about how things looked in "real papers", and how new algorithms would get published even though they lacked certain key invariants, and how stupid that was. Another one revealed key insights about the material which he had gained himself. This kind of knowledge exchange is far more important than the course material. You've got the chance to hear what and how some really smart people think about difficult subjects, that's amazing! Learning is easy, you just sit down and you engage with the material in earnest. Whether that's course material or research papers doesn't matter too much. Figuring out other people's perspective without them explicitly telling you is way more difficult.
- sambe 5y agoHow did you know to go to those lectures? Reputation or trying the first few lectures? Just the start of the course feels like it might not give a good enough sample.
- the-smug-one 5y agoTypically just trying the first few, then going to another in the middle of the course or so to see if things have changed.
- tpxl 5y agoI also found courses that had discussions at lectures and prerequisite reading material to be the best, for more or less the same reason.
- Taylor_OD 5y ago>> Learning is easy for me, I just sit down and engage with the material in earnest. Fixed it for you. What is true for you is not true for all.
- the-smug-one 5y ago
- cehrlich 5y agoAs 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.
- vinni2 5y agoIn my university every new faculty member needs to go through 200 hours pedagogical training and further 50 hours of training every 5 years. But it is unfortunate that these training programs are same for all disciplines and designed by pedagogical theory people with no CS or even science background. It was a waste of time who focus mostly on theory of pedagogy which is hardly applicable for CS.
- lincpa 5y agoComputer science is essentially a management science, and vice versa. ---- Lin Pengcheng Creator of Computer Science Management School Creator of Management Science Computer School Software and hardware are factories that manufacture data, so they have the same "warehouse/workshop model" and management methods as the manufacturing industry. With more and more CPU&GPU&other cores, the communication, coordination, scheduling, and management of the cores have become more and more important, becoming a key factor in performance. This is the best field of management science, and "warehouse/workshop model" is the best practice. Success stories: Apple M1 chip + MacOS come soon: Qualcomm, MS, Intel, AMD, Samsung, etc. Reference: The Grand Unified Programming Theory: The Pure Function Pipeline Data Flow with Principle-based Warehouse/Workshop Model https://github.com/linpengcheng/PurefunctionPipelineDataflow https://github.com/linpengcheng/PurefunctionPipelineDataflow
- kilodeca 5y agoWhy do they use bit.ly? I can't visit bit.ly links. ERR_CONNECTION_CLOSED
- hcs 5y ago- 2013 study of electrical engineering students using problem-based learning (https://bit.ly/2NVazYb https://bit.ly/2NVazYb): https://onlinelibrary.wiley.com/doi/abs/10.1002/j.2168-9830.2011.tb00013.x https://onlinelibrary.wiley.com/doi/abs/10.1002/j.2168-9830.... - 2019 Harvard study of active learning (https://bit.ly/3uQnXh4 https://bit.ly/3uQnXh4): https://news.harvard.edu/gazette/story/2019/09/study-shows-that-students-learn-more-when-taking-part-in-classrooms-that-employ-active-learning-strategies/ https://news.harvard.edu/gazette/story/2019/09/study-shows-t... - students have implicit bias (http://bit.ly/3e3UzOe http://bit.ly/3e3UzOe): https://www.insidehighered.com/news/2019/05/20/fighting-gender-bias-student-evaluations-teaching-and-tenures-effect-instruction https://www.insidehighered.com/news/2019/05/20/fighting-gend... - Computing classes often have a defensive climate (https://bit.ly/3qizsdH https://bit.ly/3qizsdH): https://www.researchgate.net/publication/2920892_Defensive_Climate_in_the_Computer_Science_Classroom https://www.researchgate.net/publication/2920892_Defensive_C... - students get messages that they don't belong (https://bit.ly/3sEBsOT https://bit.ly/3sEBsOT): https://depts.washington.edu/sibl/wp-content/uploads/2017/10/Master_Computing.pdf https://depts.washington.edu/sibl/wp-content/uploads/2017/10... (PDF) - on formative assessment in K-12 CS (https://bit.ly/3sHAAJd https://bit.ly/3sHAAJd): https://csassess.org/wp-content/uploads/2021/01/Final-Submitted-SIGCSE_2021_Formative_Assessment_Position_Paper.pdf https://csassess.org/wp-content/uploads/2021/01/Final-Submit... (PDF) - on effective design of formative feedback (https://bit.ly/3qaF8Gz https://bit.ly/3qaF8Gz): https://www.researchgate.net/profile/Qiang-Hao-15/publication/348923384_Towards_understanding_the_effective_design_of_automated_formative_feedback_for_programming_assignments/links/60171eeea6fdcc071ba9074c/Towards-understanding-the-effective-design-of-automated-formative-feedback-for-programming-assignments.pdf https://www.researchgate.net/profile/Qiang-Hao-15/publicatio... (PDF) - treating teaching innovation as action research (http://bit.ly/3efbyxl http://bit.ly/3efbyxl): http://www.ascd.org/publications/books/100047/chapters/What-Is-Action-Research%C2%A2.aspx http://www.ascd.org/publications/books/100047/chapters/What-...
- wirthjason 5y agoOverall good article but I was expecting an in depth assessment of how to actually teach CS. I was particularly interested in hearing how teaching CS might be different from teaching other subjects, particularly math, engineering, etc. Instead the article was more about why student reviews are not a good way to evaluate the teacher. It’s like letting your toddler decide what’s for dinner… “ice cream and candy, again?!?!”
- ModernMech 5y agoIMO the big difference between CS and other subjects like math, engineering etc. is big tech. No one goes into a math degree at 18 thinking they're going to be earning $200k in 4 years time. But in CS, this is the general expectation of students. They are obsessed with learning everything they need to know to pass Google's and Facebook's white board exams. Students demand prep sessions to help them pass, where we just give them interview questions to solve. They are not so interested in learning CS for the sake of learning CS. Students and parents view our CS department like a trade school. They are very focused on us teaching "practical" skills that students will use when they enter the work force. I think that's something we should do, but that's not all we should do. But any time we try to teach more theoretical CS concepts, there's always a lot of push back like "How will I use this thing when I'm at FAANG, and if I won't then why am I even learning this?" Then there are employers, who have in the past come to us trying to get us to teach their tech stack so they don't have to. They wanted us to convert our entire curriculum to .Net, because that's what they use. Would that ever happen in the math department? I don't think so.
- aidenn0 5y ago> "How will I use this thing when I'm at FAANG, and if I won't then why am I even learning this?" Maybe college has changed since I went there, but a similar question was asked and the professor responded with "you are free to drop the class." It was a required class for a CS degree and when the student pointed this out, the professor said that it's still freshman year, feel free to switch majors and that they should shut up because they were interfering with everybody else who (unlike them) were actually trying to learn something.
- jb775 5y agoThe simple solution to learning CS is to just start building something. The process of getting stuck and figuring out how to get un-stuck is where the learning actually happens.
- gcthomas 5y agoCS and software development are different subjects, aren't they? Plenty of devs know little CS and CS academics often do no dev work. CS existed as a field before general purpose computers existed, when algorithms operated on room of women called computers.
- omgwtfbbq 5y agoYou could sit down and build quite complicated things without ever learning a lick about big-O, time complexity, etc..
- roflchoppa 5y agoTeachers please use testing suites, include basic tests that can show student that they are making progress in the assignment. Have your own tests for grading (if you want). For intermediate classes force students to use some type of version control, as in they need to submit assignments to a branch, and the branch will be graded.
- jowdones 5y ago"Teaching other teachers how to teach teaching to teachers" would have been a better title.
- westurner 5y agohttps://code.org/teach https://code.org/teach git and HTML and Linked Data (and Reproducible Containers) should be requisite: https://learngitbranching.js.org/ https://learngitbranching.js.org/ Pedagogy#Modern_pedagogy: https://en.wikipedia.org/wiki/Pedagogy#Modern_pedagogy https://en.wikipedia.org/wiki/Pedagogy#Modern_pedagogy Evidence-based_education: https://en.wikipedia.org/wiki/Evidence-based_education https://en.wikipedia.org/wiki/Evidence-based_education Computational_thinking#Characteristics: https://en.wikipedia.org/wiki/Computational_thinking#Characteristics https://en.wikipedia.org/wiki/Computational_thinking#Charact... (Abstraction, Automation, Analysis) Learning: https://en.wikipedia.org/wiki/Learning https://en.wikipedia.org/wiki/Learning Autodidacticism: https://en.wikipedia.org/wiki/Autodidacticism https://en.wikipedia.org/wiki/Autodidacticism Design of Experiments; Hypotheses, troubleshooting, debugging, automated testing, Formal Methods, actual Root Cause Analysis: https://en.wikipedia.org/wiki/Design_of_experiments https://en.wikipedia.org/wiki/Design_of_experiments Critical Thinking; definitions, Logic and Rationality, Logical Reasoning: Deduction, Abduction and Induction: https://en.wikipedia.org/wiki/Critical_thinking#Logic_and_rationality https://en.wikipedia.org/wiki/Critical_thinking#Logic_and_ra... Doesn't this all derive from [Quantum] Information Theory? It's actually fascinating to start at Information Theory; who knows what that curriculum would look like without reinforcement and [3D] videos: https://en.wikipedia.org/wiki/Information_theory https://en.wikipedia.org/wiki/Information_theory Stone, James V. "Information theory: a tutorial introduction." (2015). https://scholar.google.com/scholar?q=%22Information+Theory:+A+Tutorial+Introduction%22&hl=en&as_sdt=0&as_vis=1&oi=scholart https://scholar.google.com/scholar?q=%22Information+Theory:+... It used to be that we had to start engines with a turn of a crank: that initial energy to overcome inertia was enough for the system to feed-forward without additional reinforcement. Effective CS instruction may motivate the unmotivated to care about learning the way folks who are receiving reinforcement do: intrinsically.