top | item 14185995

(no title)

itsautomatisch | 8 years ago

I think something like Racket or other Lisps are much easier to wrap your head around as a first principles language. Python has its own set of problems, and JavaScript is complicated even for experienced programmers. If something more "modern" was needed, Ruby would also be a fantastic choice. It's easy to pick up, reinforces object-oriented design, and it has Rails.

I get why people think learning C first makes more sense as it builds strong fundamentals, but it encourages people to think a certain way that doesn't really apply to newer languages. I think you can really see that when you look at courses that teach both C and C++, where too much time is spent on doing things in C and not really learning how to work idiomatically with C++. If you compare C to a Lisp, I feel like the latter is far more applicable to modern everyday programming than the former, especially with the resurgence of functional programming.

discuss

order

cholantesh|8 years ago

I can't comment on the Lisps, Python, or Ruby, as my experience with them is limited at best. However, I believe that C/++ is a fantastic pedagogical choice - admittedly, though, I am biased - this was how I was taught in college. I feel that C allows you to get up and running with the basics very quickly (hello world, basic operations with numbers and strings, file I/O, etc), and builds strong habits around using data structures efficiently.

>I think you can really see that when you look at courses that teach both C and C++, where too much time is spent on doing things in C and not really learning how to work idiomatically with C++.

I think teaching a language should not be the primary goal of most software engineering courses. Instead, a language should be chosen that complements the syllabus. This usually suggests that it plays well with a particular paradigm and doesn't have too many quirks that delay a student's progress with the material. C++, in my experience, is used to introduce students to OOP, and I think it makes a fine choice for this.

>If you compare C to a Lisp, I feel like the latter is far more applicable to modern everyday programming than the former, especially with the resurgence of functional programming.

I think it's a bit early on to say that functional is more applicable to modern programming as compared to OOP. Iterative is obviously a no-go, but most developers today are immersed in OO and BAs/product managers speak it a bit more fluently than they do FP. That said, if you're just starting out, you can probably jump in to FP more easily than you could if you were to learn OO first.