Блог пользователя Mohinem

Автор Mohinem, история, 7 лет назад, По-английски

Hi guys ! I'm about to get out of my university and step into the corporate world. In India, most competitive programmers stop competing once they leave college. Most of them are in this game for sake of getting jobs at tech giants like Google, Microsoft etc. However, some people never stop competing. There are some who learnt competitive programming while being employed. If you are one of them who hasn't left competitive programming while working, I would request you to share your strategy. How do you balance to do both while still remaining strong during competitions ? I'm just curious.

  • Проголосовать: нравится
  • +52
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится +77 Проголосовать: не нравится

In the day, I work. In the night, I solve problem in my dream.

»
7 лет назад, # |
  Проголосовать: нравится +22 Проголосовать: не нравится

I don't think I maintain the same strength I had in my final years of ICPC participation, though I keep practicing (despite having less time available — I take about 2h commute time + 8h-10h work (considering lunch time) + around 8h sleep, which together with some other meals and hygiene stuff gives me about 2-4h free hours every day) because I know there are still lot of stuff I know little to nothing in competitive programming.

I balance those free hours with other types of entertainment (e.g. tv series) and studying about things I didn't learn at university but are required at work — so what I did was to try out the a2oj ladders (as recently some people complimented it) and to think about the problems during this commute time (which consists of walking and time spent on a train), implementing it when I get home — maybe 1 or 2 days later if I haven't solved it I read the editorial and try to implement it, so my problem throughput decreased a lot albeit I still do something.

There is also some motivation by coworkers, almost every one of them didn't participate in competitive programming, some of them didn't study anything about algorithms in university but a few of them seldom solve some problems on Hackerrank and participate in Google code jam — and those stand in awe when they tell me about a problem and I say something about DP or graph (basic stuff, like DFS or a classic knapsack), after that they ask for resources to learn (for instance, no one of them knew about codeforces though I am not sure how many decided to browse the resources I indicated)

However I didn't manage to participate in a lot of competitions due time constraint (they are usually happening during work time or on weekends when I spend time with my family), so I am also trying the marathon matches on topcoder which are less time boxed.

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится

    Thanks ! That's helpful. Time has come for me to maintain a delicate balance between job and competitions.

»
6 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

Apparently, I reached my highest rating while working. I think it can be done, but requires a lot of balancing act. Sadly, I have stagnated, but I think I can improve further.

»
6 лет назад, # |
  Проголосовать: нравится +40 Проголосовать: не нравится

In my case, after my 2nd time at the ICPC World Finals, I stopped focusing on competitive programming like a crazy guy. Instead, I take part sometimes, try to do one contest per week on average. I don't spend time upsolving problems, don't spend much time practicing except for contests. Now CP is a must-have part of my life, as I used to love it, I am loving it and I will love it. My skills have been worsening significantly, but I can keep the sense of solving problems :)

P/s: Thanks god, CF contests are usually at midnight in Vietnam, so I have more opportunity to take part. I could not do that when I was working in London.

  • »
    »
    2 года назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    May I ask you why you don’t participate in contests recent years? I have a dream to be a grand master, but unfortunately my job is too long, 10:00-21:00 or later. I think someone who can persist in something he love is very cool.

    • »
      »
      »
      2 года назад, # ^ |
        Проголосовать: нравится -7 Проголосовать: не нравится

      I think a man who can persist in something he loves is very cool.

      And a woman and a non-binary person too.

»
6 лет назад, # |
  Проголосовать: нравится +79 Проголосовать: не нравится

Don't get a job.

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится +141 Проголосовать: не нравится

    Or make Competitive Programming your job.

    • »
      »
      »
      6 лет назад, # ^ |
        Проголосовать: нравится +9 Проголосовать: не нравится

      Errichto , is your full time job Competitive Programming?

    • »
      »
      »
      6 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +15 Проголосовать: не нравится

      I am always curious about people having a full-time career in CP (I might pursue this direction in the future if I am bored with working as big industry's slaves, who knows). How does this job imply to your career progression? Do CP companies (like HackerRank?, Atcoder?) make enough money and how? etc?

      I would very love to hear rng_58's story/opinion about having a full-time career in setting CP problems.

      • »
        »
        »
        »
        6 лет назад, # ^ |
          Проголосовать: нравится +21 Проголосовать: не нравится

        Hackerrank and plenty of similar websites have money because they are about coding interviews and matching programmers with employers. Working for them will make you enough money assuming you don't live in a rich/expensive country. So, go for it if you want to work remotely. You can prepare problems and materials but for sure it won't be on the level of CP contests.

        Just setting problems for the whole life is hard or impossible because you might run out of ideas. The way to go is to become a coordinator/tester, I guess. Some people combine that with working in universities and usually doing some research. I'm quite sure though that you can earn more while working in big companies.

        My plan is to organize classes and maybe camps/workshops myself (ofc. not alone).

        • »
          »
          »
          »
          »
          6 лет назад, # ^ |
            Проголосовать: нравится +11 Проголосовать: не нравится

          Wondering if tourist planned to make a life by yearly winning major algorithm contests

        • »
          »
          »
          »
          »
          6 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

          I am curious how many problems those companies virtually need for preparing coding tests. Even if you could be paid per problem set, it doesn't mean you could earn billions of dollars if you made billions of problem sets.

          Assume: I think I could write two whole AtCoder Beginner Contest problem sets in a day if I did as a full-time job, and that would sum up to 10 sets in a week. But who on earth would hold beginner's contests that frequently?? What if another coder is interested in doing the same job?

          (By the way I am also interested in teaching CP related courses)

          • »
            »
            »
            »
            »
            »
            6 лет назад, # ^ |
              Проголосовать: нравится +13 Проголосовать: не нравится

            Are you sure about that? Writing statements and preparing tests isn't always that easy. Plus you should watch the contest and answer questions, what takes 2 hours itself.

            Hackerearth needs hundreds of trivial problems so maybe they would want such a person :D And you could mix it up with doing harder rounds and then I'm sure you won't saturate the problem-creating market.

            • »
              »
              »
              »
              »
              »
              »
              6 лет назад, # ^ |
                Проголосовать: нравится +13 Проголосовать: не нравится

              This is a method one of my friends uses to make easy problems:

              • Choose the type of inputs (the one with a fixed number of integers, like [L, R, X] or [N, M])
              • Choose the type of mathematical facts (e.g. the sum of digits, divisors)
              • Choose what to calculate (e.g. maximum value, # of ~, output everything that satisfy ~)
              • Combine the three to make one problem

              Under this method, you don't even have to spend hours to prepare data sets. Mostly random cases + a few tricky cases would work.

              • »
                »
                »
                »
                »
                »
                »
                »
                6 лет назад, # ^ |
                  Проголосовать: нравится +23 Проголосовать: не нравится

                "I can do a shitty job quickly."

                Well, I won't argue with that. Your friend creates boring problems. I hope Atcoder doesn't accept so many of those.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  6 лет назад, # ^ |
                    Проголосовать: нравится +6 Проголосовать: не нравится

                  Who cares the first few problems' quality. Beginners should solve a lot of problems to get used to coding anyway.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  6 лет назад, # ^ |
                    Проголосовать: нравится +36 Проголосовать: не нравится

                  Who cares? Those who solve those first few problems ;p

                  Not everybody competes to excel in competitive programming. Some do it for fun, some for simple practice. Why won't we put some interesting problems there to show them that competitive programming is something they can enjoy?

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  6 лет назад, # ^ |
                    Проголосовать: нравится +28 Проголосовать: не нравится

                  I often use the method which EnumerativeCombinatorics wrote to make first some number of problems on ARCs. It is extremely useful, and I agree that I can prepare 2 ABCs everyday.

                  The process to make problems can be divided in following steps.

                  • Come up with problems. Once we succeeded to “stop” our brain so that we cannot think about hard things, it takes 5 mins in average to come up with an easy problem. What is important here is to think about the future: you prepare the problems. You should discard the ideas, that you need to write complex generators and problem statements. The problems, which can be explained in one line, and have inputs with constant number of integers, are best.

                  • Write statements, make solutions and make test cases. It should be easy task, if you properly made problems. Once I did RTA to prepare first 3 problems of ARC. It took only 40 mins.

                  You may think that the problems produced by this procedure is boring. But, in nature, easy problems are nothing other than boring, since it tests whether the competitors know the grammar of the languages and idea of time complexity. Interesting problems should be harder because they require some thinking, and too hard for very first problems.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  6 лет назад, # ^ |
                    Проголосовать: нравится +33 Проголосовать: не нравится

                  You know, you are that one of my friends.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  6 лет назад, # ^ |
                    Проголосовать: нравится +17 Проголосовать: не нравится

                  I don't argue that it's possible to quickly prepare a boring problem. But I explained why you shouldn't. Don't write ARC if you don't care about its participants.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  6 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится

                  I don't know the examples of interesting problems, which are suitable for very first problems. If it is a contest for Div.1, I don't take this method because the easiest problem is enough hard to make it interesting.

                  And I didn't say that I don't care about the participants. The main purpose of very first problems is testing whether the participant know the basic grammar of languages and the way to implement some basic functions (such as, standard io, taking max of array, reversing a sequence, calculate Fibonacci). I think that my "automatical" problem-producing method produces the problems which satisfies this condition, because I combine these techniques. Although the problems are boring for me because I already know how to implement the basic things, it doesn't mean these are bad problems.

»
6 лет назад, # |
  Проголосовать: нравится +20 Проголосовать: не нравится

do you exactly know how many 'm' are there in your id...hahhah(*difficult to login if once logout by mistake)

»
6 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

One of my friends whom I look upto reached his highest rating while on the job, he got FB Hackercup T-Shirt, did great in round-2 in GCJ, got ranked in top 50 Indian coders on Codeforces, all this while he was working. I don't know how he consistently did CP but his job was of a full time problem setter at Hackerrank, maybe that played an important part.

»
6 лет назад, # |
  Проголосовать: нравится +41 Проголосовать: не нравится

When I started working, I stopped because most of the cfs were during the working day. But now I put some sql on another tab, and I'm always prepared to push alt + tab when someone comes close.

»
6 лет назад, # |
  Проголосовать: нравится +21 Проголосовать: не нравится

Or maybe find a job where designing algorithm is the main skill?

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится +58 Проголосовать: не нравится

    Does this magical job exist?

    • »
      »
      »
      6 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится +19 Проголосовать: не нравится

      Yes, which is the main work I'm doing at Facebook right now :) (maybe the algorithm itself is too simple for you, but I still find it interesting none the less).

      • »
        »
        »
        »
        6 лет назад, # ^ |
          Проголосовать: нравится +13 Проголосовать: не нравится

        But will it actually provide any benefits for your competitive programming skills? Unless the job itself resembles competitive programming, and so do algorithms that you have to work with — I doubt that developing/optimizing "some algorithm" would be very helpful.

        For example, in my current project at Google I really don't have sufficient math knowledge to understand some of the parts (it requires knowing statistics, and I don't have that background), but I don't even think that learning corresponding theory would make me better at something like Project Euler — leave aside actual competitive programming.

        The only part of my job that I find related to competitive programming is test-solving problems for Google programming competitions (which would cover all problems from Google Code Jam and Google Kick Start).

        • »
          »
          »
          »
          »
          6 лет назад, # ^ |
            Проголосовать: нравится +10 Проголосовать: не нравится

          Like anything else, it's up to your goal. Probably the algorithm in your day job is not sufficient (nor useful) if you are training to be 2800+/3000+/whatever higher rank are there. On the other hand, I find real world algorithms tend to be more "rich" and flexible, partly due to the ambiguous nature of real world work.

      • »
        »
        »
        »
        6 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        What's your position at FB and which office are you in? I'm starting work at FB London in 2 months so I'm hoping to find an interesting position.

        • »
          »
          »
          »
          »
          6 лет назад, # ^ |
            Проголосовать: нравится +10 Проголосовать: не нравится

          I work at Menlo Park in Data Infra. From my experience, positions in infra team tends to be more algorithmic-friendly (unless you have some very specific area you can/want to specialize on).

    • »
      »
      »
      6 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится

      Depending on how broadly you understand designing algorithms, I have it. Mostly not regular competition-like algorithms, but there are often specific constraints I have to optimise for, e.g. 100 kB of memory. Yesterday and today, I was optimising a piece of assembly: "hmm, is it better to use an IT block after the CMP or a BGT branch?", "where do pipeline delays occur?" and so on.

    • »
      »
      »
      6 лет назад, # ^ |
        Проголосовать: нравится +21 Проголосовать: не нравится

      Research jobs on the field of theoretical computer science are kind of that, I think. We can publish paper by just solving CP-like problems.

      As you know, the CP problems related to real world are usually boring, because the real world is too complex. The real world is not fully mathematical and that is why CP is much more interesting than real world. Here, in research jobs not on IT company, you do not need to consider about the shitty real world and you can concentrate on CP-like things.

  • »
    »
    6 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Hi ll931110 what do you do in Facebook? Since what age did you work there?

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Vas a caer Chupetin Trujillo #GAAAAAAAAAA

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I think in the beginning of CP, it's about knowledge, you learn basics, dp/number thoery/ graph theory/etc. After this stage, you don't need lots of time to learn. The game becomes competitions about brain power. You just spend half an hour or so to keep your mind sharp. Besides, job is more important. Pratice without being noticed by your boss.

»
6 лет назад, # |
  Проголосовать: нравится +34 Проголосовать: не нравится

This topic isn't really relevant for me, as I stopped practicing 2 years ago (and started working full time 1.5 years ago), but I'm going to share my perspective anyway :)

Yes, most of the contestants stop any sort of active training after getting a job — either because they want to do something else besides programming, or because now they have less time and prioritize other hobbies, or because they did CP solely for having it on their CV.

Your job is typically 40 hours per week. Let's say you need 63 more for sleep. You are left with 65 hours for everything else. Which is more time than you take for sleep.

Yes, there are very few students spending something at least remotely close to 40 hours per week on their studies, so typically you have more time there. Also things like family come in play at some point :)

You can easily practice 20+ hours per week while having a job — and while some students may have more time for practice, I would still say that 20 hours/week is more than a lot of World Finals teams average.

One of my coworkers averages 20 hours per week or so for his endurance sports training (and since training varies over the time, he'll have even more in his peak weeks), and takes part in events like UTMB and Swissman — while also managing several reports at work and having family (with a small child) in his personal life. Another one does cycling fairly seriously, averaging well over 20 hours per week — he already has 14000 km distance, 160 km elevation gain totals this year. Another dude is spending around 20 hours per week training as a musician.

I also know people employed full time and still actively doing competitive programming.

If I ever decided to try actively practicing CP while being employed — it shouldn't be too hard, since my working hours are flexible and I can take a break for almost any contest during the workday.

As far as I can tell from what people are typically complaining about — it is not your job that is competing for your time with CP. It is a bunch of random stuff like watching movies or playing computer games.

»
6 лет назад, # |
  Проголосовать: нравится +15 Проголосовать: не нравится

You can pursue algorithmic academic career which is like kinda more mature competitive programming and at the same time 1) make your job enjoyable, 2) still have a lot of free time. Win-win :)

»
6 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

I can't balance job with competitive programming. For this reason I am going to stay with my parents :D.

»
2 года назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

I am new into competitive programming and I am working as well ...So how can I balance my job and competitive programming ? I didn't get the exact answer and how to start which problem set or which contest should I participate Can anyone please guide me ?

  • »
    »
    2 года назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится

    How can you balance playing computer games or watching movies with your job? Competitive programming is basically a similar entertainment activity. Participate in contests when you have free time. Skip contests when you are too busy or tired. If it turns out that competitive programming is not your cup of tea and you are not enjoying it, then you will naturally drop out and find some other more entertaining hobby. There's nothing wrong with that.

    As for where to start. I would recommend to read the first few chapters of the Competitive Programmer's Handbook. Then maybe try a virtual Div2 contest on Codeforces just to see if you can successfully solve anything and also to become familiar with the site UI. Then join contests whenever you have time and have fun. Also check AtCoder if you prefer contests on weekends.

»
2 года назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Hey! Can u share an update on how your experience has been?