Я много лет программировал в качестве консультанта, и я обожаю свою работу, которая включает в себя много объектно-ориентированного анализа и проектирования программных систем с использованием управляемых языков (т.е. разработка программного обеспечения)., Но я хотел бы получить докторскую степень в конце концов, и это беспокоит меня, что я никогда не "получил" теорию компьютерных наук. В университете я только немного делал это на этих курсах, потому что то, как они учились, не работало для меня. Я узнаю, наблюдая за применением понятий, а не за запоминанием.
Пример того, где я преодолел такой барьер раньше - у меня был ужасный первый год. Профессор (который, как я теперь знаю, был едва квалифицированным и некомпетентным учителем) начал с С++, обучая нас процессуальному программированию. Технически я узнал, что такое объект, но только когда я увидел приложение объектно-ориентированного анализа и дизайна (с шаблонами проектирования и другими структурами, такими как связанные списки), что я действительно понял, для чего они предназначены.
Как я буду изучать такие предметы, как компиляторы, теорию языка программирования и анализ алгоритмов? Что было бы хорошим способом начать работу над этим? Например, я хотел бы написать компилятор в конце концов (для удовольствия), но я не знаю, с чего начать. Кто-нибудь был в такой ситуации? Любые предложения для учебных пособий, бесплатные онлайн-лекции или ссылки (что-то вроде w3schools было бы замечательно)?
(Я бы хотел добавить, что просмотр Stackoverflow уже научил меня нагрузкам, но я бы хотел, чтобы это было немного более формально:)
EDIT: Спасибо всем за предложения. Я отметил ответ, который работает для меня лично, но продолжайте отвечать:)