I, as a teacher, have had to learn several languages, but that’s not the dumb reason bit. The dumb reason bit was WHY I had to teach Python, which once I learnt it (so I cold teach it) I could see right away was NOT a suitable language for teaching to Year 7 (who up to now have only used Scratch). I was teaching the U.K. curriculum, and I found out that teaching C# was also allowed - still not ideal, but better than Python for learners -but pretty much all schools were teaching Python. When I dug into it I found I was far from alone in not wanting to use Python… and I also found out the reason schools were teaching Python. It was because from an ADMINISTRATIVE point of view it was much easier for the schools to have us teaching Python. In other words, the office-workers who didn’t have to teach it, only had to admin it, were forcing everyone to teach Python because they wanted the lower overhead that came with installing/maintaining that vs. C#. ARGH! All the teachers who wanted to teach C# were running into exactly the same road-block.
Honestly, I taught myself JS in like 2009 as my first programming language. My high school taught Java, but I didn’t get OOP. I understand functional programming though, so after JS I taught myself Elixir, then OCaml and Haskell. I really wish I was just taught Clojure or another lisp-like in school though. Python is… okay… I need expressions in my language, though, and Python is not that.
I’m really surprised to hear that teaching C# to 7th graders is easer than teaching them python. Python was invented to teach. It looks like pseudo code. I have almost zero experience in teaching so I trust your experience. But can you elaborate a little? What makes teaching C# easier?
I just replied to someone else with the same question. Less can go wrong (but in either case a non-OOP language, like Pascal, is a much better starting point. You should only ever teach students one concept at a time).
As it is, when we had to teach them HTML, the resources we were given were using PHP at the same time, so I scrapped that and just taught them HTML myself. We never teach more than one concept at a time, so I don’t know how these other things found their way into the curriculum/resources.
P.S. as a teacher, I can tell you I have seen students who even struggle to write pseudo code. It’s like trying to teach them Greek (not all students, but some, and we need to cater to the lowest common denominator).
I’ve always seriously questioned why python has become the defacto beginner language. Sure, a simple print hello world is short, but I feel like static languages are easier to see what’s going on.
Well, I’m only speaking here for my experience with teaching the U.K. curriculum, but probably the same thing applies elsewhere. I know this much - as a teacher, it’s very frustrating!
object-oriented (this is their FIRST proper programming language - they don’t even know how to write loops yet and you want us to teach them OOP at the same time?! And as it turns out, I had one student who literally could NOT work out how to use a loop - kept writing 20 variables for 20 iterations. i.e. her variables never varied!)
variables are weakly-typed (use it for anything, whether it’s what you first used it for or not, Python doesn’t care)
indentation has to be exact (i.e. no brackets, just exact indentation). I had one student whose program wasn’t working, and it even took ME a while to find what was wrong with it (a missing space).
I think there was more, but that’s what I remember off the top of my head. If it was up to me then I would’ve used Pascal - that’s what it’s designed for! But at least C# has strongly-typed variables, and doesn’t care about your indentation (and unfortunately there was no non-OOP language choice available - I’m not sure how this got in the curriculum when every teacher knows you only teach one concept at a time). As I said, many other teachers felt the same way, but couldn’t get it past their school admin’s.
If you’re writing any language in like notepad, you’re going to have a bad time. I accept your point that school administration may be making questionable choices about what software is installed, but that’s not a problem unique to python.
No, but it’s a bigger problem for C# than is is for Python (though this is changing now), so all the U.K.-based schools were teaching Python, rather than the more-appropriate C#. That was my original point - that’s the dumb reason I had to learn Python, school admin’s wanted the lower overhead of the worse language.
Why do you even have to mention OOP? C# is object oriented too. Would you start explaining OOP too when teaching C#?
Python is comparatively easier as it’s nearly literally pseudo-code. There’s no need to even write a main function or functions at all. It uses less characters too e.g no need for semi-colon, brackets in for loops and if statements
As for indentation being exact, IMO that’s on you. Beginners should be given a proper development environment to work in that helps them as much as possible. Modern editors and IDEs point out syntax errors and indentation errors are incredibly basic. If they are working in an environment that doesn’t even point that out to them, they have been setup incorrectly.
Python does have OOP but you are not at all forced to use it. You can write code in a functional or even procedural style.
typing
I do hate that python doesent have proper support for typing but I think weakly typed variables will actually help beginners as it is less to think about to start off with.
indentation
I think there are pros and cons here. In other languages it is considered good style to use indentation anyway.
I’m sure it is difficult to teach a large class like that though. It was hard enough for me to learn with a much more favourable teacher to student ratio than you probably have. Sorry but honestly I do sympathise with admin as well.
have the experience of being the kid in that situation
Which kid? The gifted one, the one who didn’t understand loops and used 20 variables for 20 iterations, the one who didn’t understand how to write pseudo code, the one who was dyslexic,…?
I learnt python in secondary school
Which Year? I didn’t say it wasn’t appropriate for high school, I said it wasn’t appropriate for Year 7 as a first programming language.
Also, who do you mean by “us”? Programmers? Not all the kids in class want to be programmers, and this isn’t a programming class - it’s Computer Science. We cover topics like hardware, the Internet, Cybersecurity, the history of computers, data analytics, etc. Not only do not all of them want to be programmers, not even all of them want to be in I.T. - they’re just, you know, interested in computers (or in some cases they’re in the course because their parents think they should be in it - I’ve had a couple of those students). We only spend 6 weeks on programming (we spend 6 weeks on each topic), or sometimes we might do it twice and spend 12 weeks on it, and that’s it for the year! You can’t teach Year 7 kids algorithms, pseudo code, basic programming concepts (variables, branches, and loops) and OOP as well in one year. Especially when not even all of them are interested in programming. It’s just one topic we cover. OOP is something that shouldn’t be covered until at least Year 8, preferably Year 9 (by which stage students have decided if they want to continue on this path or not, and the ones we still have left we start getting more hard-core… which is where the “us” I presume you’re referring to come in).
Python does have OOP but you are not at all forced to use it.
Not as an individual, but I’m talking about a situation precisely where the individual choices of teachers are ignored, in some cases by school admins, in some cases by faculty choices. Fortunately I also ran a computing club, in which I was autonomous with how I ran it, and I taught my computing club students C#/MAUI… but even then still saw some of the issues you run into with teaching students. e.g. I told them to install Visual Studio ready for next week, showed them where it was, what workloads to install, and then the next week one of the students had installed Blend for Visual Studio, not Visual Studio. “Look, it has Visual Studio in the name!”. (sigh)
I think weakly typed variables will actually help beginners as it is less to think about to start off with
No, that’s exactly the problem to start with. Another rule of teaching (see below for the full list I’m quoting these from) is “never let the first impression be a wrong one”. If you let students think they can use variables for anything, then you run into problems when they can’t. This is why teaching them with strong types first is better - they learn you need to be careful with how to use them, THEN maybe you can let them have some more freedom like Python allows.
In other languages it is considered good style to use indentation anyway
Yes, but in those languages it’s optional. In Python it’s mandatory, and if someone’s code isn’t working it’s far easier to spot a missing bracket than a missing space.
I, as a teacher, have had to learn several languages, but that’s not the dumb reason bit. The dumb reason bit was WHY I had to teach Python, which once I learnt it (so I cold teach it) I could see right away was NOT a suitable language for teaching to Year 7 (who up to now have only used Scratch). I was teaching the U.K. curriculum, and I found out that teaching C# was also allowed - still not ideal, but better than Python for learners -but pretty much all schools were teaching Python. When I dug into it I found I was far from alone in not wanting to use Python… and I also found out the reason schools were teaching Python. It was because from an ADMINISTRATIVE point of view it was much easier for the schools to have us teaching Python. In other words, the office-workers who didn’t have to teach it, only had to admin it, were forcing everyone to teach Python because they wanted the lower overhead that came with installing/maintaining that vs. C#. ARGH! All the teachers who wanted to teach C# were running into exactly the same road-block.
Honestly, I taught myself JS in like 2009 as my first programming language. My high school taught Java, but I didn’t get OOP. I understand functional programming though, so after JS I taught myself Elixir, then OCaml and Haskell. I really wish I was just taught Clojure or another lisp-like in school though. Python is… okay… I need expressions in my language, though, and Python is not that.
Yes, the correct sequence of events - one thing at a time, basic programming, then OOP. :-)
It’s not a lot of things, which makes it poor for a teaching language.
I’m really surprised to hear that teaching C# to 7th graders is easer than teaching them python. Python was invented to teach. It looks like pseudo code. I have almost zero experience in teaching so I trust your experience. But can you elaborate a little? What makes teaching C# easier?
Surely an unpopular opinion lol.
Python is a great first language.
…and riding a bike is easy. Now go watch some kids who have never ridden a bike before and see how that’s working out for them.
I just replied to someone else with the same question. Less can go wrong (but in either case a non-OOP language, like Pascal, is a much better starting point. You should only ever teach students one concept at a time).
Pascal was my first language. Self-taught. It was pretty good.
As it is, when we had to teach them HTML, the resources we were given were using PHP at the same time, so I scrapped that and just taught them HTML myself. We never teach more than one concept at a time, so I don’t know how these other things found their way into the curriculum/resources.
P.S. as a teacher, I can tell you I have seen students who even struggle to write pseudo code. It’s like trying to teach them Greek (not all students, but some, and we need to cater to the lowest common denominator).
I’ve always seriously questioned why python has become the defacto beginner language. Sure, a simple print hello world is short, but I feel like static languages are easier to see what’s going on.
Well, I’m only speaking here for my experience with teaching the U.K. curriculum, but probably the same thing applies elsewhere. I know this much - as a teacher, it’s very frustrating!
I’m curious why you think Python is unsuitable. Both of my kids picked up Python pretty easily.
I think there was more, but that’s what I remember off the top of my head. If it was up to me then I would’ve used Pascal - that’s what it’s designed for! But at least C# has strongly-typed variables, and doesn’t care about your indentation (and unfortunately there was no non-OOP language choice available - I’m not sure how this got in the curriculum when every teacher knows you only teach one concept at a time). As I said, many other teachers felt the same way, but couldn’t get it past their school admin’s.
You can use types in Python and your tools will generate warnings
def something(a: int) -> int: return “potato”
will turn yellow in an IDE more advanced that notepad.
Most editors will also show a red line where the indentation is wrong.
Same thing still applies - you need to get it past the school admin gatekeeper.
If you’re writing any language in like notepad, you’re going to have a bad time. I accept your point that school administration may be making questionable choices about what software is installed, but that’s not a problem unique to python.
No, but it’s a bigger problem for C# than is is for Python (though this is changing now), so all the U.K.-based schools were teaching Python, rather than the more-appropriate C#. That was my original point - that’s the dumb reason I had to learn Python, school admin’s wanted the lower overhead of the worse language.
Why do you even have to mention OOP? C# is object oriented too. Would you start explaining OOP too when teaching C#?
Python is comparatively easier as it’s nearly literally pseudo-code. There’s no need to even write a main function or functions at all. It uses less characters too e.g no need for semi-colon, brackets in for loops and if statements
As for indentation being exact, IMO that’s on you. Beginners should be given a proper development environment to work in that helps them as much as possible. Modern editors and IDEs point out syntax errors and indentation errors are incredibly basic. If they are working in an environment that doesn’t even point that out to them, they have been setup incorrectly.
Anti Commercial-AI license
Python does have OOP but you are not at all forced to use it. You can write code in a functional or even procedural style.
I do hate that python doesent have proper support for typing but I think weakly typed variables will actually help beginners as it is less to think about to start off with.
I think there are pros and cons here. In other languages it is considered good style to use indentation anyway.
I’m sure it is difficult to teach a large class like that though. It was hard enough for me to learn with a much more favourable teacher to student ratio than you probably have. Sorry but honestly I do sympathise with admin as well.
It’s odd to me that you’re disagreeing with their actual experience teaching.
Thanks. It’s a very 21st Century phenomenon that I’ve unfortunately run into many times
Lots of us have the experience of being the kid in that situation though. I learnt python in secondary school.
They’ve been through the other side of this experience multiple times though.
Which kid? The gifted one, the one who didn’t understand loops and used 20 variables for 20 iterations, the one who didn’t understand how to write pseudo code, the one who was dyslexic,…?
Which Year? I didn’t say it wasn’t appropriate for high school, I said it wasn’t appropriate for Year 7 as a first programming language.
Also, who do you mean by “us”? Programmers? Not all the kids in class want to be programmers, and this isn’t a programming class - it’s Computer Science. We cover topics like hardware, the Internet, Cybersecurity, the history of computers, data analytics, etc. Not only do not all of them want to be programmers, not even all of them want to be in I.T. - they’re just, you know, interested in computers (or in some cases they’re in the course because their parents think they should be in it - I’ve had a couple of those students). We only spend 6 weeks on programming (we spend 6 weeks on each topic), or sometimes we might do it twice and spend 12 weeks on it, and that’s it for the year! You can’t teach Year 7 kids algorithms, pseudo code, basic programming concepts (variables, branches, and loops) and OOP as well in one year. Especially when not even all of them are interested in programming. It’s just one topic we cover. OOP is something that shouldn’t be covered until at least Year 8, preferably Year 9 (by which stage students have decided if they want to continue on this path or not, and the ones we still have left we start getting more hard-core… which is where the “us” I presume you’re referring to come in).
Not as an individual, but I’m talking about a situation precisely where the individual choices of teachers are ignored, in some cases by school admins, in some cases by faculty choices. Fortunately I also ran a computing club, in which I was autonomous with how I ran it, and I taught my computing club students C#/MAUI… but even then still saw some of the issues you run into with teaching students. e.g. I told them to install Visual Studio ready for next week, showed them where it was, what workloads to install, and then the next week one of the students had installed Blend for Visual Studio, not Visual Studio. “Look, it has Visual Studio in the name!”. (sigh)
No, that’s exactly the problem to start with. Another rule of teaching (see below for the full list I’m quoting these from) is “never let the first impression be a wrong one”. If you let students think they can use variables for anything, then you run into problems when they can’t. This is why teaching them with strong types first is better - they learn you need to be careful with how to use them, THEN maybe you can let them have some more freedom like Python allows.
Yes, but in those languages it’s optional. In Python it’s mandatory, and if someone’s code isn’t working it’s far easier to spot a missing bracket than a missing space.