Первый пост из серии, посвященной реализации различных концепций CS для веб-разработчиков.

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

Я где-то посередине. Нет сомнений в том, что каждый веб-разработчик ежедневно использует алгоритмы. Если вы когда-либо манипулировали строкой или массивом в JavaScript или любом другом языке, если на то пошло, вы использовали алгоритм, независимо от того, знали ли вы, как алгоритм на самом деле выполняет свою задачу. Вы когда-нибудь писали код внутри цикла for, да, вы писали алгоритм, даже если он был таким простым, как регистрация вывода каждого значения в цикле for. Нужно ли мне, как веб-разработчику, знать внутреннюю работу алгоритма массива sort в Ruby, чтобы использовать его эффективно? Конечно, нет. Становлюсь ли я лучше программистом в целом, когда понимаю, как работают мои инструменты, и, возможно, что более важно, почему они не работают в определенных ситуациях. Я так считаю.

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

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

По мере развития веб-разработки она имеет тенденцию к большей сложности, а не к меньшей. Конечно, HTML и CSS — это мощные инструменты, которыми должен овладеть каждый веб-разработчик, но в сегодняшних условиях их просто недостаточно. Нам нужен доступ ко все более мощным и сложным инструментам, чтобы идти в ногу с постоянно меняющимся ландшафтом разработки программного обеспечения в Интернете. Трудно быть хорошим разработчиком React, Angular и т. д. без предварительного понимания основ JavaScript. Точно так же трудно быть хорошим разработчиком JavaScript, Ruby, PHP, Python и т. д., не понимая основ, на которых построены эти языки. Эти основы, также известные как структуры данных и алгоритмы, имеют плохую репутацию. Многие предполагают, что, поскольку они преподаются на университетских курсах информатики, они носят чисто академический характер и сложны для изучения. Это прискорбно. Хотя концепции могут быть абстрактными, они не должны быть сложными.

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