Как правильно подойти к изучению программированию с нуля?
Здравствуйте, уважаемые.
Нашел подобный вопрос на тостере, но нужного ответа там к сожалению не увидел.
Некоторое время назад загорелся идей изучения программирования, не как нового вида деятельности, а как новой сферы знаний в целом.
Вкратце о себе: имею техническую специальность (электромеханик), имею некоторое понимание о логических элементах, так как придавалось, почитал пару глав некоторых книг по программированию (Липман "Язык программирования С++" и "Самоучитель по С++" Васильева, Дейтелы тоже читались).
Основная загвоздка в том, что у меня нет самого понимая программировании, как науки. Вернее понимание есть - уровня все могу, но под копирку. Когда пытаюсь импровизировать, даже на логических операторах ловлю ступор, из-за того что не хватает погруженности в процесс и БАЗОВЫХ знаний.
У меня имеются огромные пробелы в образовании. Курс математики старших классов пролетел мимо ушей, а хочется все понимать.
Вот собственно и вопрос: как создать фундамент для правильного изучения программирования? Как правильно закрыть пробелы в образовании и в каких областях, для дальнейшего комфортного обучения.
Для чего оно мне? Хочу расширить свои границы знаний, освоить хотя бы на начальном уровне ООП. Очень сильно интересуют алгоритмы. В качестве языка выбрал С++, как широко используемый, если посоветуете что то другое буду признателен.
Программирование в первую очередь - прикладная сфера знаний. Писать код всегда должно значить "решать задачу". Это не математи ка и не физика. Это просто язык, на котором вы объясняете машине как что-то сделать за вас. Начните с матлаба или питона, решая задачи, котопые очень долго считать вручную. Если понравится рабство компьютеров, продолжайте в любом направлении, решая и автоматизируя задачи других людей.
Как вариант - пройти легендарный гарвардский курс CS50 (Introduction to Computer Science) на платформе edX.com
Сайт javarush.ru каждую неделю выкладывает очень качественный перевод лекций этого курса.
Изучайте php. Там и с алгоритмами особо запар нет(разве что графы можно изучить) и результат сразу виден и работу сможете найти если научитесь что то делать. Как выучите синтаксис сразу возьмите какой нибудь фреймворк, например symfony. Заодно можно будет изучить html, css, javascript, sql.
В php тоже есть ООП и сделано все по примеру Java т.е. довольно хорошо.
С++ сложный язык для изучения в том плане что там очень много нюансов как можно и как нельзя писать при этом код будет работать, но иногда может не работать. В то время как в php главное не смешивать логику работы и внешний вид насколько возможно - эту проблему решают фреймворки, тот же symfony.
Ещё гляньте книгу Кормен "Алгоритмы. Вводный курс". Она небольшая (200 стр) но информативная.
Уже потом придет чувство стиля, чувство красоты решения. С++ в этом смысле очень хорош, очень много возможностей.
Поизобретать велосипеды, конечно. А потом смотреть как эти задачи решаются эффективно. Заценить мудрость и красоту чужого решения, сравнив его со своим. Шишек понабивать. Ночами посидеть, отлавливая ошибки и глюки. Отлаживая код. Потом почитать о хороших практиках в программировании. Переписать корявый, но рабочий код так, чтобы он им соответствовал. Получить эстетическое удовольствие от получившегося. Почитать чужой код. Восхититься или поплеваться, в зависимости от автора кода.
Для профессионала программирование, конечно, это чистая практика, ремесло. Для любителя может быть искусством. Но вряд ли для кого-то, кроме академической среды, может быть наукой.
C++ неоправдано сложный для большенства задач, слабо защищает от ошибок, трубует строгой дисциплины и внимания к деталям.
Для серьезного изучения программирования подходит Haskell, для легкого вхождения (в первую очередь в фронтенд, но и в программирование вообще) - Elm. Они же полезны для лучшего восприятия математики.
Если нужно быть ближе к железу, лучший вариант - Rust.
Из математики стоит познакомиться с теорией множеств и логикой.