А теперь давайте поговорим обо всех, а не только обо мне. Есть гармония. Там есть. Но путь разный и иногда противоречивый. Вы можете стать обоими, но начинать нужно особым образом. Вы должны знать несколько вещей.

Быть разработчиком - это долгий путь. Это займет время. Это требует культуры программирования и разработки. Но разработчиком просто так не стать. У вас должно быть скромное начало. А соревновательное программирование - лучшее скромное начало, которое у вас когда-либо было.

ИМХО, соревновательное программирование - это как изучение основ, искусства, культуры программирования. А потом вы сможете использовать полученные знания, чтобы стать хорошим разработчиком. Но это не необходимость. Чтобы стать разработчиком, необязательно иметь такое скромное начало. А позже или одновременно стану конкурентоспособным программистом. Вы можете быть одним или обоими. Сказал вам, здесь возможна гармония.

Давайте действительно поговорим

Достаточно литературы. А теперь перейдем к реальности. Не волнуйтесь, я не причиню вам вреда и скажу, что все, о чем я болтал, является чистым мифом и большой ложью. Нет, это не так. Я был полностью честен с вами с самого начала.

Видите ли, когда мы говорим конкурентное программирование, мы обычно связываемся с идеей решения проблем кодирования на таких веб-сайтах программирования, как codechef, topcoder, spoj и т. д. Когда мы говорим о разработчике, мы представляем человека, который разрабатывает приложения, создает веб-сайты, разрабатывает серверные части. , решение вопросов масштабируемости, создание мобильных приложений и т. д.

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

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

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

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

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

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

Так что они оба нужны друг другу. Так что лучше стать обоими и помочь себе. Легче сказать, чем сделать. Часто в этом есть некоторая предвзятость.

Добро пожаловать в реальный мир - где вы заботитесь о деньгах, работе, компаниях и стартапах.

Теперь, исходя из вышеупомянутой философии, вы можете почувствовать, что гармония возможна, и стать и тем, и другим - правильный путь. И не важно что. Но люди есть люди. Люди обладают способностями к ревности, ненависти, предубеждениям и нетерпению.

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

Мы все хотим работать, все мы о ней заботимся. Это наша единственная цель жизни. Иногда дело не только в работе, а в деньгах [Часто инженеры становятся выпускниками MBA, история успеха каждого индийца (каламбур, продолжайте посещать мой блог, не хочу никого обидеть)] .

Стартапов

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

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

The Bid Daddies - Google, Amazon, Apple, Facebook, Wallmart и т. Д.

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

Вердикт - давай перестанем говорить

Ты должен делать то что ты должен делать

Вы можете стать обоими, лучший путь. Но иногда вы можете стать эгоистичным или играть тактично и решить стать одним над другим, просто чтобы сосредоточиться на более конкретной области. Может быть, вы просто хотите сосредоточиться на получении высокооплачиваемой зарплаты в большой гигантской компании, такой как Google, Amazon, Facebook, тогда ваше решение может измениться, и вы сосредоточитесь больше на конкурентном программировании, а может быть, вы сосредоточитесь на стартапах и стартах. развитие навыков разработчика.

Но помните, все честно и правильно. Также возможна гармония.