2 ms·
It's my feeling that articles like this are evergreen, simply because the demands on a "first programming language" are contradictory and excessive. Depending
by glangdale 5y ago
It's my feeling that articles like this are evergreen, simply because the demands on a "first programming language" are contradictory and excessive.
Depending on who you ask, a first programming language (I'll say 1PL to reduce repetition of the phrase) should do one or more of the following:
1) Be practically useful even if the student drops computer science immediately.
2) Be low-level enough to teach the fundamentals of what's really going on with the machine.
3) Be high-level enough to teach the fundamentals of true computer science.
4) Be stringent enough to allow the users to learn precision in their programming.
5) Be lax enough to allow the users to not get bogged down in endless boilerplate.
6) Be in common usage to help ensure immediate practical users for the language.
7) Be an exotic to avoid turning the first year and a half of CS courses into a competition to see who spent the most of their formative years messing with computers.
8) Bonus round: claim that the 1PL is a bogus fixation and instead the learners should learn several different languages.
The problem with all these arguments is that they are all sorta-kinda true, but the consistent application of even a few of them result in a learning load that would result in the first year of computer science (or some "intro to programming" course) being not so much a major but a 2-3 year full time job carried out to the exclusion of all else.
It might make a lot more sense to think not about the 1PL but how the 2ndPL, 3rdPL, etc. are introduced and when. Instead of overloading the 1PL with a host of contradictory and pretentious goals, maybe we teach people the basics of programming as quickly as possible and move on?
For my part, I think the experience of the 1PL should be focused on usability and fun. I'm not really a fan of the whole Java thing for reasons not germane to this, but "Processing" really had a whiff of what was fun about messing around with Commodore 64 BASIC back in the day. Maybe that's more important than making sure that the language in which everyone adds up columns of numbers and prints an invoice for some fucking stupid imaginary warehouse application properly inculcates everyone into the One True Way of Thinking About Computing, whether that's being close to the hardware, or being able to write metacircular interpreters, or be a service course for some miserable engineering department.
The fact is, most of these first-year courses are dull, miserable and unappealing.
- mhuffman 5y agoSlightly related, I am having great success with using Processing as a first language for my young child. The fact that it is very visual and easy to make "pretty things to look at" while still being pretty powerful made the onboarding a lot easier then something like JavaScript or Python. As a bonus, it is close enough to (Java, C, etc.) that the move to a next language should be pretty straightforward.
- glangdale 5y agoI've done some Processing with both of my kids. One of them also did a ton of Scratch, which is very different in a bunch of ways - and he seemed to spent a lot of time wrestling with the fundamental limitations of Scratch. It felt so specific to Scratch that I often felt like what Scratch led to was, well, more Scratch - and also getting caught up in the politics of putting things up on their public forum. I felt that both Processing and Scratch certainly hit the 'fun' point, and that Processing also had the advantage of being a lot closer to actual coding. I imagine that there are probably also JavaScript setups that might tick some of these boxes too. Folks getting huffy about the fact that people aren't learning metacircular interpreters or assembly code (or logic gates!) right off the bat forget that (a) even the basics of solid imperative programming, and the inexorable way the computer does what you told it to, not what you "meant" is hard enough and plenty to get started with and (b) computing is one of many things people could be doing with their time, and making it shitty and esoteric and unpleasant to pass some purity test is not going to necessarily attract the people you want in the field. Notably the latter point - weird culty languages, ultra-low level approaches, etc - are going to filter out your students down to the people who knew from Day 1 they were going to be computer scientists. Nerds, like me. This is by no means going to filter people down to the 'best possible student cohort'.