397 подписчиков

Проект Эйлера: практика для начинающего программиста

1,7K прочитали

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

Какой же самый быстрый способ научиться программированию?
Какой же самый быстрый способ научиться программированию?

А разве книг по программированию не достаточно?

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

Что такое "Проект Эйлера"?

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

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

 Практика! Ежедневная практика - лучший способ изучить программирование
Практика! Ежедневная практика - лучший способ изучить программирование

Что дает знание алгоритмов?

А что на самом деле делает программа?

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

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

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

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

Вопрос языка выбора программирования, конечно, "холиварный". Выскажу свое чисто субъективное мнение.

Не существует "лучшего" или "худшего" языка программирования

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

Понятие "лучший язык", курсирующее сейчас на просторах интернета, на самом деле просто подменяет понятия "популярный" или "востребованный" сейчас на рынке труда.

Вот смотрите Вы ролик на YouTube расхваливающий язык java, что это значит? Что лет десять назад в стране был "банковский бум", финансовая сфера бурно развивалась и требовала кучу программного обеспечения. Это в свою очередь вызвало спрос на java-программистов и тогда они были очень востребованы.

Но требования рынка быстро меняются.

Сейчас Вам просто пытаются продать очередные обучающие курсы, пользуясь былой "хайповостью" языка. Увы, "бум" уже прошел, все программы написаны, часть java-разработчиков сократили. Отучившись на курсах, Вы будете конкурировать с ними, уже имеющими 5-10 летний опыт реальной работы.

Та же история с python, взлетевшем на подъеме ИИ и всего с ним связанного.

Лично я выбрал язык C в качестве первого

Когда Вы пишете программу, не стоит требовать от компьютера невозможного, того, на что он просто не способен. Язык C при этом максимально близок к устройству компьютера и изучая его, Вы неизбежно изучаете и Computer Science.

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

Например,"Си" не даст вам сравнить два дробных числа просто через знак '==', и Вам придется узнать, как хранятся данные в памяти. Как хранится число с десятичной точкой, отрицательное и т.п.

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

Теперь Вы - профессионал.

Быстро - это медленно, но каждый день

С помощью "проекта Эйлера" можно подтянуть мастерство владения любым языком программирования. Что бы программист не писал: веб-приложения, игры или ещё что-нибудь, работать он будет с разными как языками, так и библиотеками, каждая под свою задачу.

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

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

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

Задача Эйлера #1 - простенький код
Задача Эйлера #1 - простенький код

Сначала навыки и умения развиваются лишь количественно и (у меня, например) задача Эйлера #1 отличается от задачи #20 по сути лишь количеством строк.

Задача Эйлера #20 - не очень красивый, но понятный и, главное, рабочий код
Задача Эйлера #20 - не очень красивый, но понятный и, главное, рабочий код

Но постепенно, по мере сложности заданий растет и мастерство программиста, появляется собственный стиль, за который уже не так стыдно перед понимающими людьми (задача Эйлера #41)

Задача Эйлера #41 - уже не так стыдно
Задача Эйлера #41 - уже не так стыдно

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

Задача 51 - продолжаем развиваться
Задача 51 - продолжаем развиваться

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

Список решённых задач:

P.S. Изначальная цель блога - получить "фидбек" в комментариях, чтобы более опытные "кодеры" указывали мне на ошибки, советовали и всячески помогали в саморазвитии.

Также приглашаю всех на мой сайт)

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

Не забудьте подписаться на канал!)))
Не забудьте подписаться на канал!)))

В общем, добро пожаловать на канал))