5 ms·
How to turn a kid off programming for life - choose Java as the teaching language. This kid had already started with Python, which is the natural choice for a f
by cutler 9y ago
How to turn a kid off programming for life - choose Java as the teaching language. This kid had already started with Python, which is the natural choice for a first language, so why not just:
import typing
- yorwba 9y agoYou seem to have missed that his son had already played with Processing, which uses a simplified Java and a painless graphics API that lets you just put some commands in a file and get to a drawing on screen quickly. Also using it for more abstract projects like addition is not really a bad choice. You may also be overestimating how much easier Python is to learn for a complete beginner. When I was 12 or so I discovered Python via RenPy (https://renpy.org https://renpy.org) and although I could type some simple commands into the REPL, even the fact that you could put your code into a file to execute later was non-obvious to me. My experience with Processing was much smoother in comparison. In my opinion, you should focus less on syntax and more on getting to an engaging experience with a fast feedback loop.
- grogenaut 9y agoLets try not to incite language flame wars in a discussion that could be super helpful without it.
- khedoros1 9y agoI started with QBasic and C++ when I was a kid. A lot of my later instruction was in Java, and I don't have a strong argument for why it couldn't've been used as my first language.
- jedimastert 9y agoBrother man, I started out with FreeBASIC and (for some reason) Perl when I was 8 or 9. I really don't think it matters too much.
- jedimastert 9y agoBrother man, I started out with FreeBASIC and (for some reason) Perl when I was 8 or 9. I really don't think it matters too much.
- spyrosg 9y agoI do not see Python as the natural choice for a first language. I've even had adult colleagues squint when I tried to explain decorators, or objects and all the self/static/class/method binding nonsense. OOP in Python is something I really cannot like. I teach the language to children and as soon as I get to objects (which is not avoidable in Python, as many libraries and the language itself use objects) the number of concepts I have to explain is too much and I get the dreaded blank stare. I haven't so far found a short explanation that gives them a good enough grasp on objects that they can start making their own. Ideally I would like to have to explain few orthogonal concepts, as learning a new concept in the abstract is hard and their mind has little patience for it, and let them experiment as soon as possible. But experimentation needs the minimum mastery required to combine the concepts and get some result. Pyhton's objects tend to expose their functions+struct guts, which does not help. And don't get me started on warts like the "global" keyword, which makes simple scripts with global state and a few functions (a step into learning functions and structured programming) a frustrating and buggy process. I still cannot understand async/await enough to be comfortable with it, and if Armin Ronacher doesn't either... Meanwhile, languages like Oz do concurrency, with actual parallelism, beautifully. I'm starting to think Scheme and Smalltalk would be excellent beginner languages. "Here's how to make an s-expr; these s-expr are applications, these are definitions. Now go."
- danpalmer 9y agoI disagree, I think Python is an excellent first language. While there are many oddities, I think Python lets you ignore them, or defer them to later in the learning process. Python can be pretty much as simple as you need it to be, and I think that's important for teaching programming. I would not expect to get to objects _properly_ (maybe things like list()) in an introduction to programming course, I think you can get very far with just functions and simple data types. Then, once you do want to introduce objects, I think Python's class system can be kept simple enough to begin with, and the parts that are inherently tricky (like self) have equivalently tricky parts in most other languages anyway. I think a course teaching programming that goes into async IO, needs to discuss 'global' (something I've still used only twice in 5 years of Python), talks about decorators, etc, is doing something seriously wrong. I don't know a lot about Smalltalk, but Scheme is an interesting idea for a first language. I think it could be a good first language, but I would be concerned about what the next step is. Having learnt Python, there are lots of next steps because it has a large and active ecosystem with plenty of opportunities, I'm not sure Scheme has the same, and I feel learning a second language, while Scheme might be good preparation, is not going to be straightforward for someone who has only just learnt to code.