Заключение

(поделиться сведениями)

Прочная основа

Курс программирования в среде ГРИС Букашка подошёл к концу. Несмотря на то, что графический исполнитель является учебной моделью программно управляемой системы, полученные в ходе его изучения знания и навыки должны стать прочной основой на пути дальнейшего совершенствования в современной, сложной, но очень интересной области — программирования и автоматизированного управления.

Изученные принципы составления алгоритмов и рассмотренные алгоритмические конструкции практически в неизменном виде присутствуют в промышленных системах программирования, предназначенных для решения реальных задач. Следование, ветвление, цикл, подпрограмма — все эти элементы являются кирпичиками в парадигме структурного императивного программирования — подхода к составлению программ, основанного на описании последовательности действий, которые требуется выполнить для решения задачи.

С одной стороны, этот подход является исторически первым способом программирования ЭВМ, он в наибольшей степени отражает обыденные представления о планировании порядка выполнения шагов, совершение которых приведёт к достижению результата. С другой стороны, принципы этого подхода лежат в основе функционирования современных цифровых микропроцессоров, и понимание этих принципов существенно облегчит изучение реальных языков и систем программирования.

В последнее время увеличивается интерес к декларативному программированию — подходу, в котором основное внимание уделяется описанию требуемого результата, а последовательность действий для его получения формируется неявно на основе правил вычисления функций или логических выражений (функциональное или логическое программирование). Однако даже в современных языках программирования, построенных на функциональной или логической парадигме, присутствуют элементы императивного подхода.

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

Широкие перспективы

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

Системное программирование — это программирование электронных устройств как таковых: бытовых приборов, мобильных телефонов, станков и производственного оборудования, банкоматов и платёжных терминалов, авиационных и автомобильных систем. В основе работы всех сложных электронных автоматов лежит операционная система или программный модуль, частично реализующий её функции. Задачей системного программиста является разработка этой основы с тем, чтобы оживить электронные схемы и научить их откликаться на команды, то есть создать на их основе модель исполнителя, подобную ГРИС, но со своей СКИ.

C точки зрения целевой аппаратуры (аппаратной платформы) в системном программировании можно выделить следующие направления:

Прикладное программирование — это решение практических задач с использованием электронных устройств, подготовленных системными программистами. Прикладные программисты, используя модель исполнителя, соответствующую электронному устройству, создают программы, с которыми взаимодействуют пользователи — специалисты в своих предметных областях. Прикладное программирование напоминает рассмотренное в курсе программирование ГРИС, только в реальном мире прикладные программисты имеют дело с другими исполнителями, в качестве СКИ которых выступают API (applicaton programming interface — интерфейс прикладного программирования).

С точки зрения прикладного программирования классификацию целесообразно проводить не в разрезе целевых платформ (а это персональные компьютеры, мобильные устройства и веб-платформы), а по предметным областям:

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

Необходимые компетенции

Для реального программирования необходимо выучить настоящий язык программирования. Системное программирование обычно осуществляется на языках Ассемблер, Си и Си++. Для прикладного программирования используются языки Java, C# (си-шарп), Python, Objective-C. В странах бывшего СССР для решения экономических задач широко используется среда 1С, в которой есть собственный встроенный язык программирования. Отдельно можно отметить веб-программирование (разработка интернет-сайтов), которое выполняется с помощью языков JavaScript, Python и PHP.

Программист должен хорошо знать и понимать принципы работы модели того исполнителя, для которого он пишет программы. Это означает необходимость получения представления об устройстве современных цифровых вычислительных устройств и операционных систем. Поскольку современные задачи, как правило, подразумевают обработку больших объёмов данных и взаимодействие в ходе этой обработки нескольких вычислительных устройств, программисту необходимы знания в области компьютерных сетей и систем управления базами данных.

Для составления качественных программ обыденных представлений о том, как решать задачи, недостаточно. Программист должен освоить и научиться применять на практике специальные методы программирования — общепризнанные эффективные способы решения таких элементарных задач, как сортировка элементов последовательности в возрастающем или убывающем порядке, поиск конкретного элемента в упорядоченной или не упорядоченной последовательности, и т. п. Важно научиться правильно выбирать способ хранения информации, обработка которой будет выполняться программой, — структуру данных. Этими вопросами занимается область знаний, которая получила название компьютерные науки (computer science).

Профессиональное программирование подразумевает коллективную работу с исходными текстами программного продукта. Чтобы решить возникающие при этом проблемы, используют специальные инструменты, прежде всего систему контроля версий — Git, Mercurial или Fossil. Чтобы облегчить труд по вводу текстов программ и уменьшить количество допускаемых при этом ошибок, вместо простых текстовых редакторов используются интегрированные среды разработки (IDE, Integrated Development Environment), например, Visual Studio Code (VSC), Eclipse, NetBeans. Умение применять перечисленные инструменты отличает профессиональных программистов от любителей.

В большинстве случаев программисты пишут программы не для себя, а для заказчиков — пользователей, которым надо автоматизировать решение сложных или рутинных (мелких, но регулярно возникающих и отнимающих много времени) задач. Чтобы понимать заказчиков и уметь объяснить им свою точку зрения, программисты должны иметь хотя бы базовые знания в предметной области, где им предстоит работать.

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

Одной из важнейших компетенций для программиста является знание английского языка. Это позволяет оперативно знакомиться с мировыми достижениями в профессиональной сфере, получать доступ к оригинальным источникам информации и общаться с коллегами из мирового сообщества.

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

Конкретные рекомендации

Если нет уверенности относительно направления дальнейшего изучения программирования, то можно попробовать развиваться в следующих направлениях:

Перечисленные направления позволяют перейти с минимальной подготовкой и минимальными дополнительными финансовыми вложениями к разработке программ. Достаточно иметь компьютер или ноутбук, работающий под любой операционной системой, с доступом в сеть Интернет (последнее не обязательно, но существенно упростит дело), свободное время и желание учиться.