HTML Diff
2 added 2 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>28 июн 2022</li>
2 <ul><li>28 июн 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Поговорили с разработчиками о том, стоит ли джуну погружаться в дебри Computer Science или лучше подтянуть недостающие знания в процессе работы.</p>
4 </ul><p>Поговорили с разработчиками о том, стоит ли джуну погружаться в дебри Computer Science или лучше подтянуть недостающие знания в процессе работы.</p>
5 <p>Кадр: фильм "Скрытые фигуры"</p>
5 <p>Кадр: фильм "Скрытые фигуры"</p>
6 <p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
6 <p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
7 <p>На самом деле заголовок немного лукавый: ответ на вопрос "учить или не учить" оказался не столь однозначным. Наши респонденты неожиданно разделились на четыре группы:</p>
7 <p>На самом деле заголовок немного лукавый: ответ на вопрос "учить или не учить" оказался не столь однозначным. Наши респонденты неожиданно разделились на четыре группы:</p>
8 <ul><li>Одни смело утверждают, что в IT можно уверенно себя чувствовать и без Computer Science.</li>
8 <ul><li>Одни смело утверждают, что в IT можно уверенно себя чувствовать и без Computer Science.</li>
9 <li>Другие говорят, что начинать можно и будучи полным валенком в информатике. Но позже теоретические знания всё-таки придётся наверстать.</li>
9 <li>Другие говорят, что начинать можно и будучи полным валенком в информатике. Но позже теоретические знания всё-таки придётся наверстать.</li>
10 <li>Третьи настаивают, что без серьёзных познаний в Computer Science даже соваться в профессию не стоит.</li>
10 <li>Третьи настаивают, что без серьёзных познаний в Computer Science даже соваться в профессию не стоит.</li>
11 <li>Наконец, четвёртые подошли к вопросу сугубо практически: Computer Science - наука глобальная, не всем понятная. Поэтому не надо пытаться объять необъятное: каждой специальности - свой конкретный раздел CS.</li>
11 <li>Наконец, четвёртые подошли к вопросу сугубо практически: Computer Science - наука глобальная, не всем понятная. Поэтому не надо пытаться объять необъятное: каждой специальности - свой конкретный раздел CS.</li>
12 </ul><p>Давайте выслушаем все мнения - а дальше решайте, какое вам ближе.</p>
12 </ul><p>Давайте выслушаем все мнения - а дальше решайте, какое вам ближе.</p>
13 - <h2><strong>Репетируют те, кто играть н умеет</strong></h2>
13 + <h2><strong>Репетируют те, кто играть не умеет</strong></h2>
14 <p><strong>Principal Frontend Developer, CTO в CSSSR</strong></p>
14 <p><strong>Principal Frontend Developer, CTO в CSSSR</strong></p>
15 <p>Начинающему разработчику можно совсем не погружаться в Computer Science. Уверяю вас: если он окажется совершенно незнаком с системой типов Хиндли - Милнера, ничего страшного не произойдёт. Более того: он, возможно, даже будет пользоваться им на прикладном уровне, сам того не подозревая. Ведь работа новичка чаще всего - ремесленничество. К инженерной деятельности он приближается уже на более поздних этапах карьеры.</p>
15 <p>Начинающему разработчику можно совсем не погружаться в Computer Science. Уверяю вас: если он окажется совершенно незнаком с системой типов Хиндли - Милнера, ничего страшного не произойдёт. Более того: он, возможно, даже будет пользоваться им на прикладном уровне, сам того не подозревая. Ведь работа новичка чаще всего - ремесленничество. К инженерной деятельности он приближается уже на более поздних этапах карьеры.</p>
16 <p>На мой взгляд, Computer Science больше связаны с теоретическими исследованиями, наукой в чистом виде, чем с ежедневной практикой, - хотя, конечно, и разработка там тоже присутствует.</p>
16 <p>На мой взгляд, Computer Science больше связаны с теоретическими исследованиями, наукой в чистом виде, чем с ежедневной практикой, - хотя, конечно, и разработка там тоже присутствует.</p>
17 <p><strong>Principal Frontend Developer в CSSSR</strong></p>
17 <p><strong>Principal Frontend Developer в CSSSR</strong></p>
18 <p>Скажу слегка провокационно: Computer Science не нужны 99% разработчиков, решающих практические задачи. Бывают редкие случаи, требующие специальных знаний в каких-то разделах и областях, - но даже тогда проще серьёзно изучить конкретный раздел, чем углубляться во всю теорию информатики.</p>
18 <p>Скажу слегка провокационно: Computer Science не нужны 99% разработчиков, решающих практические задачи. Бывают редкие случаи, требующие специальных знаний в каких-то разделах и областях, - но даже тогда проще серьёзно изучить конкретный раздел, чем углубляться во всю теорию информатики.</p>
19 <p>Значит ли это что Computer Science совсем бесполезны? Нет. Профессионализм разработчика определяется не только скиллами в конкретных технологиях и типах задач. Знание кучи паттернов и библиотек не сделает вас сеньором, если оно не обеспечено культурой инженерного мышления. Без неё вы не сможете решать нетипичные задачи, что-то изобретать.</p>
19 <p>Значит ли это что Computer Science совсем бесполезны? Нет. Профессионализм разработчика определяется не только скиллами в конкретных технологиях и типах задач. Знание кучи паттернов и библиотек не сделает вас сеньором, если оно не обеспечено культурой инженерного мышления. Без неё вы не сможете решать нетипичные задачи, что-то изобретать.</p>
20 <p>Конечно, практика - лучший учитель. Но такое обучение - это долго и малоконтролируемо: мы не знаем, какие задачи нам предстоит решать, и редко можем их выбирать.</p>
20 <p>Конечно, практика - лучший учитель. Но такое обучение - это долго и малоконтролируемо: мы не знаем, какие задачи нам предстоит решать, и редко можем их выбирать.</p>
21 - <p>В этом и заключается главная ценность Computer Science - они агрегируют сложные задачи, возникавшие на пути развития программирования, в первоначальном виде. На них ещё не нагромождены фреймворки, API внешних систем и так далее.</p>
21 + <p>В этом и заключается главная ценность Computer Science - они агрегируют сложные задачи, возникавшие на пути развити программирования, в первоначальном виде. На них ещё не нагромождены фреймворки, API внешних систем и так далее.</p>
22 <p>Однако нет никакого смысла в механическом заучивании: вы никогда не встретите в своей работе точно таких же абстрактных, не связанных с реальными технологиями проблем. Это не заменит практических навыков: теория и практика могут синергетически усилить друг друга только вместе.</p>
22 <p>Однако нет никакого смысла в механическом заучивании: вы никогда не встретите в своей работе точно таких же абстрактных, не связанных с реальными технологиями проблем. Это не заменит практических навыков: теория и практика могут синергетически усилить друг друга только вместе.</p>
23 <p><strong>Член команды Podlodka Techlead Crew</strong></p>
23 <p><strong>Член команды Podlodka Techlead Crew</strong></p>
24 <p>Больше 10 лет занимается разработкой высоконагруженных систем и обеспечением их работоспособности и отказоустойчивости в облачных окружениях, руководит группой разработчиков.</p>
24 <p>Больше 10 лет занимается разработкой высоконагруженных систем и обеспечением их работоспособности и отказоустойчивости в облачных окружениях, руководит группой разработчиков.</p>
25 <p>Если бэкграунд не технический, минимальный курс по Computer Science, наверное, нужен: нельзя сделать что-то осознанное, не понимая, как функционирует программная инженерия.</p>
25 <p>Если бэкграунд не технический, минимальный курс по Computer Science, наверное, нужен: нельзя сделать что-то осознанное, не понимая, как функционирует программная инженерия.</p>
26 <p>Но когда у начинающего разработчика уже есть технический бэкграунд (математика, физика, информатика), то для старта в дебри погружаться не столь важно: как правило, общего представления достаточно.</p>
26 <p>Но когда у начинающего разработчика уже есть технический бэкграунд (математика, физика, информатика), то для старта в дебри погружаться не столь важно: как правило, общего представления достаточно.</p>
27 <p>Дальше уровень погружения зависит от задачи: работаешь с PostgreSQL - изучи его внутреннее устройство, пишешь программу по разбору данных - разберись детально в структурах и соответствующих алгоритмах.</p>
27 <p>Дальше уровень погружения зависит от задачи: работаешь с PostgreSQL - изучи его внутреннее устройство, пишешь программу по разбору данных - разберись детально в структурах и соответствующих алгоритмах.</p>
28 <h2><strong>Никто не может знать всего</strong></h2>
28 <h2><strong>Никто не может знать всего</strong></h2>
29 <p><strong>SRE</strong></p>
29 <p><strong>SRE</strong></p>
30 <p>Пишет на Go, PHP, Python, Bash, далее со всеми остановками по требованию заказчика. Сейчас работает в Booking.com, до этого работал в "Яндекс.Облаке" и во "ВКонтакте". Любит жену, кино и снимать видео =)</p>
30 <p>Пишет на Go, PHP, Python, Bash, далее со всеми остановками по требованию заказчика. Сейчас работает в Booking.com, до этого работал в "Яндекс.Облаке" и во "ВКонтакте". Любит жену, кино и снимать видео =)</p>
31 <p><strong><a>twitter</a></strong></p>
31 <p><strong><a>twitter</a></strong></p>
32 <p>Я долго писал программы без базовых знаний в Computer Science. Получалось так себе. Сейчас немного освоился в теории - стал кодить не то чтобы отлично, но местами лучше. Когда постоянно оптимизируешь код, пытаешься искать адекватные и быстрые решения, общая планка скиллов повышается. Больше не пишешь брутфорс-решение, чтобы перебрать два массива.</p>
32 <p>Я долго писал программы без базовых знаний в Computer Science. Получалось так себе. Сейчас немного освоился в теории - стал кодить не то чтобы отлично, но местами лучше. Когда постоянно оптимизируешь код, пытаешься искать адекватные и быстрые решения, общая планка скиллов повышается. Больше не пишешь брутфорс-решение, чтобы перебрать два массива.</p>
33 <p>Даже начальные знания Computer Science очень помогают. Если вы освоили базовые структуры, паттерны, подходы, то сможете легко понять проблему, найти оптимальный алгоритм и решить задачу намного эффективнее. В результате повышается качество принимаемых решений.</p>
33 <p>Даже начальные знания Computer Science очень помогают. Если вы освоили базовые структуры, паттерны, подходы, то сможете легко понять проблему, найти оптимальный алгоритм и решить задачу намного эффективнее. В результате повышается качество принимаемых решений.</p>
34 <p>Например, если вы занимаетесь highload-приложениями, core-частью, оптимизацией под миллионы запросов в секунду, пишете демоны на бэкенде - без Computer Science не обойтись. Надо знать оптимальные алгоритмы, иначе неправильный for или структура могут съедать не 3, а 10 и даже 2000 циклов, что потребует на 10% больше CPU. При огромной инфраструктуре это может привести к необходимости иметь на 10-00 серверов больше, что очень дорого.</p>
34 <p>Например, если вы занимаетесь highload-приложениями, core-частью, оптимизацией под миллионы запросов в секунду, пишете демоны на бэкенде - без Computer Science не обойтись. Надо знать оптимальные алгоритмы, иначе неправильный for или структура могут съедать не 3, а 10 и даже 2000 циклов, что потребует на 10% больше CPU. При огромной инфраструктуре это может привести к необходимости иметь на 10-00 серверов больше, что очень дорого.</p>
35 <p>Но учиться сложно и долго, конечный профит не очень понятен. Хорошо, если вам повезло с университетом, где всему обучат, покажут, помогут понять на хороших примерах. Но таких университетов мало. При этом можно годами перекладывать CRUD’ы и JSON’ы, вообще не соприкасаясь с Computer Science, и это тоже нормально.</p>
35 <p>Но учиться сложно и долго, конечный профит не очень понятен. Хорошо, если вам повезло с университетом, где всему обучат, покажут, помогут понять на хороших примерах. Но таких университетов мало. При этом можно годами перекладывать CRUD’ы и JSON’ы, вообще не соприкасаясь с Computer Science, и это тоже нормально.</p>
36 <p>Если хотите развиваться, старайтесь просто брать задачи из своей текущей работы и потихоньку их разрабатывать. Будет возможность параллельно учиться в универе - отлично. Можно также позаниматься на курсах, смотреть их фоново. Всё это обязательно пригодится на собеседованиях: например, чтобы устроиться в крупную компанию, нужно решать задачи на <a>LeetCode</a>, учить алгоритмы, уметь объяснять и защищать свои решения.</p>
36 <p>Если хотите развиваться, старайтесь просто брать задачи из своей текущей работы и потихоньку их разрабатывать. Будет возможность параллельно учиться в универе - отлично. Можно также позаниматься на курсах, смотреть их фоново. Всё это обязательно пригодится на собеседованиях: например, чтобы устроиться в крупную компанию, нужно решать задачи на <a>LeetCode</a>, учить алгоритмы, уметь объяснять и защищать свои решения.</p>
37 <p><strong>Technical Lead</strong></p>
37 <p><strong>Technical Lead</strong></p>
38 <p>Любит GYM, путешествия и компьютерные игры. Пишет технические статьи и иногда технические треды в <a>Twitter</a>.</p>
38 <p>Любит GYM, путешествия и компьютерные игры. Пишет технические статьи и иногда технические треды в <a>Twitter</a>.</p>
39 <p>Я не фанат вузовского подхода, когда сразу пытаются охватить наибольший набор компьютерных дисциплин и глубоко их изучить. Начинающим разработчикам, особенно тем, кто входит в IT самостоятельно, я бы предложил поступить иначе:</p>
39 <p>Я не фанат вузовского подхода, когда сразу пытаются охватить наибольший набор компьютерных дисциплин и глубоко их изучить. Начинающим разработчикам, особенно тем, кто входит в IT самостоятельно, я бы предложил поступить иначе:</p>
40 <ul><li>Ознакомьтесь с базовыми понятиями, устройством компьютера, компьютерными сетями и операционными системами;</li>
40 <ul><li>Ознакомьтесь с базовыми понятиями, устройством компьютера, компьютерными сетями и операционными системами;</li>
41 <li>Освойте первый язык программирования, а параллельно базово изучите структуры данных, алгоритмы и дискретную математику;</li>
41 <li>Освойте первый язык программирования, а параллельно базово изучите структуры данных, алгоритмы и дискретную математику;</li>
42 <li>После этого путь изучения Computer Science зависит от выбранной IT-области. Получив стажировку или даже первую работу, вы поймёте, без каких дисциплин вообще не обойтись, какие хорошо было бы знать, а какие не встретятся вовсе.</li>
42 <li>После этого путь изучения Computer Science зависит от выбранной IT-области. Получив стажировку или даже первую работу, вы поймёте, без каких дисциплин вообще не обойтись, какие хорошо было бы знать, а какие не встретятся вовсе.</li>
43 </ul><p>В программистских чатиках и в твиттере можно встретить два воюющих лагеря.</p>
43 </ul><p>В программистских чатиках и в твиттере можно встретить два воюющих лагеря.</p>
44 <p>В одном считают, что погружаться в Computer Science надо максимально глубоко - иначе ты не Программист, а "жалкий кодер", "формошлёп" и "перекладыватель джейсонов". Я не разделяю этого мнения: иной раз даже "джейсономешалка" требует много знаний и навыков :)</p>
44 <p>В одном считают, что погружаться в Computer Science надо максимально глубоко - иначе ты не Программист, а "жалкий кодер", "формошлёп" и "перекладыватель джейсонов". Я не разделяю этого мнения: иной раз даже "джейсономешалка" требует много знаний и навыков :)</p>
45 <p>В другом сидят люди, которые не учили Computer Science вовсе, попали в профессию джунами, кто-то даже до мидлов дорос, имеет свой стабильный доход и не хочет дополнительно напрягаться. Приходилось работать и с такими ребятами - порой у них на ровном месте были пробуксовки или изобретение велосипеда, хотя уже изобретённый давно за углом стоит. Им я рекомендую почитать про<a>мысленный эксперимент "Китайская комната"</a>. Без знаний в CS можно превратиться именно в такую комнату для своего фреймворка: в рамках типовых задач всё вроде ок, но любой шаг влево или вправо - и сразу ступор.</p>
45 <p>В другом сидят люди, которые не учили Computer Science вовсе, попали в профессию джунами, кто-то даже до мидлов дорос, имеет свой стабильный доход и не хочет дополнительно напрягаться. Приходилось работать и с такими ребятами - порой у них на ровном месте были пробуксовки или изобретение велосипеда, хотя уже изобретённый давно за углом стоит. Им я рекомендую почитать про<a>мысленный эксперимент "Китайская комната"</a>. Без знаний в CS можно превратиться именно в такую комнату для своего фреймворка: в рамках типовых задач всё вроде ок, но любой шаг влево или вправо - и сразу ступор.</p>
46 <p>Я за золотую середину: изучать Computer Science надо, но поначалу только базовые вещи. Важно не перестараться и не демотивировать себя навалившейся сложностью и объёмом знаний, которые не всегда подходят для ваших задач.</p>
46 <p>Я за золотую середину: изучать Computer Science надо, но поначалу только базовые вещи. Важно не перестараться и не демотивировать себя навалившейся сложностью и объёмом знаний, которые не всегда подходят для ваших задач.</p>
47 <p>Могу предложить хорошо и вдумчиво почитать небольшую, но довольно толковую книгу "<a>Теоретический минимум по Computer Science. Всё, что нужно программисту и разработчику</a>". Она поможет понять, куда двигаться дальше.</p>
47 <p>Могу предложить хорошо и вдумчиво почитать небольшую, но довольно толковую книгу "<a>Теоретический минимум по Computer Science. Всё, что нужно программисту и разработчику</a>". Она поможет понять, куда двигаться дальше.</p>
48 <p><strong>Mobile Head в Dodo Engineering</strong></p>
48 <p><strong>Mobile Head в Dodo Engineering</strong></p>
49 <p>Любит интерфейсы, тесты и доступность. В свободное время пишет статьи и коллекционирует клавиатуры.</p>
49 <p>Любит интерфейсы, тесты и доступность. В свободное время пишет статьи и коллекционирует клавиатуры.</p>
50 <p><a><strong>twitter</strong></a></p>
50 <p><a><strong>twitter</strong></a></p>
51 <p>На мой взгляд, даже "уверенный пользователь ПК" может научиться программировать, главное - желание. Но через год-два карьеры точно понадобится копнуть поглубже. В какую сторону - зависит от сферы вашей работы и интересов.</p>
51 <p>На мой взгляд, даже "уверенный пользователь ПК" может научиться программировать, главное - желание. Но через год-два карьеры точно понадобится копнуть поглубже. В какую сторону - зависит от сферы вашей работы и интересов.</p>
52 <p>Например, в мобильной разработке я бы предложил больше узнать про дизайн интерфейсов, взаимодействие человека и компьютера. Так ваши интерфейсы станут более "отзывчивыми", приятными и интересными.</p>
52 <p>Например, в мобильной разработке я бы предложил больше узнать про дизайн интерфейсов, взаимодействие человека и компьютера. Так ваши интерфейсы станут более "отзывчивыми", приятными и интересными.</p>
53 <p>Самый яркий пример - доступность интерфейсов. В России много отличных, красивых приложений, но почти никто не знает, что их можно адаптировать, например, для незрячих людей. Меня это настолько впечатлило, что я написал целую книгу "<a>Про доступность iOS</a>".</p>
53 <p>Самый яркий пример - доступность интерфейсов. В России много отличных, красивых приложений, но почти никто не знает, что их можно адаптировать, например, для незрячих людей. Меня это настолько впечатлило, что я написал целую книгу "<a>Про доступность iOS</a>".</p>
54 <p>Профессионализм специалиста всегда измеряется тем, насколько он понимает контекст текущей задачи. Если дизайнер рисует макет телефона, не учитывая, как он будет лежать в руке, - это плохой дизайнер. Бэкенд-разработчик, не понимающий, как устроен интернет или база данных, не сделает надёжный сервис. Без знания аффинных преобразований не получится красивая 3D-игра. Но всё это можно узнать по пути, главное - интересоваться.</p>
54 <p>Профессионализм специалиста всегда измеряется тем, насколько он понимает контекст текущей задачи. Если дизайнер рисует макет телефона, не учитывая, как он будет лежать в руке, - это плохой дизайнер. Бэкенд-разработчик, не понимающий, как устроен интернет или база данных, не сделает надёжный сервис. Без знания аффинных преобразований не получится красивая 3D-игра. Но всё это можно узнать по пути, главное - интересоваться.</p>
55 <h2><strong>Не зная броду, не суйся в воду</strong></h2>
55 <h2><strong>Не зная броду, не суйся в воду</strong></h2>
56 <p>Польза Computer Science для многих новичков неочевидна. Им кажется: зачем знать протоколы передачи данных, если всё сводится к HTTP-запросам, которые можно сделать к API, описанному в документации? Или: к чему алгоритмы обхода дерева, если рендерингом занимается<a>React</a>, который прекрасно обходит всё как надо?</p>
56 <p>Польза Computer Science для многих новичков неочевидна. Им кажется: зачем знать протоколы передачи данных, если всё сводится к HTTP-запросам, которые можно сделать к API, описанному в документации? Или: к чему алгоритмы обхода дерева, если рендерингом занимается<a>React</a>, который прекрасно обходит всё как надо?</p>
57 <p>Всё вроде бы так, но есть нюанс: знание основных алгоритмов и структур данных позволяет направить мышление в нужную сторону. Эти принципы универсальны, и их понимание помогает решать прикладные задачи.</p>
57 <p>Всё вроде бы так, но есть нюанс: знание основных алгоритмов и структур данных позволяет направить мышление в нужную сторону. Эти принципы универсальны, и их понимание помогает решать прикладные задачи.</p>
58 <p>Знание операционных систем и сетевых протоколов не нужно лишь до тех пор, пока уютная виртуалка в облаке не начинает вести себя странно, а балансер - выдавать кривой кэш. При дебаге сложных проблем фундаментальные знания сложно переоценить - они нужны хотя бы для того, чтобы понять, куда копать.</p>
58 <p>Знание операционных систем и сетевых протоколов не нужно лишь до тех пор, пока уютная виртуалка в облаке не начинает вести себя странно, а балансер - выдавать кривой кэш. При дебаге сложных проблем фундаментальные знания сложно переоценить - они нужны хотя бы для того, чтобы понять, куда копать.</p>
59 <p>А есть ещё уровень платформ: если вы хотите писать мап-редьюс для "Яндекса" (YT), добро пожаловать в мир алгоритмов и на курс Бабенко. Тут не получится вызвать из библиотеки "функцию, которая магическим образом сама всё сделает", потому что твоя задача как раз в том, чтобы эту функцию сделать.</p>
59 <p>А есть ещё уровень платформ: если вы хотите писать мап-редьюс для "Яндекса" (YT), добро пожаловать в мир алгоритмов и на курс Бабенко. Тут не получится вызвать из библиотеки "функцию, которая магическим образом сама всё сделает", потому что твоя задача как раз в том, чтобы эту функцию сделать.</p>
60 <p>Точно так же важно понимать, что практические навыки и теория - вещи параллельные. Не нужно защищать диссертацию, прежде чем начать писать на React ?</p>
60 <p>Точно так же важно понимать, что практические навыки и теория - вещи параллельные. Не нужно защищать диссертацию, прежде чем начать писать на React ?</p>
61 <p>Если говорить о матчасти, я бы рекомендовал посмотреть гарвардский курс CS50 (есть и на русском):</p>
61 <p>Если говорить о матчасти, я бы рекомендовал посмотреть гарвардский курс CS50 (есть и на русском):</p>
62 <p>Можно также почитать "<a>Код: тайный язык информатики</a>" Петцольда, даже если вы уже работаете по своей основной специальности - во фронтенде или бэкенде.</p>
62 <p>Можно также почитать "<a>Код: тайный язык информатики</a>" Петцольда, даже если вы уже работаете по своей основной специальности - во фронтенде или бэкенде.</p>
63 <p><strong>Software Engineer</strong></p>
63 <p><strong>Software Engineer</strong></p>
64 <p>Разрабатывает системы управления городской инфраструктурой для мегаполисов по всему миру. Основная деятельность - бэкенд, database engineering.</p>
64 <p>Разрабатывает системы управления городской инфраструктурой для мегаполисов по всему миру. Основная деятельность - бэкенд, database engineering.</p>
65 <p><b><a><strong>twitter</strong></a></b></p>
65 <p><b><a><strong>twitter</strong></a></b></p>
66 <p>Вопрос очень сложный и холиварный. Думаю, даже новичкам стоит знать Computer Science хотя бы на уровне теории алгоритмов, разбираться в сетях. Более глубокие знания им точно не понадобятся, зато опытному разработчику они помогут пробить собственный потолок.</p>
66 <p>Вопрос очень сложный и холиварный. Думаю, даже новичкам стоит знать Computer Science хотя бы на уровне теории алгоритмов, разбираться в сетях. Более глубокие знания им точно не понадобятся, зато опытному разработчику они помогут пробить собственный потолок.</p>
67 <p>Тут можно провести такую аналогию. Нужно ли молодому скрипачу тратить годы на изучение тонкостей производства скрипок, чтобы хорошо играть? По-моему, нет: лучше все эти годы практиковаться в игре. А вот виртуозу с десятилетним опытом такие знания могли бы подкинуть интересные инсайты.</p>
67 <p>Тут можно провести такую аналогию. Нужно ли молодому скрипачу тратить годы на изучение тонкостей производства скрипок, чтобы хорошо играть? По-моему, нет: лучше все эти годы практиковаться в игре. А вот виртуозу с десятилетним опытом такие знания могли бы подкинуть интересные инсайты.</p>
68 <p>Не рискну сгоряча раздавать советы по книгам. Дам лишь базовый обзорный плейлист, который мне самому очень понравился, - Computer Science Crash Course на английском:</p>
68 <p>Не рискну сгоряча раздавать советы по книгам. Дам лишь базовый обзорный плейлист, который мне самому очень понравился, - Computer Science Crash Course на английском:</p>
69 <h2><strong>Лучше меньше, да лучше</strong></h2>
69 <h2><strong>Лучше меньше, да лучше</strong></h2>
70 <p><strong>автор сайтов и веб-приложений на Ruby on Rails с 2012 года</strong></p>
70 <p><strong>автор сайтов и веб-приложений на Ruby on Rails с 2012 года</strong></p>
71 <p>Учит людей, пишет об индустрии, ведёт open-source-проекты.</p>
71 <p>Учит людей, пишет об индустрии, ведёт open-source-проекты.</p>
72 <p><a><strong>Личный сайт</strong></a></p>
72 <p><a><strong>Личный сайт</strong></a></p>
73 <p>Необязательно изучать ВЕСЬ Computer Science - читать от корки до корки SICP и паттерны "банды четырёх". Не обязателен и вуз - у меня самого за спиной пять лет на факультете CS, но в реальности мне пригодилась от силы треть всех усвоенных там знаний.</p>
73 <p>Необязательно изучать ВЕСЬ Computer Science - читать от корки до корки SICP и паттерны "банды четырёх". Не обязателен и вуз - у меня самого за спиной пять лет на факультете CS, но в реальности мне пригодилась от силы треть всех усвоенных там знаний.</p>
74 <p>Но база (так я называю Computer Science) важна. Первую работу, конечно, можно получить и без неё, обладая лишь практическими навыками - умением писать код по образу и подобию, совещаясь со Stack Overflow. Но дальнейший рост в мидлы, сеньоры и выше требует более глубоких знаний.</p>
74 <p>Но база (так я называю Computer Science) важна. Первую работу, конечно, можно получить и без неё, обладая лишь практическими навыками - умением писать код по образу и подобию, совещаясь со Stack Overflow. Но дальнейший рост в мидлы, сеньоры и выше требует более глубоких знаний.</p>
75 <p>Постепенно изучать внутрянку того, с чем вы имеете дело, - круто, полезно и не так уж сложно. Достаточно лишь постоянно задавать себе вопрос: "А как это работает?", получать ответы, задавать его снова, и снова, и снова.</p>
75 <p>Постепенно изучать внутрянку того, с чем вы имеете дело, - круто, полезно и не так уж сложно. Достаточно лишь постоянно задавать себе вопрос: "А как это работает?", получать ответы, задавать его снова, и снова, и снова.</p>
76 <p>Например, если вы работаете во фронтенде с API, здорово, если вы задаётесь вопросами:</p>
76 <p>Например, если вы работаете во фронтенде с API, здорово, если вы задаётесь вопросами:</p>
77 <ul><li>А что такое вообще HTTP?</li>
77 <ul><li>А что такое вообще HTTP?</li>
78 <li>Чем HTTPS отличается от HTTP?</li>
78 <li>Чем HTTPS отличается от HTTP?</li>
79 <li>Как работает GET PUT POST?</li>
79 <li>Как работает GET PUT POST?</li>
80 <li>Что означают коды 20x, 30x, 40x, 50x?</li>
80 <li>Что означают коды 20x, 30x, 40x, 50x?</li>
81 <li>Почему иногда я вижу в ответе Nginx? Что это и для чего?</li>
81 <li>Почему иногда я вижу в ответе Nginx? Что это и для чего?</li>
82 </ul><p>Начнёте задавать себе эти вопросы раньше, ещё до получения первой работы, и освоите так хотя бы щепотку базы - получите громадное преимущество на собеседованиях. Да и потом, естественно, останавливаться на достигнутом не стоит.</p>
82 </ul><p>Начнёте задавать себе эти вопросы раньше, ещё до получения первой работы, и освоите так хотя бы щепотку базы - получите громадное преимущество на собеседованиях. Да и потом, естественно, останавливаться на достигнутом не стоит.</p>
83 <p><strong>Тимлид</strong></p>
83 <p><strong>Тимлид</strong></p>
84 <p>Руководит фронтендом в "Яндекс.Маршрутизации". Участвовал в проектах про медицину и гонки беспилотных автомобилей. В Twitter известен под ником<a>@basvasilich</a>. Интересы: теннис, космос и "Формула-1".</p>
84 <p>Руководит фронтендом в "Яндекс.Маршрутизации". Участвовал в проектах про медицину и гонки беспилотных автомобилей. В Twitter известен под ником<a>@basvasilich</a>. Интересы: теннис, космос и "Формула-1".</p>
85 <p>Любое знание лучше незнания. Я считаю, что человеку, который пишет код, полезно знать CS настолько глубоко, насколько хватит мотивации. Теоретический минимум по структурам данных:</p>
85 <p>Любое знание лучше незнания. Я считаю, что человеку, который пишет код, полезно знать CS настолько глубоко, насколько хватит мотивации. Теоретический минимум по структурам данных:</p>
86 <ul><li>хеш-таблицы (hash table);</li>
86 <ul><li>хеш-таблицы (hash table);</li>
87 <li>стек (stack);</li>
87 <li>стек (stack);</li>
88 <li>очередь (queue);</li>
88 <li>очередь (queue);</li>
89 <li>бинарные деревья (binary trees);</li>
89 <li>бинарные деревья (binary trees);</li>
90 <li>кучи (heap);</li>
90 <li>кучи (heap);</li>
91 <li>графы (graph).</li>
91 <li>графы (graph).</li>
92 </ul><p>По алгоритмам:</p>
92 </ul><p>По алгоритмам:</p>
93 <ul><li>бинарный поиск (binary search);</li>
93 <ul><li>бинарный поиск (binary search);</li>
94 <li>работа с массивами с помощью указателей (two pointers technique);</li>
94 <li>работа с массивами с помощью указателей (two pointers technique);</li>
95 <li>сортировки (quick, merge, counting, heap sort);</li>
95 <li>сортировки (quick, merge, counting, heap sort);</li>
96 <li>обходы деревьев и графов (BFS/DFS);</li>
96 <li>обходы деревьев и графов (BFS/DFS);</li>
97 <li>асимптотический анализ алгоритмов (asymptotic analysis);</li>
97 <li>асимптотический анализ алгоритмов (asymptotic analysis);</li>
98 </ul><p>Зачем это надо? Если кратко - чтобы не терять возможности уже в начале пути.</p>
98 </ul><p>Зачем это надо? Если кратко - чтобы не терять возможности уже в начале пути.</p>
99 <p>Не знать и тем более воинственно отрицать CS - значит закрыть себе доступ к интересным и сложным областям разработки, оставаясь в мире рутинных и скучных задач вроде рисования кнопок или создания очередного CRUDа. А в итоге разочароваться в профессии.</p>
99 <p>Не знать и тем более воинственно отрицать CS - значит закрыть себе доступ к интересным и сложным областям разработки, оставаясь в мире рутинных и скучных задач вроде рисования кнопок или создания очередного CRUDа. А в итоге разочароваться в профессии.</p>
100 <p>Изучать Computer Science, конечно, нужно, однако, как и в любом другом деле, всё зависит от цели. Важно:</p>
100 <p>Изучать Computer Science, конечно, нужно, однако, как и в любом другом деле, всё зависит от цели. Важно:</p>
101 <ul><li>определились ли вы с направлением, в котором хотите развиваться и работать;</li>
101 <ul><li>определились ли вы с направлением, в котором хотите развиваться и работать;</li>
102 <li>что вам больше нравится: фронтенд, бэкенд, геймдев, мобайл или что-то более узкое и специфическое (нейросети, высоконагруженные системы, компьютерная безопасность).</li>
102 <li>что вам больше нравится: фронтенд, бэкенд, геймдев, мобайл или что-то более узкое и специфическое (нейросети, высоконагруженные системы, компьютерная безопасность).</li>
103 </ul><p>Если вы пока не знаете, чего хотите, придётся изучать и пробовать всё понемногу, чтобы найти то, что вам ближе. Если уже определились, круг необходимых знаний сужается. Даже если потом решите сменить направление, приобретённые навыки лишними не будут.</p>
103 </ul><p>Если вы пока не знаете, чего хотите, придётся изучать и пробовать всё понемногу, чтобы найти то, что вам ближе. Если уже определились, круг необходимых знаний сужается. Даже если потом решите сменить направление, приобретённые навыки лишними не будут.</p>
104 <p>Для каждого направления необходимо знание своего набора языков программирования, инструментов и теоретических основ, однако есть и общие вещи.</p>
104 <p>Для каждого направления необходимо знание своего набора языков программирования, инструментов и теоретических основ, однако есть и общие вещи.</p>
105 <p>Например, если вас интересует фронтенд, углубляться в низкоуровневые темы необязательно. Куда важнее разбираться в UI/UX и дизайне, знать JavaScript, CSS, соответствующие фреймворки.</p>
105 <p>Например, если вас интересует фронтенд, углубляться в низкоуровневые темы необязательно. Куда важнее разбираться в UI/UX и дизайне, знать JavaScript, CSS, соответствующие фреймворки.</p>
106 <p>Напротив, если вы хотите заниматься компьютерной безопасностью или писать многопоточные высокопроизводительные программы, то устройство процессора и ОС нужно знать хорошо.</p>
106 <p>Напротив, если вы хотите заниматься компьютерной безопасностью или писать многопоточные высокопроизводительные программы, то устройство процессора и ОС нужно знать хорошо.</p>
107 <p>В разработке игр свой набор необходимого (игровые движки, тригонометрия, векторы и матрицы, шейдеры и тому подобное). При разработке бэкенда интернет-сервисов потребуется понимание баз данных, сетей и множества прочих специфических вещей.</p>
107 <p>В разработке игр свой набор необходимого (игровые движки, тригонометрия, векторы и матрицы, шейдеры и тому подобное). При разработке бэкенда интернет-сервисов потребуется понимание баз данных, сетей и множества прочих специфических вещей.</p>
108 <p>Какое бы направление вы ни выбрали, очень полезно понимать основные структуры данных и алгоритмы, а со временем и освоить паттерны проектирования. При изучении языков программирования стоит потратить время на основные библиотеки и фреймворки для этих языков, чтобы не изобретать велосипед (например, для C++ это STL, Boost и Qt). Также облегчает работу хорошее владение инструментами: средами разработки и отладчиками, пакетными менеджерами, системами контроля версий и так далее.</p>
108 <p>Какое бы направление вы ни выбрали, очень полезно понимать основные структуры данных и алгоритмы, а со временем и освоить паттерны проектирования. При изучении языков программирования стоит потратить время на основные библиотеки и фреймворки для этих языков, чтобы не изобретать велосипед (например, для C++ это STL, Boost и Qt). Также облегчает работу хорошее владение инструментами: средами разработки и отладчиками, пакетными менеджерами, системами контроля версий и так далее.</p>
109 <p>Важно понимать английский язык (хотя бы на уровне чтения технической литературы) - без этого очень сложно. Кроме того, любому программисту нужно знать устройство компьютера и операционных систем на базовом уровне. Понимание необходимости всего остального придёт со временем и опытом, не стоит пытаться объять необъятное. IT - довольно динамичная сфера, поэтому, если вы решили войти в IT, будьте готовы постоянно учиться и практиковаться, а для этого нужен неподдельный интерес к индустрии :)</p>
109 <p>Важно понимать английский язык (хотя бы на уровне чтения технической литературы) - без этого очень сложно. Кроме того, любому программисту нужно знать устройство компьютера и операционных систем на базовом уровне. Понимание необходимости всего остального придёт со временем и опытом, не стоит пытаться объять необъятное. IT - довольно динамичная сфера, поэтому, если вы решили войти в IT, будьте готовы постоянно учиться и практиковаться, а для этого нужен неподдельный интерес к индустрии :)</p>
110 <p>Помните, что теория, не подкреплённая практикой, бессмысленна и быстро забывается, поэтому важно писать много кода. Придумайте себе интересный проект и создайте его самостоятельно. Постепенно дополняйте новыми функциями, совершенствуйте код и архитектуру - это будет для вас хорошей школой.</p>
110 <p>Помните, что теория, не подкреплённая практикой, бессмысленна и быстро забывается, поэтому важно писать много кода. Придумайте себе интересный проект и создайте его самостоятельно. Постепенно дополняйте новыми функциями, совершенствуйте код и архитектуру - это будет для вас хорошей школой.</p>
111 <p>Сейчас есть много сообществ (чаты в Telegram, Stack Overflow, форумы), в которых можно найти единомышленников. Там вам помогут разобраться с трудностями и подскажут, где искать ответы. Не стесняйтесь задавать вопросы, даже если они кажутся вам глупыми.</p>
111 <p>Сейчас есть много сообществ (чаты в Telegram, Stack Overflow, форумы), в которых можно найти единомышленников. Там вам помогут разобраться с трудностями и подскажут, где искать ответы. Не стесняйтесь задавать вопросы, даже если они кажутся вам глупыми.</p>
112 <p>Всем новичкам желаю энтузиазма и успехов! ;)</p>
112 <p>Всем новичкам желаю энтузиазма и успехов! ;)</p>
113 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
113 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>