Программирование * на * языке против написания кода на C на Ruby


10

Code Complete утверждает, что вы должны использовать код на языке, а не на коде в нем. Под этим они подразумевают

Не ограничивайте свое мышление только теми понятиями, которые автоматически поддерживаются вашим языком. Лучшие программисты думают о том, что они хотят делать, а затем они оценивают, как достичь своих целей с помощью инструментов программирования, имеющихся в их распоряжении. (глава 34.4)

Разве это не приводит к использованию одного стиля программирования на каждом языке вне зависимости от его сильных и слабых сторон?

Или, чтобы поставить вопрос в более ответственном формате:

Предполагаете ли вы, что вам следует попытаться как можно более аккуратно закодировать свою проблему с учетом особенностей своего языка, или же вы предпочитаете искать самое элегантное решение в целом, даже если это означает, что вам нужно реализовать, возможно, неудобные конструкции, которые не существуют изначально? на своем языке?


5
+1 хороший вопрос. На данный момент я могу писать на Perl на полдюжине разных языков.
Дэн Рэй

@ Дэн Рэй - странно! Я всегда пишу C на Perl.
Джеймс Андерсон

Ответы:


7

Есть еще лучший подход: забудьте о своем жалком фиксированном языке программирования. Закодируйте вашу проблему на языке, который вы только что изобрели, исходя из самих терминов соответствующей проблемной области, закодируйте ее как можно более естественным образом, и только тогда подумайте о реализации этого нового языка программирования или ошеломлении вашего кода до ограничений существующий язык.

Этот подход называется языковым программированием . Существует много способов эффективной реализации специфичных для предметной области языков , и это особенно актуальная тема для сообщества Ruby.


1
Сообщество Haskell также охватывает языки, специфичные для предметной области, и язык программирования Haskell особенно подходит для их реализации.
tdammers

Рассматривается ли написание DSL как специально разработанная система сценариев на основе встроенного языка, такого как Lua или Tkl? Если да, то как вы справляетесь с недостатками, например, Lua?
Бастиб

@Paperflyer, в некоторых случаях имеет смысл реализовывать языки поверх чего-то вроде Lua (особенно если это Metalua), но легче написать подходящий компилятор для большинства типичных DSL.
SK-logic

@tdammers, да, Haskell и Scala - все о DSL. Но я из темной стороны Силы: мой предпочтительный подход - метапрограммирование. Я считаю, что специальные интерпретаторы почти всегда уступают компиляторам.
SK-logic

2
@tdammers, DSL, реализованный поверх функций высокого порядка, фактически является специальным интерпретатором. Вы не можете расширять синтаксис Haskell так же, как, скажем, Lisp. Даже с шаблоном Haskell. Это совершенно другой (и, я бы сказал, ограниченный) способ реализации DSL. Во многих случаях это нормально, но для чего-то действительно сложного это приводит к совершенно нечитаемым реализациям, в то время как многоступенчатое метапрограммирование просто тривиально, независимо от того, насколько большим и чуждым является ваш DSL.
SK-logic

2

Я верю правильному ответу, и тот, который подразумевается в книге:

нужно стараться как можно аккуратно закодировать свою проблему с учетом особенностей своего языка

Программируя на языке, я всегда предполагал, что это использование техник, выходящих за рамки обычного стиля языка, где это принесет пользу . Это ключевое отличие от написания в одном стиле на всех языках.

Например, изучение Haskell значительно улучшило мои навыки использования функций более высокого порядка. Теперь, когда программирую на c #, я использую различные IEnumerableметоды, такие как Selectчаще, так как использование этих методов приводит к более чистому коду, чем запись для циклов. Я также склонен использовать функции передачи и использования (то есть Func<int, int>) чаще из-за моего опыта в Haskell. Мое использование наследования упало из-за этого, и в большинстве случаев результатом является более простой код.

Тем не менее, я не использую такие понятия, как монады или алгебраические типы данных в c #. Это потому, что ни один из них не может быть четко представлен в c # и приведет к небольшой выгоде в обмен на большую неясность.

Поэтому я использую инструменты языка, чтобы использовать те навыки, которые у меня есть, для наилучшего эффекта. Я считаю, что это программирование на языке.


0

Предполагаете ли вы, что вам следует попытаться как можно более аккуратно закодировать свою проблему с учетом особенностей своего языка, или же вы предпочитаете искать самое элегантное решение в целом, даже если это означает, что вам нужно реализовать, возможно, неудобные конструкции, которые не существуют изначально? на своем языке?

Дело в том , что хорошие программисты не имеют на языке. Цитата из книги говорит о «инструментах программирования в их распоряжении» - это означает, что если вы знаете Perl и Java, то, возможно, вам следует использовать Perl для этой быстрой манипуляции со строками. Языки программирования - это не ограничивающие нас рамки, а инструменты, которые мы используем для решения проблем. Это (IMO) то, что код завершения. Не пишите код в окне языка программирования / среды, поместите лучшее решение в лучший язык программирования / среду для вас, вашей проблемы и вашего решения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.