Introduction to Computational Thinking
mitmath.github.io
mitmath.github.io
Grant Sanderson's (aka 3blue1brown) lesson on convolutions [1] was simply excellent. Can't wait to see upcoming lessons. Really amazing that MIT is publishing these in parallel to the live course.
[1] https://mitmath.github.io/18S191/Fall20/lecture2/#segment_1_...
Topics include:
- Image analysis
- Particle dynamics and ray tracing
- Epidemic propagation
- Climate modeling
https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw
After watching his videos, I don't want to watch anyone else explain anything technical anymore.
https://mybinder.org/v2/gh/fonsp/vscode-binder/master?urlpat...
I'm a big Python fan, and don't know anything about Julia really. So interested in your thinking.
But with Julia, the whole course is up and running on day one, and you can start with building bifurcation plots or agent-based models which then grow in complexity without having to rewrite for performance. Since these computational science courses always to try poke at studies of complexity, this is very essential.
When one is writing computational codes to address new problems, one does not always have a library of well-written high performance packages to call. The ability to use a high levels of abstraction, that Julia offers, and then being able to run your programs at scale on heterogeneous hardware, is what makes Julia attractive.
As a result, I am already seeing that Julia is already enabling a large number of scientists and engineers to write libraries and packages, instead of being end users. I believe that these numbers will explode in the coming years and computational science will further establish itself as a credible third pillar of science along with theory and experiments.
Exciting since MIT use to be one of the few notable universities using Python for some of their intro level courses -- back when Java and C++ had a monopoly. I think that much success of Python can be owed to MIT curriculum.
-----
Prerequisites:
Students should have a good familiarity with any popular programming language such as Python or R, and ideally have taken or are taking a math class such as 18.02 (multivariable calc).
-----
Contents:
General-purpose Computing, Data manipulation, abstraction, optimization, machine learning, performance, Random walks, graphs, automatic differentiation, differential equations
-----
Format: We plan to experiment each week with
* 30 minutes of asynchronous lecture (the story)
* Five 6-minute quick video how-tos
* 30 minutes of live, engaging lecture with nongraded quiz questions to test understanding
* 30+ minutes of break-out sessions, help, questions and answers, or discussion
* (Mostly) weekly problem sets
* Letter grading typical of the Fall 2020 semester
* Freshmen are advised to be aware of credit limits and the process to petition
It does many things differently than the traditional way of teaching such a course. Specifically the emphasis on applications that matter today (epidemiology, climate change, etc.) are a key part of the course, where a more traditional approach may have been to cover a series of numerical methods.
This course looks good. CS50 is overhyped dogshit.
The CS50 lecturer is an egoist, very good at selling you on it being THE GREATEST COURSE EVER, and convincing you that you're learning REALLY HARD THINGS. Oh, and you're truly brilliant for learning it, and he's truly brilliant for teaching it so well that you can understand it. Come join his cult! And all that time, he's doing a random, disjointed hodgepodge of very basic stuff.
You can totally do two programming languages simultaneously, but you might as well go with a good curriculum. Khan Academy is surprisingly excellent. MIT 6.001/SICP will run you over with a steam train, but boy will you learn a lot. Coursekata will teach you data science in R. There are a whole bunch of really excellent Python courses, web dev bootcamps, and, well, just really quite a lot of really good stuff out there.
The hard piece for a beginner is sorting out the wheat from the chaff. But I just gave you a bunch of pointers. Pick one. Pick five. Run with them. Or ask someone who is a serious computer scientist to help point you if none of those match your interests. Just don't ask a person straight out of a CS50 brainwashing; it takes a bit of expertise to be able to look back and see what's good and what's bad.
(CS50 cult members: Please downvote! And bring your friends.)
2. And it's not all that free. It's a growing business founded on hype and freemium. CS50 peddles it's wares on edX for $180 per "program," and it's being monetized quite a few other places.
3. Beginner-attractive isn't the same as beginner-friendly. Ice cream is beginner-attractive to kids first learning to eat, but vegetables are beginner-friendly. With CS50, you'll waste a ton of time to, ultimately, learn very little and be convinced you've learned a lot. You'll definitely learn the slogan "This is CS50" with an impressive video montage, though, and that you're part of an elite crowd which managed to master Scratch.
This is the bane of self-driven online education. People shop based on novice perception.
Or, guessing from your one-comment account, you're a David Malan cult member who signed up just to post this one comment. In which case, good job! You got out of CS50 what David was trying to teach you. Carry on. Bring your friends!
If you're not, have an objective look inside. Tell me it doesn't look like a "free" Scientology audit.
Now in addition to learning the course material I have to learn a programming language I will never use again, great
But most importantly, it's a good idea to learn many programming languages even if you think you're not going to work with them. Each language teach new concepts (immutability, OOP, monads, ownership, macros and in Julia's case multiple dispatch in particular) that not only increase your repertoire of abstractions and ways to understand and solve a problem, but they also allow you to quickly move between languages when needed (for example if you find a nice job that happens to use one of those "niche programming language", which was my case with Elixir).
And Julia does have features besides speed that makes the course better for beginners, for example native multidimensional arrays. Images are just matrices of RGB pixels that you can freely manipulate like you would Python arrays (without the need to learn a library like numpy or any kind of conversion). And Pluto.jl reactive nature allows you to have immediate feedback of everything you change.