@dwnil
Ну, по-моему мнению, программирование и создано для того, чтобы решать задачи. Задача по сути состоит из условий, входных данных, и ожидаемого результата. Вот эти самые входные данные надо где-то и как-то хранить (структуры данных), как-то обрабатывать (алгоритмы) и всё это должно быть наиболее оптимально в зависимости от типа задачи.
Хотел бы сказать по-поводу времени, CS50 это 23 лекции по 40-60 минут, в рамках программирования - это ни о чём. Любая стоящая книга это страниц под 500 не самого лёгкого чтения, причем чаще всего на английском языке, т.е. если читать вдумчиво, вы потратите гораздо больше времени, чем на этот один курс, а ваш кругозор он расширит. Потому что даже если вы будете знать алгоритмы и структуры данных, это всё абстракция, не мешало бы понимание того, как это всё работает внутри, как работает память, процессор, ОС, в каких системах исчисления эти данные кодируются, ну и так далее, с этим знанием вы будете лучше понимать, что вообще происходит в компьютере и чем на самом деле занимается процессор, да и в целом данные не будут для вас "магией".