Hi CodeForces community!
As I'm graduating highschool soon I'm super confused on what I should study in college and what in-demand, good (and high-paid, ofcourse) jobs in the computer science field I can get from pursuing it. Any suggestions? What're your plans and why?
This post ended up getting upvotes than comments.. something I wasn't hoping for. Please comment up guys! Don't worry about contribution, every comment will be appreciated.
He wants specific answers from CPers, I know I do too!
Exactly man! Thanks for understanding
What're your plans? I want to score decently enough in entrance exam to get admission in IIT based in my hometown(Indore), I also want to do part-time teaching at a nearby school because I don't like traditional schools. and why? because I want to stay with my family, don't want to live in big cities, be in academics as much as possible :).
Cool plans, hope you succeed getting into IIT. But I was basically thinking of the what to study in college and after-college plans
Go for the top 7 IITs if preparing for JEE. Don't just stick to Indore because of your hometown, you'll feel this in your final years, and I wanna know for how long you'll be in Indore just coz your family is there. Anyone's family will always want other family members to be successful rather than just stick to them and be just like other family members. The choice is in your hands. All the best.
I am not confident that I will qualify to get a seat in top IITs. My only aim is to somehow get into IIT-I without any preference for branch beacause the only branch of interest to me is Engineering Physics which sadly is not offered at IDR. I can stay here lifetime because I don't want to do a job, not interested in research. My only interest is in basic sciences mainly physics. I am thinking it this way — At IIT-I there will be less pressure of engineering study and I can spend more time on doing things which are interesting to me rather than study for engineering courses atleat that's what my cousin told me that many courses in Eng are useless.
First thing you should do is stop doing Cf.
wait, that doesn't sound right
The big thing I experienced after I started working at company is, more than 80% of programmers don't really care about algorithms. (There are very many people who don't even know what is Codeforces.) Maybe machine learning engineers are nice for math enthusiasts. But in general, you won't often encounter such algorithm-needed situations when you work as programmer. But still, I think being good at algorithm is a big benefit, because I believe it's helpful to design big flow of logic with algorithmic programming experience.
One of the best things I can suggest is, after studying some basic CS stuffs and basic frameworks, try internship or some assistant role at research projects. It helps you a lot to know about yourself — especially your goal. I participated in some research project as assistant and made heavy-math based software and now I am doing front end developer(I will escape front end asap lol) at some nice company. I am still pivoting my goal and those experiences are very helpful.
Intership in research projects.. got it. I have a question though, do I need to study additional complex mathematics to pursue a career in machine learning? Like I have no background in maths whatsoever, I didn't participate in Math Olympiads or go anywhere outside my textbook mathematics in highschool..
Math Enthusiast, that I can call myself. I like learning new things in math.
I have done an internship in machine learning myself. You don't need to deal with complex mathematics always. Being a math enthusiast, trying to understand the reason behind the equation should be easy enough. Good Luck Brother.
Hey thanks for the positive feedback! That really made me feel really good cause machine learning really excites me and I'd like to pursue a career in it, so thanks you so much! Good Luck to you too brother!
I'd like to add a little. Although you will probably not be using Dynamic Programming or Network Flows in your day-to-day jobs, a bare minimum of algorithm knowledge (like DFS) is quite necessary and needed a lot of times. Trees, in general, appear a lot (for e.g.: Directory traversal, Parsing nested JSON/XML etc.). I've seen a lot of cases where people could not write a simple recursive DFS or represent Trees in code. This stuff is not optional.
I'm not planning to leave cp anytime soon, so i hope I'll be able to get a good grasp of the basic algorithms in the future. Thanks for the suggestion mate!
I started working at Microsoft (frontend/middle-tier) and then moved to Google (backend) in the beginning of this year and I can tell you the following (keep in mind that in no way I'm representing Microsoft or Google, this are all thoughts of my own):
1.- Most software engineers I've met in these companies are self driven and don't have a super strong theoretical or algorithmic background. Some guys I've met have PhDs or Masters, however some of them had the same title I did (I don't know if they were paid more or recieved better bonuses than me though). Keep in mind that since I don't have a Masters or a PhD I haven't worked in research in Big Tech companies, if that's what you refer to jobs in the CS field, then I can tell you any field has great opportunities, of course the most common now a days are AI, ML, BigData, data mining, etc. Please don't study one of those just because you think you will make more money, chose one you can dedicate yourself to because top earner on non buzzword field >>> average buzzword field earner.
2.- If I compare Google to Microsoft I feel like the average engineer has a slighly higher algorithmic background, probably not enough to be statistically significant. In my mind I try to justify it because when I interviewed in Google, I felt the interviews involved more algorithm oriented thinking compared to Microsoft's and Facebook's. If I were to assign them difficulties I'd say hardest problem in Google was Div2C and hardest in Microsoft and Facebook Div2B.
3.- While working I've had several problems that require algorithmic thinking (using trees, etc.), however nothing crazy complex that I need to think about it for longer than an average Div1C+, the reason for that is due to the nature of Software Engineering, most of the time you are given a specific task and you have to come up with a way to implement it, but for most implementations it requires translating what you need to do into code that is scalable, and I don't mean only input size wise, in Software Engineering the most important things are that the code works for the problem it's solving (it doesn't matter if you can cleaverly solve a problem in O(N) if the maximum N will be around 100, then trivial O(N^2) does the job), that the code is easy to modify and that your peers are able to understand it, in other words it doesn't matter if you solve a problem cleverly in O(N) and then your peers have to modify it because requirements change and all your code is cryptic and hard to understand, if it's trivial to do it in O(N^2) they might as well remove your code from the code base and do the easy solution.
4.- Design has nothing to do with traditional problem solving. What I mean by this is in traditional problem solving you are given a well defined universe with a well defined problem and you can use different clever ideas that are relevant to that specific problem to solve it. Designing something involves considering every branching possibility of the requirements and making sure that your code handles the most likely ones to happen and the ones it needs to handle atm. Designing an excelent and reliable system is where most of my time usually goes to and that's where I've spent several days thinking about how to solve the problem.
5.- In industry time is limited, so you can't have software engineers waste engineering hours overengineering something, sometimes a suboptimal solution is good enough because the nature of the problem implicity or explicitly states so, learning that is probably one of the most important skills in a software engineer or manager.
6.- You can enter these companies by studying many different things, I've met software engineers with math majors, electrical engineering, software engineering, computer science. So in my opinion try not to focus in studying something that you think will help you get where you want to be, but instead think where do you want to be and try to get there. Remember how in point #1 I mentioned most software engineers I've met are self-driven? That's what will drive you further in real life.
7.- Not everything is like in the movies, getting a (in your words) high-paid job was just the beginning of my professional career and there was lot of learning and developing I've had to do and up to this day I keep learning and focus on growing and developing myself, if I were to give you the best piece of advice I could, which I would also give to my younger self is that it takes time to get where you want to be and consistence and persistence get you much further.
8.- Try to apply to companies since your first university years, an internship will prepare you more for the actual job than school. School helps you prepare for interviews, internship for the real thing.
Thank you so much for the suggestions man. Your insight on the job sector and how to approach university rmakes it a lot easier for me now, so thank you! I'll be keeping all of those in mind.
gonna become the best cook in my city to serve the prettiest fucking cutlets