В день создания сообщества выложить материал к сожалению не получилось.
Итак, программисты, кодеры, разработчики, разрабы и прочие синонимы. Кто они такие и чем грозит выбор этой профессии? Сперва - нудное официальное описание, потом практика жизни.
Итак, программисты в Национальном реестре профессиональных стандартов открывают 06 раздел, стандартом 06.001 "Программист", в его обязанности входит:
1. Формализация и алгоритмизация поставленных задач
2. Написание программного кода с использованием языков программирования, определения и манипулирования данными
3. Оформление программного кода в соответствии с установленными требованиями
4. Разработка процедур проверки работоспособности и измерения характеристик программного обеспечения
5. Разработка тестовых наборов данных
6. Проверка работоспособности программного обеспечения
7. Исправление дефектов, зафиксированных в базе данных дефектов
8. Анализ требований к программному обеспечению
9. Разработка технических спецификаций на программные компоненты и их взаимодействие
10. Проектирование программного обеспечения
Теперь о том же, но с точки зрения жизни.
Итак, первый сюрприз для тех кто выбирает эту стезю - учиться Вы будете сами. Сколько моих ребят ни поступало на профильные факультеты, везде одно - актуальных данных на них нет. Очень мало и педагогов, которые способны дать ответы на актуальные вопросы. То есть поступая на обучение сегодня обычно получают данные актуальные 2-3-5 (в особо запущеных случаях и более) лет назад, а ведь эта среда очень динамичная!
Итак, обучение складывается из самообучения (90%) и сдачи зачетов (10 %) для получения бумажки об образовании.
Первая и самая сложная задача для успешного освоения профессии - начать думать как программист. Задачи для ЭВМ строятся в императивной или декларативной форме. Императивная форма - классическое программирование, но помимо него есть крайне не уважаемая (но зачастую гораздо более важная) часть - декларативное программирование. Обе эти части принципиально разные и к ним обоим нужен свой подход.
Классически алгоритм состоит из трех типов построения команд:
1. Линейная форма. Все команды выполняются последовательно одна за другой.
2. Условие. Есть несколько наборов команд и выполняется только та часть которая отвечает (или не отвечает) какому либо условию.
3. Циклы. Один и тот же набор команд выполняется многократно. Сюда же входит рекурсия, про которую говорят "чтобы понять рекурсию нужно понять рекурсию"...
То есть мы пишем команды на каком-либо языке программирования, потом скармливаем полученный код компилятору или отдаем интерпретатору и получаем результат.
Декларативное программирование (которое 99% императивных программистов за программирование не считают) строится совершенно иначе. ВАЖНО!!! Декларативный язык действительно не является программой в классическом понимании, он не может почти ничего, но в том, что он может он на несколько голов выше императивных.
В декларативном языке мы описываем результат который хотим получить. Условно декларативную часть можно разбить на 3 формы:
1. Языки разметки.
2. Базы данных.
3. Логическое программирование.
Языки разметки, это например, HTML. Если брать инструментарий императивного языка, то в нем мы создаем графический элемент, прописываем его свойства и даем команду отображения. В языке разметки мы просто пишем код элемента и его свойства. Делая интерфейс Пикабу, например, на Qt мы получим в разы больший объем кода, который к тому же написать будет гораздо сложнее.
Базы данных - это специализированные программы-интерпретаторы, которые позволяют осуществлять выборку из огромных массивов данных. Опять же - мы можем написать код, который прочитает массив и сделает из него выборку, но этот код будет крайне объемным и смена выборки на иную будет не малым бедствием, а для декларативного языка эта операция - одну строчку поменять.
Языки логического программирования - это вообще катастрофа рожденная сумеречным гением. В этих языках мы описываем некоторые термины и сущности, соответствующие терминам. Например, мы выражаем программным языком:
родная сестра =(женский пол, (мама сестры = мама объекта или папа сестры = папа объекта)
И чем сложнее термин тем больше заморочек. Плюсы - при построении правильной модели огромное число промежуточных алгоритмов необходимых для логического вычисления отбрасываются. Для некоторых (около 0,01 %) задач логическое программирование - настоящее спасение.
Думать - это переводить своё внутреннее мировоззрение в четко построенные алгоритмы или декларативные конструкции. Пока этого не будет - Вы не программист.
Итак думать алгоритмами мы научились. Далее вторая задача - изучить документацию и примеры языка программирования или набора языков. Основная сложность - читать нужно реально много. Документация - это тысячи страниц примеров кода, функций и пояснений к ним. Если гуманитарии начнут наезжать, что им нужно много читать - дайте им почитать документацию к PHP/Python/Java ну или хотя бы SQLite3. Главная проблема - на чтение уходит сравнительно много времени.
Третья задача - наработка опыта. Абсолютно пофиг сколько учебников наизусть Вы выучили. Пока не будет наработан навык "на кончиках пальцев" Вы - никто и ничто. Можно и нужно совмещать со второй задачей.
И так успешно решив эти три задачи Вы стали программистом, что Вас ждет?
Во-первых Вы заметите, что мир вокруг вас совершенно иной. ЭВМ не имеет интуитивных элементов, а это значит, что любая опечатка в коде недопустима. Постоянный прессинг строгого соблюдения ряда формальностей и не допущения "может быть" меняет психику. Пропадают розовые очки, появляется автоматическая привычка раскладывать реальность до "атомарного" уровня (до структур выраженных словом или простым действием).
Во-вторых Вам будет сложно общаться с людьми не Вашего круга. Потому что Вы начинаете говорить на разных языках.
В-третьих, если задачи действительно успешно решены, то вы получите очень хорошую работу с высокой зарплатой.
И о работе...
Работа программиста - это получить задачу, разложить её на "атомы" (структуры выраженные одной операцией в языке программирования) и безошибочно написать код. Да-да работа, это долгие часы кофе, сигарет и долбления клавиатуры. Результат - это продукт, который сделает жизнь нескольких десятков/сотен/тысяч/миллионов/миллиардов людей другой. Насколько и как именно - это Ваша будущая работа.
Программа - просто средство автоматизации. Она работает там, где нужно выполнять много однотипных операций в рамках заданных параметров. Если задача разовая и повторов не предвидится, то писать программу бессмысленно, уже есть инструменты позволяющие провести все нужные действия без написания софта. А вот если нужно выполнять одно и то же действие многократно, то программа заменяет нудный труд. Написанный мной софт (если его ещё используют) работает вместо нескольких десятков людей, позволяя кому-то не сидеть сутками за компьютером, а вернуться вовремя домой.
Всем удачи!