How is coding taught in foreign countries like China, Russia, India?
November 20, 2015 10:35 AM   Subscribe

I would like to know how coding is taught to complete beginners in countries known for the rigor of their academic practice. I am interested in these countries especially because my experiences with American education has shown that much American instruction is more based upon easy-does-it approaches that serve to make things "differentiated" and "student-friendly" thus sacrificing rigor.

These approaches are marketed to be more palatable and "differentiated" so as to draw as large amount of people as possible. I want the kind of approaches that are difficult and rigorous, that require memorization and sometimes just rote learning, but will establish a real foundation in getting people to learn to code.

I want to become more versed in programming, particularly in R, Python, and Java. I don't have much of a background in these topics but I am willing to put in the time and effort to learn them really well on my own. I am interested in the pedagogical approaches used in countries known for the high level of rigor and instruction of their student bodies. I am not looking for "fun" or "easy way" approaches that purport to make concepts as user-friendly as possible. Instead, I care more about something that helps me figure out how to learn to code. The way I've been doing it now is more ad-hoc such as having a project to do and then googling things until I get the right answer without knowing how or why such a function or query is used. I am not averse to memorization either. I have used Python the Hard way and find some of it very useful such as the take-no-prisoners approach that (yes) requires you to memorize, understand some theory, and offers such advice as reading your code backwards to spot mistakes.

Any experiences or stories about successful approaches to learning to code or program would be welcome.
posted by caudal to Computers & Internet (16 answers total) 2 users marked this as a favorite
 
Have you taken a formal computer science class in the US? In my experience, CS doesn't try all that hard to be warm and fuzzy. I suspect that if you tried out the programming MOOCs from big-name US schools, you would find one that meets your standards.
posted by yarntheory at 11:17 AM on November 20, 2015 [7 favorites]


Have you actually taken a class in Asia? Just because we're hardliners on test scores doesn't necessarily mean our curricula or teaching is up to snuff.
posted by divabat at 11:19 AM on November 20, 2015 [4 favorites]


The number of South and East Asian nationals attending MIT, CMU and Stanford would seem to suggest that the quality of US teaching in computer science is competitive in the world marketplace.

You seem to be referring to the many "learn coding for fun" websites out there, so I suggest casting your attention rather to higher education, MOOCs, or the online programs of well-regarded universities.
posted by soren_lorensen at 11:25 AM on November 20, 2015 [3 favorites]


It depends on whether you're using "teaching coding" as a shorthand to refer to a computer science degree. There are different courses you can take short of earning a bachelor's degree in computer science and there's probably a wide range of how strict they are about creating maintainable, well-written code.

True computer science curriculum isn't about programming in a language, but programming itself. It's not going to be any fluffier in the USA than anywhere else -- proofs are proofs, showing the runtime of an algorithm is the same regardless of locale or language. Algorithmic proofs, compiler design, set theory and the like are the same regardless of where you go.
posted by mikeh at 11:38 AM on November 20, 2015 [4 favorites]


Yeah what mikeh said. True, formal, Computer Science as taught in the United States (and likely elsewhere as well) is all about logic, data structures, formal algorithms as well as meta topics on programming itself. Yes along the way you'll learn some languages a bit in order to do some practical work around these topics. In my day (class of '98 represent) it was a mixture of Ada, C, IBM System 360 Assembler and COBOL. There was bits and bobs of other languages learned as well depending on electives taken. The point of this however wasn't to make the most rigorous C programmer or Ada programmer, etc. but to make one think like a computer scientist regardless of implementation details. The big knock on all of us coming out of school was that we were all theory and no real world practical experience. For the most part they were correct but you really only gain that by working on real projects out in the world.

So this comes down to what you want out of your education here. You can definitely follow along to MOOC offerings and you will definitely learn computer science fundamentals deeper than you ever wanted to know. There are also approaches for each the technologies that you list to learn more in depth. For example, while it is out of date with respect to the latest language features, Thinking in Java will educate you on some real low level details of the language and some of its libraries. Best of all, it is free.
posted by mmascolino at 11:52 AM on November 20, 2015 [3 favorites]


For what it's worth, I just took a peek through an Indian CS curriculum and it's virtually identical to courses I took in an American computer science program, down to the same textbooks (although newer editions, as it's been a while).

If you're interested in a more formal course of study, you could do a lot worse than checking out MIT's Open Courseware project or other similar resources.

When you mention not knowing why you're calling a function or how it works, though, there's really nothing better than having a basic knowledge of computer science, doing a deep read of the documentation, and if possible, debugging through the source of whatever you're using.
posted by mikeh at 12:00 PM on November 20, 2015


Response by poster: Thanks!

I apologize for the unnecessarily caustic tone in my post. I didn't mean to suggest that the teaching was always better. What I was attempting to show was that there is a different attitude that I often see in other countries regarding education which sort of accepts that learning can sometimes be difficult and require much initial effort on one's part. But your responses have been very helpful.
posted by caudal at 12:20 PM on November 20, 2015


Have you spent a great deal of time in a non-U.S. university environments?
posted by justcorbly at 12:53 PM on November 20, 2015 [1 favorite]


My CS education (Caltech) was obsessively formal and rigorous. I only took like one actual programming class in my whole curriculum. Almost all of it was math / algorithms / etc and proving things.

There are other kinds of computer degrees that focus on other things, but actual Computer Science (at least at universities that take it seriously) is usually very formal/rigorous, based on what my colleagues from other universities tell me (Stanford, CMU, MIT, etc all seem similar to Caltech in this way).
posted by thefoxgod at 1:48 PM on November 20, 2015


Response by poster: I think I should have specified that I was referring to education on the secondary and primary level as being very different from what I've read about in other countries. I stand corrected on other things.
posted by caudal at 2:05 PM on November 20, 2015


... a different attitude that I often see in other countries regarding education which sort of accepts that learning can sometimes be difficult and require much initial effort on one's part.

I know a science teacher, originally from Russia, who made her California students rigorously learn the science that she taught (yes, I am vaguing it up), by copying down every word in the text book in long hand. That was painful, and may have been effective. Maybe not. But it counts as rigorous.

Uh, I'm old, but I've seen complete formal notation for programming languages like Pascal. There's a satisfying level of completeness in looking at something like that, I'm just not up to date enough to give you the best current example.
posted by puddledork at 2:08 PM on November 20, 2015


You might want to avoid using educational terminology if you're not super-familiar with it. "Rigorous" actually has a specific definition as used in education, and it's not a synonym for "difficult" (or "un-differentiated" or "student-unfriendly"). It has to do with the place the activity falls on Bloom's taxonomy, which is a graduated series of educational tasks based on how cognitively abstract/complicated it is for a student. The lowest levels are "remembering/understanding" whereas higher levels are "apply" and "analyze" and "create." The example above, copying out a science textbook, is at the very bottom, and thus NOT rigorous. Memorizing large amounts of information can be difficult, but it is not rigorous.

CS classes at the university level are going to be rigorous, because they ask you to apply your knowledge and create things (or at least mine did). And that's beside the fact that, as others have mentioned, CS is about more the theoretical bases in math (proofs! binary arithmetic!), and the classes are certainly NOT taught in a differentiated fashion (unless you could the mandatory recitation sections), nor are they student-centered classrooms at all (lecture format, students complete instructor-generate homework assignments), at the lower levels, anyway. (I suppose you could call upper-level more student-centered, because students can choose their own projects to work on, etc.)

Take an actual university "Intro to CS" (for CS majors) course; I'm sure you'll find it challenging enough (which seems to be what you actually want?). They tend to assume you already know how to program, anyway, and the instructors are usually terrible at teaching--students with no background tend to fail! (Again, in my experience with them--it was well known at my university that the 110-level course was to "weed out" all the people who just thought CS=job security and money but had no real interest in the subject itself.)
posted by lysimache at 3:22 PM on November 20, 2015 [5 favorites]


I want to become more versed in programming, particularly in R, Python, and Java. I don't have much of a background in these topics but I am willing to put in the time and effort to learn them really well on my own. I am interested in the pedagogical approaches used in countries known for the high level of rigor and instruction of their student bodies.

The best ways to become more versed in R, Python, and Java is to write programs that completely solve difficult programs in those languages. Memorizing things sounds tough and old school in a cinematic kind of way, but is really inefficient. The space of potential things to memorize is huge. The most efficient way to choose what to memorize is to program a lot and to note what comes up over and over in your chosen domain. Just memorizing what's in a textbook is akin to putting on a raincoat before looking outside.

Something that will really help you while you work on projects is to not just stop at finding something that works from Google or Stack Overflow. Take the time to completely understand why it works or why it really is or is not the best solution for your problem.

If the solution you find is a high level library, do not just import and use it. Actually look through the library and try to step through its code with a debugger in the context of your program. You should have a sense of what it is doing. If you don't, then all you are doing is setting yourself up for a nightmare when there is a bug involving the use of that library. Completely understanding what you are doing will inevitably lead to back to some software engineering or computer science principles.
posted by ignignokt at 2:00 PM on November 21, 2015


Maybe of interest: UC Berkeley has posted full lectures to a lot of their normal enrollment CS courses online. Here is an index.

You can google to find corresponding course websites, like this one for 61A. Which seems to be inspired in approach by the classic hardcore text The Structure and Interpretation of Computer Programs, but using python instead of scheme. (etext of that work is here, and MIT has course videos from the original author posted here, if you want to go for both retro and rigorous.)
posted by bertran at 12:07 AM on November 22, 2015


My experience of education in one part of Russia echoes what lysimache said: often difficult but not always rigorous. Don't assume that medicine is effective because it tastes bad.

As a more practical answer to the question: try to completely solve some problem in whatever language you're using. See if you can solve the problem a different way in the same language, or the same way in a different language. At the international day of Code Retreat recently we did that with the Game of Life and I saw it in languages that were more or less familiar, and at least one which was new on me.

Don't think of it as accumulating knowledge, think of it as developing fluency.
posted by Wrinkled Stumpskin at 10:33 AM on November 22, 2015 [1 favorite]


As someone who studied math but does programming now:

There are some parts of programming, like algorithms and data structures, which really reward rigorous study. It sounds like you have an appetite for that, so go for it! (Though it's crucial to have good resources, that reward close study). But a lot of learning programming is, like Wrinkled Stumpskin said, just about developing fluency.

Also, after you get to a pretty basic level of fluency, a lot of your learning will be ad-hoc, and that's fine. Even professional coders are constantly doing something like:
"Hmm, I need something to happen every second in my python program."
-> Google "python do every second".
-> spend five minutes reading some stack overflow answers, figure out that threading.Timer does what you want.
-> unless you're really curious, don't worry too much about about the rest of the library or its foundations (they're probably ugly); move on with your life.
posted by gold-in-green at 1:33 PM on November 22, 2015


« Older Brunch Fruit   |   What's the best way to get from Oakland to Santa... Newer »
This thread is closed to new comments.