Я начал погружаться в IT по нестандартному пути: будучи ведущим инженером-конструктором и получив новую работу, где в одиночку нужно было проектировать с нуля и до ввода в эксплуатацию оборудование производственных линий (станки), я погрузился в ардуино, чтобы хоть как то уметь автоматизировать разрабатываемое мной оборудование. До этого не доводилось работать ни с автоматикой, ни с программированием. После двух автоматизированных станков конвейерного типа я разделил свои направления обучения на два потока: с одной стороны я стал изучать промышленные программируемые логические контроллеры (ПЛК), чтобы уйти от геморроя с ардуино, её низкой электромагнитной совместимостью и огромным количеством вспомогательных плат. С другой стороны я наткнулся на проект
Processing, который обещал простой переход от Arduino к созданию десктопных приложений, с сохранением общения с Arduino платами и сохранением привычной среды разработки. Это нужно было для последующих проектов, которые подразумевали экспериментальный стенды с управлением с компьютера и логированием данных на него, построение графиков и печатью протоколов. В области ПЛК я научился работать с программируемыми реле и программировать их на языках FBD и ST и успешно разработал и автоматизировал ещё несколько станков. В области программирования десктопных приложений я стал с помощью Processing с огромным удовольствием создавать игры, в том числе для Android. Навыки крепли, я освоил Java и перешёл на Intellij IDEA, используя Processing для обработки пользовательского ввода и вывода графики на экран, как jar-библиотеку. После полутора лет разработки на Java+Processing я выпустил игру, которая хоть и не выделяется сочной графикой, но для меня была целой кладезью уникальных знаний: gradle, мультиплатформенные проекты, паттерны игрового программирования, Box2D, android-разработка, добавление Yandex-рекламы, оптимизация Java-кода, создание редактора уровней, разработка пользовательского интерфейса и прочее. Получив недавно проект на аутсорс - разработать аркадный автомат (электрическая схема + игра для Raspberry Pi 3B по готовым ассетам + управление внешними устройствами) я взялся за задачу с революционной для заказчика задумкой: уйти от разделения задач: игра на Raspberry Pi а управление периферией на Arduino в пользу: всё на Raspberry Pi и на Java. Этот проект дал мне новый багаж ценных знаний: углублённым знания Linux, работа с GPIO, обработка данных с геймпадов, ковыряние в чужом исходном коде. Не добившись должного performance от родного Processing из-за корявой поддержки OpenGl ES на ARM компьютерах под управлением Linux, я перенёс уже готовый проект на
LibGDX, а для работы с GPIO - освоился с библиотекой
Pi4j. На работе удалось (втайне от руководства) сделать приложение для производственников (технологов и операторов станков) - эдакий калькулятор специализированных расчетов. Платформы: desktop и android. Также полулегально мне удалось написать несколько программ для автоматизации конструкторско-технологической деятельности. Это программы на C# (который я не знал и изучать не хотел, хотя проект MonoGame частенько заставляет меня поменять отношение к языку). Поэтому просто писал, как будто это Java. Программы вызывают функции
КОМПАС 3D извне, т.е. пользуются
КОМПАС SDK. Пик успеха - создание софта, который предлагал пользователю выбрать одну из четырех конструкций продукта предприятия (довольно несложное изделия из нержавейки, специального материала и крепежа), после чего в WindowsForm предлагал заполнить ключевые технические характеристики изделия и после нажатия ОК, в автоматическом режиме запускал КОМПАС 3D, создавал на сервере папку, куда копировал соответствующий шаблонный проект, открывал его, исправлял соответствующие параметры на введенные автором. Что то скрывал, что то высвечивал, но на выходе на каждую деталь делал развертку для вырезания ее на лазере, присваивая соответствующее наименование файлу руководствуясь правилами присвоения обозначений (который мной были введены еще ранее). Также в автоматическом режиме закрывал КОМПАС 3D и открывал нужную папку. Это позволило перевезти эту продукцию предприятия целиком в обход конструкторского отдела, да и в обход технологов строго говоря - практически сразу оператору ЧПУ. Для кого-то примитивщина, но для меня приятные воспоминания.
Дальнейшие планы не менее грандиозны:
1) добавить больше уровней к моей игре, код которой я уже люто ненавижу, и выложить её ещё в пару китайских сторов.
2) с братом сделать новую игру в 3D. На этот раз на JMonkeyEngine.
3) окунуться в мир C++, взяв на себя ещё один проект игрового автомата. Для вывода графики на экран хочу взять SFML-library. Думаю начальные знания C++, полученные таким образом, позволят мне расширить сферу задач, которые я могу решать как java-программист.
Не обещаю, что все планы сбудутся, но зато я чувствую, что обладаю серьёзным багажом практических знаний в области компьютеров и IT, не подкрепленных теорией. Какие то вещи я знаю более менее (компьютерная графика, Java, работа с GPIO, android), а в каких-то плаваю, а то и вовсе тону (сети, сервера, шейдеры, cmake). Я вспоминаю, как я взапой прочёл книгу Роберта Найстрома - "Шаблоны игрового программирования" уже после полутора лет разработки моей видеоигры и все советы мне впились в кровь сразу и навсегда, ибо я уже кучу раз наговнокодил при разработке игр и искал источник информации по теме.
Сейчас я хочу, чтобы Вы мне посоветовали книги/видеоуроки, которые бы позволили мне систематизировать все накопленные разрозненные практические знания о компьютерах и программировании в одно комплексное полное знание и заткнуть все пробелы в понимании компьютеров и программирования. Что то такое, что изучают в университетах на IT-специальностях, но расчитанное не на получение высшего специального образования в течении пяти лет, а скорее на всесторонне погружение в отрасль по-быстрому.
Если это важно, то в дальнейшем мне было бы интересно разрабатывать инструменты для разработчиков игр и не только: что то такое, с чем работают люди, чтобы выполнить задание. Это прозвучит странно, но для меня самым интересным и приятным при разработке игр была разработка редакторов уровней, редактора FFD-анимаций и игровых движков, а вовсе не уровней, монстров и лора. Если интересно, могу бросить ссылку на игру. Жду ваших советов и предложений по источникам информации.
Заранее спасибо