5 ms·
Hi, thanks for your response and your passion for CS Ed! I like talking about it too, and I want to preface any conversation we have with my appreciation that w
by acbart 7y ago
Hi, thanks for your response and your passion for CS Ed! I like talking about it too, and I want to preface any conversation we have with my appreciation that we both care about this important subject. Text doesn't always do a good job of conveying sentiment on its own :)
It sounds like you are hypothesizing that my students have a motivation problem and proposing that I use an intervention of "Selling students on the magic of computers". Based on survey data collected during my past few semesters, I do not believe that my students are disinterested in the subject. This is true at the beginning and end of my course - I cannot claim that my assignments and course design (some of which is particularly oriented towards making the students interested in CS) has a big impact here, but I do not think they are being hurt by that aspect of the course design. There are potentially motivational issues related to self-efficacy, community interaction/isolation, and help-seeking behavior. However, I don't think your proposed intervention would solve those problems.
Instead, I disagree that my CS1 here at the University of Delaware is not the place to discuss the topic of avoiding global mutable state. My curriculum has several learning objectives explicitly oriented around these topics (largely agreed by my colleagues) and I have several projects that I think can authentically justify their importance (particularly with regards to testing and getting enhanced compiler support). I have many anecdotal supports from friends in industry and my own experiences teaching upper division courses that students struggle with issues that can be solved by avoiding global mutable state where possible. Personally, Therefore, since CS1 is not an agreed upon well-defined subject, I think I am perfectly justified including it in my learning objectives, alongside many other important topics and objectives.
If you have demonstrable evidence relevant to my teaching context that teaching global state early could impact areas where my students have other known issues (either motivational or cognitive), then I'd be very happy to read up on those. However, for now, I am doubtful that teaching global state is a serious issue.
- echelon 7y agoThanks for the kind words. I don't mean to pose any of this as an affront to your experience or expertise. I was a "CS1" TA my throughout my entire undergraduate career (modulus my first semester), so this is something I have direct knowledge and frustration about. One of the courses I oversaw comprised of mostly non-CS engineering majors, but the curriculum was the same as the CS-track students. These students were forced to learn in Java, force fed the dogma of object oriented design (cats and cows and animals that moo), and tested on arcane Java-specific errata that had little to do with getting core concepts across and actually being able to express thoughts and ideas in code. People will naturally discover how to organize their code. They'll either read about it or find out in code review. I think a better time to broach this subject is in a "software engineering principles" or equivalent course. It's the same rationale that general chemistry "CHEM1" is not the place to talk about iterative solutions for non-ideal gasses, molecular orbital theory, LCAO, chemical activity, or any of that organic business. You're introducing too much information too early on and without context. You wouldn't teach students dynamic programming or ER diagrams in CS1. The students barely know how to handle the basics and you're already telling them how to anticipate and solve complex future-them problems. Give them Python and let them have fun. If they produce a dozen nested if statements and improper for loops, so be it. At least they're learning to express themselves. If and when you see your students hit the "global state is bad" problem in lab, then turn it into a 1:1 teaching moment. It'll have way more impact, and it won't distract them from the core foundational concepts. I do a lot of interviewing and hiring now, and I see so many fresh-out-of-college grads that simply do not have the ability to analyze a problem and structure their thoughts in code. They might be able to pass a university exam, but they haven't spent enough time using programming concepts on their own time to let them sink in and become muscle memory. I think the biggest discriminator for success is that good students spend their free time programming on hobby projects of interest. And the only way you engender a desire to do that is to get the students interested in programming in their spare time outside of the context of homework and projects. Make programming fun and relevant; make it something they can use to do fun self-directed projects. Such students will excel, and the only thing you have to change is their interest level and attitude. "I want a CS degree and career" is quite different from "I want to write my own game or app or website". And I can tell when I interview candidates which ones spent more time actually programming.