Hello, I'm writing a blog entry because I'm seeking the answer for the problem: Competitive Programmers and English. As you can see, it is not a competitive programming problem, but a real-world problem.
At first, I describe why I want to ask it to Codeforces users.
In my case, I'm very poor at English, especially speaking fluently. For example, I didn't get an internship jobs outside Japan because of the language problem, although I applied for many companies and I was very good at writing codes for interview problems. Most companies did not give me why I was rejected, but it is almost obvious that it is because of my very poor English speaking skills. Besides, when I went to IOI 2015 as the problem statement translating team of Japan, I have many opportunities to talk with competitive programmers from outside Japan, but indeed I couldn't talk with them very well. Somehow I took a TOEFL exam, and I've got not so low score in total. However, my speaking score is about 10pts out of 30 lower than reading, listening and writing. So it is obvious that my weakness is English speaking, and I feel it is a big barrier to do many things, such as internships, attribution for competitive programming community, organizing contests, and of course communicating with coders from over the world.
Today, it is very easy to find the article such as "How to practice English speaking" or "n things to improve your English fluency", but almost all of them said the same thing like "don't be nervous" or "fluency is more important than accuracy" and I know those things. However my problem is I (very very) often take blank period for several seconds when I'm speaking English. Of course it is absolutely impossible for me to consider about fluency or accuracy. (That's why I wrote this article here, because if I wrote on another website I could get only typical answers.) Those articles also said that speaking with friends by using Skype or Hangout is also good. There're many websites for finding a partner to practice languages. I agree with the idea, but the greatest problem is how to find the person who I can talk with. Recently I find that I can only talk for a long time with people who has some common hobbies, such as competitive programming (of course!!), rhythm games or "standings" of many sports leagues (I know only 3-4 friends who have this hobby! Most people say why "standings"!?). My friends in Japan are reluctant to practice speaking with Skype because they don't have microphone, it is not allowed to make noise at night, or some of them can't understand English completely (I don't know why these guys can compete in Codeforces contests), etc...
So I want ask for your ideas. Is there any hangout community of competitive programmers? Is screencast in practicing problems a good way? (I'll definitely not to make screencast in English during contests because my performance would be 1/1000000007.) Is it possible to find a partner to practice English here? ...
I hope some readers offer a good idea. ;)
Update 2015/10/22: Thank you for your advice! I'm trying to speak intrapersonally these days (and I find that when I talk to myself, I choose the similar topics...), and I've found some friends who would like to practice English on Skype with me (but many of them aren't allowed to talk loudly at night, so we haven't practiced enough). I feel it is not easy to practice well, but I'll keep practicing as much as possible...
I think everyone experience the same problem. When you read English texts you can guess the meanings of the words even if you don't know them, just taking into account the whole phrase or sentence, but when you speak you need the translation in the opposite direction, and here comes the lack of word knowledge. Moreover, people are often able to translate some word if it appears in the English text, but when they need to use that word in their speech, they can't remember it.
This is spot on. A more official name for this is "active vs. passive vocabulary": you understand more words than you can actively remember. Even though I think my English is decent, whenever I travel to a location where I have to start speaking English, it usually takes me about a day until I'm happy enough with the level of my spoken English. To put it in programmer-friendly terms, loading the other language into cache takes a while. This is where almost any kind of practice with speaking English will help: more stuff will remain in your "cache" and the "loading time" for the other stuff will be faster.
Being from Japan, another problem you might have is pronunciation. The set of English phonemes is different from yours, which makes it harder for you to speak English in a way other people will understand. (E.g., mixing up "l" and "r" is a common issue, and many longer syllables in English can be hard to pronounce correctly for a native Japanese speaker.) Here, being around native English speakers helps the most: both talking to them and listening to them will help you "calibrate" your pronunciation.
I think you need a long trip to English country. In Japan, you always can use your native language, and you haven't real motivation to improve your skills. Of cource, it's not only the way out, but it's the best.
Learn new words : Just like how its difficult to code without knowing a lot of algorithms, you can't speak fluently without mastering the proper use of English words.
Revise your sentence before you speak : "Fluency is more important than accuracy" is wrong. You need both. To start with, speak slowly (.25X your speed in Japanese.) Try to revise the words in mind before speaking out.
The answer is the same as with competitive programming: practice, practice and practice again — and ask people to point out mistakes.
Well, since you're red here, you can make good use of that: Ask native English speakers on Codeforces & see if anyone want to be trained by you. Win win situation.
A few months back k790alex posted a blog on here asking for assistance in improving his English. I ended up having some Skype sessions with him, to improve his English while he would talk about stuff in relation to competitive programming and life in general. I've satisfied most of the requirements for my degree, but I still have 1 year of schooling left, and therefore I have a lot of free time on my hands left for Codeforces, among other things :). If you like we could Skype to improve your English?
I can practice English with you on Hangouts, and probably you could teach me some basic Japanese!
Though I still not good at English, I have one suggestion based on my experience: Maybe you could take some CS / Math courses in English first, for example, you can find some on https://www.coursera.org/.
Why?
Most English classes are based on this assumption: people are familiar and interested in topics like fashion, TV show and other things. But for us these things may not be that attractive. At least for me math is more familiar than a TV show.
The English used in CS / Math related area is much easier than things like literature. So this could be a good start point.
You need to know how to describe an algorithm, problems, coding details in English before work in English speaking environment (assuming you want to work in IT company). You don't need to be able to talk about your daily life to get an internship / a job though that can be very helpful for getting connected with other people.
You should try to take courses that are new to you, and you are interested. So you can tell if you could understand the lecture or not easily: just take the quiz and see if you can do it well or not.
Try to connect people that are taking the same course, maybe you will have some chance to talk with them on Skype or so. I haven't tried that, but at least you both have the same goal at that time: learning that new course. So you could be able to tell him/her what is binary search and so on.
And as a byproduct you will learn new things that may not be easy to get in your country.
Once you are comfortable with taking CS / Math lecture, you can try to explore more on Youtube or so (user created content are better than TV shows, because people speak like what they do in real life).
Did you try to talk with yourself? I do not mean imagining some contrived conversation but rather suggest to think routinely in English. Judging by the quality of the text you've written, you have a really good understanding of how proper English should look and sound. So you should be able to check your own thoughts without disadvantageous embarrassment of speaking aloud.
If you never practiced that before, start with simple thoughts like naming objects around you or describing what happens/what you're doing in a few words. I did this for myself and found out the following:
I find watching movies in English quite helpful as well as online courses. It helps you to understand those crazy native speakers and makes you remember a lot of basic constructions that will help you in your own speaking.
Damn, I am violet. No one will even read my comments((
that is not true, people still read and downvote my rubbish comments despite my color ( I like new color) .. but u make good comments, so everyone will read
Probably the best thing you can do in my opinion is meet up with someone to chat. If you're attending school than there is a good chance that there are some exchange students you could talk to and be friends with to practice your English and in return you could talk to them in Japanese (tandem). If you can't find any exchange students then there are always foreigners who are in the need to practice their Japanese but it's probably better to find someone who has similar interests so Skype with someone on Codeforces is also an option.
In my opininon reading and listening of course helps alot but that doesn't seem to be the problem for most people, it's the actual talking. My cousins in Japan can read fairly well and even write but they are completely hopeless when it comes to talking, they are simply lacking the practice.
The ultimate practice is of course to move abroad. If you're attending school then there is a good chance that they have an exchange program.
Maybe someone here know some good sites to meet good people with similar interests to talk just about life, simple things, culture, programming, blah-blah-blah to use Tandem Language Learning method and increase a level of languages of each other ?
For instance I really want to have a friend in Japan because this is my favorite country and I was in Tokyo on vacation, it was really awesome. But I can't just write to someone and ask to have a conversation with me ... I just want to support my current level and learn something new, some new stuff ... And start practice Japanese at least a little bit ... Because conversations with real people with similar interests it's much better than with a teacher (I'm not a bummer :3).
And just to mark this territory I like all programming stuff (sport, contests, android, hacks, ...), Japanese culture, reading (nice strange books).
Sincerely yours, Yegor
I suppose the good way is to make screencast during the contest without the audio and comment it after the contest. I've tried to make such videos and found that it's extremely tough for me to comment in English because of long non-natural pauses between words. However, everything that looks tough should improve your level rapidly.
I know a single thing that broke the language barrier for me: three-week language school in the US. I had similar problems before: know how to read and listen, but when it came to speaking or writing I was stuck every several seconds to think about grammar or words.
Key things that made it happen: no Russians in the school (so I had to communicate in English all the time, except for Skype calls with my relatives in the evening), a lot of classes all taught in English. The latter is important because it's very easy to communicate very little during the day (e.g. you don't need to speak good English in cafe), but when you're force to speak all the time during classes and teacher fixes your mistakes, it's really cool.
I'd repeat that practice is the key, and that ideal grammar should go after fluency (e.g. if you don't remember the exact construction used for what you're going to say, you should be able to reformulate it in easier terms instantly. Still, some basic grammar should be obvious for you on a level of spinal cord). I'd also say that speaking English only every day for a week in a row is probably going to have much better effect than speaking English once a day during Skype.
There are also English conversation clubs(cafes), which I think is preferable to Skype/Hangouts.
頑張って
Just a few things I used to do... I still do some of these from time to time. (A little bit of background info about me: I grew up in Japan, and moved to US when I was 19 for school. and now I'm 23 and I guess I don't really have many problems communicating in English anymore.)
First one is to practice talking by yourself. So basically when you are in your room by yourself, imagine you are talking to someone in English, and actually talk. Maybe something you did, something you learned, or the videogame you played recently. You can go like "Hey how are you? I'm feeling really bad. Because of the revolution, I'm a violet coder again." By doing this, when you actually talk to someone, you don't need to think as much.
Also you might consider checking English conversation school. Most schools in Japan are ridiculously expensive, but there's one on Skype and it's really cheap. I know a few people who did it, and it seems really good. It's really important that you talk more, and those schools are really good place for that. If you want to talk with someone in person, maybe try talking to some other Asians. It might sound a bit weird, but there are reasons. First, it's so much harder to talk to native English speakers. They talk faster, they use more difficult words. And you probably know so much more about countries right next to yours than others. Also, watching bunch of TV dramas in English with English subtitles helped me too. I still watch like 3 hours a day haha
Lastly, it's kind of important to think why you want to learn English. It never hurts to know more languages, and it's probably useful, but it takes a lot of time and effort and it might not be worth the effort. You can still communicate by chatting on skype and stuff since judging from your rating/post, you don't have problems with reading/writing. As for job, I think it requires very high level of English, so it could be a lot of work.
Anyway message me if you want to talk more about this! I can probably give a few advises on English, and maybe you can give me some competitive programming advises :p
You said that you like to play rhythm games, so i have a question, do you like to play osu! ?
No. I play Dance Dance Revolution, Beatmania IIDX and BMS. I don't have good a mouse.
To talk English you should both know English and be able to talk. The second part is important either. I think that making reports/giving lectures and other massive structured conversations in your native language can help a lot.
I sometimes give a lecture about algorithms or the solution of the competitive programming problems (in Japanese). I agree that talking is also a challenging task, but I feel that my English speaking does not reach the level considering how to talk well. So I think that I should get used to speaking English at first.
Auto comment: topic has been updated by EnumerativeCombinatorics (previous revision, new revision, compare).