Why are russians so good at programming?

What's different in Computer Science education in Russia that makes Russian programmers be always on the top in programming contests?

  • One thing that amazes me in pretty much all programming contests (Google Code Jam, Facebook Hacker Cup, Topcoder, etc) is how the russians are always on the top. Why is that? Is it a consequence of the engineering focused education in the former USSR?

  • Answer:

    You've just pretty much answered your own question. The mathematics curriculum is extremely tough and demanding since high school, where you can get a peek at stuff you would only encounter during your sophomore year at MIT or Harvard. (I myself study at a high school in Moscow and have a friend who transferred to MIT from Boston College) I don't know what image you guys have of Soviet Union, but we (Russians) should be grateful to Soviet educators for what they did, especially in the field of mathematics and physics. You may want to read a couple of articles on Wikipedia about prominent people of the time like Lev Landau or Pyotr Kapitsa or Andrey Kolmogorov.

Andrey Portnoy at Quora Visit the source

Was this solution helpful to you?

Other answers

It's not engineering-focused education in colleges as much as math and science-focused education in schools. The curriculum in Russian schools are much more demanding than in the US ones, especially in high schools. For example, there's no calculus on the SAT test, while simple calculus was a part of standard state high school passing exam until recently. And these are all school in the country, the profile schools where most of the elite programmers come from have an even more advanced curriculum. For example, in my school our math program included, on top of the standard stuff: limits with epsilon-delta definition and proofs, derivatives and integrals, simple differential equations, mathematical logic, combinatorics, irrational numbers, Taylor series, beginnings of complex analysis (Euler's formula) and probably a bunch of other stuff I don't remember. And that can apply to other disciplines too like biology, physics or chemistry. Heck, even astronomy is a standard high school class. As a result, college enrollment represents a relatively smooth transition (as opposed to the US where a high school graduate from an average school can be in for quite a shock), and in good universities learning picks up at greater pace. It's not uncommon to study linear algebra, advanced calculus and theoretical mechanics in the first year of college. Having said that, I don't think there's a significant difference between ivy league US colleges and best universities in Russia. If anything, because of Russia's 1990s economic collapse, elite US schools tend to have more accomplished professors and better quality of education. But the difference in school curriculum can sometimes be striking, which tends to accomplish two things: A greater pool of potential prospects for elite universities Better knowledge of fundamental science, such as math A lot of top coders are young, freshmen or sophomores, and their school education (especially math) plays a big role in how fast and how deeply they understand and internalize Computer Science material.

Artem Boytsov

Some additional points: 1 (General). In my city (6-7th largest in Russia) if you're quite good in math/physics at school it's quite obvious to choose CS in university. I think other departments (such as "how to build rockets", "how to build jet engines", "how to build airplanes") are not nearly competitive because best students are not going there. And that's because the salaries in this industries are terrible (like $400/month vs. $2000/month). So education for nearly dead industries becomes poor, but schools still do their job for some reason. As a result an average CS student in Russia is more talented (it's my opinion as CS student). Maybe in Moscow and St. Petersburg things are better. 2 (General). Also almost all CS students pay nearly nothing for their education (and maybe unusual thing for other countries: most of them start to work in IT companies long before they finish university). 3 (Specific). I don't thing that there is something in CS departments in general, in fact my friend has been expelled from the university (for his laziness mostly) just after he participated in ACM world finals, and he is not unique in that. 4 (Specific). There are ACM-like programming contests for school students, and in some schools there are special evening courses lead by older CS students or university instructors or just competent trainers. You can participate in city-level, region-level and then national-level contest and be invited by university such as ITMO or MSU. Then in several universities there are special organizations with their own trainers and regular internal contests. It's not that university trained champions from the ground, they already knew such things as binary trees, sorting or dynamic programming at school. Well, in our regional  inter-universities contest (it's not very hardcore) school teams participate on equal terms and take high places.

Azat Abdulvaliev

I have a lot of good things to say about the Russian programming traditions, but first a reality check. Code Chef Feb 2013 nationalities of top 3 1) China, 2) Poland, 3) Romania TCCL nats of top 3 1) India 2) Peru 3) Japan Talented programmers come from a lot of places. That said, I worked with the Novosibirsk team at Sun compilers, and everyone on that team was a top-notch programmer.  The work we did made the RISC chips outperform their counterparts at other companies long after it became clear that CISC was a better answer from the hardware side because of various physical limits on moving data around. From my conversations with them, their talents at Computer Science per se didn't much come from school.  That said I suspect their school played a major role in shaping their cultural response to the questions that come up in difficult code. Also, they were all Computer People -- they all talked about what made them different from other Russians the same way that Computer People elsewhere do in Bei Jing, Fairfax, the Silicon Valley, Ireland, India, and I suspect elsewhere (I've worked directly with offices in all the places listed above)

Mel Nicholson

I've been reading up about this for some time. From what I found, it's less to do with university level education than school education. They are introduced to programming at a much earlier age in school and in addition to that their math lessons are more tougher than what is taught in US schools. If you look at the problems in those competitions, they are mostly math based problems meant to be solved algorithmically. You need to mentally map the problem into an already learned algorithm. It's not just Russia, but other former USSR countries and Eastern European countries also dominate these competitions and they all share rigorous math curriculum at school level.

Somaditya Basak

Few reasons: ( I will only compare situation of India and Russia in this context). 1. The biggest reason that age for starting preparing for IOI and IMO is realtivity quite low in Russia compared to India. They provide a lot of training and coaching to high school students. 2. Another important factor is community, they have a large community which is doing programming for a lot of time. They have a lot of people participating in contests not only in high school but also in colleges for ACM-ICPC. 3. In India for admission into IIT's you have to give a seperate exam, there is no seats for IOI participants. This happens in Russia. Conclusively I find that the training and competition is the main reason why there are a lot of Russian red coders.

Praveen Dhinwa

The funny thing that the main reason why Russian students win so many competitive programming competitions is that Computer Science education in Russia sucks. Here's why: When you apply to university in Russia, you must choose specialization beforehand, and after you choose specialization, you can't choose which courses and in which order to take, everything is already prescribed. These courses are very often boring, irrelevant and taught poorly. More than that, they often don't take much time and effort to pass successfully. Majority of students don't even bother to try to get good grades and stick to D's and E's, because having a good grades isn't considered as a plus when applying for a job in Russia (majority of working programmers are familiar with disastrous state of russian education and thus don't care about your grades and diploma at all). So, given the situation described above, students interested in competitive programming have a lot of time to spend it for training. Top teams in NRU ITMO (which is best known for being a university with most ACM ICPC championships) train 10+ hours per week, which would be hardly possible if there would be actual interesting and difficult CS courses. This reason may look like much more harsh than typical answer to this type of question does, but, in my opinion, it comes much closer to reality.

Andrew Shulaev

TL;DR: Cold War brought Internet to the US and generations of top coders to Russia. Not only computer science but technical education in general. Russian presence is (was?) also prominent in many math and physics competitions (also in music and in some sports but that’s off topic). Here are some thoughts as to why: 1. Government Policy: technical education was historically supported by the government in particular during the Cold War when they needed rocket and nuclear scientists to build Tzar-bombas. 2. Motivation: being a rocket scientist was lucrative: interesting work, a bit more freedom and slightly better living standard than the rest of the people. There were not many alternatives, for example doing business, humanities or art often meant frustration and even danger. Given dramatic lifestyle inequality between different classes of the society, it’s no wonder that talented people were (and could be still) highly motivated to succeed in science. One extra bit: there is compulsory military service in Russia, which is no walk in the park; bullying and abuse is a norm. One way to avoid it is to get accepted into a technical university. This alone was enough motivation for nerds to study hard because otherwise you would have likely lost 2 years of your life (a scary prospect, believe me). 3. Opportunity: government-sponsored system with board schools and profile schools allowed bright kids to pursue their interest in science without much distraction. Russia is a sizable country of 150M people so there is a lot of talent to choose from. Truth to be told, not everything was so rosy. There was discrimination, antisemitism and bureaucracy but that's another story 4. Reproduction: this kind of system tends to reproduce itself. Most of my classmates were from the techie families, so in part, we went there because our parents wanted us to go there, and helped us to get there. To sum it up, these people were produced by a well oiled machine which even now keeps producing top talent. Contrast that with the school system in the US which is more focused on “equality” and is not as supportive of talented kids. This is sad and could be disadvantage in the long run.

Sasha Ovsankin

I am a Russian programmer, age 29, came to the USA when I was 5 years old, and went through the whole terrible public school system here.  I identify with 's answer, but for me it was more a matter of nature than nurture (many Russian Engineers of some kind in my family). With the exception of some upper-level computer-science and engineering courses at Georgia Tech, and one disproportionately excellent high-school Calculus class, basically everything I ever learned that contributes to making me a good programmer (in my opinion) was learned on the side via natural child's curiosity and ample free time. I will contrast his points from my perspective from the other side. 1. Why. Asking 'why' was forcefully beaten out of me by numerous instructors and authority figures from day one.  Rather, many attempted to do so, but never succeeded.  I was a nightmare student in the school system here.  I'm still finding it a hassle in the working world.  I am naturally inclined to be looking for root-causes and general solutions, and constantly trying to find ways to make this more politically tenable in the workplace. 2. Laziness. Yes, ha.  As I've matured, my laziness has only increased and I've become more efficient at channeling it. 3. Waste always pissed me off not only because of the waste itself, but because it's stupid. 4. I naturally gave myself a broad education (Biomedical Engineering undergrad) by simply not being able to make up my mind.  I chose hard, diverse coursework over easy A's and clear paths multiple times.  I treated college as a tool for my own edification, not something to enslave myself with. I found that actually trying to learn something isn't incentivized, basically everything was about competing with the other students in the class for the upper end of the grade curve. The competition itself isn't the problem, it allowed professors to be lazy in design of their materials, tests, and course structure. Despite that, I find that I am constantly able to make analogies to things like thermodynamics, chemistry, and biology that other programmers I work with cannot see (except the ones with physics or electrical-engineering degrees).  Languages have gotten so advanced and runtimes so fast that the bottleneck is your own capability of understanding, traversing, and building abstractions-upon-abstractions, rather than being good at fiddling with bits and doing the same kinds of things over and over.  Having more analogies to draw from is a clear win.  I know Russian, English, and Spanish, and I find it hilariously hard to explain to Americans what it's like to be able to abstract across spoken languages (like cognates).  They'll never understand this, and it's a necessary approach to learn any kind of structure.  Math, spoken language, music, and computer languages are all the same thing, structure.  Artistic nuance can be modelled as constrained runtime randomness in the function call, the parameters of which are subject to loosening by substance-abuse, let's just deal with the essence :-). 5. Treat the problem, not the symptoms.  Finding the root cause is really about #3 and #2.  It's about being clever and not stupid.  Stupid is to sweep things under the rug.  Smart is to stop making waste. 6. Big Picture. The school system and employment structure here encourage an obedient worker-drone mentality.  Looking at the big picture is risky. Research is risky, and brings bad attention to yourself unless it's successful.  If some bug hits and everyone's scrambling to look at the obvious places, I'm going to ignore everyone and look in the abnormal places to increase chances of success.  This has worked out for me in practice. 7. The Language Itself See my point about language-level abstraction in #4. In short, it's better to know more languages, and better ones.  There's a relevant quote: "Every individual is at once the beneficiary and the victim of the linguistic tradition into which he has been born - the beneficiary inasmuch as language gives access to the accumulated records of other people's experience, the victim so far as it confirms him in the belief that that reduced awareness is the only awareness and as it bedevils his sense of reality, so that he is all too apt to take his concepts for data, his words for actual things. That which, in the language of religion, is called 'this world' is the universe of reduced awareness, expressed, and, as it were, petrified by language." --Aldous Huxley 8. Seeing obstacles as challenges This distinctly Russian trait is also reminiscent of the hacker mentality.  I think Russia's stereotype of existential despair (Dostoevsky) allows for novel solutions to hard problems, when this is the normal thing to be expected :-).  Here's the first Dostoevksy quote I found that fits the bill, and also sounds pretty un-american to me: "The pleasure of despair. But then, it is in despair that we find the most acute pleasure, especially when we are aware of the hopelessness of the situation... ...everything is a mess in which it is impossible to tell what's what, but that despite this impossibility and deception it still hurts you, and the less you can understand, the more it hurts." I didn't know what the hell I was doing along the way, and constantly felt lost.  Everything's different now that I'm actually working.  I've only changed subtly over time in the way I think about things, but my fundamental approach is being validated more every day.

Gary Trakhman

In Flash Boys, posits that Russians make better programmers because several generations have grown up relying on "hacking" government programs and social systems to get what they need (e.g., using bribes). In America, we have a mindset that you get with the program, work hard, and you're rewarded. In Russia, it used to be (still is?) that you have to work around the system to get what you want, even at a basic level. So many more kids grow up with a hacker mentality over there. There isn't necessarily any hard evidence for that viewpoint, but it's an interesting thought.

Steve Carnagua

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.