Alexey_88
А где можно ещё поискать алгоритмические задачи, от простых к более сложным?
Можно найти лабораторные работы для вузов. Там будут задачи типа “выведите n совершенных чисел, где совершенное число - это то-то и то-то”. Или же там будут задачи типа “возьмите данные из файла, преобразуйте их так-то так-то и сохраните вывод в файл”. Такие, дискретные задачи, которые поэтапно идут из начальной точки в конечную, где этапы хорошо отделены друг от друга.
При этом
игнорируй олимпиадные задачи. Видишь олимпиадную задачу - обходи её стороной. Они ничему не учат и вообще ничего не развивают. Они только запрашивают у тебя “а что ты умеешь уже делать?” и ты показываешь “я умею вот это и вот это”. А если ты не умеешь, то они тебя и не научат, потому что они не для этого формировались. Нужно выбирать задачи, которые учат. Поэтому вузовские задачи - это как раз те самые, которые сделаны изначально для того, чтобы студентов сделать программистами, начиная с чистого листа, с нуля.
Alexey_88
Ту книгу, которую вы советовали ранее “Программирование для математиков” я начал потихоньку изучать
Она учит делать всё через исполнители. Это важная концепция, которую необходимо освоить, впитать и использовать потом везде. Так ты сможешь строить очень сложные программы. Когда-то я так преодолел этот рубеж, когда хочешь написать программу, но вообще не можешь её написать, потому что она слишком сложная, слишком сложно устроена. И вот исполнители сделали очень большой прорыв в моём программировании так, что я написал программу, которая хоть и выглядела ужасно и непрофессионально по коду, но делала такие заковыристые вещи и делала их надёжно и без ошибок, что даже не верилось, что я написал такое. И я очень много впоследствии накачал файлов с её помощью, которые можно было докачивать в разные дни (когда файлы огромные, ты их откладываешь на потом и качаешь докачкой по несколько дней) потому, что они сохранялись с хешами в именах, которые конструировались исполнителем, отвечающим за конструирование имён для этих файлов. То есть это не просто была функция, которая возвращает подходящее имя файла, а это был настраиваемый исполнитель (настраивался он из конфигурационного файла снаружи программы), который сначала нужно было настроить, чтобы он очень тонко выдавал те или иные имена для файлов (чтобы между сотнями похожих файлов не было коллизий по именам и чтобы это не было тупо, как в Windows, file.txt, file (1).txt, file (2).txt и так далее). То есть в эту программу можно было на закачку поставить десять тысяч файлов и качать их несколько недель вразнобой, менять у них очерёдность закачки, отменять закачки, добавлять закачки в середину и при этом для всех этих десяти тысяч файлов ты мог быть стопроцентно уверен, что ничто ни с чем не перепутается и ничто никуда не потеряется и всё докачается в течение недели и переименуется и сохранится правильным образом в правильные места. Вот это мне дали исполнители всё. Они как бы взяли на себя всю сложную работу и всю ответственность за правильное выполнение задачи, которая им ставилась. Исполнители опирались на исполнители, которые опирались на исполнители, которые опирались на исполнители. Это к ООП вообще отношения не имеет, поэтому в книжках по ООП ты это всё не найдёшь. И, соответственно, изучая ООП, ты это всё уметь не будешь. Изучая ООП, ты будешь просто писать простые программки, но только в ООП. Для понтов подойдёт, а для дела - нет.