0

Последовательность изучения языка программирования

Изучение языков программирования от простого к сложному

Краткий анализ некоторых подходов

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

Как изучать язык программирования, в какой последовательности учить его? Это тоже не праздные вопросы и к ним тоже надо относиться со всей серьезностью. Первая заповедь — быстрой манны небесной в программировании не было, нет и не будет. Настраиваться надо на кропотливую работу с постоянно меняющимися условиями, технологиями и требованиями.

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


Базовые алгоритмические структуры

Каждой алгоритмической структуре соответствует ее программная реализация. Линейная структура программно реализуется оператором присваивания, структура ветвления — условным оператором и структура повторения — оператором цикла.

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

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

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

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

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

Теперь как изучать язык программирования, чтобы достичь быстрого эффекта при минимальных затратах времени и энергии. Обратимся к профессионалам, что они говорят. В статье специалиста онлайн — университета Skillbox “Как правильно изучать программирование: метод Франклина” рекомендуетcz выполнять практические задания особым методом Франклина. Этот метод очень прост на практике. Фактически, он сводится к трем действиям.

  • читать книгу как обычно. Когда попадется образец кода, прочитать его;
  • закрыть книгу;
  • попробовать набрать код;
  • повторить пункты 1−3.

Да, если воспроизводить написанный в книге алгоритм, то будешь автокодировщиком. Я когда изучал свой первый язык программирования, то пользовался специальным сборником задач, в котором правильные ответы были в конце книге. Решив поставленную задачу, сверялся с ответом и работал над ошибками. Так изучать язык программирования очень эффективно.

Если таких сборников сейчас нет, то можно использовать и не очень хороший метод Франклина. Главная опасность здесь – выработка не своего собственного, чужого стереотипа мышления, повторяя то, что написано к книге. Что бы этого не происходило можно самому, прочитав теорию, ставить задачу, аналогичную примера в книге и решать ее своим способом.

В другой статье специалиста не менее солидной фирмы GeekBrains  “5 заповедей правильного обучения программированию” среди, в общем то правильных рекомендаций, говорится о некоторой фокусировке: “Так как вы еще не мастер программирования, а может даже новичок в самообучении, то возможно не вполне представляете себе всю мощь фокусировки на текущих делах. Телефон, телевизор, открытые параллельно окна в браузере, да и просто верхняя панель закладок могут отвлекать вас от занятий и написания кода”.

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

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

Еще одна интересная статья о методики изучения языков программирования “2 главных подхода в изучении программирования”, в которой анализируются и сравниваются между собой методики «Снизу-Вверх» , когда процесс обучения проходит от основ программирования к практике создания готовых продуктов, и «Сверху-Вниз», когда обучение сопровождается созданием рабочих проектов с самого начала.

Однако вывод в статье делается правильный. Чтобы стать опытным программистом, Вам нужно совмещать оба этих подхода. Но я добавил бы с приоритетом и упреждением первого подхода, потому что изучать язык программирования «Снизу-Вверх» немного проще.

Программист за работой

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

Направление первое сводится к тому, что сначала надо  изучать(повторять) то, что уже известно и опубликовано, упор делая на простые скриптовые языки, такие, как Perl, JavaScript или РНР или простые алгоритмические языки, такие, как Visual Basic, Pascal, Python. А затем переходить к более сложным и более профессиональным языкам. То есть от простого к сложному.

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

Третье направление рекомендует начинать с низкоуровневых языков, таких как Си. Аргументом этого подхода является то, что сначала надо научиться считать каждый байт, выработать привычку проверять границы массивов самостоятельно, освоить программное управление памятью и разобраться с указателями и адресной арифметикой. После этого любой скриптовый или простой алгоритмический язык познается легко и просто. И кроме того в этом случае после изучения языка уровнем ниже скрытые преимущества простых языков становятся более понятными. То есть путь от сложного к простому. К этому подходу всегда приходят профессионалы.

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

Конечно второй подход прав в том, что погружение в работу очень хорошо способствует развития индивидуальности в программировании. И кроме прочего изучение сопровождается с заработком.

А третий подход прав в том, что привычка к тому, что среда разработки программы всё делает за Вас приведет к тому, что освоить такие языки как C, C++ или Java будет намного сложнее, особенно, в процессе смены направления деятельности и парадигмы программирования.

Изучать язык программирования, самостоятельно определяя последовательность, можно, но это трудная и длительная процедура. Поэтому многие прибегают к курсам программирования. В этом случае такую последовательность задают в основном программы курсов программирования. Это облегчает изучение.

Среди множества предложений по изучению языков программирования можно выделить следующие курсы: онлайн-курсы образовательного портала GeekBrains, аналогичные курсы программирования в онлайн университете востребованных профессий SkillBox.  Это дорогие, но высокопрофессиональные курсы. Курсы попроще и по дешевле:  фирмы OTUS.RU, где представлен большой спектр обучающих программ, каталог которых можно посмотреть по ссылке. Курсы программирования Нетологии  тоже представляют интерес. Здесь можно научиться писать код программы за две недели. Старт в программирование в Неталогии интересный вариант.

Курсы программирования с нуля в ЕШКО – это эффективное обучение по доступной цене.  Здесь Вы познакомитесь с основными языками программирования, освоите принципы структурного и объектно-ориентированного программирования. Важно не только изучить основы языков программирования, таких как Pascal, C++, C#, Python, но и научиться мыслить, как программист.

Анализ программ существующих курсов  программирования показал, что многие из них сильно ориентируются на какую-то специализацию. Хорошо или плохо это трудно сказать. Кроме того практически отсутствует корреляция программ обучения с требованиями профессионального стандарта 06.001 – Программист. На мой взгляд это не совсем корректно. Поэтому далее предлагается итерационный и инкрементный подход изучения языка программирования, управляемый профессиональными требованиями стандарта “Программист”.

Итерационный и инкрементный подход, управляемый профессиональными требованиями

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

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


Итерационный и инкрементный подход

Из рисунка видно, что процесс изучения языка программирования состоит из трех циклов(спиралей):

  • обучение методам процедурного программирования;
  • обучение методам объектно-ориентированного программирования;
  • обучение методам решения специализированных задач с обработкой структурированных и не структурированных данных, как правило, большого объема.
Skillbox

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

В каждом цикле выделяется четыре этапа:

  • анализ данных различной сложности и разных объемов;
  • освоение методов доступа и обработки соответствующих данных;
  • освоение способов организации структуры программного кода;
  • интеграция и отладка программы.

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

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

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

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

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

Выполнив подготовительные мероприятия можно приступать к изучению языка программирования. Начинать надо на каждом цикле с изучение того набора типов данных, который предполагается для обработки в создаваемых программах. На первом этапе цикла обучения методам процедурного программирования основными типами данных являются стандартные типы данных- целые, вещественные, символьные и логические. Для начала достаточно. Изучить типы данных означает знать:

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

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

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

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

Усвоив работу операторов и их использование в программном коде можно переходить с структурному оформлению программ больших размеров. В процедурном (императивном, структурном) программировании программа структурно состоит из одной или нескольких взаимодействующих процедур.

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

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

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

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

-изучить простые типы данных и освоить приемы их применения в программе;

-освоить программную реализацию базовых алгоритмических структур и ее использование в программах;

-освоить способы создания процедур и функций и правила их применения в программах.

На этом данный цикл изучения языка программирования не заканчивается, пройдена только первая итерация цикла. Далее следует повторить все сначала(вторая итерация), но с более сложными типами данных, такими как массивы, множества и пользовательскими(собственными) типами данных. Осваивая структурные типы данных, также следует обратить внимание на размещение их в памяти ЭВМ, на способы индексации элементов и инициализации. Далее следует научиться работать с массивами и множествами, используя простые процедуры с операторами цикла и условными операторами. Изучить возможность и освоить создание динамических массивов их наращивание и т.п. И так до тех пор, пока не почувствуете, что на данном уровне познания языка программирования проблем нет.

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

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

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

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

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

Здесь следует учитывать, что парадигма объектно-ориентированного программирования существенно отличается от парадигмы процедурного программирования. Чтобы, как говорится, “въехать” в объектно-ориентированное программирование требуется преодоление какого то особенного, возможно психологического, барьера. Это обусловлено тем, что манипулировать приходится не с простыми(числа, символы, строки) данными, а с более сложными и более абстрактными типами данных, такими как структуры, классы и массивы объектов.

На первом этапе данного цикла как раз и следует хорошо разобраться с этими типами данных, их объявлением, созданием и использованием в программе. А далее следует научиться программно реализовывать основные принципы объектно-ориентированного программирования – инкапсуляцию(сокрытие), наследование и полиморфизм. Каждый принцип требует достаточно больших затрат на его освоение. Здесь также желательно выполнять несколько итераций, переходя от более простого к более сложному решению.

Самостоятельное изучение объектно-ориентированного языка программирования достаточно сложное занятие. Здесь требуется либо изучение в ВУЗе или на специальных курсах. Среди курсов изучения алгоритмических языков программирования можно выделить онлайн-курсы университета Skillbox.

В университете Skillbox можно найти много возможностей получить образование программиста с помощью дистанционного обучения. Здесь представлены самые востребованные профессии, используются современные инновационные методики онлайн-обучения. В том числе имеется возможность пройти и бесплатный курс программирования. Студенты обучаются программированию на востребованных сегодня алгоритмических языках Python, Java, C++, C#, а также языках веб-программирования JavaScript, РНР и опять же Python.

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

В связи с эти для перехода к этому циклу требуется специальная математическая подготовка, подготовка в области баз данных и языка SQL, методов машинного обучения( искусственного интеллекта) и методов Data Mining(классификации, кластерного анализа, поиска ассоциативных правил) и Big Data и т.п.

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

Таким образом, изучать язык программирования самостоятельно можно, но для этого придется приложить массу усилий и силы воли. Потому что для самостоятельного освоения программирования описанных методов требуется высокий уровень математической подготовки, что путем самообучения достичь практически не возможно. Поэтому здесь также требуется либо изучение указанных методов в ВУЗе или на специальных онлайн-курсах. Среди курсов, на которых можно пройти обучение в данной области знаний, опять же выделяются онлайн-курсы высшей квалификации Big Data онлайн-университета GeekBrains.

Заключение

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

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

Таковы рекомендации. Попробуйте и поделитесь опытом.

REG.RU
Дистанционное обучение
Обучение программированию
Проектирование информационных систем
 

brasm

Преподаватель со стажем 33 года. Кандидат технических наук, доцент.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *