912 karma · joined August 12, 2013
The only major side effect that's a problem for me is the utter loss of appetite. Frustratingly, it's not that I'm not hungry, I just don't want food. So my stomach will start hurting and I force myself to eat, but it's a challenge. Plus earlier this year I had to give up sugar to account for prediabetes, every day is a struggle to make myself get enough calories. Still, the ability to stay focused on a task for 15 minutes, or even just process my students' sentences, is worth it.
[1] https://blockpy-edu.github.io/BlockMirror/docs/index.html [2] https://www.blockpy.com/
ETA: Apparently right below this comment someone has already created this: https://news.ycombinator.com/item?id=24303611
> Concentration Camps: A place where large numbers of people (such as prisoners of war, political prisoners, refugees, or the members of an ethnic or religious minority) are detained or confined under armed guard —used especially in reference to camps created by the Nazis in World War II for the internment and persecution of Jews and other prisoners
[1] http://comp.social.gatech.edu/papers/cscw18-chand-hate.pdf
And I can't do that without proper assessments!
I'm unconvinced that oral exams provide the most secure and consistent form of assessment. I'm not even sure how to evaluate such a claim, though, so it may have to stand as an opinion.
All of that pales to the real process going on: good students were matriculated into my program, and I credential them via a bunch of assessments that I wrote despite never having any classes on formal assessment design. If you gave us a random sample of the population, I doubt we'd be that great at turning them into Computer Scientists.
The `World` (which is based on the concept from Racket's Universe library) does indeed get broken down into smaller objects. We talk about how to do that too. The idea is to lead this naturally into more OO stuff next semester, but we talk for a while about how we can use dictionaries to structure data at least.
Obviously, global data is powerful and allows us to do a lot. I let my students define top-level functions and use them globally throughout their programs, and as you say the import mechanism also gives us useful constants and functions to be used anywhere. We talk about how great global constants are for this reason.
The problem is mutation. When you have global mutable state, it becomes difficult to reason about the program. Code written in one part of the program can cause issues hundreds of lines later even though they are seemingly unrelated. You can no longer easily write simple unit tests to confirm that your program works as intended. Global mutable state also frustrates my attempts to use program analysis to give enhanced autograded feedback.
As a concrete example early in the course, we use the Turtle library to define a bunch of functions to write letters, and then they use those functions to write out their names. Difficulty ensues when I ask them to swap definitions and reuse the functions. One kind of issue they encounter is the Turtle library's reliance on global state, which makes it difficult to reason about where the cursor should be after you call a function.
You are thinking about the World example, but what about when they make a list of Coin objects? With global state, they start encountering very mysterious bugs related to the shared coin instances. When its all contained within the World object being passed around, we can write more coherent unit tests to debug this kind of trouble. In a class of 150, it's helpful to give them mechanisms like that.