Есть ли хорошие ресурсы для практического использования теории программирования в реальном мире?
Кто-нибудь может рекомендовать какой-либо хороший материал, который призван обеспечить реальную перспективу в теории программирования? Я говорю с моей точки зрения, поскольку профессиональный инженер-программист долгое время сбрасывает ex-cs student. Когда я говорю "реальный мир", я имею в виду такие вещи, как "Почему я должен использовать интерфейсы? Разве это не противоречит принципам DRY? Это просто лишний мета-код". (что было последствием другого вопроса, который возник сегодня). Похоже, что профессор этого студенческого класса не дал очевидной бизнес-причины использовать их как "вы используете это, поэтому основная часть вашего приложения не зависит от при определенной реализации один или несколько ваших компонентов - например, хранилище данных, которое может быть заменено или обновлено, не затрагивая остальную часть вашего приложения или плагин на внешнем устройстве, которое может быть заменено, когда появляется лучший."
Я заметил тенденцию к тому, что ученики достигли ключевых точек своих курсов CS и начали задавать вопросы по различным сайтам Q & A, почему они должны использовать определенную парадигму, они понимают, что и как, но они неведомо, почему это действительно полезно и переживает остаток их курса, думая "хорошо, ну и что?". Слишком часто занятия очень академичны и не имеют реального контекста в мире. Будучи там, я бы хотел, чтобы у меня был такой ресурс, как StackOverflow, когда я учился в школе.
Я надеюсь, что этот вопрос предоставит студентам список полезных материалов для чтения, которые помогут обеспечить контекст реального мира для различных парадигм программирования и моделей, которые они изучают в классе [или иным образом], и помогает им понять, когда и почему некоторые модели следует искать в реальных ситуациях.
Ответы
Ответ 2
Pragmatic Programmers являются прагматичными, но они хорошо разбираются в теории CS, и они знают, когда и как их применять.
Ответ 3
Хорошо, говоря о себе как студенте CS:)
Я нахожу документы Страуструпа, очень приятные и практичные, не вдаваясь в бесполезные детали. Возьмем, к примеру, свою статью о объектно-ориентированное программирование, одно из лучших показаний, которые я когда-либо читал. Это идет от самой базовой идеи программирования, до модульного программирования, проходящего через идею ООП. Он показывает, почему нам нужны эти парадигмы программирования в примерах коротких фрагментов. Это парадигмы, которые он проводит последовательно:
- Скрытие данных процедурного программирования
- Абстракция данных Объектно-ориентированный
- Программирование (Большая часть статьи посвящена ООП)
- Параметрированные типы
Еще одно фантастическое чтение: Шестнадцать способов стекать кошку. A 16 - другой способ записи стека в С++ (на самом деле язык не имеет значения). Возьмите их и сравните преимущества/недостатки большинства парадигм, которые я знаю/слышал.
Ответ 4
К сожалению, неопытные программисты часто не понимают, что у них есть проблема, пока они не займутся им самим. Я считаю, что лучший способ увидеть проблемы в реальном мире - это то, что у студентов есть проблемы с "реальным миром", которые, вероятно, лучше всего встречаются вне класса, которые обучают руководителей CS. (Я думаю, SoftEng будет преподаваться немного по-другому в этом отношении)
Code Complete + Head First Design Patterns - это две книги, которые я бы рекомендовал каждому читателю до окончания обучения.
О, и у них должен быть хотя бы один законченный (или в основном законченный) внецерковный проект. Веб-сайт, игра, утилита-приложение.
Ответ 5
Код завершен. http://cc2e.com/
Ответ 6
Я заставлю мяч прокатиться с помощью:
- Дизайн шаблонов, "четыре мудреца".
- Code Complete, неплохо справляется с реальными проблемами.
Как правило, эти шаблоны разработаны из-за проблем сохранения и разработки большого кода. Программисты всегда привязаны к времени, и никто из них не решил, что нам нужно больше пуха. Большинство программистов не будут работать над одним и тем же кодом на протяжении всего жизненного цикла программного обеспечения, поэтому программисты должны понимать код друг друга без необходимости читать пару миллионов строк кода.
Аналогия реального мира:
Вы не делаете здание без суставов. В противном случае он трескается и ломается, когда он поднимается с холодом/теплом. Интерфейсы - это ваши суставы между двумя, возможно, жесткими объектами.
Вы делаете его модульным, чтобы ремонт был возможен.
Вы не делаете все это одним и тем же материалом. (водопровод не изготовлен из дерева)
Вы проектируете его так, чтобы несколько подрядчиков могли работать над зданием одновременно.
Человек, который использует здание, просто хочет его использовать и не заботится о том, как
вы его построили.
Лицо (лица), которые осматривают здание, - это те же люди, которые строят здание.
Ответ 7
Один из самых популярных вопросов на этом сайте: Какая самая важная книга, которую должен прочитать каждый программист?
Ответ 8
Дядя Боб Серия "Ученик" о мастерстве программного обеспечения. Имеет хороший стиль повествования, в котором я думаю, что ученики могут относиться к протаганисту, поскольку он/она начинается с низкого ученика.