Есть ли язык, который поощряет хорошие практики кодирования? - PullRequest
14 голосов
/ 16 декабря 2009

Хотя я люблю PHP, я обнаружил, что его самая большая слабость в том, что он позволяет и даже почти поощряет программистов писать плохой код.

Есть ли язык, который поощряет хорошие практики программирования? Или, более конкретно, веб-язык, который поощряет передовую практику.

Мне интересны языки, у которых либо заявлена ​​цель поощрения хорошего программирования, либо они разработаны таким образом, чтобы поощрять хорошее программирование.

Ответы [ 25 ]

21 голосов
/ 16 декабря 2009

Я думаю, Python имеет несколько идей для хорошего кодирования. По крайней мере, программы вынуждены выглядеть одинаково.

Но не забывайте, что Ларри Уолл сказал:

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

Вам лучше подумать о создании соглашения о стиле кодирования.

15 голосов
/ 16 декабря 2009

Это слишком субъективно. Если под «хорошими практиками программирования» вы подразумеваете последовательные отступы, то, конечно, Python работает для этого. Но отступы - это то, что большинство программистов узнают в первый раз, когда пишут программу. Я думаю, что хорошее программирование выходит далеко за рамки этого.

С годами представление о том, что такое хорошая практика программирования, изменилось. Python, кроме вещей с отступами, не особо выделяется ни в одной категории. Это не самый объектно-ориентированный язык, и при этом он (пока) не предлагает полную поддержку функционального программирования.

Вот некоторые возможные определения хороших методов программирования и репрезентативный язык для каждого:

- Чистый объектно-ориентированный дизайн: SmallTalk был первым настоящим ОО-языком, а в некоторых отношениях все еще самым чистым. Буквально все это класс.

- Прагматичный объектно-ориентированный дизайн: Java, для всех ее недоброжелателей, был огромным шагом вперед с точки зрения поощрения хороших методов программирования. Он строго типизирован, почти все являются классами, и в определенной степени он требует самодокументируемого проектирования классов (путем явного перечисления сгенерированных исключений, делая функции закрытыми по умолчанию и т. Д.). Java применяет дисциплины, полезные для больших групп разработчиков. .

- Функциональное программирование Хаскель часто называют самым функциональным языком. Назначение вербено, и побочные эффекты невозможны, если ваша функция явно не запрашивает их.

- надежный параллелизм Erlang (еще один язык, который поощряет парадигму функционального программирования) известен своей надежностью в параллельной среде. Никогда не изучая и не используя его, я не могу лично за это ручаться, но его послужной список кажется впечатляющим.

- Итеративная разработка Есть тонна евангелистов Лиспа там. Они не могут все ошибаться, не так ли?

- Quick 'n' dirty Иногда вам просто нужно сделать скрипт быстро. Спасибо, Perl. ;)

14 голосов
/ 16 декабря 2009

Ну, это зависит от того, что вы считаете веб-языком. Smalltalk определенно поощряет лучшие практики, и в нем даже написана сумасшедшая веб-среда ( Seaside ). Это очень отличается, и вы все еще можете делать плохие вещи. Вам просто рекомендуется поступить иначе.

Большая вещь

Eiffel - это дизайн по контракту. Это изящное организационное требование, которое поощряет повсеместное тестирование и утверждение.

Python великолепен, но на самом деле он не поощряет хорошие практики. Что ж, если отступ - это лучшая практика, то Python определенно его применяет.

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

11 голосов
/ 16 декабря 2009

Существует Без серебряной пули . Технология не сделает из вас лучшего программиста.

6 голосов
/ 16 декабря 2009

PASCAL - один из языков программирования, который поощряет хорошие практики программирования

6 голосов
/ 16 декабря 2009

Краткий ответ? Нет. Но в этом вопросе используются англоязычные идеи, которые не поддаются компьютерному программированию. Что значит «поощрять»? Что такое "хорошая практика программирования"? Подсветка синтаксиса и авто-отступ? Конечно, любой язык может сделать это. Предупреждения в стиле Lint? Не очень сложно. Стиль полиции? Ну, мы должны были признать C, если это были критерии.

Хорошая практика программирования естественным образом возникает из хорошего дизайна. Умным кодировщикам довольно сложно писать плохой код на любом языке, если дизайн чистый и простой. И наоборот, плохая практика следует из плохого дизайна. Сложная часть работает, когда дизайн перестает быть хорошим и начинает быть плохим. Это вопрос № 1 в разработке программного обеспечения, и, к сожалению, нет серебряной пули. Эти прекрасные шаблоны дизайна начинают выглядеть ужасно уродливо, когда в вашем приложении реализовано несколько таких шаблонов.

4 голосов
/ 17 декабря 2009

Я думаю, что на самом деле вы ищете не язык программирования, который поощряет лучшие практики, а продуманную среду веб-разработки.

Например, Ruby on Rails очень самоуверен, и «из коробки» дает вам четкое представление о том, как фреймворк ожидает от вас взаимодействия с ним - он автоматически создает структуру проекта и даже предоставляет некоторые начальные модульные тесты. Тестирование является неотъемлемой частью разработки рельсов, и вы найдете много ресурсов для поддержки BDD, TDD и других хороших "гибких" методов разработки.

Другие фреймворки, такие как Django (python) и Seaside (smalltalk), вероятно, имеют свои собственные соглашения, хотя я лично с ними не знаком.

4 голосов
/ 07 января 2010

Я собираюсь привлечь пламя и предложить Perl.

'WTF? ты можешь сказать. Perl имеет репутацию языка только для записи. Это когда в руках людей, которые используют его как просто язык супероболочки. Вы можете написать дерьмо на любом языке. Perl дает вам огромную свободу и гибкость. Таким образом, в Perl, по логике вещей, у вас больше свободы для написания дерьмового дерьма.

Свобода и гибкость могут также использоваться в целях удобочитаемости и удобства обслуживания.

Но как научиться создавать хороший код, а не дерьмо? В прошлом ответом был «Опыт и участие сообщества». За последние несколько лет появилось несколько новых инструментов и ресурсов, чтобы помочь.

  • Опыт

    • Если вы напишите какашку и должны будете поддерживать ее, вы извлечете уроки из опыта.
    • симпатичный. Как вы избегаете писать какашки в первую очередь?
  • Сообщество

    • Вместо применения произвольных правил в языке, в Perl есть культурные нормы, которые помогают улучшить код.
    • Разместите код на perlmonks без строгих предупреждений, и вы узнаете, почему вы должны их использовать.
    • Отлично, поэтому, чтобы сделать приличную работу, мне нужно часами читать сайты и группы новостей? Ну, ты здесь и сейчас. Но это все еще неоптимальное решение.
  • Инструменты: Здесь мы попадаем в Paydirt -

    • Несколько лет назад была опубликована Perl Best Practices . Он систематизировал и собрал идеи многих лидеров сообщества Perl. Это обеспечивает детальное обсуждение обоснования каждого из 256 предложенных методов. Он предлагает практики и способ мышления о практике программирования.
    • perltidy - это отличный инструмент переформатирования для Perl, который повышает читабельность кода, автоматически применяя стиль форматирования.
    • Perl :: Critic и поддерживающие модули предоставляют настраиваемую систему для анализа кода Perl. ПК выходит за рамки обычного и даже направляет вас на определенную страницу в Perl Best Practices для каждой обнаруженной проблемы, позволяя улучшить ваш код, на пять уровней выше проверки синтаксиса.
    • Юнит-тестирование является распространенной частью культуры Perl. Perl предлагает отличные инструменты для модульного тестирования в составе дистрибутива 5.10. Дополнительные инструменты тестирования доступны из CPAN.
    • Moose - новая объектная система для Perl 5. Она основана на объектной системе Perl 6. Moose предоставляет расширенные объектно-ориентированные возможности, такие как роли и черты. Роли и признаки предоставляют новые мощные способы обработки композиции кода и повторного использования, выходящие за рамки возможного с наследованием, интерфейсами и дополнениями. Наследование моделирует отношения «есть». Роли и черты модели "DOES". Я не могу особо подчеркнуть, насколько это полезно.
4 голосов
/ 16 декабря 2009

Это довольно субъективно, но я бы сказал Python. Читаемость имеет значение, и есть только один способ сделать вещи, с которыми очень легко работать с языком.

Рамки могут также укрепить хорошие практики. Платформа Python Django основана на шаблоне "MTV" и предоставляет очень дружественный код.

3 голосов
/ 16 декабря 2009

Что касается написания "плохого" кода ... вы должны научиться не делать этого;)

Что касается написания "хорошо стилизованного" кода - возьмите копию Visual Studio, плагина ReSharper и StyleCop. Intellisense и автоформатирование (Visual Studio) помогут вам хорошо разобраться, плагин ReSharper реструктурирует ваш код в «предпочтительную» структуру, а StyleCop поможет вам следовать стандарту.

...