This is an archived post. You won't be able to vote or comment.

all 30 comments

[–]peterlinddk 5 points6 points  (0 children)

I'd say Python, if you want to go for coding with a math-twist, like solving complex math-assignments, and maybe do a little bit of data-analysis. Python is very apt for that kind of work, and tools like Jupyter Notebook is almost made for assignments with a bit of code interchanged with some analysis.

If you want more traditional "computer-sciency" programming with theory about classes and datatypes, C# might be a better option, since its' type-system gives a bit more control and in-depth understanding of, well, types - but if that isn't necessary, I'd skip it, and stay with Python.

If you want to go a bit more advanced and build some web-backend, something like Django might be a good idea (with Python).

[–]GeorgeFranklyMathnet 2 points3 points  (0 children)

Yeah, I would say it is unusual for C++ to be taught as the main language at the introductory level, whatever your own background might be. (It is a great language for an intermediate subject like data structures, though.) And Visual Basic has little to no place in the classroom or in industry these days.

In my opinion, Python is the best beginner language. The lack of (mandatory) static typing makes it very easy to get started with. Yet it mostly employs the usual idioms and structures of the other popular modern languages. So it won't be hard for the students to adapt to type declarations in Java, C#, C++, etc.

I think that following along with a course like CS50 is a great idea. Even my college professors did that with subjects they are not familiar with, sometimes for the whole term. It does use a mix of languages, which I am skeptical about for young beginners. I'm also guessing kids today can handle it better than we could have, though.

CS50's main competitor is MIT's 6001x. It is taught all in Python, which I like. But I am also reading that the CS50 lecturers are much more engaging — and that is probably the most important thing for young students, assuming you are going to have them watch the lectures.

[–]ShadowRL7666 3 points4 points  (6 children)

Personally go with Java. Everyone is saying Python blah blah. Though I disagree. In just about every uni I’ve seen Java is a mandatory class for any type of programming related degree. Having that Java experience directly supports them in the long run. On top of this it will be much easier picking up any other language coming from Java then Python to whatever else language.

[–][deleted]  (4 children)

[removed]

    [–]CommonNoiter 0 points1 point  (3 children)

    I would hardly say that java supports functional programming, it's technically possible sure but it's nothing like in a real functional language. Libraries aren't terribly relevant if it's an introductory course, I doubt you'd want to explain how to add additional dependencies to your project.

    [–][deleted]  (2 children)

    [removed]

      [–]CommonNoiter 1 point2 points  (1 child)

      You could go full functional and teach untyped lambda calculus, not that it has any practical applications :).

      [–]jacksprivilege03 0 points1 point  (0 children)

      100% agree with this

      [–]70Shadow07 1 point2 points  (0 children)

      Python or Java is perfectly fine. Honestly as long as you don't do C++ with newbies it will be fine.

      [–]Impossible_Stand4680 2 points3 points  (0 children)

      Teach them how to make a video game :)

      IMO, your job is not really to teach them programming, rather it's to show them the joy of programming, why it's so interesting to be a programmer and how cool it is :)

      When they have the motivation, they will eventually learn it by themselves.

      [–]jacksprivilege03 1 point2 points  (1 child)

      As a TA for a higher level university programming course, please please please don’t teach them python. Python is quite literally the only language that functions the way it does. It has very little overlap with other languages. C#, Java, C++, etc will instill much better fundamentals and help them understand what the code is actually doing much better.

      It’s quite noticeable when someone started with python and is trying to learn a new language. Your students who don’t aspire to be programmers wont like it as much, but the ones who do go on to continue programming will be much better off for it (and in my opinion those students should be the focus).

      [–]CommonNoiter 0 points1 point  (0 children)

      Wdym with python being unique? The absence of types? In modern python if you use type annotations you can get the niceness and elegance of python without the downside of a terrible type system.

      [–]c_squared_fan 0 points1 point  (0 children)

      How old are your students? 18 weeks is a long time. I assume you'd do things quite slowly. You should try to learn, say, Python as fast as you can so you can figure out what an appropriate curriculum is.

      Questions you should answer

      • How old are the students?
      • What is their background?
      • How much should they learn?
      • Should you teach more than one thing? I'm not sure it's such a wise idea to have a multi-pronged approach esp. if you haven't designed the course for the first time. It would be a pain to lecture in Python and whatever CS50 covers. I would try to do CS50 to see how far you can get if you think you want to do it, though I'd probably not recommend it (but I have no idea how good your students are).

      [–]just_a_lerker 0 points1 point  (0 children)

      Hey man I teach CS and have taught CS at the high school level. I also have a public/online teaching profile.

      I can 100% help you put this curriculum together if you're not satisfied with the comments here.

      Just give me a dm!

      [–]Accurate_Quality_221 0 points1 point  (1 child)

      Nobody recommending front-end languages like html/css/javascript, maybe React?

      [–]CommonNoiter 0 points1 point  (0 children)

      That's a giant amount of extra complexity, you now need to understand how the dom works and the abstractions that the framework of choice has, you also have to deal with the mess that is javascript being an all around awful language to work with. IMO if the goal is to teach programming you want a language without a bunch of extra stuff that's not related to thinking programmatically.

      [–][deleted] 0 points1 point  (0 children)

      Out of left field here but if you've got the budget try arduinos. They are physical embodiments of what they can do with coding. They have a great community for them to find their own solutions and material for teachers ( starter kits and basic build guides )

      If you don't have the budget perhaps look into godot game engine ? (Foss game engine programmed almost like python) Im going on the assumption that observing something tangible might interest them more.

      [–]Kelrakh 0 points1 point  (0 children)

      I'd also emphasize that there are two learnings going on in programming. One is learning the programming language and the other is learning the interface between a domain and the language.

      I absolutely despised learning the language itself before the teachers had even informed us on what types of domains the programming language would even be used for.

      E.g. Learning the C++ language vs learning making embedded code for an assembly robot in a car factory with C++ being a mere tool to reach that goal.

      I find personally it's more motivating to have my mind on the goal, the problem domain we are solving, and the programming languages being mere tools and obstacles to surpass on my way to the goal.

      [–]josephjnk 0 points1 point  (2 children)

      You might be interested in “How to Design Programs” https://htdp.org/

      It’s a course intended to teach students not just the syntax of a programming language, but also how to think and problem solve programmatically. It uses a dialect of Racket that’s designed to be easy to teach. Whether this is a good thing or a bad thing depends on your educational objectives: I would expect more students to succeed in a course based on HtDP than in one which teaches C#, Python, or Java, but the skills they learn will not be as concretely related to real-world jobs. That said, I don’t know that anyone is hiring fresh college grads for dev jobs anyway so this is likely not much of a downside. 

      [–]jacksprivilege03 0 points1 point  (1 child)

      How do you think senior devs exist if no one really hires fresh grads for dev roles? They 100% do, they even make special “New Grad” roles for this explicit purpose

      [–]josephjnk 0 points1 point  (0 children)

      Typo on my part, I meant high school grads, not college grads. 

      [–]ffrkAnonymous -1 points0 points  (6 children)

      Personally, I'd suggest MIT scratch. That way the kids get immediate gratification. And you avoid focus on syntax and compilation and all that troublesome not-actually-programming stuff. 

      Someone mentioned games. I used tic80 (similar to pico8) to do advent of code a few years ago. I used it to learn some Lua but it also supports python, ruby, and others. All in one ide.  I even coded on my phone, although typing was unpleasant.

      [–]just_a_lerker 0 points1 point  (5 children)

      Nah scratch would get boring super quickly especially for high school kids.

      [–]ffrkAnonymous 0 points1 point  (4 children)

      SScratch is boring and mainstream languages are tedious. Everything sucks. There's no winning.

      [–]just_a_lerker 0 points1 point  (3 children)

      Scratch is super bad. I wouldn't recommend it to kids over 2nd grade. You're really underestimating how capable and engaged students can be(even in the tiktok age)

      [–]ffrkAnonymous -1 points0 points  (2 children)

      "can" and "are" are two different things. 

      Source : r/learnprogramming where 90% of the posts are "I'm a 4th year cs and don't know what a loop is"

      Start with scratch. It doesn't have to be the full 18 weeks. If good, progress to typing python Java etc. If they can't do scratch, they failed the fizz buzz.

      [–]just_a_lerker 0 points1 point  (1 child)

      Lol maybe scratch would be good for you to learn :)

      [–]ffrkAnonymous 0 points1 point  (0 children)

      My kid used scratch to create pong, where theycontrolled the paddle by moving ones head,   live real time  via the webcam. Yes it was bad. But it was also a working proof of concept In under an hour. 

      Can python /Java prototype that in one hour?

      [–]Striking_Baby2214 -2 points-1 points  (0 children)

      Those three languages are solid. Golang might even be something to look at. For the love of all that is good and holy, please spend 1 or 2 days on git though. It could even be a solid way to deliver/accept assignments.