HNHacker News
TopNewBestAskShowJobs

acbart

933 karma · joined August 12, 2013

https://acbart.com
submissionscomments
acbart··on PyRobot
Looking over the robots they support, low cost means about "thousands of dollars" in this context, right?
acbart··on Pygame Zero: Creating games without boilerplate
Indeed, we do talk more about good contracts with the Turtle alphabet than we do about global state. But it's a small part of the conversation.

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.

acbart··on Pygame Zero: Creating games without boilerplate
The objection is because of testing, debugging, and getting compiler/autograder feedback.

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.

acbart··on Pygame Zero: Creating games without boilerplate
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.

acbart··on Pygame Zero: Creating games without boilerplate
Thanks! I wasn't aware of this library, so this is exactly what I was hoping to hear as an answer. I'll add it to our list to analyze.
acbart··on Pygame Zero: Creating games without boilerplate
I'm very interested in this project, because I have a student researching what good options there are for Python Game Dev at the CS1 level. We used Arcade[1] this past Fall, and things didn't go very well (I'm not sold on Pyglet, and there was a lot of small "What??" issues with Arcade's design itself). Pygame Zero is a very appealing choice, but suffers from its design around global state - which is something I spend most of the semester railing against. The authors gave me a good explanation for why[2], but it still is a deal-breaker for an introductory-level university course for CS majors.

At this point, we're leaning towards making our own library to satisfy our purposes. We're still looking at other options though - hey, if you have one, feel free to suggest it :)

[1] http://arcade.academy/

[2] https://github.com/lordmauve/pgzero/issues/174

acbart··on WebAssembly is easy – a hello world example
I thought that one of the major points of WASM was that it would be fast? The first advantage listed on the official WebAssembly website is "Efficient and fast" [0]. But I suppose you wrote "the point" - it's just one of several points. But ideally, it should run at "native speed", right?

[0] https://webassembly.org/

acbart··on Python Type Hints
Well if we're talking about K-8, that's probably true. I don't know about high school. For undergraduate students, you better believe that they'll find out what languages are "real" and "not real" very fast. Whether they're at all accurate is another matter, but they pick up opinions. Whether it's their cousin at another school or that one kid in the class who's been hacking since he was five or just a grumpy senior, someone will come in and fill their heads with something. I have my own set of (hopefully well-educated) biases I give them, but I don't like having to argue too much with them when we're starting out.

A new Pascal would be nice. I loved how much we had to set things up. You start off the entire program by listing out all the variables and types you need! What a fun concept. That would be nice to enforce with my students.

acbart··on Computer Science from the Bottom Up (2016)
I've run a lot of surveys of introductory students trying to find what topics are more or less interesting to them. A part of my dissertation was committed to it, actually.

At this point, I'm more or less certain you'll rarely find situations where you have a mass-appealing context. One students' dream context is another students Most Boring Possible. You're probably better off having many diverse contexts and hit all the MUSIC guidelines (eMpower students, Useful to their long/short term goals, make students Successful, make it situationally and domain-based Interesting, and give people opportunities to demonstrate that they Care about each other).

acbart··on Python Type Hints
You will find very few students eager to learn Pascal in 2019 as their first introductory language.

I say this as someone who grew up in the 90s with my father's Pascal textbook and a deep love for Turbo Pascal.

acbart··on Python Type Hints
Python.
acbart··on Computer Science from the Bottom Up (2016)
Isn't it amazing how people pass courses, even perhaps demonstrate mastery at a point in time, but manage to get to later courses without fully understanding things? Students end up with a very strange mental framework by the time they graduate, and it seems like most students actually know shockingly little. I don't know that there's a solution, or even that it's an issue. To me, this is simply a reflection of how people learn.

Regardless, this seems like a nice little document for those 20% of students who are still willing to read supplementary materials. Then again, this is short and clear enough that if it were properly chunked within a course and had graded assignments attached, many students would probably actually skim it.

If you ever want to develop this some more, I hope you'll consider something like Runestone[0], in order to give it some auto-graded questions along the way!

[0] https://runestone.academy/runestone/default/user/login?_next...

acbart··on Computer Science from the Bottom Up (2016)
I'm assuming you have some concrete curriculum in mind, but I'm curious how what you're thinking of compares to something like the learning objectives spelled out in the CS Curricula 2013[0]?

Personally, going through OP's site, I was nodding my head and comparing it to what I learned in my undergraduate CS degree. Some of it is dated, but most of it connects to the Architecture and Operating System classes I took.

[0] https://www.acm.org/binaries/content/assets/education/cs2013...

acbart··on Python Type Hints
I started teaching my introductory Computer Science class with static types this past Fall. Although there's a slightly larger initial learning curve, the long term benefits are pretty massive. I have to do more data analysis, but my sense is that certain conversations go much, much easier.
acbart··on Remember QR Codes? They’re More Powerful Than You Think
Hah! Reminds me of Piet: http://www.dangermouse.net/esoteric/piet.html
acbart··on Coffee Is Hard
This speaks to me. I used to spend my childhood tweaking and retweaking my game engines. Never really got my games past the cool demo phase. I guess I also now stay with maintainable systems too.
acbart··on Identifying a person through walls from video footage, using only WiFi
Wait, what the heck, why did they pick what is apparently a popular hate symbol for white supremacists? The first google result takes me to: https://www.adl.org/education/references/hate-symbols/1488
acbart··on An erroneous paper on religion and generosity is retracted
Or that the material will be taught effectively. Or that the students are contextually prepared to understand the material at that point. Or any of a number of other things that go wrong when people suggest that education is the solution/root to a very hard problem :)
acbart··on When the A.I. Professor Leaves, Students Suffer, Study Says
Yes, this exactly. I'm an assistant professor who's fine with my salary and position, but I can see firsthand how difficult it is to recruit and retain excellent colleagues.
acbart··on Jeffrey Epstein’s Donations Create a Schism at M.I.T.’s Media Lab
Negroponte really boofed up with the One-Laptop-Per-Child project. It had a lot of good intentions, but it's such a textbook example of misguided tech folks inserting themselves into an education setting. From this article, sounds like another strike for him.
acbart··on A Beginner’s Introduction to Python Web Frameworks (2018)
I was forced to encounter Web2Py in an open-source project several years ago. It was awful. Besides the fact that it's stuck in Python 2 (seriously, even today?), it had a lot of bizarre design decisions. For instance, it loaded controllers by concatenating files in a directory - alphabetically. I know Python's import system can confuse some folks, but surely there was a better way. The whole thing left a very sour taste in my mouth, so I rewrote the application in Flask - unfortunately, the lead developers didn't seem interested in my fork. I've moved far away from their project, but I'm not sure what they're going to do come 2020.
acbart··on Thoughts on Racket2
One of the biggest problems is that these language designers, who want to design an "idealized" language, continue to make big decisions without regards to any kind of actual data collection. I just had the chance to meet and talk with Andreas Stefik, who summarized the utter and embarrassing lack of research by the PL community about actual language usability[1]. I'm not exactly jumping into line to adopt his evidence-based language "Quorum", but thank goodness that someone cares enough to do actual HCI research instead of just arguing theoretical merits. My own history and feelings about Racket are with regards to its connections with the controversial "Program by Design" curriculum - feelings that are both complicated and narrow (all revolving around introductory computing contexts). But I certainly resonate with this quote from the article:

"But in the last 60 years, simply grab­bing these dissenters by the lapels and fumi­gating them with the stinky garlic breath of paren­the­sized S-expres­sions has not been a winning strategy. If Lisp parti­sans want different results in the next 60 years, we need to try some­thing new."

[1] https://quorumlanguage.com/evidence.html

acbart··on Racket: Lisp for Learning
Great! I'm glad you found a path to computing, that is truly wonderful! And I'm not surprised that this approach worked so well for someone.

Now, let's make sure we're finding ways that can generalize. It's an important problem in the world today.

acbart··on Racket: Lisp for Learning
There are many scholarly CSE venues. Ironically, this subgroup mostly avoids almost all of them except ICER, because they feel persecuted. Since I'm relatively new, I'm not clear if the persecution caused their rudeness or vice versa - although I have been told by several people that that's why most people avoid them. I'm actually a little amused thinking about them being offended by my "hate" domain - I'm clearly recalling an experience on CS Ed Twitter, watching that group tear down an author's work publicly because they disagreed with it. I would say they were a pretty offhandedly brutal, even when the author showed up. Since they clearly respond better to this kind of honesty, it seems like I shouldn't be saying things halfway.

Anyway, this kind of experience report would be totally unsuitable for ICER, which is the venue focused on true CS Ed research. This might have a life at SIGCSE, but why go and preach to the choir? And honestly, I don't think it really does merit the level of research publication. This is just a blog post level argument.

I did outline why this site exists. And I do think that this is worth sharing on here, if only because this site drives me nuts sometimes with all its arm chair CS Ed researchers. If I only persuaded a few folks to stop citing HtDP as god's own truth, and to approach that community more critically - I would say that is helpful. Hacker News folks need to understand that education is a heck of a lot more complicated than they probably think it is, and their experiences probably aren't generalized.

I also think that the Racket education community is dying out. For good or bad, I don't think I really have to start publishing research to try and speed it up. But I think that having these reasons and arguments recorded, and written publicly, is a good thing. I am trying to keep in mind, as I write, that some day someone may write some blog posts for "ihateblockpy.com" or "ihatecorgis.com" (my research projects). Perhaps I'll be eating my own words!

acbart··on Racket: Lisp for Learning
I went in and killed the relevant CSS - hopefully that makes it a little easier to read?
acbart··on Racket: Lisp for Learning
I would certainly accept a wide range of other languages. I picked Python because I think I and many of my colleagues can teach a good CS1 in Python. I'm open to a lot of other options.

But not Haskell. Please don't say Haskell :)

acbart··on Racket: Lisp for Learning
And I hope you will learn some empathy some day and understand the perspective of others. We all have some growing to do, it seems.
acbart··on Racket: Lisp for Learning
> How stable has racket been compared to the alternatives?

Why does the stability of Racket matter? Isn't the real question more about how easy it is to reuse, readopt, reshare, find, etc. materials? I'll point out that the CSEngageEdu site doesn't have a Racket section. If you want me to find 100 programming problems in Python, I can do so immediately (because I published more than that, and I know others who have published even more). It's a simple fact that there's more community and infrastructure around Racket. There's been some interesting arguments that we shouldn't let that stop us - what about the future? But the reality is that right now, it's harder to teach in Racket, and I don't see any compelling evidence to prop it up further.

> Is there any data about how well the students do following each language choice?

I'm sorry, I had to laugh out loud. You've asked a really reasonable question, but it's one that the CS Ed community bickers about endlessly. I wrote a paper for SIGCSE about trends in what we talk about on the SIGCSE Mailing list. Seriously, every few years we get into the argument. Actual data seems to suggest very little. Heck, it's so hard to compare with all the confounding factors and individualized components that it's probably not really meaningful to get a simple answer. Ultimately? It probably doesn't matter. If you can teach 90% of my students with Racket the way I teach 90% of my students with Python, and you have the time and energy, then that's probably fine. But the simple reality where I'm at is that that's not the case - students who were taking Racket here before I arrived were being traumatized (and I suspect it's true at more places than the Racket folks want to acknowledge). If they don't want Racket, and I can teach a good CS1 in Python or Java or JavaScript, why should I fight that? Language choice doesn't really influence pedagogy as much as we might want to think it does, per this quote from the beautiful Meta paper that came out earlier this year:

> “Given the perennial question of which language, if any, is best suited for the teaching of introductory programming, many papers describe empirical comparisons between languages, often finding no significant difference in learning outcomes, but sometimes finding differences in student satisfaction.”

> “The choice of programming language is clearly a highly subjective one and is driven by many competing factors. It is clear that the literature will continue to host publications making the case for different programming language choices — and that no paper or series of papers will ever put an end to the debate, as no programming language will ever satisfy all of the conflicting requirements of an introductory programming course.”

acbart··on Racket: Lisp for Learning
> Some research is better than none.

Yes, so we should look at the relatively more massive amount of research done for languages like Java, Python, etc. SIGCSE and ICER and ITiCSE are full of them. We've learned a lot - learning is hard :)

> Intentionality in the design of a curriculum is better than an ad hoc curriculum.

I strongly agree. I wish I could impart to you how involved I am in Instructional Design with my work. I don't know if this will help, but here's a sample from what I was doing last year: https://acbart.github.io/python-sneks/

> The design recipes give you an excellent foundation for transitioning to a statically-typed programming language with algebraic datatypes.

I'm not clear that that's more than a theory. Even if it's true, is that necessarily the major goal in CS1? Perhaps, but you'll have to convince a few of my colleagues of that.

acbart··on Racket: Lisp for Learning
What kind of context are you looking for? What audience? Is a book the only option?

In general, people learn from presentation of material, participation to demonstrate understanding, and then receiving feedback. They need to be motivated and engaged. If you're asking how I would suggest someone self-learn something, I would suggest that they find a cool project that they're excited by, and then offer resources based on that. Ideally ones with interactive feedback and tons of examples.

← PreviousPage 5 of 11Next →