Какой список литературы для структурированного изучения программирования?
Знаю Delphi, PHP, немного ASP, HTML, CSS, JS.
Но возник вопрос... как научиться программировать?
Не шаблонно вспоминать что и где применяется, используя CMS, Фреймворки и кучу плагинов.
А именно с точки зрения правильного когда, с пониманием парадигм и паттернов, с полным осознанием ООП и фишек типа синглтон, плейсхолдер и всяческие интерполяции. Что бы точно понимать архитектуру и возможности решения той или иной задачи.
Хочу делать игры на Unity или UE4. Пока склоняюсь к первому движку, но окончательно не решил. Думаю понимая теорию и изучая C# можно будет легко перейти на C++ и наоборот. Так что тут особая разница не чувствуется.
Если есть возможность и там и там использовать Java, то согласен и на него.
Решил начать все с нуля, так сказать "наплывом", освежить прошлые знания и приобрести новые. Но не могу составить систематизированный перечень литературы.
Что бы было понятней, я открыл статью в Вики "парадигмы программирования", и был несколько озадачен, когда начал идти по списку составляющих, где императивное программирование сразу же описывалось как противоположное декларативному. Системности в этом не увидел, потому как, условно, декларативное программирование я еще не знаю, т.е. не дошел до него по статье. Грубо говоря нельзя объяснять человеку что-то, терминами которые он не знает.
Начать с нуля, это с самых основ, но с упором на то, что бы не просто взять общие знания, которые дают в школах и универах, а именно подготовить себя как профессионала. Начиная например с понятий алгоритма, принципов работы автоматов (Машины Тьюринга), принципов работы памяти. Насколько надо далеко уйти в начало, я не знаю, и оставлю это на ваше усмотрение.
Единственная оговорка, чтение английского дается мне с большим трудом. Небольшие короткие тексты, вроде инструкции к телефону, или описание той или иной функции для PHP в мануале я читаю без словаря, но книгу или статью так просто вряд ли осилю. Потому, список литературы хотелось бы на русском языке.
Разумеется список хочется получить систематизированным, и в прямой последовательности. Сначала читаем эту книгу, затем эту, потом эту, а на этом этапе определяем конкретный язык для изучения и читаем эту книгу.
Допустимы отступления в виде "что бы лучше понимать о чем речь на этом этапе, можно прочитать еще вот эту книгу", с условием что не забегается вперед по этапам.
> список хочется получить систематизированным...
Все это глупости. Нет серебряной пули. Невозможно списки составить универсальные. Вы просто берете и делаете, когда информации недостаточно - ищете ее. А все эти дурацкие списки из десятков книг, у вас просто времени не хватит на все это.
Второе - без английского никуда. Старайтесь читать статьи в оригинале.
Третье - цель должна быть конкретной. Хотите делать игры на Unity - ставьте Unity и делайте игру, по примерам, криво, неважно как. Потом сделаете лучше. А голая теория убивает энтузиазм. Ее нужно осваивать по мере необходимости.
Просто казалось, что программисты, которые разрабатывают свои стандарты, спецификации, классы, архитектуру программ, базы данных, как никто другой должен понимать необходимость систематизированного формирования знаний.
Если бы имел машину времени, чтоб вбить "Я-в-прошлом" то что надо читать, то это было бы так:
1. Таненбаум про его Операционные системы
2. Таненбаум про аппаратное обеспечение
3. Язык программирования Python по книге Лутза и при этом чтение "Structure And Interpretation Of Computer Program".
4. Только после этого приступил бы к чтению Керниган, Ричи "Язык С"
5. Попытался бы влиться в какой-нибудь OpenSource проект
Далеее уже следуют попытки понять к чему душа лежит, толи вебу, толи linux kernel module, толи еще что.
В течении этих пункто НЕПРЕРЫВНО улучшать английский. Большинство серьезной литературы о новых технологиях появлятся сначала на английском.
Ну данный список и призван быть машиной времени, что бы откатиться назад и начать заново, за годы гулянок в универе. Думаю второй раз это все будет воспринимать несколько легче. Только я у вас не вижу ничего про алгоритмы например. Можно ли начинать учиться программировать не понимая их?
KTG: Вы почитайте SICP ога? Вы ее хоть раз откройте. Нормального вменяемого программера у котрого руки в правильном месте от этой книги не оторвать! Даже опытные, с мозгами и то находят там море полезного! Эта книга развивает "программерскую смекалку", что толку-то зубрить алгоритмы если мозги не по-программерски пашут?
alexxandr: Человека не способного поставить Linux вообще нужно садить за DOS-систему и интернет выделять только по диал-ап модему. Не важно где ты сидишь на Mac, windows или еще где, программер ОБЯЗАН иметь опыт решать проблемы чуть ли не навсем что программируется! А не хавать мозг "Я этим не занимался раньше"
Дмитрий: вообще это не Ваше дело, кого куда садить, и что выделять, это лузеры не решают.
И что кто кому обязан тоже не Ваше дело ;)
Я, конечно, понимаю, что установка убунты, особенно успешная, съедает мозг, но надо же и меру знать :)
А вообще я с Вами согласен.
alexxandr: Это мое! Потому что подобные люди могут быть моими коллегами. Они могут обучить других своим в лучшем случае поверхностным знаниям, а в худшем неверным и что потом? А потом такой вот человек придет к Вам в офис и если у Вас хватати на собеседовании его отсеять, Вам повезло. А если Вы не выспались и не отсеяли? ;)
Дмитрий: SICP поищу, если есть перевод, то попробую прочитать, пускай да же до формирования основного списка.
Знание операционных систем думаю все же нужно, по крайне мере понимания их особенностей, как под них писать. Я с удовольствием увижу в списке литературы книгу по сетям и протоколам.
Дмитрий: Позвольте поинтересоваться, а почему третьим пунктом советуете Python и Лутца?
Разве "Программирование: принципы и практика с использованием C++" Страуструпа, будет не лучше?
P.S. Вопрос не праздный, выбираю по которой дальше учиться (сам я JS кодер пока-что )).
Сергей М: Ну сначала человек должен понимать и кожей ощущать, что вообще может вычислительный девайс. Для этого нужны п.1 и п.2. Далее человек без опыта должен понимать кожей основные современные программерские конструкции : циклы, условия, исключения и др. При этом надо соблюсти компромисс между качеством знаний и порогом вхождения. Python это позволяет и позволяет за достаточно разумное время залить в голову достаточный для начинающего программиста набор знаний позволяющий решать БОЕВЫЕ задачи. Программист учится только когда ВБИВАЕТ код и не надо ВБИВАНИЕ и "набор шишек" откладывать "на потом". Чем быстрее начнет наступать на грабли тем лучше и чем чаще наступит тем качественнее будет понимание. Лутз достаточно качественно доносит знание о программировании и при этом не в ущерб качеству
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.