Но мне кажется на первых парах все начинающие программисты занимаются "топтанием кнопок".
Освой десятипальцевый слепой метод набора в разных раскладках (латиница, кириллица) - и вообще перестань об этом думать. Это должен быть естественный процесс, как ходьба, дыхание. Тогда твои мозги и твоё время освободится для других вещей.
Затем ты освоишь язык программирования (синтаксис), а то и несколько языков - и тоже перестанешь думать, как записываются всякие if, while, функции, структуры данных и т.д. И опять твои мозги и время освободятся для других, более важных вещей. Язык и синтаксис не имеют значения.
Затем ты освоишь основные алгоритмы и структуры данных - массивы, списки, стеки и очереди и другие виды коллекций, операции поиска, выбора, сортировки, потоки данных и их обработку, распараллеливания и синхронизации параллельных потоков. Всё это называется примитивами программирования. При должном опыте их применение не требует особых раздумий. И опять твои мозги и время освободятся для других, более важных вещей.
Наконец, ты познакомишься с архитектурами, шаблонами проектирования. И опять твои мозги освободятся для более важных мыслей. И вот тогда программирование станет для тебя тривиальным занятием, а все сложности будут видеться в области постановки задач и выбора технологий.
Как видишь, топтание кнопок - это освоение профессии машинистки, и к программированию непосредственного отношения не имеет. Когда я учился на программиста, у нас была склонность ставить для себя такие задачи, которые мы не умели решать, чтобы научиться их решать. Простые задачи, которые мы уже умели решать, нам казались неинтересными. Но дело в том, что каждая следующая более сложная задача предполагала, что мы уже научились решать предыдущие более простые задачи, и научились их решать хорошо, доводили решения простых задач до автоматизма, потому что иначе не оставалось времени и мозгов, чтобы подумать о более сложном.
Когда пишешь открытие и чтение из файла, или обработку массива, или поиск максимума, или выбор из списка в 20-й раз, это уже начинает раздражать - хочется быстрее, тогда для себя узнаёшь о библиотеках, объектах и т.п. полезных вещах, которые всё это упрощают.
Из всего сказанного я сделал такой вывод: слушать ваши советы; изучать теорию, методы; упрощать свои алгоритмы.
Слушать советы и изучать теорию ты всё равно будешь вполуха.
Программирование не изучается как теория по книжке. Нужно программировать. А чтобы программировать, нужно постоянно испытывать неудовлетворённость от достигнутого результата.
Взял задачу. Мучался-мучался, наконец, написал, и что-то заработало - радуешься. А на следующий день уже не доволен, уже думаешь "а если так попробовать?", "а если этак?", а вот тут тормозит - как быстрее сделать, а вот тут памяти много уходит - как экономнее, а вот тут длинный, некрасивый и мутный кусок кода - как его упростить и переписать, чтобы красивее было.
Так вот, чего у тебя пока в этой теме не наблюдается, так это недовольства собственным решением. Как только оно у тебя появится, во-первых, ты перестанешь отбрыкиваться от советов (хотя и не обязательно начнёшь им следовать), во-вторых, у тебя появится куча вариантов решений, в-третьих, твой профессиональный уровень начнёт так расти, что обгонит университетскую программу - ты будешь легко выполнять все задания, и тебе даже скучновато станет, зато освободится время для того, что тебе интересно, в-четвёртых, уже на 3-4-м курсе ты легко найдёшь работу или приработку про профессии, а потом не ты будешь искать работу, а работа будет искать тебя.