После закрытия моего бизнесика в марте 2010 года я первый раз сделал попытку "выучиться на программиста". Выглядело это так - я подобрал готовые элементы-кирпичики "из интернета" для схемы "выучусь на программиста и уеду в Новую Зеландию", скачал на ноутбук учебник по С++ (потому что тогда я про Джаву ничего не знал, да-да), и уселся читать.
Начало пролетело быстро, я продвигался без остановок первые несколько дней, может даже неделю, радостно об этом рассказывал друзьям, пока на главе про
function overloading не начал тормозиться, а на темплейтах и вовсе остановился. На этом инициатива закончилась.
За прошедшие с этого момента 10 лет я, конечно, не только перебрался многократно через тогдашнее затруднение, причём в обе стороны, но и построил несколько моделей того, почему я остановился. В подобных дебрифах очень легко свалиться в какую-то совершенно родительскую автодидактичность типа "ты просто не хотел", или "тебе было уже 36", или "ты подсознательно не хотел уезжать / идти на наёмную работу". Но нет, всё было совершенно не так.
К 2010 году я уже 12 лет зарабатывал на причудливой смеси программирования и жонглирования отвёрткой. Программировал я до 2004 года на Corel Script editor, чисто процедурном языке автоматизации передвижения объектов в Corel Draw, потом перебрался с огромным трудом на VBA, все эти заморочки с OOP мне показались совершенно лишними и непонятными, но я их как-то адаптировал под процедурщину. Сходу я даже сразу и не вспомню, была ли там какая-то типизация... а, была...
.SelectObjectOfCDRStaticID TargetID&
.GetSize XTargetSize&, YTargetSize&
.GetPosition XTargetPosition&, YTargetPosition&
.SelectPreviousObject -1
но оно всё находилось где-то вдали, и, хотя мне и было понятно в учебнике по С++, что такое int и string, но зачем определять две разные, но как бы одни и те же функции для работы с ними - было уже не ясно. Нет, я умом понимал, что это и зачем, но совершенно не мог вписать этот новый, только что изученный приём в контекст уже известных мне задач. Ну не было у меня такого! Все функции обращались либо к глобальным переменным (т.е. было какое-то, как я понимаю сейчас, адское замыкание), либо делали свои локальные переменные, т.е. почти все были процедурами, а не функциями, которые затевались только ради side effects.
Этих умных слов в 2010 я не знал, и начал тонуть. Да, можно было заучить новые понятия наизусть, что я на первых порах и сдал делать. Но дальше я доехал до дженериков и застрял совсем. Идея дженериков тоже была понятна, но если я не понимал, куда мне приткнуть overloading, то куда приткнуть ещё один уровень абстракции выше - было совсем не ясно.
Критик мог бы меня отругать с позиции "ты говоришь как самогонщик, не желающий изучать химию ароматических соединений", но у меня есть на это возражение в виде волюмов Ильина-Позняка, Самарского и Ландау, изученных в своё время в достаточном объёме, от которых осталось только воспоминание "я мог через это продраться", и всё.
Следующий подход к "коммерческому программированию" случился у меня аж в конце 2011 года, и это была Джава...