Задать вопрос

Какую литературу следует почитать, чтобы систематизировать все практические знания?

Я начал погружаться в 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-анимаций и игровых движков, а вовсе не уровней, монстров и лора. Если интересно, могу бросить ссылку на игру. Жду ваших советов и предложений по источникам информации.
Заранее спасибо
  • Вопрос задан
  • 851 просмотр
Подписаться 6 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 5
Вы очень интересно описали свой путь, и мало кто проходит самостоятельно так далеко. Вопрос про систематизацию знаний - сделайте её сами, найдите в сети учебные программы IT-курсов по интересующим вас направлениям, а также вузовские учебные планы (это такие документы, где прописаны предметы, изучаемые в ходе получения образования) и содержание каждого заинтересовавшего предмета (в сети полно рабочих программ и прочих методичек), составьте себе полный список того, что можно изучить в интересующей сфере, систематизируйте эту информацию (например, по рубрикам), сопоставьте по каждой рубрике свой уровень знаний и пробелы с тем, что там имеется, определите, насколько именно эти знания необходимы именно вам и именно сейчас (может оказаться, что какие-то вопросы, в которых вы "плаваете" или даже "тонете", вам вовсе не нужны - например, математически преобразования в 3d-пространстве просчитываются на основе действий с матрицами, но зачем вам изучать линейную алгебру, если вы всего-то моделируете 3d-объекты и не занимаетесь написанием своего игрового движка?). Проработав таким вот нехитрым образом все рубрики, определите круг вопросов, которые необходимо изучить, и степень важности и срочности каждого из них (также придётся учитывать порядок изучения, например, вы всё же решитесь писать свой 3d-движок, тогда лучше начинать с матриц и операций над ними, а не с более высокоуровневых вопросов) и составьте свою индивидуальную программу обучения, и уже под каждую рубрику / тему / вопрос подбирайте литературу. В принципе, это - примерно то, чем вы занимались до сих пор самостоятельно, но в более систематизированном виде.
"Втыкание по-быстрому" в этом случае ни к чему хорошему не приведёт, понимание должно прийти изнутри, после всестороннего изучения того, что интересно и чем хочется заниматься. Это гораздо интереснее и полезнее вузовских программ.
Понимаю, что на поставленный вопрос напрямую не ответил (это немного из разряда "в чём смысл жизни, вселенной и всего", и ответ, как известно, "42"), поскольку ваш вопрос - из числа тех, ответы на которые приходится искать самостоятельно. Удачи вам в этом нелёгком деле!
Ответ написан
nava2002
@nava2002
Инженер
Учитывая размах планов, я думаю более рациональным будет найти подходящий вуз и проучиться по специальности получив комплексные знания в этой области.
Главный цель - комплексность.
Я также расширяю кругозор (не так радикально конечно) но как инженер системотехик могу сказать что во первых многие "Ютуб" материалы носят поверхностный характер, а некоторые просто вводят слушателя в заблуждение.
Не имея знаний в этой области вы рискуете сильно усложнить свою задачу получая неточную информацию.
Вот неплохой телеграмм канал с достаточно качественным подбором литературы по разным темам. То есть если скажем книги по С++, то хорошие авторы с хорошим переводом.
Ответ написан
@dmshar
Вдохновленный вашим вопросом я тут порылся у себя в старых закладках. Казалось бы 2011 год.
https://sharpc.livejournal.com/67583.html
По мнению многих посетителей форума- это доисторическая эра. А вот и нет. Просмотрел список. Поменялись некоторые конкретные моменты, но вот глобально - все то-же самое. Потому как это и есть основы и попытка их систематизация, ведь систематизация - это фундамент, который стоит веками, но дает возможность в случае необходимости разобраться в чем нужно быстро и просто. Посмотрите с этой точки зрения, а уж по какому источнику осваивать каждый пункт - вопрос вторичный. И не пытайтесь охватить все. Любому человеку надо знать немного о многом и много о немногом. Поэтому именно для систематизации - знать хоть немного из каждого пункта - весьма полезно.( Хотя скажу честно, по себе - там есть несколько пунктов, которые даже после многих десятилетий в отрасли я либо в принципе не знаю (химия), либо знаю очень поверхностно (физика), либо вообще избегаю даже читать что-то (квантовые вычисления)).
Ну и вот несколько еще подборок на тему фундаментализации знаний, может пригодится:
https://tproger.ru/curriculum/computer-science-ste...
https://proglib.io/p/cs-learning
Ответ написан
@mletov
MGDSStudio
Учился на полуайтишной специальности.

На моей памяти преподаватели позиционировали как основу основ всея IT следующие вещи:

П1: Понимание как устроены системы счисления. Умение переводить из одной в другую. В первую очередь, конечно, двоичная)
П2: Модель OSI. Сейчас, правда, часто пишут, что она морально устарела, но тот препод прям фанат был, требовал ее жестко и со всех, до сих пор помню.
П3: Считал основой основ всего Двоичные семафоры Дейкстры. Независимо от вытянутого билета всегда дополнительно спрашивал про них.

Ну может еще булева алгебра. Все-таки все эти "and", "or", "xor" на ней базируются.

Добавлю от себя:

- На 1 курсе всех учат рисовать блок-схемы

- неотъемлемые составляющие любого языка программирования: переменные, циклы, массивы, классы, объекты. Базовые представления об ООП.

- Слышал такой вариант: если развинтить компьютер, то хороший айтишник должен уметь назвать любую деталь и сказать для чего она служит. Разумеется, не до последнего конденсатора и микросхемы, но, как минимум, отличать процессор от оперативки и кулер от винчестера.

- Основы баз данных и 3-я нормальная форма. Уметь создать хотя бы простые таблички, проставить связи между ними и уметь написать простой SQL запрос.

- Еще довольно часто попадается упоминание, что в must have входит умение оценивать сложность алгоритма, всякие O(2) и т д. Для написания серьезных вещей вероятно так и есть.

- Сетевые протоколы, но в первую очередь ,конечно, TCP/IP. И вообще как работает интернет, DNS и т д.
Это пересекается с выше упомянутой моделью OSI

Книг не посоветую. Все гуглится. Лучше ищите не книги, а составьте список вопросов для изучения, которые must have для любого айтишника. И ищите ответы на них в интернете.
Ответ написан
@MasterGod
Смотри :

1 Книга "Структуры данных и алгоритмы в Java" автора Роберта Лафоре - это отличный источник для изучения основных структур данных и алгоритмов, которые являются фундаментальными знаниями в программировании.

2. Книга "Операционные системы: проектирование и реализация" авторов Эндрю Таненбаума и Альберта Вудхалла - она поможет Вам понять основы операционных систем и их взаимодействие с аппаратным обеспечением.

3. Книга "Компьютерные сети. Принципы, технологии, протоколы" авторов Джеймса Куровски, Кита Росса и Джеймса Ф. Курша - она предоставит Вам основные знания о компьютерных сетях и протоколах.

4. Курс "Введение в архитектуру компьютера" на платформе Coursera - этот курс поможет Вам понять основы архитектуры компьютера и взаимодействие между аппаратным и программным обеспечением.

5. Курс "Алгоритмы и структуры данных" на платформе Coursera - это обширный курс, который покрывает различные алгоритмы и структуры данных, идеально подходит для систематизации знаний в этой области.

6. Книга "Design Patterns: Elements of Reusable Object-Oriented Software" авторов Эриха Гамма, Ричарда Хелма, Ральфа Джонсона и Джона Влиссидеса - это классическое руководство по шаблонам проектирования, которое поможет Вам развить навыки проектирования гибких и поддерживаемых систем.


По играм :
тематике:

1. "Game Programming Patterns" автора Роберта Найстрома - данная книга охватывает различные шаблоны и подходы, используемые при разработке игр.

2. "Unity in Action: Multiplatform Game Development in C#" автора Джошуа Стрейнджа - данная книга рассматривает разработку игр с использованием популярного игрового движка Unity и языка программирования C#.

3. "Game Engine Architecture" автора Джейсона Грегори - данная книга предоставляет обширный обзор архитектуры игровых движков и основных принципов их разработки.

4. "Level Up! The Guide to Great Video Game Design" автора Скотта Роджерса - данная книга фокусируется на проектировании уровней в играх и предоставляет практические советы и примеры.

5. "The Art of Game Design: A Book of Lenses" автора Джесса Шела - данная книга обращается к аспектам дизайна игр и предлагает различные "линзы" для анализа и улучшения игрового опыта.

Кросе того есть много онлайн ресурсов и бесплатных видео уроков по этой тематике.
Видео уроки надо искать на ютуб., там их очень много и всё в открытом доступе, бесплатно Только определиться с тем что тебе нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы