f# (and also ocaml and sml) have all those and much more. they are much more consistent and principled in their design, which makes things simpler to understand.
for example, in all three languages above, expressions are much easier to understand because they always return a value. this makes code easier to reason about. this is not true in python.
the languages i mentioned do have static typing but they have type inference. so you get the best of both worlds. you do need to type annotate at some points to clarify things, but this isn't a problem as it documents to both the user and compiler.
given your above reasons, you owe it to yourself to learn an ml. there is the programming languages course on coursera by dan grossman, which uses sml in the first part, and the ocaml mooc just started where you still have time to register and complete it.
danabramsI’ve taken this course and it’s excellent, all three parts.
It makes me wish there were a modern standard ML, without laziness, typeclasses or Object Oriented-ness.simplifyDonaldPShimodaTry looking at https://people.mpi-sws.org/~rossberg/1ml/sofetchI guess the https://mythryl.org/ dream died with its creator.YoricWell, given that OCaml almost doesn't use it's optional Object Oriented-ness, that might be what you're looking for.jcelerierdavidivadavid> Well, given that OCaml almost doesn't use it's optional Object Oriented-ness, that might be what you're looking for.
so... you use OCaml without modules ?Well, isn't that just Standard ML?sanderjdWould a non-OO style of OCaml be what you want, or if not, what is it missing?nerdponxNot knowing any ML myself, what is it about ML that you want to retain?sacado2would Elm do the trick?For anybody looking for a similar-ish syllabus with different material, Matthew Flatt's introductory programming languages course is available online at . It's in Plait (formerly PLAI-Typed, a smaller dialect of Racket) and was really a great class, in my opinion. (I took this as a junior at the U.)tobbe2064Took this course when I started moving towards software development and I thought it was great. It has a higher academic level then most introductory courses and its been great for developing intuition about the craftappleflaxenHow much is it? (It seems like there is no way to see without creating an account - yuck)nikofeyndavidivadavidit’s free. you can pay for each part to get a certificate or just take it for free.As a (serious) hobbyist, I thought that class was fantastic.
As a self-taught developer, I used to think that some of the theoretical elements were overhyped. I can build iOS apps that work, and I did just that for the last 2-3 years. However, many of the programs that I wrote have not been as easy to maintain as I would like and some difficult to fix bugs have popped up overtime, both of which are due to a lack of deeper understanding of CS fundamentals. Last year I started interviewing and was ridiculed at one company in particular for a lack of CS knowledge. Afterwords I started exploring a lot of the CS concepts listed in this link and I have since found numerous ways to improve my code quality and have a better understanding of how CS best practices came to be. I also used to think that algorithms and data structures were relatively useless for an iOS developer, and I was able to do the job without them, thus proving my point. However, after gaining a better understanding, it quickly becomes clear that things like view hierarchies are simply trees and understanding ways to traverse these hierarchies can lead to much cleaner code. With the open sourcing of Swift, I also became more interested in understanding the language, but a lot of the language design decisions didn't make sense to me until I gained a better understanding of CS fundamentals. I have found the programming languages course on Coursera  to be particularly useful, and have also greatly enjoyed the book Designing Data Intensive Applications . There's also a great video from this year's WWDC that really inspires algorithm study and use in everyday applications .
A very recognizable problem! While I'm definitely still trying to figure this out for myself, here are a few of my thoughts and experiences:
1) books usually trump courses books are much easier to browse through. pick and choose what you need. Do make notes, or in 6-12 months it will be like you had never read it at all. Courses seem nice in that they offer varied learning - a lecturer, assignments, a forum for questions, a shiny certificate at the end.. but you have little control over pacing, and there just aren't enough solid ways to judge beforehand if the course is any good. Trudged through many hours of bad/repetitive content before I understood this :)
2) don't memorise specifics, understand design choices if you haven't done so already, I can really recommend looking into how languages are built - what are the paradigms / design choices. I'll even recommend a MOOC: https://www.coursera.org/learn/programming-languages . A focus on design makes it much easier, at least in my experience, to pick up a new language and become an 'expert' at it; nobody will turn to you for help writing a loop or grokking a few conditionals (I hope). But understanding, let's say, prototypal inheritance in JS and how this differs from other languages, or the effect of having (or lacking) functions as first-class citizens, figuring out what are the language core concepts and what is just syntactic sugar - this let's you reason about languages and problems on a whole different level.
3) if you have the opportunity; coach/teach trying to teach stuff to a few interested souls is a stellar way to force yourself to order your thoughts. Pick something that's right at the edge of your audience's skill level, and explain it in the cleanest, concisest way you can. It's a win-win, in my experience.
4) create something the hardest part about learning a new language is not the language specifics, but learning the ecosystem. What are the tools and libraries you must use or avoid, what is the right dev setup, how do you build/deploy, and in some god-forsaken cases, how do you even version control a project? The only way to really learn this imho is to just start building a small project.
These are only partial solutions; it still takes a lot of time and effort, and I probably haven't come close to maximising efficiency of self-study :). Don't forget to have fun though!
Looking forward to reading more about this.
Linear Dynamical Systems by Stephen Boyd of Stanford: https://www.youtube.com/watch?v=bf1264iFr-w&list=PL06960BA52...
Programming Languages by Dan Grossman of University of Washington: https://www.coursera.org/learn/programming-languages
Programming Languages, Dan Grossman (Coursera has split it into 3 parts now): https://www.coursera.org/learn/programming-languages
I took the Programming Languages course on Coursera which is so far the best course for me. It changed the way I learn any new programming language.
I see that they have split the course into 2 parts.
ReasonML is IMO quite ready for production work if you use it for building server-side applications with NodeJS or rich front-end applications with React (ReasonReact).
The target audience for Reason (at least for the moment) are web application developers who want to level up as programmers and want to build elegant, sturdy production systems.
Reason and Elm together are democratizing statically typed functional programming and I believe that the next 10 years are going to see a massive change in the programming language landscape, with the practice of typed FP finally finding adoption in mainstream commercial programming.
The allure of Reason is in its packaging of OCaml to the web browser (which is made possible by BuckleScript - the actual OCaml to JS compiler doing the heavy lifting), its syntax that is familiar to the vast majority of programmers today, and the large ecosystem of bindings, libraries, and documentation that the team has put out.
OCaml is a very pragmatic language; its main pull is its powerful static type system and immutable, functional programming, but the "O" in OCaml stands for "Objective" - it is an implementation of CAML with support for object-oriented programming. But you almost never need objects. OCaml's module system and its idioms allows you to write well-encapsulated code without mutation, and when you actually need to write honest to metal imperative code, you can do it with abandon because OCaml is not a "pure" functional language like Haskell.
The term static type system might put off programmers whose only exposure to types were with Java, C++, C# and similar languages. But this thing is very different. Types in OCaml are more like structs in C; you just say the shape of your data, and you write pure functions that operate on them, and that's pretty much it. The magic happens in how you define the shape of your data. "Making invalid states impossible" is the siren call for statically typed FP languages, and from that flows a lot of natural constraints that can teach us how to structure programs.
The following links illustrate the promise of Typed FP very nicely, do watch it so that you'll have some inkling of the fun you'll have when you start learning ReasonML:
Designing with Types: Making illegal states unrepresentable by Scott Wlaschin. https://fsharpforfunandprofit.com/posts/designing-with-types...
"Making Impossible States Impossible" by Richard Feldman. https://www.youtube.com/watch?v=IcgmSRJHu_8
Ideology by Gary Bernhardt. https://www.destroyallsoftware.com/talks/ideology
Effective ML Revisited by Yaron Minsky. https://blog.janestreet.com/effective-ml-revisited/
Programming Languages, Part A by Dan Grossman. https://www.coursera.org/learn/programming-languages
I always recommend https://www.coursera.org/learn/programming-languages for learning FP, the professor has fantastic explanatory videos that are really clear and concise. You'll get the most out of it from doing the exercises, but you can still take away a lot from just watching the videos.
IMO, the best functional programming resource out there is this free online course by Prof. Dan Grossman at UW: https://www.coursera.org/learn/programming-languages
He focuses on teaching the syntax, semantics, and idiom of Standard ML, a classic functional programming language that's closely related to OCaml, Haskell, and others. He has a gift for explaining simply and clearly and keeps his lecture videos short (~10min) which helps to absorb their info. Check it out: https://www.coursera.org/learn/programming-languages
I recommend something similar ... Prof. Dan Grossman's Programming Languages course in Coursera, taught using Standard ML: https://www.coursera.org/learn/programming-languages
He starts by teaching statically typed functional programming with an emphasis on understanding semantics and idioms; then in the following modules he covers Racket and Ruby to compare and contrast dynamically typed homoiconic programming and object-oriented programming.
Rust is not a functional programming language :-) it has features which are ML-like, and it has first-class functions, but it doesn't really encourage functional idioms like the ML languages do.
If you want a great intro to ML-style statically typed functional programming (without the Haskell-style monads and functors jargon), check out https://www.coursera.org/learn/programming-languages/ . You'll get a lot out of even just going through the (10 minute each) lecture videos, Prof. Dan Grossman is a great explainer and it's a treat finding out the cool syntax, semantics and idioms of an ML language.
Just want to reiterate the comment at https://news.ycombinator.com/item?id=13782032 and say that learning specifically statically typed functional programming totally changed me as a developer. It opened my mind to the semantics of programming languages and to the design of programs in the small and in the large.
If you're writing C, then you're a developer, no doubt about that. But if you're interested in the 'meaning' of programming and software engineering, then I highly recommend learning functional programming. Here's an excellent course: https://www.coursera.org/learn/programming-languages/
It's a great resource for F#. If you also want to get really strong in functional programming fundamentals I highly recommend taking Prof. Dan Grossman's free online course https://www.coursera.org/learn/programming-languages/ --he's a great teacher and the subject matter is great for all levels of experience.
Are you a relative newbie at functional programming? Do you have about a month? Then I highly recommend Prof. Dan Grossman's free online course: https://www.coursera.org/learn/programming-languages/
He teaches the syntax, semantics, and idioms of ML-style typed functional programming using the Standard ML language as a teaching vehicle. His explanations and course progression are really good. It will open your eyes to FP.
I can definitely recommend the University of Washington's Coursera on Programming languages. It's available here, and starts every few weeks I think: https://www.coursera.org/learn/programming-languages You'll learn SML (a strongly typed functional language), Racket (in the Lisp-scheme family of languages), and Ruby (to compare the previous languages with object-oriented ones). You'll even write your own language on top of Racket. It is a challenging class but I can say for sure that it has changed the way I think about programming.
I am a huge fan of MOOCs. I strongly believe that these courses and this style of education will be one of the greatest by-products of the modern internet. I was a happy and eager participant in the 'early days' (I took ~2 years off of work in 2013-2014 to re-charge, and took a number of online courses for fun), and here are some of my thoughts:
- Completion rate is a very poor metric to measure the 'success' of the concept. I attempted more than a dozen courses, but only completed ~4-5 of them. But that doesn't mean I didn't learn anything. For a number of courses, I got a good way through the material (75%+) but got distracted/side tracked (in one particular case, I was 90% of the way through a very challenging and interesting course when a buddy and I decided to do a last minute trip to Mexico for some camping/surfing. Needless to say, it was hard to find internet access out there). Of the courses I completed, at least two of those I had to attempt more than once. But regardless of the final outcome, I learned a ton. There were a few courses that I didn't find interesting and walked away from, but for the most part, I learned something from every course, regardless of whether I completed it or not.
- By traditional metrics, I wasn't the best student in college. There were a number of reasons for this, but a key reason was the inability to focus during lectures. I just hadn't had enough life experience to learn how to optimize my ability to pay attention in class for multiple hours a day. In high school, the class sizes were small and the teachers were engaging enough to make it easy for me. In college (big public university) there were hundreds of students in each lecture and the professors were more interested in research than they were in lectures (with a few exceptions). I now know that I need the right balance of coffee, adequate sleep, and exercise in order to be able to sit through 4+ hours of very dry lectures, but it took years of hard won experience to find that balance. MOOCs are amazing because they let you optimize the 'lecture' time to best suite your schedule and your 'optimum time of focus'. And the forums were a great, asynchronous way to share knowledge between TA's and students (as opposed to my college experience where you had 1-2 office hours per week, with a dozen+ students competing for attention). Had MOOC-like teaching material (video lectures, forums, online exercises) been available when I was in college, I have no doubt that I would have done way better.
- Considering how expensive traditional college is getting, I think a very cool and plausible alternative would be to allow students to spend a few years doing internships/apprenticeships part time, and doing nano-degrees and MOOCs part time. A company could pay for the classes, as well as a stipend/salary for the internship. I learned programming and statistics on the job (seems like it's getting more rare these days for on the job training) but being able to take a step back and take more traditional classes on Coursera helped fill in some of the knowledge gaps that had been developing over the years. I feel like mixing both practical, in demand skills and theoretical knowledge at the same time could result in a much more engaging and deep understanding of the subject matter as opposed to the traditional way of all theory in college followed by all 'hands-on' in the real world.
Anyways, a bit of rant. But it's been a while since a MOOC post has made it to the front page of HN, and it's a holiday weekend!
 https://www.coursera.org/learn/programming-languages Back when I took this, it was just a single course. Looks like they broke it up into 3 parts. Would have been nice to have that option when I took it!
That's one of the reasons I loved the "programming languages" course on coursera. The course went through 3 languages, ML, Racket and Ruby giving 2 weeks to each language. And then spent time contrasting the weaknesses and strengths of the different languages and their paradigms.
 https://www.coursera.org/learn/programming-languages (Starts up again on the 9th of January :) )
For those unaware, Coursera shutdown their old platform on Jun 30th .
Many of the courses on the old platform are slowly coming back on the new platform. When I built the list  of courses on the old platform the course count was 472, now its around 390. Some of the notables that I was excited to see come back are:
Neural Networks for Machine Learning with Geoffrey Hinton 
Computer Architecture from Princeton 
Programming Languages from UW by Dan Grossman 
Introduction to Natural Language Processing by Dragomir Radev 
Many of these courses were last offered a couple of years ago. Hopefully more courses form the list  start coming back.
I've been taking a PLT class in school and while the list above is extremely comprehensive and thorough, I'd argue that you do not need to read up all of it to get a good idea of programming languages.
Without even learning all the theory, you can get pretty far ahead (IMHO) in a building your own programming language (if that's the goal). The two resources that I've found invaluable are - the prog lang course by Dan Grossman and PLAI by Shriram. Lastly, there's also a whole bunch of interesting university courses that you can refer to - https://github.com/prakhar1989/awesome-courses#programming-l...
I went through the videos of a coursera class for Programming Languages with Dan Grossman. https://www.coursera.org/course/proglang
He starts teaching programming with ML and then moves to Racket and ends with Ruby.
I had tried to teach myself Haskell several times but it always fell flat. I ended up loving ML and Racket (Especially Racket) the 1ML does look very interesting. Racket is pretty amazing for me. I learned a ton and was able to really improve my code in Python and R.
"Programming Languages" - https://www.coursera.org/course/proglang
"Compilers" - https://www.coursera.org/course/compilers
> I have found Haskell very difficult to use with Cabal and its package management. The reason I went to Haskell was to teach myself functional programming. After struggling and going through 2 books I still felt like I hated Haskell due to making the environment just work. I work in three different locations and to get all 5 computers to work in Haskell was a serious pain.
Package management is certainly the worst thing about Haskell at the moment. Just yesterday I had to fight with cabal, and sit through hours of compilation, to build my application with profiling enabled :(
There's recently been a surge of activity in this area though, which seems to have been driven by FPComplete and consulting with industry:
- First there's "Stackage", which is basically a curated version of the package repository Hackage. Anyone can upload a new package to Hackage, and package authors can make breaking changes whenever they like. Stackage takes consistent snapshots of Hackage, where the package versions are known to work together.
- Next there's "Stack", which is an alternative UI for Cabal (ie. it replaces the commandline tools, but uses the same libraries and infrastructure). Nice features of stack are that it can fetch/install GHC (so "bootstrapping" is much easier), and it doesn't use a global package database (cabal has this feature with "sandboxes", but they're opt-in).
- Personally, I use Nix for managing Haskell packages. It's a bit like stack or cabal sandboxes taken to the extreme, although its Windows support is still pretty experimental. It will fetch pre-built packages from a cache, rather than building stuff locally (as long as you're using the defaults, at least).
Take a look at https://www.fpcomplete.com/blog/2015/06/stack-0-1-release for more info.
> This lead me to see what else is out there. It lead me to https://www.coursera.org/course/proglang which introduced me to Racket and I loved it and felt that Racket was the perfect fit for me.
Racket (and Scheme in general) is also an excellent functional programming language. Having dynamic types and macros makes it a very different beast to Haskell, so it's definitely worth learning both :)
I love R and I love programming in it, but I have always thought I need to learn Julia due to a few things including speed, but that the R community keeps coming out with great answers to those questions where Julia keeps my interest. I don't see how this would speed up my typical R programming or code to be worth learning Haskell. What am I missing and yes I read the whole article.
I have found Haskell very difficult to use with Cabal and its package management. The reason I went to Haskell was to teach myself functional programming. After struggling and going through 2 books I still felt like I hated Haskell due to making the environment just work. I work in three different locations and to get all 5 computers to work in Haskell was a serious pain. This lead me to see what else is out there. It lead me to https://www.coursera.org/course/proglang which introduced me to Racket and I loved it and felt that Racket was the perfect fit for me.
maybe take the https://www.coursera.org/course/proglang MOOC
at one point you write a small evaluator, then extend it through macros. Shows you how to get the linguistic trait you'd like in a few lines. One thing lisp has been used to demonstrate since its birth.
(the course uses ruby and sml for other subjects)
I took the second live offering of Dan Grossman's class on Coursera in fall 2013. There was another in the last year, so if the pattern holds, there would be another in the next few months or so.
I am working through this coursea course via YouTube and I also found some github repos that have the course's homework material. https://www.coursera.org/course/proglang
The first language is ML and than moves to Racket. Really learned a ton just doing the first weeks. It is more of a CS 202 Programming Languages course which was perfect for me since I really wanted to learn more about functional programming.
If you haven't had much functional programming experience I can't recommend Dan Grossman's Programming Languages class on Coursera enough. You go through three languages in the course, Racket, ML, and Ruby.
I have only used F# for a couple months, but I have a decent background in ML thanks to the Dan Grossman's incredible programming languages course.
I would say that if I can use F# Data or Deedle on a project, I will. Those tools totally make it worth learning a little F#.
I've enjoyed the following resources:
HTDP - http://htdp.org/
Dan Grossman's Programming Languages Coursera course - https://www.coursera.org/course/proglang
The Racket docs - http://docs.racket-lang.org/
Chris Jester-Young's StackOverflow answers - http://stackoverflow.com/search?q=user:13+[racket]
This list won't be as useful to you as it was to me, because you already know Common Lisp, but hopefully other readers will find it interesting.
NB - the ProgLang Coursera course features Racket alongside SML, Ruby and quite a lot of material that will seem very basic to experienced programmers, but it's a really good introduction of some of its key features. I think this is probably my weakest recommendation to someone who already knows Common Lisp (or similar) and my strongest recommendation to someone who does not.
Beyond that, the default DrRacket IDE comes with a whole load of teaching resources bundled by default, including (iirc) resources to help build a game in Racket - this package I think http://docs.racket-lang.org/teachpack/2htdpuniverse.html .
As for differences/advantages of Racket, I would say that there are few that I'm aware of beyond the simplicity of learning the language, the great tools, and the ease with which you can get up and running. Nothing inherent to the language that I'm aware of, and I would suspect that Common Lisp is great if you're already part of that community and 'know where everything is' so-to-speak. I've heard that CLOS is better than Racket's OOP abilities.
I really do love the language, though, it's one of the easiest and most joyful experiences I've ever had with a programming language. Just maybe not a necessity if you already know CL.
The Programming Languages course on Coursera ( https://www.coursera.org/course/proglang ) spends about a third of the course on SML before moving on to Racket and Ruby. It might be of interest to others who want a somewhat introductory course which uses ML.
I don't know if Swift would be the best language to learn programming. Python is probably a better option. I would avoid platform specific languages until you are hired to work in that space. Open platforms like Python are much easier than close platforms to get started in Computer Science.
A good place to start with python would be the Introduction to Computer Science course on Udacity.
If you are interested in ML, I can recommend taking the Programming Languages course on Coursera after the python course.
Martin Ordersky hisself is teaching Functional Programming in Scala starting September 15th:
If you don't know C, or Python or Ruby, there's always "The hard way" with Zed Shaw:
October 2, Coursera is abain offering Dan Grossman's Programming Languages , it covers general concepts in programming language design using SML, Racket, and Ruby.
The "Programming Language" course at coursera , which is directly adapted from a course at U. Washington by Dan Grossman  features SML, Racket and Ruby as three languages exhibiting different properties (FP, OO and static typing).
(I have to say that it was extremely good !)
I took this class and enjoyed it; it was my first experience with scala, but I had previously taken grossman's programming languages course which introduce me to FP ( https://www.coursera.org/course/proglang ).
Actually I thought grossman's was better at giving a comparison of FP and OO and hit on some more of the theory in FP (for example, odersky doesn't talk about the expression problem, but grossman did).
There will still be a lot in scala that's confusing after taking this class, but it's trying to teach the concepts rather than the language details.
That being said, I really enjoyed it and would recommend it.
Scala is an interesting blend of FP and OO. Just be aware that the ML-style languages (or even a lisp e.g. Racket) really feel more like FP. The blend is what makes it a mind-expanding course.
I'm a C# guy at work too. I can't say I've touched much C++ outside of college also a while ago, but I've been studying functional programming for a while and really enjoying the new concepts it teaches. It can be a bit humbling at times though.
I got some good perspective with https://www.coursera.org/course/proglang and you could do worse than taking grossman's excellent course. It helps to have some structure and a schedule when starting imho.
I will admit at times I wish I had more chops (closer to the metal i.e. C or C++), but I think I was eventually just more interested in new ways to think about programming, and I'm not sure I'd get the same pleasure out of digging back into C++.
Obviously, if you know something more about your intended use case (i.e. you want to program games), you can make a more informed decision.
Here you go: https://www.coursera.org/course/proglang
Dan Grossman's Programming Languages class on Coursera includes a good treatment of OOP in the later weeks.
I can somewhat relate to the conversations in the article. While I admit that I don't think I used OOP correctly, since I started using more functions instead of classes (in Python, my primary language), I observed that it has been more convenient to reuse and refactor existing code.
Another observation is that it's far easier to read someone else's code if there is no mutation. For eg. I have enrolled for the proglang course on coursera and only yesterday I completed this weeks homework which involves enhancing an already written game of Tetris in Ruby. Major part of the assignment was about reading and understanding the provided code that uses OOP and makes heavy use of mutation. It was quite difficult to understand what one method does without having a picture of the current state of the object, specially with side effecting methods that call other side effecting methods. A few times I had to add print statements here and there to actually understand which one is being when and how many times. While I could score full marks in the end, I am still not confident about completely understanding the code and have a feeling that if I ever need to work with it again, the amount of time it will take to load up everything again into my mind's memory will be equal to what it took for the first time.
Of course, one could only make a true comparison by studying an implementation of Tetris written in FP style. But from my experience with reading and writing code in Erlang (for production) and Racket, Clojure (as hobby) I find it relatively easier to study functional code written by others.
Oh god. Don't they realize that "ninjas" was replaced by "badasses" around 2011, officially supplanting "rockstars" (which first appeared in 2009).
There is no indication of what language is expected, but presumably it's java, because companies that do this shit, are entirely java.
I feel the urge to click on the button, but I've been doing Dan Grossman's Programming Language MOOC ( https://www.coursera.org/course/proglang ) lately, so I'm all about functional programming languages, which I suspect this particular programming test does not grok.. and the button looks like it's entirely about product managers and their conception of what programmers do. Which rhymes with "fuck you."
I am a law major, who did 1 year of engineering a long time ago. I always been a math geek, but 0 in CS. In my last year of college, i created a startup with some friends. It was a ERP for small lawyers firms. That didnt work out, but turned me on into CS.
Now i work as a product manager in a bigger firm (also law related), and i'm learning how to code through Coursera and Edx. I HIGHLY recommend them.
They are the future. The classes are very good. Way better than a regular class over here (Brazil).
If you are intereste in theoretical CS, here are 2 classes that you may be interested:
Programming Languages ( https://www.coursera.org/course/proglang ): It focuses on functional programming. The first edition was VERY high recommended. Here you will learn about functional paradigm, and the differences in using it in several languages (some purely functional, like SML, some hybrid, like Ruby)
Automata ( https://www.coursera.org/course/automata ): It cant get more theoretical than this. The professor is Jeff Ullman. A legend. For free.
Machine Learning: A second version of Andrew Ng just ended. The third edition will be offered soon.
see.stanford.edu is also a very nice place to learn. They are actual stanford classes taped, and offered for free, online. I`m taking the three introdutory classes, and the machine learning classes.
Also, there are several architecture, compilers and algorithms classes too. After my first course (cs50.net), i realized that colleges (at least for CS) are redundant right now. They can be awsome. But, if you are short of money, or are already working, these online classes can fill the gap, easily.
add me on skype if you want to talk about more classes: lucasribeiropereira
PS. They can be VERY challenge. Take one, at most two at a time. 10-20 hours per week per course is a good rule of thumb
A recent version of programming languages survey class available to anyone is the Coursera class on Programming Langauges from Dan Grossman:
It will be taught again in the fall. He covers three languages (SML, Racket, and Ruby) in ten weeks, hitting three of the four quadrants on strongly typed/dynamic and functional/object oriented.
I've been taking the Programming Languages course on Coursera, the motivation for the course is exactly what you're talking about. "Syntax doesn't matter" has become something of a catchphrase in the lectures, emphasis is always on semantics and how different languages accomplish the same/similar things.
I'm having a hard time keeping up with all these awesome classes.
Coursera's PL class is starting in a few days: https://www.coursera.org/course/proglang
Brown's Intro to PL class: http://cs.brown.edu/courses/cs173/2012/Videos/