Code Complete утверждает, что вы должны использовать код на языке, а не на коде в нем. Под этим они подразумевают
Не ограничивайте свое мышление только теми понятиями, которые автоматически поддерживаются вашим языком. Лучшие программисты думают о том, что они хотят делать, а затем они оценивают, как достичь своих целей с помощью инструментов программирования, имеющихся в их распоряжении. (глава 34.4)
Разве это не приводит к использованию одного стиля программирования на каждом языке вне зависимости от его сильных и слабых сторон?
Или, чтобы поставить вопрос в более ответственном формате:
Предполагаете ли вы, что вам следует попытаться как можно более аккуратно закодировать свою проблему с учетом особенностей своего языка, или же вы предпочитаете искать самое элегантное решение в целом, даже если это означает, что вам нужно реализовать, возможно, неудобные конструкции, которые не существуют изначально? на своем языке?
Ответы:
Есть еще лучший подход: забудьте о своем жалком фиксированном языке программирования. Закодируйте вашу проблему на языке, который вы только что изобрели, исходя из самих терминов соответствующей проблемной области, закодируйте ее как можно более естественным образом, и только тогда подумайте о реализации этого нового языка программирования или ошеломлении вашего кода до ограничений существующий язык.
Этот подход называется языковым программированием . Существует много способов эффективной реализации специфичных для предметной области языков , и это особенно актуальная тема для сообщества Ruby.
источник
Я верю правильному ответу, и тот, который подразумевается в книге:
Программируя на языке, я всегда предполагал, что это использование техник, выходящих за рамки обычного стиля языка, где это принесет пользу . Это ключевое отличие от написания в одном стиле на всех языках.
Например, изучение Haskell значительно улучшило мои навыки использования функций более высокого порядка. Теперь, когда программирую на c #, я использую различные
IEnumerable
методы, такие какSelect
чаще, так как использование этих методов приводит к более чистому коду, чем запись для циклов. Я также склонен использовать функции передачи и использования (то естьFunc<int, int>
) чаще из-за моего опыта в Haskell. Мое использование наследования упало из-за этого, и в большинстве случаев результатом является более простой код.Тем не менее, я не использую такие понятия, как монады или алгебраические типы данных в c #. Это потому, что ни один из них не может быть четко представлен в c # и приведет к небольшой выгоде в обмен на большую неясность.
Поэтому я использую инструменты языка, чтобы использовать те навыки, которые у меня есть, для наилучшего эффекта. Я считаю, что это программирование на языке.
источник
Дело в том , что хорошие программисты не имеют на языке. Цитата из книги говорит о «инструментах программирования в их распоряжении» - это означает, что если вы знаете Perl и Java, то, возможно, вам следует использовать Perl для этой быстрой манипуляции со строками. Языки программирования - это не ограничивающие нас рамки, а инструменты, которые мы используем для решения проблем. Это (IMO) то, что код завершения. Не пишите код в окне языка программирования / среды, поместите лучшее решение в лучший язык программирования / среду для вас, вашей проблемы и вашего решения.
источник