Какой список литературы для структурированного изучения программирования?

Знаю Delphi, PHP, немного ASP, HTML, CSS, JS.
Но возник вопрос... как научиться программировать?
Не шаблонно вспоминать что и где применяется, используя CMS, Фреймворки и кучу плагинов.
А именно с точки зрения правильного когда, с пониманием парадигм и паттернов, с полным осознанием ООП и фишек типа синглтон, плейсхолдер и всяческие интерполяции. Что бы точно понимать архитектуру и возможности решения той или иной задачи.

Хочу делать игры на Unity или UE4. Пока склоняюсь к первому движку, но окончательно не решил. Думаю понимая теорию и изучая C# можно будет легко перейти на C++ и наоборот. Так что тут особая разница не чувствуется.
Если есть возможность и там и там использовать Java, то согласен и на него.

Решил начать все с нуля, так сказать "наплывом", освежить прошлые знания и приобрести новые. Но не могу составить систематизированный перечень литературы.
Что бы было понятней, я открыл статью в Вики "парадигмы программирования", и был несколько озадачен, когда начал идти по списку составляющих, где императивное программирование сразу же описывалось как противоположное декларативному. Системности в этом не увидел, потому как, условно, декларативное программирование я еще не знаю, т.е. не дошел до него по статье. Грубо говоря нельзя объяснять человеку что-то, терминами которые он не знает.

Начать с нуля, это с самых основ, но с упором на то, что бы не просто взять общие знания, которые дают в школах и универах, а именно подготовить себя как профессионала. Начиная например с понятий алгоритма, принципов работы автоматов (Машины Тьюринга), принципов работы памяти. Насколько надо далеко уйти в начало, я не знаю, и оставлю это на ваше усмотрение.

Единственная оговорка, чтение английского дается мне с большим трудом. Небольшие короткие тексты, вроде инструкции к телефону, или описание той или иной функции для PHP в мануале я читаю без словаря, но книгу или статью так просто вряд ли осилю. Потому, список литературы хотелось бы на русском языке.

Разумеется список хочется получить систематизированным, и в прямой последовательности. Сначала читаем эту книгу, затем эту, потом эту, а на этом этапе определяем конкретный язык для изучения и читаем эту книгу.
Допустимы отступления в виде "что бы лучше понимать о чем речь на этом этапе, можно прочитать еще вот эту книгу", с условием что не забегается вперед по этапам.
  • Вопрос задан
  • 5779 просмотров
Пригласить эксперта
Ответы на вопрос 5
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Если бы имел машину времени, чтоб вбить "Я-в-прошлом" то что надо читать, то это было бы так:
1. Таненбаум про его Операционные системы
2. Таненбаум про аппаратное обеспечение
3. Язык программирования Python по книге Лутза и при этом чтение "Structure And Interpretation Of Computer Program".
4. Только после этого приступил бы к чтению Керниган, Ричи "Язык С"
5. Попытался бы влиться в какой-нибудь OpenSource проект

Далеее уже следуют попытки понять к чему душа лежит, толи вебу, толи linux kernel module, толи еще что.
В течении этих пункто НЕПРЕРЫВНО улучшать английский. Большинство серьезной литературы о новых технологиях появлятся сначала на английском.
Ответ написан
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
Я думаю надо начать с базовых вещей на которых базируется программирование:
  1. Дискретная математика базовые понятия
  2. Теория графов
  3. Теория конечных автоматов
  4. Теория кодирования
  5. Баллистика
  6. Теория надёжности
  7. Теория массового обслуживания

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

Ну и само базовое программирование:
Турбо Ассемблер Тома Свана - для понимания как всё работает на самом деле (в практическую часть книги можно( и наверное не нужно) сильно не лезть, теоретическая часть достаточно хороша)
"Язык С" Керниган, Ричи - для понимания на каких базовых структурах и типах строятся современные ЯП и чего им это стоит.

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

По алгоритмам: "алгоритмы построение и анализ" Кормена. Кнута мне кажется никто не осилил.
Ответ написан
globuzer
@globuzer
gezgrouvingus progreszive ombusgrander greyderzux
Когда учился в ВУЗе, задавался вопросом, почему нас учат именно так. Общался с преподавателями, смотрел программы обучения что дают в других ВУЗах, что давали раньше в СССР, когда учились студентами наши же преподаватели. Все же сделал такой вывод: программирование следовало начинать учить с паскаля, и на основе этого языка применять все знания информатики, булевой алгебры, алгоритмов, дискретной математики, анализа, теории вероятностей, которые в свою очередь должны быть уже изучены до программирования естественно. Всегда был холиварным вопрос - с какого языка учить программирования - СИ или ПАСКАЛЬ. Всегда были мнения и за и против того и другого.
Судя по вашему вопросу, раз вы уже знакомы с Delphi, и тем более с PHP, то никакого труда вам не составить изучать Си. Раз хотите себя развивать для геймдева, то Си хороший выбор. Начните просто с Си, повторив все основы математики и алгоритмов. Попрактиковавшись в программировании, познав структуры программ и алгоритмы, можете пересаживаться на ООП, а там уж как раз и C++, C#, может быть и Java. Но для ООП-языков нужно хорошо изучить базу и концепцию ООП, почитать книги таких авторов как Буч, Бадд, Шлеер, Меллор... Ну и для прокачки именно в гейм разработке изучайте все побочные технологии и науки, которые могут использоваться вами: операционные системы, сети, графика, моделирование, визуализация, математические методы и прочее.
Для практики можете в самом начале своего пути развития придумать идею, к примеру реализовать такую то игрушку, пусть даже простой тетрис или крестики-нолики. Ну и по мере развития прокачивайтесь и модифицируйте ее, совершенствуйте, придумывайте стратегии, ботов, интерфейс, фантазируйте над концепцией. Перед вами будут постоянно возникать различные вопросы и трудности - ответы на них уже гуглите, ищите в книгах, применяйте способы решения, тестируйте. Тем самым как раз практически и научитесь. Главное чтобы было большое желание, ну и проект был интересен для вас. А потом постепенно можно уже подключиться к какому-нибудь опенсоурс-проекту или пойти работать на малую ставку в игровую студию, даже стажером и перенимать опыт от профи-разработчиков, общаться с ними, учиться, опять учиться. Только тогда и станете профессионалом.
Ответ написан
Комментировать
studenter
@studenter
когда я вырасту я стану програмистым!
посмотри список литературы вузовской по специальности инженер-программист
Ответ написан
@BIOS999
Интересно "репетиторство" на "филантропичных" условиях? Свяжись со мной
Как вязаться с пользователем Хабрахабр?
Ответ написан
Ваш ответ на вопрос

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

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