Во-первых, поступите в любой вуз на специальность «вычислительная техника и программирование» или любую смежную. Это самое простое и очевидное начало. Позволит погрузиться в тему и получить общие знания (включая очень важные фундаментальные знания в математике).
Во-вторых, осознайте, что «минимум сухой теории» и «сложные технические задачи» — это взаимоисключающие параграфы. Либо хавать теорию огромной ложкой за обе щеки, либо быдлокодить скриптики на PHP (без претензий к самому PHP, просто как пример). Инженер в первую очередь решает задачу, а не использует инструмент. Можно быть виртуозом гаечного ключа и отвёртки, но чтобы спроектировать автомобиль, этого мало.
Ну и в-третьих, определитесь с задачей, которая интересна, и под неё выбирайте инструменты. Для десктопных приложений в моде C#, нестареющей классикой считается C++, имеет множество преимуществ Java и её производные вроде Scala (это к вопросу блокнот с анимацией). Для работы с текстами (составление компиляций) неплохо подходят скриптовые языки, вроде Python, Ruby, JavaScript, Perl.
И в-четвёртых, больше никогда не говорите, что HTML и CSS — это программирование. Это вёрстка, она к программированию имеет очень мало отношения. Но раз Вы кое-что в этом понимаете, попробуйте начать с изучения JavaScript, как раз умение верстать и понимание DOM пригодятся. И инструменты знакомые.