Этот вопрос задают себе и новички (какую тему выбрать для дипломного проекта) и специалисты из других областей, не связанных с программированием (например, периодически на хабре проскакивают статьи "Джун в 40 лет").
Я немного скажу вам свой путь в этой сфере.
1. С самого начала хотел быть программистом. Вот прям со школы, с 7-го класса. Раньше не получилось - персоналок ещё не было, поэтому начинал на терминалах. Но это не критично. Поэтому и в 30 лет, думаю, можно и не надо себе запрещать. Пластика мозга.
2. Пробовал программировать что в голову взбредёт. Это, видимо, важный этап, когда учишься отделять мух от котлет - когда и где вообще имеет смысл применять программирование.
3. Бесчисленное количество попыток заставить работать идею в виде программы. Иногда это не 1-2 попытки. 20, 30 и больше. Сутки, двое, неделю, чтобы заставить "это" работать. И это далеко не предел.
4. Со временем учишься ставить себе задачу в более-менее ясном виде и на техническом языке, своего рода "техзадание", только внутреннее, когда вы самому себе по шагам расписываете решение (уверен, что этот этап вам хорошо знаком по вашей профессии).
5. А вот теперь самое главное - работа программистом в "чистом виде" называется "кодировщик". И это вообще не интересное занятие. Даже низкоквалифицированное. Поэтому, самое интересно в программирование - личное общение с людьми других профессий. Вот представьте себе, что квалифицированный спец или даже ГИП рассказывает вам как что-то проектируется и строится! Да ни один препод в институте вам так интересно и с энтузиазмом не расскажет как идёт этот процесс. А вы слушаете, мотаете на ус и размышляете, что вы можете для этого человека сделать, чтобы автоматизировать его деятельность (п.2 и 4). Так сказать ищете своё место в этой работе. Фактически, имея одну профессию программиста можно познакомится с большим количеством разных профессий и поучаствовать в них. И на этом уровне недостатка в работе вроде как и не будет больше. Но тут надо решить для себя, что вы готовы к такой смене профессий, но к ней люди идут годами и таких людей не так уж много.
Ну и самое неожиданное - вы себе не представляете, сколько нужных программ и утилит ещё не написано!
Скажу вам пару секретов из опыта:
1. Нет хорошего или плохого кода (типа "говнокод"). Если код работает и выполняет свою задачу - он хороший. Остальные идут лесом. Можно спросить коллег, чтобы они вам подсказали, как можно было бы решить задачу проще, но их советами можно игнорировать, т.к. они не живут в контексте вашей задачи и именно вы несёте ответственность, что в вашей программе окажется тот или иной кусок кода. Поэтому не вставляйте в программу код, который вы не понимаете.
2. Как и в любой другой профессии вас будут учить только как делать правильно, но никто не будет вас учить как не надо делать (думаю, что и это вам должно быть хорошо знакомо по своей профессии). Тут только на своём опыте. И эти два понятия по времени прохождения очень сильно отличаются.
3. Ведите журнал. Записывайте, что получилось, потом перечитывайте. Начните с простого, "написал программу Hello World на C#" и сделал это следующим образом - скрин запуска Visual Sudio, создание нового класса, указание места, куда вписал текст "Hello World". Потом через пару дней будете делать другую программу будете быстрее вспоминать как вы начинали первую программу. Лично я себе стал делать такие заметки лет 8 назад. И писать доки в своим программам. Очень помогает, когда выдёргивают из контекста на полгода, потом просят доработать.
У меня тоже получилось несколько сумбурно, но как есть. )))
P.S.
программирование контроллеров для инженерных систем зданий
- с моей точки зрения отличается от "обычного" программирования инструментами разработки и возможностями отладки и имитации тестовой среды. Поэтому с контроллерами - это лучше после некоторого опыта программирования. Хотя само программирование контроллеров может быть и проще чем обычное программирование под Windows/Linux.