Programming Languages, Part A
This course is an introduction to the basic concepts of programming languages, with a strong emphasis on functional programming.
Recursion Higher-Order Function Pattern Matching Functional Programming
Next cohort starts June 22. Accessible for free. Completion certificates are offered.
Affiliate disclosure: Please use the blue and green buttons to visit Coursera if you plan on enrolling in a course. Commissions Reddsera receives from using these links will keep this site online and ad-free. Reddsera will not receive commissions if you only use course links found in the below Reddit discussions.
University of Washington
Reddit Posts and Comments
6 posts • 81 mentions • top 64 shown below
756 points • castleguar
If you are interested in learning Functional Programming, Recursion, Pattern Matching, Higher Order Functions, this is the course.
One happy customer here, I'm not finished the course yet, but so far its really blowing my mind, it's hard, but I'm enjoying it.
The language used is SML ( r/sml ) which is not the most popular language, but it's very similar to Ocaml, and shares a lot with F# and Haskell and seems to be a great spot to jump in. I found the course from Hacker News, a number of people there highly recommended it.
52 points • _compunaut_
Great course to get into Functional Programming and Emacs/Elisp
Just wanted to let you know that the mooc/course which introduced me to Emacs and Functional Programming is starting again. Although the course is not about Emacs it is required in the first part of the course and can be used throughout.
The second part will teach you programming concepts in Racket. Since Racket is a Scheme it can serve as an introduction to Emacs Lisp as well. I can wholeheartedly recommend this course for anyone who learns Emacs Lisp on his own without any functional programming background. I did not complete the course the last time but it really got me started to get behind the Introduction to Emacs Lisp level. Besides that it is the best online course I have ever taken.
If anyone is interested, I participate in the current course again and it would be great to find some others from this channel to form some kind of Emacs/Elisp interested people kind of learning group.
The course already started but registration is still open:
Because there is some interest I have created a subreddit for the study group. You can find it here:
Join us now :)
Even if we are only a handful of people I hope we can build a place for Emacs enthusiasts with fruitful discussions around course topics and help each other to learn more about Functional Programming.
16 points • Hufe
Highly recommend this free course from the University of Washington for people who want to begin functional programming
3319 points • ______DEADPOOL______
Here's a SANITIZED list of 530+ free online programming/CS courses (MOOCs) with feedback(i.e. exams/homeworks/assignments) that you can start this month (December 2016)
So, a submission on this sub to a huge list of MOOC courses caught my attention today as I've been trying to learn programming myself. So I look into the comments first to see what courses people were taking, when a comment caught my attention that says: "This is a great resouces but beware, OP ran some of the links through some pay site so that he profits out of traffic and hid this using bit.ly links...."
So I decided to investigate further, and sure enough. uBlock Origin blocked the first link that I clicked. It turns out, pretty much every link to the course on the post is a bit.ly link hiding a reference link to a spam site linksynergy.com. The url itself has reference id and everything. Full link:
I posted this in the comment and reported the post for spamming, thought nothing more of it, and move on. In my goofing off, I ended up installing NVIDIA CodeWorks, and the damn installer turned out to be a download manager for installer to a bunch of stuffs it needed to install. So, I let it run and while it downloads, I thought I'd fire up Overwatch and try to climb out of gold rank, when for some reason, I thought about the MOOC post again.
Hiding a reference link using bit.ly is not only spamming, but it's also unethical because bit.ly tracks where clicks come from and the whole practice preys on the innocent who just wanted to learn some programming stuffs.
So I decided to go through the links and sanitized the bit.ly and removed all the spam links and replace it with direct links to each of the course.
Over the course of cleaning up the links, I found that OP feed all their links through two spam sites that ublock origin blocked:
The first one is the linksynergy site as I've mentioned before.
The second one is through awin1.com
I hope this sort of shady spamming behavior is not tolerated in this sub, and doesn't happen again. But just in case another post comes up again next month, would someone be so kind as to make a bit.ly expander plugin for chrome or something to automate this cleanup without exposing the user's location, and clicking on the reference, etc. I didn't want to run this through python in case something bad happens and some dumb protocol got exposed or whatever.
Anyway, here's the full sanitized list. I've left the links bare so you can see this list has not been compromised. And if you'll excuse me, I'm going to run spybot on my system now.
Happy learning. GLHF.
Course Name|Start Date|Length in weeks|Rating :--|:--:|:--:|:--:|:--: NEW Combining and Analyzing Complex Data https://www.coursera.org/learn/data-collection-analytics-project via Coursera|1st Dec|NA|NA NEW Recommender Systems: Evaluation and Metrics https://www.coursera.org/learn/recommender-metrics via Coursera|1st Dec|NA|NA Genomic Data Science and Clustering Bioinformatics V https://www.coursera.org/learn/genomic-data via Coursera|1st Dec|2|3.5★ Regression Modeling in Practice https://www.coursera.org/learn/regression-modeling-practice via Coursera|2nd Dec|4|5★ Genome Sequencing Bioinformatics II https://www.coursera.org/learn/genome-sequencing via Coursera|5th Dec|4|5★ Big Data, Genes, and Medicine https://www.coursera.org/learn/data-genes-medicine via Coursera|5th Dec|NA|NA Probabilistic Graphical Models 1: Representation https://www.coursera.org/learn/probabilistic-graphical-models via Coursera|5th Dec|11|4.4★ Parallel programming https://www.coursera.org/learn/parprog1 via Coursera|5th Dec|NA|5★ Machine Learning With Big Data https://www.coursera.org/learn/big-data-machine-learning via Coursera|5th Dec|4|1.8★ Comparing Genes, Proteins, and Genomes Bioinformatics III https://www.coursera.org/learn/comparing-genomes via Coursera|5th Dec|5|5★ Relational Database Support for Data Warehouses https://www.coursera.org/learn/dwrelational via Coursera|5th Dec|5|2★ Machine Learning Foundations: A Case Study Approach https://www.coursera.org/learn/ml-foundations via Coursera|5th Dec|6|4.2★ Finding Mutations in DNA and Proteins Bioinformatics VI https://www.coursera.org/learn/dna-mutations via Coursera|5th Dec|5|NA Approximation Algorithms Part II https://www.coursera.org/learn/approximation-algorithms-part-2 via Coursera|5th Dec|4|NA Machine Learning: Regression https://www.coursera.org/learn/ml-regression via Coursera|5th Dec|6|4.7★ Finding Hidden Messages in DNA Bioinformatics I https://www.coursera.org/learn/dna-analysis via Coursera|5th Dec|4|4.5★ Machine Learning: Classification https://www.coursera.org/learn/ml-classification via Coursera|5th Dec|7|4.8★ Pattern Discovery in Data Mining https://www.coursera.org/learn/data-patterns via Coursera|5th Dec|4|2.2★ Graph Analytics for Big Data https://www.coursera.org/learn/big-data-graph-analytics via Coursera|5th Dec|4|2.4★ Machine Learning: Clustering & Retrieval https://www.coursera.org/learn/ml-clustering-and-retrieval via Coursera|5th Dec|NA|4.5★ Practical Predictive Analytics: Models and Methods https://www.coursera.org/learn/predictive-analytics via Coursera|5th Dec|4|2.5★ Developing Data Products https://www.coursera.org/learn/data-products via Coursera|5th Dec|4|3.9★ Cloud Computing Applications, Part 2: Big Data and Applications in the Cloud http://bit.ly/2gXcF52 via Coursera|5th Dec|NA|NA Introduction to Recommender Systems: Non-Personalized and Content-Based https://www.coursera.org/learn/recommender-systems-introduction via Coursera|5th Dec|NA|NA Hardware Security https://www.coursera.org/learn/hardware-security via Coursera|5th Dec|6|3★ Cluster Analysis in Data Mining https://www.coursera.org/learn/cluster-analysis via Coursera|12th Dec|4|2.6★ Basic Data Descriptors, Statistical Distributions, and Application to Business Decisions https://www.coursera.org/learn/descriptive-statistics-statistical-distributions-business-application via Coursera|12th Dec|NA|NA Text Mining and Analytics https://www.coursera.org/learn/text-mining via Coursera|12th Dec|4|3.7★ Nearest Neighbor Collaborative Filtering https://www.coursera.org/learn/collaborative-filtering via Coursera|12th Dec|NA|NA Machine Learning for Data Analysis https://www.coursera.org/learn/machine-learning-data-analysis via Coursera|12th Dec|4|3★ Probabilistic Graphical Models 2: Inference https://www.coursera.org/learn/probabilistic-graphical-models-2-inference via Coursera|19th Dec|NA|NA Computational Neuroscience https://www.coursera.org/learn/computational-neuroscience via Coursera|19th Dec|8|3.8★ Algorithms for DNA Sequencing https://www.coursera.org/learn/dna-sequencing via Coursera|19th Dec|4|4.5★ Bioconductor for Genomic Data Science https://www.coursera.org/learn/bioconductor via Coursera|19th Dec|4|3.3★ System Validation 2: Model process behaviour https://www.coursera.org/learn/system-validation-behavior via Coursera|19th Dec|NA|NA System Validation: Automata and behavioural equivalences https://www.coursera.org/learn/automata-system-validation via Coursera|26th Dec|NA|NA Advanced Linear Models for Data Science 1: Least Squares https://www.coursera.org/learn/linear-models via Coursera|26th Dec|NA|NA Big Data Science with the BD2K-LINCS Data Coordination and Integration Center https://www.coursera.org/learn/bd2k-lincs via Coursera|26th Dec|7|4★ Neural Networks for Machine Learning https://www.coursera.org/learn/neural-networks via Coursera|26th Dec|8|4.5★ Hands-on Text Mining and Analytics https://www.coursera.org/learn/text-mining-analytics via Coursera|26th Dec|NA|NA Quantitative Formal Modeling and Worst-Case Performance Analysis https://www.coursera.org/learn/quantitative-formal-modeling-1 via Coursera|26th Dec|4|4★ Embedded Hardware and Operating Systems https://www.coursera.org/learn/embedded-operating-system via Coursera|26th Dec|NA|NA
13 points • dpflug
End of the day, it comes down to preference. Some people try Lisp and love it. Some try it and it never "clicks". On the whole, most programmers who have learned it value it, so there's a good chance it would be good for you.
It absolutely changed the way I program, but it also wasn't my first language. I think it could be a good first language. I also think it may take you longer to realize what makes it special if it's your start (which isn't necissarily a bad thing).
If you have a half an idea of what a variable is and how to write a function (in any language), my typical recommendation is to go through this Programming Languages course. It takes you through type systems, functional programming, and object oriented programming using ML (a Haskell ancestor), Racket (a Scheme/Lisp), and Ruby. It's a great overview of the craft, IMO.
To answer the question you've asked a couple times: You probably won't use it day-to-day. You will, however, learn strategies from it that you'll use the rest of your career.
66 points • daredevildas
Coursera - Programming Languages by University of Washington
Would you consider the 3 part Programming Languages course on Coursera(linked below) a prerequisite or a building block for studies in Programming Language Theory?
32 points • GekWacoctilchugwogdy
[Besoin d'Aide] 39 ans trop vieux pour les métiers du numérique ?
Après quelques années de travail précaire, je suis actuellement une prestation pôle emploi pour mettre en place un nouveau projet professionnel.
J'ai 39 ans et l'idée pour moi est de m'orienter vers les métiers en tension. Mon soucis est que j'ai un profil avec une grosse dominante investigateur et que lors de l'exploration des métiers en concordance avec ce profil ceux qui ressortent sont notamment les métiers du numérique et du développement informatique.
Pour information, j'ai une formation initiale universitaire (Bac+5) qui ne m'a servi à rien (trop générale/ universitaire) suivi d'un BTS en IG (oui il date aussi) et une expérience décevante en support niveau 1 (mauvais choix, je n'y étais pas à ma place).
Mon souci est que je suis du genre à prendre plaisir à suivre des MOOCs comme Programming languages ou à bricoler des trucs sur github/gitlab pour moi ou balancer des PR quand j'ai une besoin d'une fonctionnalité ou si je peux fixer un truc qui ne va pas.
J'avais fait une croix sur les métiers du développement vu mon âge, mais je voudrais quand même poser la question à des gens qui y travaillent. Est ce que le fait que ces métiers soient en tension pourrait, malgré mon âge "avancé", me permettre d'envisager d'y travailler.
PS. Si vous avez des idées de métiers pour des profils à dominante Investigateur, ou l'âge ne serait pas un facteur déterminant, je suis preneur.
9 points • bigiyai
I can highly recommend the this series of courses on programming languages
This is the first part of a free 3 part course on programming languages. I've just completed it and learned so much, and the instructor is a great teacher.
It's an intermediate level course, so you should have some familiarity with at least one mainstream language first, but it does take a fairly ground up approach.
7 points • yawaramin
From your description, it sounds like Professor Dan Grossman’s free online course, Programming Languages, will be a perfect fit for you. It teaches FP using SML (a mostly academic but clean and elegant language), including concepts like currying, recursion, type inference, parametric polymorphism, and modules and modular programming. Worth a look: https://www.coursera.org/learn/programming-languages
6 points • AnAirMagic
Not the original poster, but it's common for many universities to have a "Programming Languages" course. The goal of such courses is to study a number of programming languages, and use that comparison to try and understand a number of important concepts about programming languages in general.
For example, some of the things I learned include:
- static vs dynamic typing (or type-checking)
- strong vs weak typing (my professor hated this terminology, but you will only understand why after you understand type-checking in general)
- Functional vs object-oriented programming (including covariance, contra-variance)
- Immutable vs mutable state
- Recursion vs iteration
And really, it's just really nice to try out a whole bunch of languages and understand some common techniques from, say, functional programming, that can also be useful (but possibly not obvious) in object-oriented programming languages. For example, now that Java has added streams and C# is adding pattern matching, they feel very natural to me because I spent a little bit of time learning SML.
Shoutout to Dan Grossman for his great course!
13 points • belikerber7
This was the hardest course I've ever taken in my entire Life!
Programming Languages, Part A from Coursera. This is definitely one of the best courses available on Coursera. Very challenging and time consuming (not for beginners), but it will without doubt make you a better programmer.
This course opened my mind to many of the different paradigms of programming and did so with comprehensive lectures, an incredible instructor, and useful/highly-illustrative assignments.
The course uses SML, Racket an Ruby to teach you about concepts that can be applied to any programming languages. So, even if you don't know these 3 languages, the knowledge you acquire can easily be applied to any of your favorite languages.
Dan is an amazing teacher. If you're a serious programmer, you MUST take this course! https://www.coursera.org/learn/programming-languages
5 points • tinduck
Yes. The lack of programming experience would make the easy assignments hard, and the hard assignments impossible in the majority of the classes in this program.
If you are the type of programmer who knows how to pick up new languages or tools quickly, you should be fine.
You don't need to be an expert in any language. I wasn't much of C programmer before I took GIOS. I had a one or two basic classes that used C, but nothing really complicated. I did fine in IOS after doing a quick tutorial on Lynda.
But I worked professionally as a C# developer for three years before I entered the program. I had taken a programming languages class before. Computer Engineering was my major as an undergraduate.
You should know were you are at. It sounds to me like you aren't ready. I would recommend that you try to take the Programming Languages course on Coursera by the University of Washington. 
If you struggle with the assignments in that course, you will probably struggle in the OMSCS. While this MOOC is a lot easier than the courses in the OMSCS, I think is simulates the task of learning a new tool or language in by an arbitrarily tight deadline quite well. That's a critical skill that you need to be successful in this program.
 - https://www.coursera.org/learn/programming-languages
4 points • matklad
I don’t know about resources for variance specifically, but this coursera course does a grear job explaining this and other concepts of programming languages: https://www.coursera.org/learn/programming-languages. I highly recommend it!
1144 points • dhawal
Here's a list of 430+ free online programming/CS courses (MOOCs) with feedback(i.e. exams/homeworks/assignments) that you can start this month (September 2016)
Unfortunately I couldn't fit all the courses here because of Reddit's 40,000 character limit. So I removed older self-paced courses from the list. These courses are always open for registration.
They can be found here:
I have also started categorizing the courses listed here by the programming language they are taught in. You can find the list here:
This is not the complete list of MOOCs starting in September 2016, just the ones relevant to this community. The complete list of courses starting in September 2016 can be found over at Class Central (1600+ courses). I maintain a much bigger list of these courses over at Class Central
Get this list every month via email : Subscribe
NOTE: Unfortunately Coursera has converted many of its courses to 'Premium Grading'. Which basically means that you need to pay if you want to access graded assignments :(. You can also apply for Financial Aid - https://learner.coursera.help/hc/en-us/articles/209819033-Apply-for-Financial-Aid
Course Name|Start Date|Length (in weeks)|Rating :--|:--:|:--:|:--:|:--: Java Programming Basics via Udacity|Self paced|NA|NA Learn to Program: Crafting Quality Code via Coursera|1st Sep|10|4.5★ (6) Learn to Program: The Fundamentals via Coursera|1st Sep|10|4.8★ (81) Programming for Everybody (Getting Started with Python) via Coursera|5th Sep|7|4.6★ (37) Programming and the Web for Beginners via Coursera|5th Sep|4|3.8★ (9) Internet History, Technology, and Security via Coursera|5th Sep|10|4.6★ (28) Introduction to CSS3 via Coursera|5th Sep|4|4.6★ (7) The Beauty and Joy of Computing - CS Principles Part 1 via edX|6th Sep|NA|4★ (1) CODAPPS: Coding mobile apps for entrepreneurs via Coursera|12th Sep|8|5★ (1) Code Yourself! An Introduction to Programming via Coursera|12th Sep|5|4.3★ (6) An Introduction to Interactive Programming in Python (Part 2) via Coursera|19th Sep|4|4.8★ (40) Usable Security via Coursera|19th Sep|7|2.9★ (8) An Introduction to Interactive Programming in Python (Part 1) via Coursera|19th Sep|5|4.9★ (2816) Paradigms of Computer Programming – Fundamentals via edX|26th Sep|5|5★ (2) INTERMEDIATE(94)
Course Name|Start Date|Length (in weeks)|Rating :--|:--:|:--:|:--:|:--: Bitcoin and Cryptocurrency Technologies via Coursera|1st Sep|7|4.6★ (9) Neural Networks for Machine Learning via Coursera|1st Sep|8|4.5★ (11) [NEW] Combining and Analyzing Complex Data via Coursera|1st Sep|NA|NA [NEW] Nearest Neighbor Collaborative Filtering via Coursera|1st Sep|NA|NA [NEW] Machine Learning: Recommender Systems & Dimensionality Reduction via Coursera|1st Sep|NA|NA [NEW] System Validation: Automata and behavioural equivalences via Coursera|5th Sep|NA|NA Machine Learning for Data Analysis via Coursera|5th Sep|4|3★ (3) Advanced Linear Models for Data Science 1 : Linear Models via Coursera|5th Sep|NA|NA [NEW] Introduction to Recommender Systems: Non-Personalized and Content-Based via Coursera|5th Sep|NA|NA Introduction to Natural Language Processing via Coursera|5th Sep|NA|3.8★ (6) Big Data: Statistical Inference and Machine Learning via FutureLearn|5th Sep|2|4★ (2) Quantitative Formal Modeling and Worst-Case Performance Analysis via Coursera|5th Sep|4|4★ (2) Machine Learning: Regression via Coursera|5th Sep|6|4.7★ (13) Introduction to Recommender Systems via Coursera|5th Sep|8|3.6★ (19) [NEW] Reliable Distributed Algorithms, Part 1 via edX|5th Sep|NA|NA Text Mining and Analytics via Coursera|5th Sep|4|3.7★ (6) Machine Learning: Clustering & Retrieval via Coursera|5th Sep|NA|4.5★ (2) Approximation Algorithms Part II via Coursera|12th Sep|4|NA [NEW] Cloud Computing Applications, Part 2 via Coursera|12th Sep|NA|NA Clinical Bioinformatics: Unlocking Genomics in Healthcare via FutureLearn|19th Sep|5|NA Machine Learning: Classification via Coursera|19th Sep|7|4.8★ (6) [NEW] Advanced Apache Spark for Data Science and Data Engineering via edX|21st Sep|2|NA Computational Neuroscience via Coursera|23rd Sep|8|3.8★ (6) Modeling Discrete Optimization via Coursera|26th Sep|8|4★ (5) [NEW] Advanced Java Concurrency via Coursera|26th Sep|NA|NA Computational Neuroscience via Coursera|26th Sep|8|3.8★ (6)
3 points • ApoMechanesTheos
Grossman's Programming Languages course on Coursera [new session]
3 points • VirtualCell
I agree with Linooney, but wanted to add some in case it’s helpful:
If you have the time, I highly recommend taking an intro CS course or some theory. I had a hard time learning languages until I took an intro series.
Dan Grossman over at University of Washington is a well-known educator, and he has some really nontrivial introductory material in Coursera’s Programming Languagea, Part A, if you want: https://www.coursera.org/learn/programming-languages
Or if you have less time and want to get programming more quickly, just buzz through an intro to programming with python course.
Really I think the key things to get are:
Data types and structures, along with typed vs untyped languages. For example, Python is really lax about what data types you use, but the types include things like int, string, etc. Perl is also lax, but has basically three core types: scalars, vectors, and hashes. C++ will be picky about types, and they’ll look closer to Python’s. Paying attention to those things often helps when problems come up.
Common coding practices. Abstaction, for example. Beginner programmers will often write lots of functions/methods that have some common function. It takes practice to notice that repetition and write more general functions accordingly b
Object-oriented vs functional programming styles, and some design patterns. Even in casual coding, these things can come in handy. Sometimes objects and methods are better choices than functions even for small pieces of software, and some knowledge of basic design patterns like multiple dispatch and visitors can be helpful there.
Some of the intro coursework you we online can help you practice those concepts, which can be just as important if not more than the individual language.
3 points • Cpt_Crunch152
I've heard good things from CS majors about using free classes on coursera. The one I hear about the most is the one that come from UW. I believe it should be similar to the in-major class CSE 341 (Programming Languages)
Here it is: coursera link
3 points • yawaramin
Depends on what your learning style is, I guess. If you learn best by building stuff, then go for Elm or ReasonML, they make it easy to build stuff. Whatever you do decide though, if you're using a statically-typed functional programming language, they all have certain properties like auto-currying, strong type inference, and parametric polymorphism, that don't have an obvious way to wrap your head around initially. That's why I highly recommend this free online course: https://www.coursera.org/learn/programming-languages
Even if you don't do anything else, watch the lecture videos. They are short and highly accessible, and the Professor (Dan Grossman) is engaging and explains really well. The course will give you an appreciation of how this class of languages works in the sense of--how do their various parts work together to empower you.
2 points • d3adbeef123
Type system wise, I think Rust's type system is very close to ML languages (minus the lifetimes and borrow checker related aspects). In that regard, I think Prof Grossman's course on Programming Languages is really good! I would recommend you give that a shot
2 points • bjzaba
Would highly recommend a course like Programming Languages on Coursera once you have a language or two under your belt (R is fine!). Being able to analyze the syntax and semantics of systems is like a super power that not only makes it quick and easy to pick up new languages, but also makes it easier to master new libraries and frameworks.
2 points • wonderful_wonton
2 points • mad0314
As others have said, if your aim is to become a better programmer, stick with one language a while longer. Jumping around languages is like learning the basics of guitar, then moving to piano, then to trumpet, etc.
That said, I really enjoyed the 3 part Programming Languages courses on Coursera. It looks at how languages in general function and looks at 3 languages and how they work. I enjoy learning about languages, just make sure it doesn't get in the way of getting experience actually programming.
1 points • yawaramin
Hey if you're new to functional programming I strongly recommend going through this course: https://www.coursera.org/learn/programming-languages
The teaching language is Standard ML which is very similar to OCaml and like 95% of the concepts will carry over easily. And the typed functional programming instructional content is what really makes it worth it.
1 points • NotQuaggles
Check out this course (and parts B, C) on Coursera. Fantastic, easy to understand resource that goes over a lot of functional programming. Mostly SML iirc. I think the lectures available on demand somewhere too with a little bit of searching.
1 points • yawaramin
If you are new to functional programming, start with Prof. Dan Grossman’s excellent free online course: https://www.coursera.org/learn/programming-languages
He explains the main concepts of statically typed functional programming using the teaching language Standard ML, which is small, simple, and elegant. You can then apply those concepts to lots of languages.
1 points • yawaramin
> I last tried to learn Haskell but I failed.
Try this course: https://www.coursera.org/learn/programming-languages
It uses the simpler language Standard ML which is somewhat related to Haskell but not as 'pure'. The lecture videos are great, the instructor is very to-the-point and effective imho.
1 points • yawaramin
I’ll just add here that you can actually just learn both, while using OCaml for your actual code. They are fundamentally very similar—statically typed functional programming with modules, functors, type inference, algebraic data types and pattern matching—they’re more alike than different.
Depending on your knowledge level and learning approach, you may actually want to take advantage of SML learning resources like the excellent MOOC: https://www.coursera.org/learn/programming-languages —which takes you through the fundamentals i mentioned and teaches the basics of Hindley-Milner type inference so that you don’t find type errors confusing (‘The actual error is at point X, so how come the compiler is telling me about point Y?’).
1 points • yawaramin
It takes time and some patience for functional programming to soak into your brain. But it’s worth it. And it’s not that it’s fundamentally more difficult than imperative style (for loops etc.). It’s just a different way of thinking. People who learned FP from the beginning found imperative style difficult too.
But maybe this will help: https://www.coursera.org/learn/programming-languages the lecture videos are great (and short), they explain the functional concepts succinctly and precisely.
1 points • mlk
I can recommend the course on Coursera: https://www.coursera.org/learn/programming-languages
it's functional programming from scratch, part A in done in SML. I've learned a lot
1 points • yawaramin
Since an SML submission doesn't come up on the proggit front page all too often, I'll take this opportunity to plug my favourite MOOC, that uses SML to teach the basic concepts of strong, statically-typed functional programming: https://www.coursera.org/learn/programming-languages
I would say that the course lecture videos are really good (short too–about 10 mins each), so that even if you don't follow through on the other course materials even watching the videos will be beneficial because it will teach how to think in statically-typed FP semantics, which is a very useful (and influential–e.g. it gave rise to ReactJS and directly or indirectly influenced many modern languages) way to think about programming.
1 points • castleguar
I just finished Week2 of this course, just about every one of the exercise problems used recursion, I definitely felt myself expanding as I worked through the lesson. Not specific to python though.
1 points • _3psilon_
Oh, boy, Racket... :) I tried it for this course, it was crazy. I didn't know that people actually use that outside of teaching (thought that Scheme is for production applications).
1 points • Freyr90
Well, I do recall this course where the exercises for ruby were given in 2 or 3 versions for 2.6, 2.7 different ruby versions, but the funniest thing was that they didn't work due to the graphics library being broken on any Ruby implementation but JRuby.
There were no such problems with the other languages of the course, SML and Racket.
1 points • nikofeyn
yea, it's up to you. focusing is always good, but i feel the two things cover something so similar but it different ways, it's helpful.
once you finish, definitely follow up with the programming languages course. it's really fun. i just finished it this fall. https://www.coursera.org/learn/programming-languages
1 points • gilmi
1 points • CodeCamping
I didn't see a clear free option.
1 points • yawaramin
I'm a bit late, but my standard recommendation is to start here: https://www.coursera.org/learn/programming-languages
This course teaches Standard ML, which is a very close relative of OCaml and has all of its most important aspects, like static typing with type inference, the module system, and the emphasis on functional programming. What little syntactic differences there are, you can easily bridge that gap with a standard OCaml reference.
Prof. Dan Grossman is a fantastic teacher, who explains at just the right level between beginner and advanced, and throws in comparisons to other languages like Java and C. So I believe you'll find the course quite approachable. At the very least, check out the lecture videos; they're short and quite instructive.
1 points • bjzaba
I would say it's really important to start learning how to make the distinction between syntax and semantics, and work out how to recognise syntactic sugar - ie. how high level features can be transformed into simpler features. This will actually serve you really well in being able to pick up frameworks quickly as well, because often (for better or worse) they overlay their own domain-specific semantics over the language they are embedded in. A good course for learning this is Coursera's Programming Languages course.
1 points • yawaramin
Since this is a final-year subject, a little bit of Hindley-Milner type inference and unification would be great to cover. I would look to Prof. Dan Grossman's amazing course for inspiration (or even supplementary lecture videos).
5 points • TheAwdacityOfSoap
What do you want to do? Knowing what you want to do with the language would help to narrow the choices down. If you're just interested in learning a language for its own sake, you could try:
- Taking a course online that covers multiple languages, such as Programming Languages on Coursera: Part A (ML), Part B (Racket), Part C (Ruby).
- Scheme (a lisp). I've heard great things about SICP, but I haven't read it, regretfully.
- Python, as others have suggested, is very different from C and also very practical. It's a top language right now in industry, especially in data science and machine learning. I think it's still a major contender in server development as well.
- Java. Lots of people hate it for some reason. I love Java. It's got its quirks, sure, but I get the warm and fuzzies every time I use it, and it's one of the top languages in use today. Lots of practical stuff you can do with Java. Write servers. Program robots. Create a Minecraft plugin or write your own game.
- Rust. A very exciting up and coming languages. Has a lot of really nice features like compile time memory/thread safety guarantees, traits and an official package manager. It's a tough nut to crack at first (I'm still working on it myself), but it's really nice.
If you're feeling analysis paralysis, I'd go with Java if you want something practical, or Scheme if you want your mind blown.
2 points • juniordevv
this is a languages course, but focuses on using ML to teach FP fundamentals. i'm only 3 weeks in, but coming from an OOP background I think I'm learning a lot.
2 points • pmpforever
One of the best classes in my degree was one on programming languages, a formal exposure to declarative programming will change how you write code.
I'd recommend https://www.coursera.org/learn/programming-languages as the class I took was based on this course.
2 points • TeslaRealm
Coursera has a three course programming languages module. Each course is taught in a different language to steer away from particular language paradigms and focus on concepts. I think the order is Racket, ML, then Ruby. Here is the link.
There's some good reading resources as well. Programming Languages: Application and Interpretation is what I used in my Uni programming languages class.
The course is specific to programming language design and might be more than you're looking for. You can also look for books about Scala, Racket, etc.
3 points • gilmi
1 points • declarative
https://www.coursera.org/learn/programming-languages is another great resource, although the course (Part A of the course, to be more specific) is taught in SML, which is a dialect of OCaml. You can audit the course for free!
Part B and Part C of the course use Racket and Ruby respectively, and I'd recommend those, too.
1 points • crlsh
Maybe, try Standart ML first. https://www.coursera.org/learn/programming-languages is a good intro to compare paradigms