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

Берёшь учебник по языку для начинающих, читаешь, экспериментируешь с примерами.
Разобравшись с основами, берёшь учебник для среднего уровня, читаешь, экспериментируешь с примерами.
Берёшь и читаешь учебник по стандартной библиотеке, практикуешься.
Читаешь учебники/документацию по прикладным областям, вроде сетей, баз данных и прочему. Конечно же, практикуешься.
Устраиваешься на работу.
Где-то года через два-три появляется необходимость, а с ней и возможность понимать паттерны проектирования.
Читаешь учебник по паттернам. Может, для начала что-нибудь проще GoF.

Пройдет через два года. Или через один, в зависимости от того, как свободное тратится.

Просто прокачивайся. 

Макконнел, Кент Бек, Фаулер, Керриган. Сначала структурное, ООП после проработки Рефакторинга. Макконнел в первую очередь, часть про архиьектуру и проектирование нужно пропустить в первый раз, он написал полный гайд, практически, про структурную парадигму и как работаться с массивами.

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

Шаблоны GoF после GRASP,  SOLID, YAGNI и TDD и обильного велосипедостроения длительностью ~год.  

Книги нужно не просто читать, а разбирать примеры и искать инфу дополнительно. То же самое относится к статьям, вблогам, лекциям, курсам. Если голова пухнет - это признак того, что книгу/вмдео читать/смотреть ещё рано, потому что мозг не может сложить инфу в красивую структуру знаний. Паттерны бесполезны без проработки и без усваивания Рефакторинга. То же самое к архитектурным относится, которые бесполезны для понимания, если не усвоено DDD. Паттерны сначала лучше прорабатывать на каком-нибудь C#. Если уже в состоянии писать компилирующийся код на C++, то с C# никаких проблем не будет. На C++ паттерны прорабатывать стоит только проработки идиом C++.

Что касается самого C++, то cppreference, youtube и все книги, которые только удастся найти. Если на книгу очень много ссылок в интернете, статьях, видео, это значит, что ее нужно прорабатывать в первую очередь.

Для систематизации знаний нужно найти ментора или курс и / или прочесть документацию по технологии раза три. 

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

Развитие в первые годы похоже на спираль, поэтому ко всему "изученному" придется возвращаться пару раз.

Насчёт пункта три. Все советуют обязательно прорабатывать алгоритмы, сложность вычислений и структуры данных, паттерны проектирования и архитектурные шаблоны именно в такой последовательности, потому что концепции одни и те же, а реализации разные. Любую информацию можно сохранить хоть в файле, хоть на стеке, вопрос главный  - для чего, в каком scope она нужна и какие нужны гарантии и ограничения. Самое лучше место, чтобы узнать это, на текущий момент это GitHub.
У вас в вопросе рядом существуют два уровня - уровень передачи информации между сессиями использования одного приложения и уровень передачи данных между модулями в домене приложения "калькулятор" во время исполнения. В первом случае вам подойдёт сохранение инфо в обычном тестовом файле в своем статически определенном know-how формате (чтобы раньше времени не лезть в сериализацию и парсинг), что делается просто, быстро и средствами STL, а во втором случае вам нужно строить модель домена из классов, абстрагирующих операции, и как-то реализовать простой синтаксический анализатор; в этом случае передача промежуточного результата будет в виде какого-то объекта, и о его виде и задачах с ходу сказать нельзя, потому что все зависит от ТЗ и конкретного набора формул, которые требуется обрабатывать; и к тому же во втором случае без сторонних библиотек не обойтись, иначе слишком растянется процесс.