Конкурентное программирование против разработки программного обеспечения - что выбрать?

Опубликовано: 5 Июня, 2021

Соревновательное программирование…. Что приходит на ум в первую очередь…? Идея решения вопросов кодирования у вас, скорее всего, ассоциируется с GeeksforGeeks, Codechef, Topcoder, Codeforces, Hackerank и т. д.

Что насчет разработки программного обеспечения…? Скорее всего, вы представляете человека, создающего приложение, веб-сайт, мобильные приложения, или человека, решающего какие-то проблемы с серверной частью или масштабируемостью приложения.

Многие сайты поощряют вас участвовать в соревновательном программировании и попрактиковаться в вопросах кодирования. В конце концов, это открывает так много возможностей для собеседований. Что ж, это правда, но некоторые из вас также знают, что некоторые люди очень хорошо зарабатывают на разработке программного обеспечения, не имея опыта программирования на соревнованиях. Итак, вопрос, который беспокоит многих людей, особенно студентов, это…. где я должен вкладывать свое время?

Прежде чем мы углубимся в эту тему, давайте сначала поговорим о спорте ... Возьмем для примера любой вид спорта, который вам нравится ... крикет, баскетбол, теннис, бадминтон или любую другую игру на открытом воздухе.

Многие хорошие игроки ( да! ... мы говорим о хороших игроках ), вовлеченные в эти виды спорта, не только постоянно занимаются баскетболом, крикетом или любой другой игрой, но и проводят время в тренажерном зале, чтобы оставаться в форме. Что ж, бег на беговой дорожке, поднятие тяжестей, отжимание, подтягивание не гарантирует вам успеха в спорте, но дает вам много преимуществ по сравнению с теми, кто их не делает.

То же самое происходит в разработке программного обеспечения, когда вы входите в мир разработки программного обеспечения как конкурентоспособный программист… ( надеюсь, вы получили наше сообщение, которое мы хотим передать через приведенный выше пример… ).

Выбор одного из них - это не только запутанное решение для студентов, изучающих информатику, но и трудное решение для опытных. разработчики, которые ищут лучшие возможности или рост в компаниях. Сегодня мы поговорим на эту тему подробно и постараемся разобраться в этой путанице. Прежде чем высказать какое-либо мнение, давайте посмотрим, что думают некоторые инженеры, работающие в некоторых крупных технологических гигантах. По словам инженера Microsoft Сатендры Верма: « Хотя это увеличивает ваши навыки, хороший инженер-программист требует гораздо большего, чем то, что может предложить конкурентное программирование. Чтобы быть хорошим инженером-программистом, не обязательно соревноваться в программировании. «Если говорить о противоположной стороне, то многие инженеры также согласились с тем, что участие в соревновательном программировании помогло им найти работу и стать инженером-программистом.

Разве это не одно и то же? Если это не так, то почему компании отдают предпочтение конкурентоспособным программистам, когда речь идет о найме на должность инженера-программиста.

Может ли конкурентоспособный программист стать хорошим разработчиком?

Разве хороший разработчик уже не является хорошим конкурентоспособным программистом?

Мы знаем, что у вас возникает множество вопросов, подобных вышеупомянутому ... снова возникает тот же вопрос ... что мне выбрать и куда я должен потратить свое время?

Что, если мы скажем, что вы должны выбрать и то, и другое, и вы можете стать обоими ??… .. Давайте сейчас подробно обсудим эту тему…

Соревновательное программирование

Самым большим преимуществом CP является то, что это облегчает вашу жизнь, а прохождение собеседований по кодированию становится для вас легким делом. Вы можете столкнуться с отказом на собеседовании, даже если вы хороший разработчик программного обеспечения, но не очень конкурентоспособный программист. CP поможет вам решить проблемы, которые имеют большое значение при разработке программного обеспечения.

Хорошему специалисту по решению проблем легко работать над сложными и сложными проектами. Когда вы работаете над большим проектом, важно разбить проблему на более мелкие части и решить каждую из них индивидуально, чтобы проект работал на пользователей. Умение решать проблемы естественно приходит к конкурентоспособному программисту. Они могут разбивать проблемы на более мелкие части, легко визуализировать решения в своей голове и преобразовывать их в код с очень небольшим количеством ошибок . Эта способность очень необходима при разработке программного обеспечения. Хороший конкурентоспособный программист также пишет правильный код и не делает много ошибок, что является еще одним его преимуществом.

CP развивает базовые базовые навыки, и все дело в изучении искусства и культуры программирования. Решение проблем с кодированием - это упражнение для вашего мозга, а также увлекательная игра для многих людей. Конкурентоспособный программист всегда хорошо владеет аналитическим мышлением, навыками решения проблем , структурами данных, временной и пространственной сложностью кода. Когда они решают вопросы по кодированию на разных веб-сайтах, они совершенствуют свои навыки, а в реальных задачах это очень важно …. как?? Прочтите пример, приведенный ниже ...

Предположим, вы работаете над большим проектом, в котором вам нужно обрабатывать крупномасштабную базу данных с ТБ данных. Здесь чтение и запись будут длительным процессом и могут снизить производительность приложения. Чтобы повысить производительность приложения и сэкономить много ресурсов, вам необходимо написать эффективный код . Вы можете улучшить временную сложность функции в своем коде и уменьшить количество обращений к чтению, сохранив наиболее часто используемые данные в кэше. Выполнение конкурентного программирования поможет вам найти наиболее оптимальное решение в наименее возможный время. Это помогает найти компромисс, и в этом сценарии этот навык очень необходим, когда вам нужно сократить время и сложность вашего кода, и вам нужно найти оптимальное решение проблемы.

Здесь мы можем сделать вывод, что конкурентоспособный программист может лучше решать проблемы, используя свое аналитическое мышление. Они умеют подбирать правильную структуру данных для конкретной проблемы. Они знают, какой из них лучше всего подходит для конкретной проблемы.

Подробнее о важности структуры данных и алгоритмов читайте в статье Почему важно изучать структуры данных и алгоритмы?

Разработка программного обеспечения

Ask a software developer and they will let you know how satisfying the journey is to build actual software that end users use. 

Мы обсудили CP и преимущества CP, но теперь мы собираемся обсудить другую сторону CP, которая не может быть сопоставима с разработкой программного обеспечения. Люди, которым нравится CP, обычно не любят разработку программного обеспечения. Причина в том, что большую часть времени им придется работать с некоторыми библиотеками, фреймворками или некоторыми инструментами для создания реального программного обеспечения, в котором все уже реализовано. В этих случаях они не находят возможности использовать свои навыки соревновательного программирования.

Если вы конкурентоспособный программист, то вы ошибаетесь, если думаете, что разработка программного обеспечения - это поиск решения на Stack Overflow или помощь некоторых онлайн-сообществ. Быть разработчиком - это долгий путь. Это требует времени. Это требует культуры программирования и разработки . У НУ будет тратить много времени на различных сайтах и блогах , чтобы узнать обо всех инструментах, технологии, библиотеки , чтобы получить вещи , сделанные в работе. Вам нужно самостоятельно выяснить, какой инструмент, библиотека или фреймворк лучше всего подобрать для решения ваших проблем (например, когда использовать MongoDB, когда использовать MySQL или когда хорошо использовать эластичный поиск). Лучшие инженеры - это те, кто достаточно умен, чтобы использовать наиболее подходящие инструменты для решения конкретной проблемы.

Разработчик программного обеспечения также имеет дело со сложностью системы, проблемой масштабируемости и некоторыми методами решения проблемы производительности приложения (например, механизма кэширования).

В разработке программного обеспечения большую часть времени вы работаете в команде, и ваш код - это не просто ваш код (но часто их хозяевами являются конкурирующие программисты ). Поэтому при разработке программного обеспечения очень важно писать чистый и лучший код, который легко читать, легко изменять, легко поддерживать и легко расширять. Никто не любит работать над беспорядочным кодом, написанным XYZ-разработчиком в команде. Вы получите ненависть от других разработчиков, если оставите беспорядочный код в кодовой базе. Так что этот навык - один из самых важных навыков, которым должен обладать разработчик программного обеспечения. Это приходит с практикой, терпением, изучением кода других разработчиков и когда вы можете заниматься созданием реальных проектов. К сожалению, соревновательное программирование не может научить вас этому набору навыков.

Вы также должны хорошо разбираться в шаблонах проектирования и операционных системах. компьютерные сети, распределенные системы и некоторые другие фундаментальные концепции информатики. Разработка программного обеспечения улучшает вас во многих областях. Это улучшает ваши коммуникативные навыки, потому что вам нужно поговорить со своими менеджерами или коллегами о требованиях к продукту или задачах в вашем проекте. В CP только вы пишете код и повышаете рейтинг. Нет никакого участия других.

Одна из лучших вещей в разработке программного обеспечения - это то, что вы облегчаете жизнь другим и оказываете большое влияние на жизнь людей. Вы только посмотрите вокруг, так много приложений, облегчающих нашу жизнь. Uber, Zomato, Swiggy, Ola оказывают большое влияние на жизнь людей. Эти вещи невозможно делать только CP. Разработка программного обеспечения также открывает возможность фриланса, который является еще одним хорошим источником дохода для многих людей.

А как насчет возможностей трудоустройства?

Да, нам нужно поговорить на эту тему ... в конце концов, все дело в том, чтобы заработать деньги.

Если говорить о стартапах, то требования к ним другие. В большинстве случаев им нужен разработчик, способный начать все с нуля. Им нужно все настраивать и строить с нуля. Таким образом, их требования при приеме на работу другие. Они находятся на начальной стадии разработки, поэтому количество пользователей для их продукта ограничено и, следовательно, иногда не требуется глубоких знаний структуры данных и алгоритмов . Обычно они нанимают опытных разработчиков, которые работали над некоторыми проектами и могут начать с первого дня, практически не имея времени на подготовку.

Этим стартапам достаточно приличного опыта программирования, но более того, они предпочитают того, кто уже знает весь технологический стек, методологию кодирования, инструмент, библиотеку или фреймворк, с которыми им нужно работать. Они больше заботятся о том, чтобы как можно скорее выпустить свой продукт на рынок для пользователей. Этим стартапам могут понадобиться конкурентоспособные программисты позже, когда они начнут замечать некоторые проблемы со скоростью и масштабируемостью из-за растущего числа пользователей. В этом случае предпочтение будет отдано сделать приложение более быстрым и эффективным. для них.

Если мы говорим о крупных технологических гигантах Google, Amazon, Microsoft, Apple, Facebook, Walmart и т. Д., То требования у этих компаний разные. У них огромное количество пользователей по всему миру, и они гораздо больше заботятся об эффективности и производительности приложения. Им нужны конкурентоспособные программисты с глубокими знаниями структур данных и алгоритмов. Конечно, лучше всего им подходят конкурентоспособные программисты, потому что они могут думать и решать сложные задачи более эффективно. Соревновательный программист сможет подобрать правильную структуру данных и алгоритмы, чтобы сделать все за себя. Эти компании больше внимания уделяют сложности кода. Потому что обо всем остальном уже позаботился специализированный персонал.

Заключение

Что ж, разработчик может создавать хорошее программное обеспечение, не имея опыта конкурентного программирования, но думаете ли вы, что без набора навыков CP и знания структур данных и алгоритмов он / она сможет сделать приложение более быстрым, эффективным, имеющим лучшую временную и пространственную сложность ? Конечно нет ...

Дело в том, что… если вы занимаетесь только разработкой программного обеспечения, вы упускаете несколько преимуществ конкурентного программирования, которые могут помочь вам создавать хорошее программное обеспечение. С другой стороны, если вы занимаетесь только соревновательным программированием, вам также будет сложно адаптировать культуру разработки программного обеспечения.

Оба они нужны друг другу . Так что лучше стать обоими и помочь себе . Ты должен потратить время в соревновательном программировании, а затем вы должны использовать полученные знания, чтобы стать хорошим разработчиком. Если вы студент , хорошо провести время в CP, чтобы построить фундамент, но запачкать руки, создавая какой-нибудь настоящий проект, даже если он меньшего размера. Для опытных разработчиков эти задачи программирования могут стать хобби и развлечением. их повседневная жизнь. Так же , как попав в тренажерный зал может быть частью чьей - то повседневной жизни , чтобы оставаться в форме, решая вопрос кодирования должен быть также частью жизни разработчика. В конце концов , все дело в тренировке вашего мозга.

Даже если мы предложили выбрать их обоих, вы все равно можете выбрать одно из них и заниматься любимым делом. Все дело в вашем удовлетворении, и это нормально, если вы хотите сосредоточиться только на одной конкретной вещи. В обеих сферах есть множество возможностей, и вам будет достаточно денег , если вы отдадите все свои 100% тому, чем любите заниматься.