какие дисциплины изучает программист
7 дисциплин, которые стоит знать программисту
Чтобы писать логичный и полезный код, нужно не только быть хорошим программистом, но и разбираться во многих других вещах.
Изучить популярный язык или даже несколько недостаточно, чтобы стать программистом. Чтобы создавать сайты, приложения, ПО, игры, да и вообще хоть
что-то, необходимо разбираться в науках и языках. Их не так уж и много, но погружение занимает даже больше времени, чем изучение какого-нибудь PHP или еще чего-то попроще.
Английский язык
Если вы пишете на 1С, сразу переходите к следующему пункту. Ну а всем остальным знание английского языка пригодится, чтобы:
Кроме того, английский язык позволит задавать вопросы на зарубежных форумах и stackoverflow — это иногда единственный способ получить помощь, потому что на англоязычных ресурсах люди стараются помочь, в то время как на отечественных прежде всего поднимут на смех, спросят, зачем вам это нужно и для чего вообще вы пришли в программирование, и только потом, может быть, помогут.
Так что английский для IT-специалистов — мастхэв, иф ю вонт ту би э вери гуд программер. Но если вы не дружите с языками, не беда — знания терминов будет достаточно, чтобы нормально работать.
Математика
Большинству программистов хватит умения выполнять простые операции и знания нескольких формул. Например, полезно разбираться в процентах — с их помощью можно создавать адаптивные интерфейсы, работать со звуком и прозрачностью. Вот образец того, как разработчик компьютерных игр может использовать математику:
Продвинутый уровень математики позволяет программисту писать сложные алгоритмы, которые применяются в графике, аналитике, сортировке, построении маршрутов и машинном обучении.
Логика
Все программы построены на логике. Они получают какие-то данные, проводят вычисления и, в зависимости от результата, делают что-то еще. Например, вот пример кода акции в интернет-магазине:
В коде две логических операции: первая проверяет, распространяется ли акция на товар, а вторая — не прошел ли срок ее действия. В зависимости от результата меняется цена и выводимое сообщение. Это банальный пример; в реальных программах логики очень много, поэтому в ней нужно разбираться хотя бы на базовом уровне.
Статистика
Если вы собираетесь заниматься аналитикой, то без статистики никуда. С ее помощью выявляются закономерности, которые помогают в исследованиях. Например, можно написать программу, которая определяет, какие статьи принесли больше всего трафика и почему. Для этого находятся все похожие случаи и сравниваются их показатели:
Также с помощью статистики и алгоритмов можно создать искусственный интеллект с машинным обучением — тогда программисту останется лишь подождать, когда ИИ сам найдет закономерности.
Нужно: аналитикам, ученым, разработчикам ИИ.
Информатика
В школах курс информатики состоит из примерно таких уроков:
Программист, конечно, должен уметь все это, но информатика — это не только компьютерная грамотность: это наука об информации, ее сборе, хранении, передаче, обработке, шифровании и других операциях с данными. Знание может помочь как в написании кода, так и в его оптимизации. Поэтому в информатику нужно хотя бы немного погрузиться, а углубляться — только по желанию.
Профильные науки
Так уж сложилось, что программы в основном пишутся, чтобы решать практические задачи обычных людей:
Чтобы успешно разрабатывать приложения для решения этих задач, нужно уметь справляться с ними самостоятельно. То есть если приложение предназначено для того, чтобы рисовать графики, то разработчик должен знать, как и зачем люди это делают, чтобы программа соответствовала требованиям пользователей. Иначе он не сможет создать ничего полезного.
Программирование
Последнее, но не по значению, — программирование. Тут не важен какой-то конкретный язык — важен сам подход. Необходимо понимать, как составляются приложения, для чего они нужны, как лучше решить ту или иную задачу и многое другое.
Поэтому перед тем, как углубляться в какой-то язык, нужно обучиться основам программирования. Это поможет по-новому взглянуть на разработку и научиться работать более осознанно и, следовательно, эффективно.
Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Перечень изучаемых дисциплин
На 1-2 курсах студенты обучаются по общей программе, с 3-го курса они выбирают кафедру и научного руководителя. Учебные планы кафедры охватывают все современные направления информатики и математики, изучаемые на обоих специальностях, хотя и в несколько разных объёмах. Также в план прикладной математики входит набор курсов лекций естественнонаучного, прикладного содержания. Значительное место в учебном плане студентов-прикладников занимает программирование. Студенты кафедры изучают фундаментальные основы математики и программирования, математического моделирования, численных методов, комплексов программ для решения научных, технических, фундаментальных и прикладных проблем, исследование математических моделей физических, химических, биологических и других естественнонаучных систем, а также социальных, экономических и технических объектов.
Перечень предметов и часов по специальности “Прикладная математика”
В рамках специальности “Информатика” идет подготовка специалистов, способных проектировать, реализовывать проекты, эксплуатировать информационные системы и информационные технологии (IS/IT) и управлять ими. Информатика изучает комплекс проблем, связанных с прохождением информационных процессов в социуме, экономике экономических и экологических процессов.
Основные навыки: анализ и систематизация данных, построение алгоритмов обработки информации.
Перечень предметов и часов по специальности “Информатика”
Данные о востребованности специалистов можете просмотреть здесь.
Классификация знаний в области программирования
2 года назад я написал статью о классификации знаний в области программирования. Это было на волне интереса и моей активной деятельности по самообразованию в компьютерных науках. Написал статью и забыл о ней. Публиковать на Хабре не собирался. В конце концов, она базируется на моем личном опыте и знаних, которые могут оказаться весьма субъективны.
Недавно, на фоне постоянно поступающих вопросов «как научиться программированию?», я вспомнил про этот материал и перечитал его. Прошло уже 2 года, пополнился опыт, добавились знания, изменились взгляды. Но эта статья для меня не утратила актуальности, и я не нашел почти ничего, что хотел бы в ней изменить. Мне показалось, что она все же достойна публикации. И, возможно, кому-то она поможет в собственном профессиональном развитии.
Но прежде, чем «запустить» материал, еще небольшое отступление. О том, почему вообще я все это писал. Дело в том, что у нас в странах бывшего СССР с образованием в области IT очень туго. С одной стороны нет программ обучения, которые подготовят специалистов на должном уровне (наверное, за очень редкими исключениями, которые можно отнести к погрешности). С другой стороны, из-за широких возможностей самообразования, программисты и не спешат учиться в ВУЗах — все стремятся начать практиковать как можно раньше. Часто изучается только одно направление (например PHP+Mysql — самое популярное) и в бой. Причем, на этом все заканчивается. В итоге у нас огромное количество программистов, которые и базовых вещей не знают. Отсюда вытекают проблемы с качеством кода, и с эффекивностью алгоритмов, с велосипедированием.
Но программирование — это полноценная область знаний, которая требует в том числе и инженерной подготовки. Точно так же, как строительство или телекоммуникации. Да, построить дом (особняк) можно своими руками и без образования. А поднять большинство сайтов можно прочитав пару книг по PHP и HTML. Но многоэтажку без специальной подготовки не построишь, как и Гугл не напишешь, не зная основ.
Возможности для самообразования в компьютерных науках сейчас огромны. Единственное, чего не хватает, — это системности подготовки. Как разобраться, что и в какой последовательности изучать? Мне кажется, что этот материал поможет разложить по полочкам области знаний в компьютерных науках и составить для себя программу изучения по книгам. Выбор книг — тема отдельная, в рамки статьи не входит, но это можно обсудить в комментариях.
Поехали.
Меня иногда спрашивают, что нужно выучить, чтобы стать программистом. Вопрос несколько наивный, т.к. нормально ответить на него по-моему невозможно. Т.е. для начала нужно выяснить, каким программистом нужно стать. Да и вообще, программистом ли? Кроме того, на рынке востребованы как высококвалифицированные дорогие специалисты, так и “рабочая сила”. Пакет знаний и опыта первых и вторых отличается в значительной степени.
Но, не смотря на такую расплывчатость вопроса, дать ответ на него все же можно. Можно описать примерный максимум знаний, которые так или иначе относятся к программированию. Собственно, этот максимум обычно и стремятся преподать в ВУЗах на специальностях, в названии которых фигурирует слово “программист”.
Я учился на программиста в колледже, потом в университете. Именно университет немного разложил по полочкам понимание и взаимосвязь дисциплин, относящиеся к так называемым компьютерным наукам. Пусть знания, которые там давали, были недалекими и немного устаревшими, но системный подход у них был сформирован неплохой. Спустя годы практики после окончания обучения я пришел к выводу, что ВУЗовская классификация дисциплин вполне хороша и позволяет ответить на вопрос, что же следует знать любому программисту.
Конечно, знать все невозможно. Да и не нужно. Кроме того, какие-то вопросы нужно знать глубоко, а в других достаточно поверхностного обзорного понимания. По-этому в зависимости от специализации некоторые дисциплины более актуальны, некоторые менее. Но общие базовые знания необходимы почти по всем из них для любого инженера-программиста, от системщика до веб-разработчика.
В предыдущем абзаце я специально ввел термин “инженер-программист”. Как-то получается так, что программист — это не обязательно инженер. Даже из определения Википедии следует, что инженер — это в первую очередь проектировщик. Это тот, кто создает, т.е. проектирует системы. А в практике программирования проектирование нужно не всегда. Иногда достаточно кодирования: используя данный набор технологий, слепить что-то работающее. Типичный пример — стадо корпоративных или маркетинговых сайтов на джумлах, ворпрессах, друпалах и т.д. Это уровень техника, не инженера. Это уровень среднего образования. И работать техником можно даже после окончания курсов какого-либо языка программирования, крепкая теоретическая база там не нужна.
И, возвращаясь к инженерам-программистам, я хочу предложить свой граф дисциплин, которые изучают программисты. Очевидно, что одни дисциплины активно используют знания других, либо вовсе вырастают из других. Соответственно для полного понимания “верхнего” предмета, необходим какой-то уровень понимания нижнего.
Граф состоит из предметов (дисциплин) и разбит на уровни. Самый нижний — Общая база — вообще отношения к компьютерным наукам не имеет. Он приведен только для того, чтобы показать, на чем базируются дисциплины компьютерных наук.
Между дисциплинами существуют 2 вида связей: использование (обычная стрелка) и расширение (контур стрелки). Использование подразумевает необходимость фрагментарных знаний другого предмета, а расширение — необходимость как минимум обзорных, но полных знаний расширяемой дисциплины.
Первый уровень из CS (computer science) — Специальная база. Это стартовая площадка для любого программиста по четырем фронтам:
Специальная база предлагает фундаментальные теоретические знания, на которых строятся дисциплины более высоких уровней. Для среднего программиста необходимы обзорные знания по всем предметам специальной базы. Для некоторых специализаций требуется углубленное понимание теории алгоритмов (прежде всего — разработчикам разного рода библиотек).
Уровнем выше располагаются дисциплины, которые являются базовыми именно в программировании. По-этому я назвал этот уровень Основы. В него входят:
Следом за Основами идет Уровень 1. Это первый прикладной уровень, и особо нетерпеливые могут начать коммерческую практику, овладев этим уровнем. Он включает 5 дисциплин:
Следующий уровень — Уровень 2 — развивает предыдущий. Кстати, компьютерные сети попали в него только по той причине, что для их изучения желательно (но не обязательно) предварительно освоить операционные системы. По развитости этот предмет ближе все-таки к первому уровню.
Уровень 2 включает:
Уровень 3 — последний уровень для среднего программиста. Он самый объемный и включает только те дисциплины, которые непосредственно связаны с разработкой ПО. Всего их получилось 6:
Все, что идет выше, — расширенные Экспертные знания. По большому счету этот уровень можно расширять неограниченно, добавляя в него смежные с разработкой дисциплины и наиболее сложные аспекты разработки ПО. Я привел 3 примера — разработка компиляторов, разработка операционных систем и построение архитектур больших программно-аппаратных систем, либо архитектур, рассчитанных на особо высокие нагрузки. Зависимости к нижним уровням га графе не рисовал, т.к. получится слишком много стрелок, идущих через все уровни, вплоть до Общей базы. Наверное, широкие зависимости — это один из признаков вопросов экспертного характера. Здесь как раз подтверждается то, что экспертный уровень требует самых широких знаний и хорошего опыта.
Интересно в графе то, что он не только показывает предпочтительный порядок изучения предметов, но также:
Граф — это модель. А хорошая модель как правило дает ответы сразу на множество вопросов. Я поставил перед собой задачу сделать хороший граф, близкий к реальности. Естественно, он основан на моем личном опыте и не претендует на идеал. Я старался сделать его наиболее объективным. И еще раз напоминаю, что это граф для программиста. Т.е. для тестировщика, сисадмина и других близких к программированию профессий он будет более или менее близким, но явно другим.
В какой вуз поступить на программиста и что изучают программисты?
Нужно ли высшее образование программисту?
В общем, можно смело констатировать тот факт, что большинство IT-шных специалистов не имеют профильного образования, тем более высшего, а приходят в специальность самостоятельно через курсы, книги и много практики. Почему именно таким путем? Потому что обучающие программы по программированию в вуз ах не успевают за требованиями в программировании. Онлайн-школы и прочие площадки для самообучения быстрее адаптируют свой материал под нужды современного программирования.
Но раз вы все-таки ищ е те вуз ы программирования в России, то давайте будем разбираться с этим вопросом.
Вуз ы программирования в России
В России есть вуз ы программирования, которые предоставляют возможность обучаться этой специальности. Однако будем откровенны : качество образования, которое предлагают университеты программирования в России, немного отстает от того, что предлагают европейские и американские университеты. Кстати, многие из них предлагают даже бесплатное образование. Да, там обучение будет на английском, но тем и лучше, потому что программисту без английского придется очень не легко. Плюс зарубежный университет повышает шансы остаться «там» жить — это актуально для тех, кто планирует переезд. Поэтому если есть возможность, особенно финансовая, то можно присмотреться к «тем» учебным заведениям.
Лучшие вуз ы по программированию в России
как далеко нужно пере ез жать,
есть ли общежитие для иногородних,
будет ли военная кафедра,
есть ли очное или заочное образование,
А выбирать есть из чего, на сегодняшний день около 350 высших учебных заведений в России предлагают обучение по направлению «Информатика и вычислительная техника».
Факультеты для программистов
«Информатика и вычислительная техника» — это программисты на каком-либо языке;
«Информационные системы и технологии» — готовят системных администраторов и программистов на каком-либо языке;
«Программная инженерия» — готовят программистов-проектировщиков различных систем;
«Прикладная математика» — аналитики с навыками программиста;
«Статистика» — чистейшие аналитики;
«Математика и компьютерные науки» — математики, аналитики и немного программисты;
«Фундаментальная информатика и информационные технологии» — готовят серьезных аналитиков с хорошими навыками программирования;
«Информационная безопасность» — готовят специалистов по кибербезопасности;
«Бизнес-информатика» — специалисты по работ е с большими данными;
Заключение
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Что должен знать программист без профильного образования
Мы собрали список дисциплин, которые должен знать программист без профильного образования, помимо самого языка программирования.
Многие разработчики рано или поздно начинают задумываться о том, что еще им нужно изучить, чтобы стать Джуном или повысить квалификацию. Для кого-то это новый фреймворк, а для кого-то – основы матанализа, которые он никогда не изучал. Какие из университетских дисциплин могут помочь программисту и в каких случаях?
Давайте разберемся, что должен знать программист без профильного образования.
Теория графов
Если вы занимаетесь алгоритмами поиска или планируете это делать – вам понадобится дискретная математика, в частности, теория графов. Практически все алгоритмы поиска и сортировки основаны на деревьях.
Математическая логика
Математическая логика нередко используется в кодинге, начиная незамысловатыми условиями if/else и заканчивая работой с БД, так как любой SQL предполагает оперирование с множествами.
Чаще всего нужна булева алгебра. Изучите и поймите правила преобразования логических выражений: это поможет в понимании логики работы условий и при построении алгоритмов.
Теория вероятностей и математическая статистика
Математическая статистика в программировании нужна для создания отчетов и тестирования, обработки собранных данных и построения рабочих процессов. То же можно сказать и о теории вероятности, но она, в свою очередь, затрагивает и другие смежные области, например, разработку игр.
Вот примерный список разделов программирования, где помогут эти две дисциплины:
— Компьютерное зрение.
— Биржевые торговые роботы.
— Data mining.
— Системы принятия решений и нейросети.
— Алгоритмы шифрования и крипто-анализ.
— Предсказание процессов, системы анализа вероятностей.
— Распределенные вычислительные системы.
— Анализ производительности распределенных вычислительных систем.
Базы данных
Обработка и хранение данных – это важная часть рабочего процесса огромной части программистов. Базы данных используются и в вебе и в системном программировании. Чтобы лучше понимать теоретическую подоплеку хранения данных, модели организации и язык запросов – попробуйте начать с нашей подборки.
Теория алгоритмов
Этот раздел математики поможет не только в создании алгоритмов при разработке программ, она научит вас оценивать сложность того или иного алгоритма и целесообразность его применения в программе.
Моделирование
Моделирование – описание реальных объектов и процессов в формальных терминах. В общем случае программист без профильного образования сможет лучше понимать не только процессы объектно-ориентированного программирования, изучив математическое моделирование.
Защита компьютерной информации
Для рядового программиста защита информации может заканчиваться на элементарной цифровой гигиене. Но сейчас речь именно о фундаментальных принципах сохранения информации приватной: вы должны понимать, как написать и защитить программную и аппаратную части.
Для определения защиты информации в России даже существует свой ГОСТ (Р 50922—96), который определяет компоненты информационной защиты, а также то, как они должны быть защищены.
Микропроцессорные системы
Если вы занимаетесь электроникой и ее программированием, или вам это просто интересно – необходимо приступить к фундаментальному изучению микропроцессорных архитектур. Вы будете лучше понимать как микроконтроллеры и микропроцессорные устройства, так и вычислительную технику в целом.
Операционные системы
Пользоваться операционными системами может каждый, а понимать на уровне внутренних процессов – нет. Если вы системный программист без профильного образования – эта дисциплина будет чрезвычайно полезна. И даже если нет – вы узнаете много не только о строении системы, но и о программировании в целом. К примеру, чтобы лучше понять Unix-подобные системы, для начала прочтите наше руководство по написанию системного ядра.