Ответ 1
Стремитесь к низкому сцеплению, высокой сплоченности.
(я украл это изображение с сайта, связанного выше)
По какой-то причине я замечаю, что в конечном итоге я использую много конечных автоматов на работе. В частности, когда я реализую собственный протокол TCP/serial, они очень полезны и дают очень надежный результат (на мой взгляд).
Мои дни в классах CS давно позади меня. Таким образом, мое воспоминание о том, что я узнал, нечеткое. Мне было любопытно, есть ли другие концепции, которые используют люди, о которых я забыл.
Нет "правильного" ответа. Проголосуйте за ответы, содержащие концепцию, которую вы используете больше всего. Мы просто закончим с самыми используемыми концепциями сверху. Для меня это будет список вещей для изучения.
-Роберт
Стремитесь к низкому сцеплению, высокой сплоченности.
(я украл это изображение с сайта, связанного выше)
Держите его простым. Если возможно, сделайте это проще.
Модель контроллера модели Model - это тот, который я использую больше, чем любой другой.
Копирование и изменение существующего кода.
Разрушение проблемы на более мелкие проблемы, я думаю, это то, что я часто делаю, даже если не думаю об этом:
Тем не менее, может быть, это не действительно "концепция"... Событие, если я помню некоторые уроки алгоритма, где нас учили "разделять, чтобы побеждать" ^^
Если вы хотите что-то более конкретное, я бы пошел с:
Объектно-ориентированное программирование и структура данных
Не повторяйте себя.
Сложность.
Сложность времени/пространства.
Concurrency и параллельных вычислений. Я не касался его в течение многих лет, но он становится более актуальным с каждым годом (и каждый сердечник рассчитывает удвоение).
Синглтон, шаблоны и шаблоны стратегий.
также:
ЯГНИ - Вам это не понадобится
KISS - Держите его простым, глупым
Абстрактные
Ахо и Ульман пишут во вступлении к Основы компьютерной науки
Но в принципе, информатика - это наука абстракции - создание правильной модели для размышления о проблеме и разработка подходящих механизированных методов для ее решения.
Концепция "Google";)
Оценка сложности пространства/времени и использование соответствующих структур данных для получения более простого и быстрого кода. Моделирование некоторых проблем, поскольку графики также пригодились время от времени.
Избегая преждевременных оптимизаций, как сказал г-н Кнут:
"Мы должны забыть о небольшой эффективности, скажем, около 97% времени: преждевременная оптимизация - корень всего зла". (из Википедии)
Анализ требований и реляционные базы данных.
Хранение инкапсуляции или информации
"Отладочный код в два раза сложнее, чем записывать его. Поэтому, если вы пишете код так умно, как вы можете, вы по определению недостаточно умны, чтобы его отлаживать".
"Любая проблема в информатике может быть решен другим слоем косвенности". - Дэвид Уилер, начальник программист для проекта EDSAC в начало 1950-х годов
При хорошем применении это приводит к разумному обобщению, как показано в примерах, таких как абстрактные типы данных, классы повторного использования с виртуальными методами и т.д.
При плохом применении он приводит к чрезмерно косвенным реализациям с большим количеством служебных ресурсов во время выполнения из-за чрезмерного обобщения, например. архитектуры Intel 432.
Мусор, мусор.
Объектно-ориентированное программирование
Это не CS-специфический, а просто помните, что достижение простых или сжатых результатов - это и хорошие цели. Если вы можете создать что-то простое и лаконичное, то вы, вероятно, будете производить высококачественную работу.
Понимание и использование структур данных и алгоритмов, предоставляемых для меня языковыми библиотеками (либо со стандартными, либо с третьими сторонами, такими как Boost). Не изобретайте велосипед и узнайте, какие колеса там лучше, чем ваши собственные.
Решение проблем...
Связь и сцепление.
Это, по сути, парадигма "разделяй и властвуй" в основе всего программного обеспечения.
Вы ищете ортогональные понятия и ортогональные программные объекты, те, которые имеют свободную связь и высокую степень сцепления.
Используется gosub в Basic? Вы используете C & C.
Это университетские курсы/концепции, которые я нашел наиболее полезными для своей профессиональной карьеры
Угадайте, все они... Я не упоминал о конкретных технологиях здесь, а только о концепциях.
Чем дольше возникает ошибка в программном обеспечении, тем более дорогостоящим является обнаружение и исправление тем меньше вероятность правильного исправления.