Если вы только начали заходить в волшебный мир IT и учите какой-либо язык, то у нас для вас есть плохие новости. Первая: сам по себе язык никому не нужен, работодатели требуют знания фреймворков – Django для Python, Spring для Java и так далее. Вторая: программист должен иметь солидный багаж знаний, относящийся к программированию как непосредственно, так и косвенно. О второй проблеме мы и будем говорить ниже – вы узнаете, зачем программисту английский, статистика, логика, общая математика, профильные науки и другие разделы. По каждому мы дадим краткое описание.
Для начала – краткая сводная таблица, ниже вы найдете детальный разбор.
Дисциплина | Зачем нужна | Насколько критична |
Английский | Общаться с заказчиками и коллегами, читать документацию | 10/10 |
Теория графов | Для решения конкретных задач на графы | 2/10 (8/10 для искусственного интеллекта) |
Общая математика | Для решения простых задач; база для высшей математики | 6/10 |
Теория вероятностей | Для решения конкретных задач | 2/10 |
Логика | Для понимания сложных логических условий | 6/10 |
Статистика | Для работы в big data и работы с искусственным интеллектом | 2/10 (8/10 для искусственного интеллекта и big data) |
Базы данных | БД есть на любом проекте | 10/10 |
Паттерны проектирования | Любой более-менее сложный проект строится на паттернах | 9/10 |
Информатика | Чтобы понимать эффективность алгоритмов | 7/10 |
Программирование | Чтобы писать хороший код | 8/10 |
Профильные науки | Чтобы работать в профильных областях | Зависит от области |
Английский язык в IT не нужен только тем, кто работает с 1С – у них и заказчики из стран СНГ, и вся документация изначально писалась на русском. Если вы не входите (или не планируете входить) в число этих программистов – вам нужен английский. Английский разделен на уровни:
Минимальный уровень для захода в IT – А2, нередко требуют В1. Для высоких позиций – от В2. Английский нужен по двум основные причинам:
Выучить английский – труднее всего, потому что это нужно делать постоянно на протяжении многих лет. Берите себе в привычку учить английский по 30-60 минут в день ежедневно.
Практиковать свое общение лучше всего в соцсетях: reddit, twitter, facebook.
Теория графов – это прикладной раздел математики, то есть эта теория решает конкретные проблемы. Вообще, теорию графов проще описать на практике. Например, вы собираетесь в отпуск в другую страну, и вам нужно проложить маршрут. У вас есть варианты: самолеты, автобусы, поезда. Есть прямой перелет из вашего города в город назначения, но билет стоит грабительски дорого, поэтому вы начинаете искать маршруты с пересадками в разных городах. Вам нужно еще и продумать обратный маршрут, поэтому вы рассматриваете перемещение в обе стороны. Фактически, вы решаете задачу на графы: в последних есть узлы (города), есть ребра (маршруты между городами) и есть задача нахождения оптимального пути между двумя узлами.
Пример из сферы IT: построение сети маршрутизаторами. Есть ваш компьютер, есть маршрутизаторы, есть провода. По одним проводам данные передаются быстрее, по другим – медленнее; одни маршрутизаторы передают информацию в одну сторону, другие – в обе. Теория графов описывает, как найти оптимальный путь от первого компьютера ко второму (в итоге это описание вылилось в протоколы маршрутизации, но это уже выходит за рамки нашей статьи).
Теория графов будет очень полезна, но приоритет у нее не самый высокий – учите в свободное время.
Компьютер – это вычислительная техника. Процессор компьютера, по существу, выполняет только операции сложения, из которых хитрыми методами получают и вычитание, и умножение, и другие математические операции. Соответственно нет ничего странного в том, что программистам математика нужна, как минимум – базовый школьный курс.
В некоторых областях (геймдев, big data, искусственный интеллект, медицина и т.д.) критически нужна высшая математика.
Название дисциплины говорит само за себя, теория вероятностей – это раздел математики, который анализирует шансы, с которыми то или иное событие случится. Отметим, что теория вероятностей – это один из разделов математического анализа, а математический анализ – это высшая математика, а для того, чтобы понимать высшую математику, нужно сначала выучить математику обычную – смотрите предыдущий подраздел.
Логика – довольно странная штука: все знают, что это такое, но никто не может описать ее четкими терминами. Проблема здесь в том, что для описания формальной («житейской») логики пришлось вводить длинные и непонятные слова – силлогизмы, таблицы истинности и вот это вот все. К счастью, программистам больше нужна другая логика – булева логика (=булева алгебра), полностью построенная на простых логических операндах вроде «И», «ИЛИ», «НЕ», «ИСКЛЮЧАЮЩЕЕ ИЛИ» и так далее. Если не собираетесь самостоятельно программировать микропроцессоры и операционные системы – можете просто с ней ознакомиться и отправить в долгий ящик.
Еще одна дисциплина из области математики. Статистика – это наука как о сборе, так и об анализе каких-либо показателей. Разделяется на 2 больших подраздела: как (и какую) информацию искать и как ее, собственно, анализировать. Статистика неразрывно связана с высшей математикой. Статистика критически необходима тем, кто будет работать в big data и в machine learning, поскольку и там, и там нужно обрабатывать большие объемы информации. Если вы не собираетесь работать в этих направлениях – можете просто поверхностно ознакомиться с общими основами.
Базы данных – маст хэв для любого айтишника. Любое крупное приложение так или иначе накапливает какие-то данные, будь то данные клиентов, учет товаров на складе, список рефералов и так далее. Все эти данные нужно хранить, добавлять новые и выдавать по запросу. Здесь начинается куча проблем: непонятно, в каком формате и в какой структуре данных хранить; кто может получать доступ; как быстро выдать 2 миллиона записей, специальный образом выбранных из базы и так далее. Первоначально решением проблемы стал SQL – специальный язык запросов, на основе которых строились базы данных. Он был быстрым и структурированным, даже сейчас он незаменим при работе с большими объемами информации. Со временем компьютеры стали быстрее, а SQL стал сложнее, поэтому в противовес ему появились NoSQL – базы, в которых структурированный язык запросов не использовался. NoSQL хорошо подходит для небольших баз, обычно данные пакуются в формат JSON. И если вы ничего из этого не поняли – срочно учить, без знаний БД вы не найдете себе работу.
Если вы столкнулись с какой-либо проблемах – в 99.9% случаев кто-то до вас с ней уже сталкивался и успешно ее решал. 30 лет назад несколько программистов взяли эту мысль, скрестили ее с шаблонами реального проектирования домов и получили паттерны разработки – набор решений для конкретных задач. Паттернов разработки – очень много, но знать их все не обязательно – можете выучить парочку основных и остановиться на этом. Но знать паттерны нужно – спрашивают на любом собеседовании.
Информатика – это не самый понятный термин. Можно предположить, что он проистекает он слова «информация», но формализировать информацию – тоже трудная и грустная задача. Лучше смотреть на первоисточник и использовать словосочетание «computer science». Computer science – наука о подходах к решению задач вычисления. Как вы можете помнить, процессор умеет складывать/вычитать/умножать/делить и производить другие базовые действия, но ни на что более серьезное он не способен. Задача инженера по computer science – придумать алгоритмы, которые утилизируют доступные операции для решения конкретной задачи.
Алгоритм – это последовательность действий, дающая какой-то результат. Изучение типовых алгоритмов и создание новых – основная задача информатики. Вы можете услышать мнение о том, что программисты просто копируют уже написанный кем-то код и изучение алгоритмов избыточно, но это не так. Алгоритмы нужно знать для того, чтобы знать их сложность. Сортировка пузырьком 1 000 значений займет 1 000 000 операций, quicksort займет 10 000 операций, то есть будет работать в 100 раз быстрее. Естественно это будет заметно, если у вас база на 2 000 000 записей, которую нужно сортировать раз в секунду.
Здесь все просто – если вы хотите работать в сфере медицины, вам нужно разбираться в медицине; если вы хотите работать с экономике, вам нужно понимать экономику и так далее. Ищите профильные курсы.
Есть одна мысль, которую новички в программировании часто игнорируют: «Другие люди будут читать ваш код намного чаще, чем вы». Если стоит выбор между гениальным алгоритмом и понятным алгоритмом – зачастую нужно сделать выбор в сторону понятности, потому что после вас кто-то будет сопровождать ваш код, и если он не сможет понять, как этот код работает – он, вполне вероятно, просто его перепишет, и ваш гениальный алгоритм канет в Лету. Чтобы этого не произошло, вам нужно придерживаться рекомендаций языка, code policy вашей компании, давать переменным понятные имена, писать комментарии и так далее. Это и есть искусство программирования, и за это вас будут ценить на работе.
Тезисно: