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

Автор adamjamil, история, 4 года назад, По-английски

I recently joined as a software engineering intern at a good company, but I don't think the work is that appealing to me. Much of it is working with tools and fiddling with implementation. I am wondering if maybe there are other software engineering teams, or other fields entirely, that rely more on the skillset of competitive programming.

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

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

Be a researcher/professor at a university. I couldn't come up with another option.

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

This is what the experts have to say.

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

I have a feeling that most competitive programmers would be happier with the mathematical sides of CS, not just "implement our new website".

I don't really know how the situation is in the rest of the world, but at least here in Estonia we have a couple of cryptography firms who happily hire the CS graduates that are bored with webdev-type stuff. It seems like a good option if something like that exists where you live.

Another interesting field is Coding Theory. I'm not an expert of course but I did a project with that group in the university and the overlap with competitive programming was surprisingly big. The assignment I was given was like "we need the best graph with such-and-such properties, can you make some?". In general a lot of combinatorial and algebraic constructions. Also I'm not really familiar with the job market but there are probably at least some jobs in the industry, as I know some big telecom companies have specialists for that stuff.

Obviously it's not going to be like competitive programming where every problem was created around an interesting idea. But work in CS does not need to be "fiddling with implementation".

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

Maybe a bit off-topic but I am curious to know are there any CPers whose works are different like historian, music, agriculture, biology etc..

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

    IK there's algorithms developed to calculate good places for agriculture in poor places in the world to maximize yield for minimum cost but idk how much of it captures the CP essence

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

    I have studied chemistry at uni, and now I am doing PhD in organic chemistry :)

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

Academic research :)

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

............

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

I think I can write a little bit about that topic. Since I've implemented almost every algorithm I know in my time at companies. I've used/implemented/encountered binary search, shortest paths, union-find, graph decompositions, dynamic programming, suffix arrays, optimization algorithms, geometric algorithms, RANSAC, bounding volume hierarchies, FFT, max-cost-flows, ... But of course my job is not just solving small algorithmic tasks one after another. There is also a lot of stuff around. Working with databases, creating APIs and microservies, GUIs or webapps, containerizing applications and managing deployments, fixing bugs, writing tests, parallelizing things, and, and, and... In fact I'm sure I do a lot more other stuff. But algorithms do come up, regularly.

There are definitely lots of fields and teams that are suited for competitive programming people. Basically everywhere you look are algorithm necessary, even in companies that create websites. But obviously some teams and projects are better suited then others.

There are lots of companies that deal primarily with data structures and algorithms. For instance the companies behind database solutions. There are companies that develop trading algorithms. Search engines. Companies that focus on machine learning, visual computing, block chain, or quantum computing. Companies that deal with optimization problems, or deal with real time applications. Some departments of big companies focus primarily on data structures that other departments use (like in the video game industry, big companies like Google, ...). And many more.

Basically I would advice to you keep your eyes open, interview for different companies, make yourself knows as an algorithm guy, ... There's probably even some teams, and lots of problems, that deal with algorithmic knowledge in your current company right now. Ask around what other teams are doing, discuss with your mentor/teamlead/POs about your tasks and possible other opportunities in the company. There is no shame in saying that you are not happy with your current tasks. The company also wants you to work in a field in which you better fit, and therefore are more enthusiastic and be more productive.

If you are interviewing at new companies, make sure that you also talk a lot about your interests, and ask questions about about what kind of problems they are facing/solving, what different teams are doing, and discuss about what teams would be the best fit for you. Passing the technical interview is only a small part of an interview. It's not just proving to them that you have some basic knowledge, it's also about your getting to know the company, and making sure that you join the best team that fits you perfectly.

One of my previous companies dealt with the automotive industry and worked a lot with computer vision. Although I would say the majority of people had other tasks like creating GUIs, managing databases and network traffic, business logic, creating robot routines, and so on, there were still loads of algorithmic problems. In computer vision and also other tasks, like optimizing orientation of cameras, reducing data streams to the important bits to not overload the analyzer, making analyzer algorithms more efficient, detecting defect data, predicting data in case of temporary sensor malfunctions.

My current company is basically an all-rounder. We create custom software solutions for other companies. Again the majority of the employees deal with classical development, like creating webapps, IOT, business logic, managing databases, ... But there are also projects that deal with efficient processing of satellite data (e.g. in a cooperation with some weather experts), creating custom search engines, analyzing history data records, some visual computing projects, lots of machine learning topics, and much more. All those topics deal with algorithms. You just need to join the correct teams.

But don't expect that joining such a company/team will be the exact same experience as competing in some competitive programming contest. You will deal with other stuff, new technologies, tools, write tests, debug hours or days for bugs, have unclear instructions (sometimes our customers themselves don't know exactly what they want), data will never be correct, often there doesn't exist optimal or efficient algorithms, ...

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

    Oh god. That turned out way too long...

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

      No worries about the length. I greatly value your experience and advice.

      If you don't mind me asking, what is the pay like working at a position like yours? I am particularly interested in what you've mentioned. I do like programming — I like the feeling of making a project up from scratch. At my currently position though, all I do is tweak other people's code. Of course, the option to write interesting algorithms also greatly appeals to me.

      Furthermore, any ideas on what sorts of teams specifically to look into? I can reach out to anyone at Facebook, but really only as long as my internship lasts.

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

        “No worries about the length”?

        Somebody better get Micheal Scott...

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

        I live in Europe. The salary is a lot less than what you hear about those crazy Silicon Valley numbers. But obviously that's not a fair comparison either way, as also the living costs are a lot less here, we have universal health care, and don't have to take on gigantic student loads if we want to go to college. Software engineers are still payed well above average in my country. My company is not known to pay especially well, and I probably could earn more money somewhere else. But it can shine in other regards. But I'm sure though that the pay will be comparable to different positions, e.g. if you work in algorithm focused teams vs. in front-end focused teams at Facebook.

        I don't really know about what projects Facebook are doing. But I'm sure there are tons of projects. For instance the Libra currency (block chain) was in the news recently, that surely involves a lot of algorithms. The whole user analytics teams must involve a lot. But I'm not sure if you can find a lot of projects where the project starts from scratch. From what I've heard, if they want to do something new they just buy a company that already does it. But just talk to your team mates, they will know the company a lot better then me. I have no idea about what the company is doing. The only product of them that I sometimes use is the Facebook messenger, and clearly that hasn't been a focus for them in a long long time, since it still contains all the bad designs and bugs that it had 10 years ago. Not sure if how the Corona measures are there currently, but I would just pick random, nice looking person from an interesting project and ask if you can join him some day for lunch.

        If you want to build something from scratch, maybe the startup scene might be more interesting for you. Big companies are not the only option.

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

    That was a good read. Thank you!

    I naively considered academic research the only suitable path for me, but you have opened my eyes up to see a lot more :)

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

In my (limited) experience, I think it is important to consider who you are working with in addition to what you are building. I find I work much better with similarly-minded and hardworking individuals than with people who have been hired for rather arbitrary reasons.

If you get a good group together you can make some pretty cool stuff, and if you have smart people in the room you can usually get the 'implementation fiddling' to a minimum.

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

    What kind of experience have you had in this, if you don't mind me asking? Even if it is limited as you say, it is valuable :)

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

      I have done two summer internships at smaller-medium size companies near where I grew up (one fairly web-based, the other robotics oriented), and an internship at Facebook. Facebook gave me the “rockstar” return offer, so I will be working with them full time soon.

      I was only in college for 3 years and there weren’t really any options for internships for high school kids where I grew up, so as far as working for other people goes, that was about all I could do.

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

I am also a student, and have done an internship at a good startup, so here are my thoughts about kinds of jobs available. If someone who actually has been working as a software engineer reads this, please do correct me — it would probably help me make better career decisions.

While I don't care if I am developing something from scratch or contributing to a large existing codebase, I dislike work which is just tedious and not actually challenging. Front-end development is largely unchallenging, and I find most of it boring, and parts involving CSS almost unbearable.

I think there is a challenging aspect to back-end platform once you get to senior positions, where you are involved in the system design for the application, which makes it interesting. I am talking about a scenario where the application must efficiently scale to a large number of users, and where an efficient design is critical. Working on distributed systems seems interesting.

I believe there are also jobs where you must write code for extremely high performance trading platforms. This should be slightly closer to utilizing the skillset of competitive programming.

There is also the field of AI (excluding Machine Learning), where heuristic algorithms need to be developed. But I think these are research positions only.

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

University Research Assistant and the likes. In Germany the pay for researchers is 'slightly' more than many good local companies (at entry-level) and the work is all about yourself. You can learn/research whatever you like as long as the topic is interesting enough to be approved. No idea about other countries though.

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

    I want to be a researcher. But what if I am not able to produce any fruitful result? Won't I lose the job / funding?

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

      Research is hard however great you are. Even a prodigy like Dr. Cooper needed decades to invent something fruitful like Super Asymmetry. By making an academic investment, no one gives you money today and expects results tomorrow. Most of the time, we can only deliver 'byproducts'.

      For example, you invent a new method but it doesn't work. You can then write a paper about the discovery of a method that is not going to work. It is fine as long as you can deliver something. People may think it is a useless contribution, but trust me, 9 out of 10 papers out there do not contribute a thing to the world.

      Furthermore, being a researcher at a university, there are other tasks and responsibilities such as:

      1. Help students solve problems.
      2. Review/optimize papers.
      3. Evaluate others' projects.
      4. Present at conferences.

      and more... These activities also help expand your interests and improve your skills, so you don't have to worry about not doing anything useful.

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

I should add that I originally was interested in being a researcher. But my last summer at research, I wrote several thousand lines of code just to end up finding that there is no way to prove the problem using tools that we have. You can read the sob story here (https://reu.dimacs.rutgers.edu/~aj564/). For all that stress (working like 70 hours a week, in hopes of getting a paper and therefore a good grad school application), it wasn't worth it. So I decided to go to software engineering, and now I am here :/

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

    Research is very hard, if that's what you want you should not give up yet.

    There are two problems when one start a research:

    1. The problem was to easy.
    2. The problem was to hard.

    In case 1, the problem may be trivial, so most probably there will be not paper at all. If it's not trivial then may be a paper if the problem was not solved before. Anyway, if it was to easy you probably did not spend to much time on it, so you did not lose a lot and now you have more knowledge in the field. You can use that knowledge to state a more interesting problem, most likely related to the problem that you've solved.

    In case 2, you did not solve the original problem, but it may be some subproblems that you've solved that are interesting enough to make a paper. That happens a lot in mathematics. Another option, is to modify the original problem and try to make it easier. It's naive to say something as "I will solve X problem in Y period of time", but you need a deadline anyway. Just don't make too big expectations if you choosed a very hard problem or something with you are not familiar.

    The two cases most likely happen when one did not make a proper research in the state of the art. A good mentor helps a lot.

    PD: Your blog moves backwards for some reason, lol.

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

      Actually, it is a zoom feature :P

      I am aware of such approaches in research, my mentor was guiding me. I also researched for two summers, as well as more research during a semester. I think it is clear that research is stressful. And it is also clear that sometimes, research will not pay a reward for very hard work. I prefer to be more relaxed

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

        What strange feature, first I thought that I was going crazy.

        Yes, in your blog seems that you knew the things that I wrote. I tried to write something to the people who are not familiar with research because I guess that many people in CF will be interested in this whole post and comments.

        "sometimes research will not pay a reward for very hard work. I prefer to be more relaxed"

        That is what I think, indeed not sometimes but most of the time. Anyway, is fun.

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

          Makes sense, your advice is good for those who are willing to go through the toils of research. Thank you