Difference Between Competitive Programming and Software Development _ Applied AI Course

The Importance of Competitive Programming and Software Development for Software Engineers

For software engineers, particularly those who are new to the field or are looking to transition into senior roles, there is a growing emphasis on system design, low-level design, and software development. As you become a senior engineer, people expect you to know the basics of data structures, algorithms, and basic problem-solving skills. However, they also want you to start building more complex software. This means that as you become a slightly senior 2+ years experienced engineer, the importance of software development, software design, and problem-solving skills all kick in.

Software development is no longer just about writing code; it's about solving real-world problems. For example, building a live streaming app like YouTube requires a deep understanding of how to define the problem, break it down into smaller chunks, and solve it step by step. This means that you need to have good problem-solving skills, which you can build through competitive programming. In fact, I've been through this journey myself, and I can attest to the satisfaction of bringing actual software to life.

However, many students are unsure about what they should focus on during their undergraduate studies. If you're an undergraduate student, regardless of the engineering program you're pursuing, here is a simple rule of thumb: spend your first two years focusing on picking up one major programming language and becoming good at data structures and algorithms. Participate in competitive programming to gain foundational knowledge that will serve you well throughout your career.

In your third and fourth year, if you're doing a BTech program or a four-year undergraduate program, spend 50% of your time on competitive programming. Many companies ask for competitive programming as part of the interview process, so it's essential to have this skill down pat. However, don't forget to also spend 50% of your time building something tangible, whether it's your B Tech third year project or five year project or course projects. Building software gives you practical experience that can help you stand out in interviews and ultimately advance your career.

If you're already above average or good with competitive programming, don't worry about it too much; spend more time on software development. If you're three plus years experienced, my suggestion is to spend only 10% of your time on competitive programming and 90% of the time on software development. You'll be transitioning to SDE 2 or H1 roles, where the focus is on delivering working software rather than solving individual problems.

Competitive programming, however, is still an essential skill for any software engineer, regardless of their level of experience. It helps you develop problem-solving skills, which are essential for tackling complex software development challenges. Even if you're not competing at a high level, taking on challenging problems and working to solve them can be a fun and rewarding way to improve your skills.

In fact, I've always enjoyed competitive programming as a way to relax and challenge myself outside of work. Whenever I have some free time, I like to pick up an interesting problem and try to solve it. It's a great way to achieve something tangible in a short period of time, which can be very satisfying. Overall, competitive programming is not just for top-level competitors; anyone with an interest in software development can benefit from participating in competitions or solving challenging problems on their own.

In conclusion, while competitive programming may seem like an esoteric skill, it's essential for any software engineer looking to advance their career. By focusing on building foundational skills through data structures and algorithms, spending time on competitive programming, and building practical software projects, you'll be well-equipped to tackle the challenges of software development and stand out in the job market.

"WEBVTTKind: captionsLanguage: enhi friends a question that we are often asked by our students and learners is what is the difference between competitive programming and software development and should a focus on competitive programming or should a focus on software development building actual software so first let's understand what is competitive programming how is it different from software development and where you should put your effort and energies at all right so let's go step by step so first and foremost computer programming is all about given a well-defined problem with clear inputs and outputs and clear expectation on what is expected you have to build a simple module typically what happens here is you have to write some simple code which is at most 50 or 60 lines at most if you write efficiently it's much smaller and you're to solve a very defined problem in 20 to 30 minutes again there are tons of competitive programming platforms where there are well-defined problems that you have to write code in 20 to 30 minutes again if you notice the skills that you need to participate in competitive programming or programming knowledge in any major programming language of your choice foundational understanding of core data structures and algorithms you also need to learn how to debug your code how to understand where your code is going wrong in case it's going wrong very importantly how to write edge cases or boundary cases these are the four most important skills that you need for competitive programming now what is what is competitive programming trying to test it is trying to help you build problem-solving skills and that's what it is also testing you for given a very defiant question a very defined problem with clear inputs and outputs can you write code for it in a given restricted period of time okay this is all about problem solving and remember problem solving is an extremely important skill in the workplace because it is often referred to as a transferable skill which means if you have good problem-solving skills in one domain and if you learn the foundations of other other areas or other domains the problem-solving skills that you learnt in one domain can be transferred to other domains now additionally what it's also testing as you can see here is it tests foundational knowledge in computer science it can't it doesn't test all areas of computer science but it tests the most important stuff in in in a real workplace which is your ability to program foundation understanding of data structures and algorithms because if you know foundational data structures algorithms you can learn many other concepts in computer science very easily now completive programming is also often used by the top product based companies also called as fine Facebook Amazon Apple Netflix Google all these top companies they use it a lot for their entry-level software engineers often refer to us as de ones and also for SD to rolls SD to rolls are typically with people of two to three years experience work experiences software development now why are these used by some of the top product based companies the reason being it's very interview friendly in an interview set up the interviewer can ask you three very defined problems and they can give about 20-25 minutes per question and they can see how well you are able to program how well you are able to debug your own code how well are you able to handle all the boundary cases while writing a decently optimized code so it is very interview friendly form of form of programming now in addition to that for somebody who is practicing comparative programming it's very quick to complete even as a beginner given some simpler problems you can write the whole solution in a bottom R so what happens here is these are fun problems to work on especially if you are a young computer science engineer these are fun problems if they often feel like playing a game that's why it's also called as competitive because a lot of competitions that happen it's like playing video games of course you have to apply more problem-solving skills here just like in other video games also but it's a lot of fun to solve because these are well-defined problems which you can finish in under an hour even as a beginner now on the other hand software development is slightly different from this the objective of software development as you can see here is to build useful software from scratch or by using other libraries or other modules now let me give you some examples here for example you might want to build a video chat application like zoom that can accommodate up to 100 people and that requires while it requires lot of foundation computer science knowledge it also requires other skills that I just come to similarly imagine if you want to build a search engine a small search engine for your company let's assume your company has lots of questions and answers that your customers have asked in the past and you want to build a simple search engine for that this is a live session that we have done it's a four-part live session that we have done where we actually build a production ready system and you can watch it on our YouTube channel similarly you can build a group chat app like like like whatsapp right or telegram and imagine building it with millions of users manually using it or you can build a YouTube streaming app like system or you can build a IOT device like a Alexa smart speaker so all these involve considerable amount of software development and for software development itself you need all the concepts and all the foundational skills of comparative programming so for example you need to know programming well enough you need to know basic data structures and algorithms you need to know how to debug code how to handle boundary cases you need to have decent problem-solving skills that's why competitive programming is often seen as a basic foundational skills that even helps in software development but in software development you need more things so for example you need to understand how an operating system works you need to have understand how computer networks work suppose if you want to build a zoom like app you need to know basics of basics of computer networks and you might if you have to build an IOT system you have to learn how microprocessors and microcontrollers work similarly you might know you might have to learn something about distributed systems or cloud computing right so or even full stack development so software development in addition to having skills that are required for competitive programming require additional things in addition to that you require a lot of software design skills whether it's object-oriented programming or low-level design or its system design right similarly you need to know basics of software engineering how you test your code how do you work in large teams of software engineers in case you are collaborating with others to build the software and at the end of it you also need to know how to deploy your system into production so what software what good software developers require is all the skills that are there in competitive programming plus additional skills that's very very important similarly if you want to build a decent software for it for a reasonably complex problem it takes time and there is lot of learning that you will only get by getting your hands dirty so it is time taking to both learn and build so in top product-based companies for software development engineers 2 3 & 4 there is lot of focus on system design there is lot of focus on low level design there is lot of focus on software development because as you are becoming a senior engineer people expect you to know the basics of compassing data structures algorithms basic problem-solving skills but they also want you to start building more complex software so as you become a slightly senior 2 plus years experienced engineer the importance of software development software design they all kick in now very often in software development what you have is an open-ended problem for example build a live streaming app the way you have on YouTube that's a very open-ended problem nobody tells you this input this output like in a comparative programming so you have to figure out how to define the problem in a clean fashion how to break the problem into smaller chunks and solve it step by step so even in software development you need to have lot of good problem-solving skills which you built in or which you built why a competitive programming and to be honest with you I've been I've been through that journey it's a very satisfying journey to bring actual software that end-users use it's very very satisfying enough now comes the question what should I focus on so here is a simple rule of thumb that we have designed if you're an undergraduate student whatever engineering you're doing or whether even if you do BSC or Beacom whatever you are doing in your first and second year of undergraduate studies focus on picking up one major programming language become good at data structures and algorithms and participate in competitive programming because that gives you the foundational knowledge right in your third and fourth year right if you are doing a BTech program or a four-year undergraduate program spend 50% of your time on competitive programming because lot of companies for entry-level software engineers ask for competitive programming but also spend 50% of your time building some useful software whether it is your B Tech third year project or five year project or course projects build something tangible and I've seen in many many interviews if you build something with scales which is well built in the interviews or even in general right it helps you a lot on your career path if you have less than three years experience my suggestion here is do comparative programming for about 1/4 or 25% of your time remember competitive programming and the skills the foundational skills that you learn basic data structures algorithms problem-solving skills are core to whole of software development so don't skip on it spend about 25% of your time on competitive programming if you're already above average or if you're good with comparative programming just don't worry about it spend more time on software development and if you're three plus years experience then probably ish first of all you have to become decently good at comparative programming you don't have to be a topper in competitions but you need to be able to solve a good chunk of problems in a reasonable amount of time for people with three plus years experience my suggestion is spend about 10% of your time on competitive programming and 90 plus percent of time on software development because you will be transitioning to SDE 2 or HD 3 or HD for rules right but remember if you want to transition to a senior role at a top product based company or if you want to build software for your own company or if you want to build software in general becoming good at basic competitive programming helps you in in the long run again I have done competitive not exactly computer programming I have written I have prepared for some of these again when I was a student there was very little competitive programming but I could solve good good good interview problems in about 20 thirty minutes over the years as my experience increased I started focusing less and less than competitive programming more and more on building actual software but once in a while I take a couple of problems and try to solve them right code for it because it's fun that fun elementadd competitive programming is something that people across the spectrum of experiences can still enjoy and it's also great like it's like a afternoon team right I just sipped my tea or the weekend whenever I get time I pick up an interesting problem trying to solve it it's a lot of fun and you can get work you can actually solve the problem in a good half an hour maximum one or even if it's a hard problem but that's like you're achieving something sensible in a short period of time so again these are general guidelines if you are already good with competitive programming please spend time building the skills for software development because that will help you in the long run in the long run in your career of 3035 years as a software engineer in the long run the problem-solving skills of comparative programming that's surely helpful but equally and actually more important are the software development skills that you learn through your careerhi friends a question that we are often asked by our students and learners is what is the difference between competitive programming and software development and should a focus on competitive programming or should a focus on software development building actual software so first let's understand what is competitive programming how is it different from software development and where you should put your effort and energies at all right so let's go step by step so first and foremost computer programming is all about given a well-defined problem with clear inputs and outputs and clear expectation on what is expected you have to build a simple module typically what happens here is you have to write some simple code which is at most 50 or 60 lines at most if you write efficiently it's much smaller and you're to solve a very defined problem in 20 to 30 minutes again there are tons of competitive programming platforms where there are well-defined problems that you have to write code in 20 to 30 minutes again if you notice the skills that you need to participate in competitive programming or programming knowledge in any major programming language of your choice foundational understanding of core data structures and algorithms you also need to learn how to debug your code how to understand where your code is going wrong in case it's going wrong very importantly how to write edge cases or boundary cases these are the four most important skills that you need for competitive programming now what is what is competitive programming trying to test it is trying to help you build problem-solving skills and that's what it is also testing you for given a very defiant question a very defined problem with clear inputs and outputs can you write code for it in a given restricted period of time okay this is all about problem solving and remember problem solving is an extremely important skill in the workplace because it is often referred to as a transferable skill which means if you have good problem-solving skills in one domain and if you learn the foundations of other other areas or other domains the problem-solving skills that you learnt in one domain can be transferred to other domains now additionally what it's also testing as you can see here is it tests foundational knowledge in computer science it can't it doesn't test all areas of computer science but it tests the most important stuff in in in a real workplace which is your ability to program foundation understanding of data structures and algorithms because if you know foundational data structures algorithms you can learn many other concepts in computer science very easily now completive programming is also often used by the top product based companies also called as fine Facebook Amazon Apple Netflix Google all these top companies they use it a lot for their entry-level software engineers often refer to us as de ones and also for SD to rolls SD to rolls are typically with people of two to three years experience work experiences software development now why are these used by some of the top product based companies the reason being it's very interview friendly in an interview set up the interviewer can ask you three very defined problems and they can give about 20-25 minutes per question and they can see how well you are able to program how well you are able to debug your own code how well are you able to handle all the boundary cases while writing a decently optimized code so it is very interview friendly form of form of programming now in addition to that for somebody who is practicing comparative programming it's very quick to complete even as a beginner given some simpler problems you can write the whole solution in a bottom R so what happens here is these are fun problems to work on especially if you are a young computer science engineer these are fun problems if they often feel like playing a game that's why it's also called as competitive because a lot of competitions that happen it's like playing video games of course you have to apply more problem-solving skills here just like in other video games also but it's a lot of fun to solve because these are well-defined problems which you can finish in under an hour even as a beginner now on the other hand software development is slightly different from this the objective of software development as you can see here is to build useful software from scratch or by using other libraries or other modules now let me give you some examples here for example you might want to build a video chat application like zoom that can accommodate up to 100 people and that requires while it requires lot of foundation computer science knowledge it also requires other skills that I just come to similarly imagine if you want to build a search engine a small search engine for your company let's assume your company has lots of questions and answers that your customers have asked in the past and you want to build a simple search engine for that this is a live session that we have done it's a four-part live session that we have done where we actually build a production ready system and you can watch it on our YouTube channel similarly you can build a group chat app like like like whatsapp right or telegram and imagine building it with millions of users manually using it or you can build a YouTube streaming app like system or you can build a IOT device like a Alexa smart speaker so all these involve considerable amount of software development and for software development itself you need all the concepts and all the foundational skills of comparative programming so for example you need to know programming well enough you need to know basic data structures and algorithms you need to know how to debug code how to handle boundary cases you need to have decent problem-solving skills that's why competitive programming is often seen as a basic foundational skills that even helps in software development but in software development you need more things so for example you need to understand how an operating system works you need to have understand how computer networks work suppose if you want to build a zoom like app you need to know basics of basics of computer networks and you might if you have to build an IOT system you have to learn how microprocessors and microcontrollers work similarly you might know you might have to learn something about distributed systems or cloud computing right so or even full stack development so software development in addition to having skills that are required for competitive programming require additional things in addition to that you require a lot of software design skills whether it's object-oriented programming or low-level design or its system design right similarly you need to know basics of software engineering how you test your code how do you work in large teams of software engineers in case you are collaborating with others to build the software and at the end of it you also need to know how to deploy your system into production so what software what good software developers require is all the skills that are there in competitive programming plus additional skills that's very very important similarly if you want to build a decent software for it for a reasonably complex problem it takes time and there is lot of learning that you will only get by getting your hands dirty so it is time taking to both learn and build so in top product-based companies for software development engineers 2 3 & 4 there is lot of focus on system design there is lot of focus on low level design there is lot of focus on software development because as you are becoming a senior engineer people expect you to know the basics of compassing data structures algorithms basic problem-solving skills but they also want you to start building more complex software so as you become a slightly senior 2 plus years experienced engineer the importance of software development software design they all kick in now very often in software development what you have is an open-ended problem for example build a live streaming app the way you have on YouTube that's a very open-ended problem nobody tells you this input this output like in a comparative programming so you have to figure out how to define the problem in a clean fashion how to break the problem into smaller chunks and solve it step by step so even in software development you need to have lot of good problem-solving skills which you built in or which you built why a competitive programming and to be honest with you I've been I've been through that journey it's a very satisfying journey to bring actual software that end-users use it's very very satisfying enough now comes the question what should I focus on so here is a simple rule of thumb that we have designed if you're an undergraduate student whatever engineering you're doing or whether even if you do BSC or Beacom whatever you are doing in your first and second year of undergraduate studies focus on picking up one major programming language become good at data structures and algorithms and participate in competitive programming because that gives you the foundational knowledge right in your third and fourth year right if you are doing a BTech program or a four-year undergraduate program spend 50% of your time on competitive programming because lot of companies for entry-level software engineers ask for competitive programming but also spend 50% of your time building some useful software whether it is your B Tech third year project or five year project or course projects build something tangible and I've seen in many many interviews if you build something with scales which is well built in the interviews or even in general right it helps you a lot on your career path if you have less than three years experience my suggestion here is do comparative programming for about 1/4 or 25% of your time remember competitive programming and the skills the foundational skills that you learn basic data structures algorithms problem-solving skills are core to whole of software development so don't skip on it spend about 25% of your time on competitive programming if you're already above average or if you're good with comparative programming just don't worry about it spend more time on software development and if you're three plus years experience then probably ish first of all you have to become decently good at comparative programming you don't have to be a topper in competitions but you need to be able to solve a good chunk of problems in a reasonable amount of time for people with three plus years experience my suggestion is spend about 10% of your time on competitive programming and 90 plus percent of time on software development because you will be transitioning to SDE 2 or HD 3 or HD for rules right but remember if you want to transition to a senior role at a top product based company or if you want to build software for your own company or if you want to build software in general becoming good at basic competitive programming helps you in in the long run again I have done competitive not exactly computer programming I have written I have prepared for some of these again when I was a student there was very little competitive programming but I could solve good good good interview problems in about 20 thirty minutes over the years as my experience increased I started focusing less and less than competitive programming more and more on building actual software but once in a while I take a couple of problems and try to solve them right code for it because it's fun that fun elementadd competitive programming is something that people across the spectrum of experiences can still enjoy and it's also great like it's like a afternoon team right I just sipped my tea or the weekend whenever I get time I pick up an interesting problem trying to solve it it's a lot of fun and you can get work you can actually solve the problem in a good half an hour maximum one or even if it's a hard problem but that's like you're achieving something sensible in a short period of time so again these are general guidelines if you are already good with competitive programming please spend time building the skills for software development because that will help you in the long run in the long run in your career of 3035 years as a software engineer in the long run the problem-solving skills of comparative programming that's surely helpful but equally and actually more important are the software development skills that you learn through your career\n"