Есть ли язык, который поощряет хорошие методы кодирования?

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

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

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

Ответы

Ответ 1

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

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

Python замечательный, но на самом деле он не поощряет хорошие практики. Ну, если отступ является лучшей практикой, тогда Python определенно навязывает его.

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

- Быстрая 'n' грязная Иногда вам просто нужно выполнить script быстро. Спасибо, Перл.;)

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

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

  • Опыт

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

    • Вместо использования произвольных правил на языке 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 предоставляет расширенные объектно-ориентированные возможности, такие как роли и черты. Роли и черты предоставляют мощные новые способы обработки композиций и повторного использования за пределами того, что возможно с наследованием, интерфейсами и микшированиями. Наследование моделирует отношение "IS A". Роли и черты модели "ДО". Я не могу подчеркнуть, насколько это полезно.

Ответ 10

Вы можете следить за хорошими практиками на любом языке.

Но вы также можете выполнять плохие практики на любом языке.

Ответ 11

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

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

Ответ 12

Если я правильно читаю вопрос, то, что вы ищете, - это язык, на котором "легко" и что делать "Лучшая практика" тесно связаны.

Если это так, каковы "лучшие практики"? Начнем с этого:)

И как слегка причудливое предложение, могу ли я предложить LISP или схему?

Ответ 13

Haskell.

  • Он заставляет вас писать чистый код отдельно
  • Он использует синтаксис табуляции, форсируя пробелы
  • Модульная система позволяет легко организовать код

Ответ 14

Почему ты спрашиваешь? Кажется, что вопрос возникает после того, как я столкнулся с каким-то неприятным волосом. Я трачу часы на разборку логики спагетти, которая проходит через около 6 уровней подпрограммы. Наконец, отследите ошибку ничтожества. И моя первая мысль - почему это не может быть проще?

Код написан для компьютера, а не для людей. Он оптимизирован для машины. Машины требуют точных инструкций. На этом уровне детализации сложность любой кодовой базы быстро растет. И эта сложность, как правило, решает этот вопрос.

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

Взгляните на грамотное программирование. Он контролирует сложность организации. Мне лично нравится визуальная структура, предоставляемая редактором Leo.

Ответ 15

Возможно, вы захотите прочитать приморскую книгу, чтобы получить некоторые идеи о том, как сухие веб-приложения. Исключение шаблонов, последующее построение DSL для html и javascript-фреймворков (ao jQuery, Scriptaculous, Prototype, RaphaelJs) и даже css (Phantasia, а не в базовом распределении), комбинация с OODB для сохранения (Gemstone) обеспечивает много почему текущий уровень техники в php, java, ruby ​​или С# намного хуже?

Ответ 16

Не могу поверить, что никто не упомянул Objective-C/Cocoa. Вы поощряетесь повсеместно следовать шаблонам MVC, а свободный ввод текста позволяет использовать некоторые серьезно развязанные OO-проекты.

Ответ 17

Я бы выбрал С# там. Он поощряет хорошие методы, читаемый код и предоставляет инструменты для обеспечения того, что ваши комментарии полезны и нацелены.

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

Ответ 18

чтобы быть ясным Вы можете написать плохой код на любом языке

в любом случае С# действительно хорош для соблюдения хороших правил кодирования

Ответ 19

С# несомненно... хорошая база и постоянно улучшается.

Ответ 20

Да, Python. Многие из его целей дизайна предназначены для заявленной цели поощрения хорошей практики кодирования. Прочтите учебник Python и Zen of Python (введите "import this" в приглашении Python).

Ответ 21

Практика кодирования является внешним по отношению к языку. Вы можете просто исправить исходный код на любом языке, и что хорошая практика является субъективной.

Например, в С# на уровне функции вы можете объявить любую переменную с помощью var, а компилятор будет обеспечивать безопасность типов, однако многие люди не любят var и считают, что это позволяет сделать код более сложным для расшифровки. Я лично люблю var, особенно когда тип упоминается справа:

например.

var firstName = new string();

лучше для меня, чем...

string firstName = new string();

... потому что почему мне нужно сказать string firstName, когда я знаю, что это строка, основанная на создании правой руки? Конечно, еще раз это субъективно.

Стандарты и инструменты анализа кода в сочетании с обзорами кода могут действительно иметь значение, хотя.

Вот список хороших инструментов анализа: http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis

Ответ 22

Ассемблер подходит к счету "языка, в котором плохие вещи, которые нужно делать, либо активно препятствует, либо просто просто затруднительно" - наличие вашей программы segfault во время выполнения довольно обескураживает, и писать плохо структурированное веб-программное обеспечение на ассемблере было бы совершенно сложно.

Ответ 23

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

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

Ответ 24

Язык Boo по тем же причинам, что и Python.

Может быть, я немного предвзятый...?