31

I think that the purpose of such a course is not to teach you a language. After all, Scheme, with its abstract syntax, is pretty minimal as a language. The purpose of a course like that is to teach you to think abstractly. If you can do that now, several years later, you can probably thank the course for getting you started. Abstraction, after all, is the ...


22

There's one more reason I'd like to add to those here, less high-minded, but also a genuine consideration. One of the practical difficulties of teaching an introductory course is that the students come in at vastly different levels. Some are quite competent already, and some are brand new. It is rare for kids to come in with any experience outside of ...


21

I would consider teaching in Python if you wanted to give your students a taste of programming in a text-based language—pretty much the only type of language used professionally. A visual programming language like Scratch is probably better for younger groups, and teaches the underlying programming concepts well, but you will reach a point where you must ...


21

Scratch is a visual block-based drag-and-drop programming language designed specifically for learners, especially children. It's created by the Lifelong Kindergarten Group at the MIT Media Lab. The language and IDE are pretty much completely connected. Here's how I see it checking off your bullet points: Object oriented: It has sprites, but it's debatable ...


17

Every second you spend explaining a programming language is a second you are not teaching programming, software development, software engineering, software design, or computer science. You can teach the entirety of Scheme in a single lesson. You can probably teach the entirety of Scheme in 10 minutes. Python is significantly more complex than Scheme, so, ...


15

With Scheme, you start teaching programming concepts on day 1 - and also implementing them as working code on day 1. With a typical procedural language (C++, Java, etc) you first have to crawl through the swamp formed around 20+ years of accumulated obsolescent and deprecated syntax. The survivors from that experience might get to learn some concepts ...


14

I do and am currently teaching a high school student Prolog but not as a first language. Is it OK to use logic programming(like Prolog) as students' first language? While you could do it I would not advise doing it, let a student do it if they asked or be on a committee that would advocate for it. The reasons are Prolog is so much unlike other ...


13

For those interested in 3D (though, it can be used in 2D) game making with an engine, I would suggest teaching Unity. It's an engine and a platform for creating games. Unity can be used with C# and Javascript, which means that those who choose to use it will also have some experience with some very popular high-level programming languages. Additionally, ...


12

Simplicity You can write the definition of scheme on the back of a postage stamp. Therefore as @Buffy says, you don't have to learn the language at the same time as learning the concepts. It is a pure functional language. You will be a better programmer, because you learnt functional. Better to do it first, few people learn functional second. Education ...


12

I highly recommend checking out a language called Processing. Processing is designed for novices, and makes it easy to create visual and interactive programs without a ton of boilerplate. Here's an example Processing sketch: void draw() { ellipse(mouseX, mouseY, 25, 25); } This is a full program that draws a circle wherever the mouse is, 60 times per ...


11

The analogy is far from perfect, but Snap! is to Scratch as Mycroft is to Sherlock. For me, the big advantage for Snap! is its provision of custom functions rather than just the custom blocks that Scratch 2 offers - Snap! functions return values that can be passed to other functions and so on, making it much easier to implement mathematical ideas and to ...


11

Based on your history and preferences, you have a particular view about what it means to be a programmer. I have somewhat the same history, but come to a different conclusion. Start with a high level language, probably either a good OOP language (Java, Python, Scala...) or a good functional language (Scheme, Racket, ...). Those two groups of languages cover ...


10

Processing probably ticks a lot of your boxes. It's essentially a framework built on top of Java and shipped with its own IDE (also free and open source). A lot of the boiler plate code that normally exists in Java (package and include statements and so on) is hidden by default, so it's very clean for newbies (you can import extra packages later if you need ...


10

Scheme is not that widely used in the industry, but that is not the point. The purpose of CS is not to teach you any particular language, but to teach fundamental concepts. When you know the fundamental concepts, learning any particular language is pretty easy. Anybody with a solid CS background would be able to learn Python in a few hours of self-study. ...


9

The Racket team has argued that no language that is suitable for writing any real software is great for beginners: they contain too many warts, legacy features, complex corners, etc. And that includes Racket itself. We have therefore created a series of student languages that are carefully designed subsets of the full language ideal for student use. Think ...


9

Tl;dr: use python. (Preferably python 3.) Well, I’m a teenager in your age group, so hopefully I’m some level of qualified to respond. I have to say as a bit of a disclaimer that python is my favorite language but it is in that position for a reason. Scratch is, for me, annoying to write because I can touch type so python is just faster. Further, I ...


9

As Guy Coder says, Prolog doesn't help a lot with employment. But it goes a bit farther than that. As educators we normally teach students in CS how to build things. Logic Programming languages such as Prolog have other strengths, but building systems isn't their main goal. It therefore doesn't well support the courses that follow in most of the curriculum. ...


8

I think you're having trouble justifying the study of C++ because of the way that you're thinking about it. If you are aiming towards the practical benefits, then you immediately get to the following trap: neither you nor your students has any idea what languages they will work with in the future, so neither you nor your students have any idea what ...


8

The biggest strength of R when it comes to Data Analysis is in its data visualization. As you've mentioned it is a more or less dedicated tool for statistical analysis. The thing with Python is that you can easily go a bit off course with the lectures because for Statistical Analysis you'll have to understand, install and work with different libraries/APIs ...


7

I suspect there'll be more universities switching from Scheme to Haskell for introductory functional programming (FP) courses, mainly for the 'real world' appeal of Haskell. I see 15 mentions of Scheme and 16 of Haskell in the recent SIGCSE programming language poll results, although Scheme (as Racket) still has the edge in introductory courses. We've a ...


7

As the kids these days would say, you're doing it wrong. Let me explain. As I've commented elsewhere, every "full language" has a whole bunch of things that educators would find inconvenient or undesirable. Your Haskell students can use monadic state or UnsafePerformIO too! So Haskell is "just as bad" in principle. That's why Racket (in an explicit ...


7

I had great success by teaching kids (8 to 11 years old) to set up their sites. First, plain HTML to understand how model maps to presentation; then CSS to see how boring stuff can be factored out; then javascript to make pages alive; then CGI to do magic. The important parts were immediate tangible reward: Hey look at my page! no big words (object doesn't ...


7

Logic is a tool for distinguishing true and false statements. If a statement is proved, then it is true. If its negation is proved, then it is false. Hence the core skill is checking whether a proof is correct and finding/inventing a proof of a statement. Prolog is based on a subset of logic. A Prolog implementation finds proofs automatically. IMHO, anybody ...


7

On the face of it, event-driven programming seems far easier to explain. "This code will run when the button is clicked" seems obvious, and similarly, visual environments that favour this technique seem relatively intuitive: It would seem obvious to explain that the code below that block runs when the sprite is clicked. Similarly, in Node.js, an event-...


6

A variant of the Racket programming language with the DrRacket IDE is used in the course "How to Code" by Gregor Kiczales. "Object oriented (ComLogo is funny, but has nothing to do with today's actual programming)." The object-oriented paradigm is not stressed in the course. "Actual programming" kind of conflicts with "learning programming". "Good IDE (...


6

The middle column is Snap!. In Snap! you can create your own C-shaped blocks, as well as functions (see range block), this is in addition to the procedures that can be done in scratch. Note: I could not get the last one to work, but some times you only need to get the image. However the others do work (fully functional).


6

Of the languages you mention knowing, I'd recommend Python. Advantages: You know it. This naturally applies to the other languages in your list, but there are other languages that would also be candidates if you knew them. It's certainly possible to learn a language and teach at the same time, but best to avoid it if you can. It's succinct. You want them ...


5

The biggest features Snap! has that Scratch doesn't are first-class EVERYTHING and functions. Scratch only lets you create custom command blocks, not reporter or Boolean blocks. This makes Snap! much more suitable for writing algorithms that rely on return values. In Snap!, everything is first class. You can pass around scalar values, lists, blocks (and ...


5

Go with the 6502. Its market penetration and popularity has generated a lot of resources over the years, giving you more to work with. Looking into the "home-brew CPU" realm should supply significant material to make reproducing the 6502 in Ligisim fairly easy. It already has a small instruction set (around 150 operations) that includes stack operations. ...


5

There are commercial flavours of the BASIC language that specialise in creating games; I remember briefly playing with Blitz Basic many many years ago and found it easy to work with, but there are numerous competing products you might want to also consider. Despite dramatically reducing the complexity of creating games, absolute beginners are still going to ...


Only top voted, non community-wiki answers of a minimum length are eligible