Почему грамотное программирование не мейнстрим? [закрыто

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/811

Вопрос

Грамотное программирование есть хорошие идеалы. Как вы думаете, почему это не мейнстрим? Это потому, что не удалось доставить?

Это было полезно?

Решение

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

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

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

Другие советы

Я бы обвинил сетевой эффектАнкет Чтобы другие люди могли редактировать ваш код и документацию, они должны быть в состоянии понять его.

Это отталкивает людей от чего-то вроде CWEB/NOWEB, потому что использование их потребует, чтобы вы изучали TEX и специфичный для программы синтаксис поверх языка программирования, который вы используете для проекта. Это можно рассматривать как огромную трату времени, особенно если им не нужна ни одна из математических наборов, которая в первую очередь является большой ничьей для TEX. (И для многих программистов приложений им действительно не понадобятся.) Вместо этого они предпочитают что-то вроде комментариев Visual Studio XML, потому что это уже популярно и хорошо зарекомендовало себя.

Места, которые я видел, снимают грамотные программы, находятся в научных/статистических вычислениях, где большинство программистов проходят значительное обучение (известное так как докторская степень) по математике, CS или статистике, и, следовательно, уже знакомы с LaTex. Документация, которую они пишут, с большей вероятностью включают в себя множество сложных формул, которые лучше всего написаны в TEX, и они, скорее всего, будут программировать в R. Доля программистов R, которые знают о переводе, определенно намного выше, скажем, Доля программистов C, которые знают о CWEB.

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

Система грамотного программирования, которую разработал Кнут, сделала гораздо больше, чем сразу же отвечает на глаза, а именно она преодолела многие недостатки на основополагающем языке программирования, который инструмент генерации кода, генерируемый из исходного документа Knuths, а именно стандартного Pascal.

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

  • Чтобы облегчить наличие компилятора с одним проходом, языковая спецификация говорится, что все заявления должны быть в определенном порядке. На странице Википедии: «Каждая процедура или функция могут иметь свои собственные объявления о метке, константах, типах, типах, переменных и других процедурах и функциях, которые должны быть в таком порядке». Это означало, что вы могли нет Сгруппируйте свои вещи логически в исходном файле.
  • Обработка струн была более утомительной, чем на простом C.
  • Идентификаторы не могли иметь произвольную длину.
  • Многие другие вещи, которые я больше не могу вспомнить.

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

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

Также современные языки более выразительны, что позволяет поместить больше мыслей в сам код.

Итак, что осталось? Возможность генерировать форму документации на телевидении из исходного кода и ЧТО существует сегодня.

Подумайте, Javadoc - API времени выполнения Java, пожалуй, является самой большой частью грамотного программирования, доступного сегодня (за исключением того, что код фактически не представлен, но это могло бы быть, если бы Java была открыта с самого начала). См., Например, представление структуры коллекций на http://download.oracle.com/javase/6/docs/api/java/util/collection.html

Я считаю, что аналогичные системы существуют для .NET и других основных программ.

Одна вещь, которую я обнаружил, когда у меня было связано с грамотным программированием в 90 -х годах, это то, что он привлекал очень страстных людей, которые хотели сделать именно то, что было точно - и это включало в себя написание собственной грамотной системы программирования, потому что никто не был для них достаточно хорошим. Neweb был хорошей попыткой отрезать это, предоставив вам наименее распространенный знаменатель для всех, хотя даже тогда я потратил большую часть своего LP Time, разрабатывая для этого довольно Printer ...

Другая проблема заключается в том, что это действительно антиагильное. В некотором смысле, быть замедленным-это хорошо, потому что это заставляет вас думать более предварительно и добиваться успеха в первый раз. С другой стороны, тщательно документирование по мере продвижения означает, что есть большой барьер для рефакторирования вашего кода. И если вы подождите, пока ваш код не будет закален перед LP-i-eify, вы получите многодневную задачу документации, которая действительно может остановить вас в ваших треках.

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

Кодеры пишут код, а не английский.

Кодеры не любят писать документацию, потому что она не помогает запустить код.

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

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

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

Люди принимают LP, чтобы: (а) метод документации (б) метод написания некоторых полированных очерков, который требует некоторых особых навыков или талантов (c) просто не имеет ни малейшего понятия - как создатель редактора программирования LEO, по его собственному признанию и т.д. и т.д. и т.д.

LP, однако, является просто: (1) написание программ в смеси кода и фраз на (= любом) человеческом языке, где последний обозначает другие куски кода и/или включенные фразы. Это именно то, что делают авторы бессмысленных учебников по программированию. И (2) это простой препроцессор, который расширяет эти фразы в человеке (что стало так, как будто имена включенных подпрограмм) раскрыть результат в порядке, требуемом компилятором (или или устный переводчик). В противном случае можно расширить письменный текст с другой небольшой утилитой, чтобы включить форматирование символов, чтобы превратить «грамотный источник» в хороший хорошоформатированный читаемый текст.

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

По сути, основная идея программирования «в псевдокоде», написанном на человеческом языке, а затем расширение его с помощью простой утилиты препроцессора помогает управлять вниманием (ограниченная, основная сложность для любой длинной программы), в значительной степени похожей на склад кода или разделение потока программы. в функции/подпрограммы, необходимые вам не потерять себя в деталях, но совершенно ненужные для выполнения машины.

Есть 2 аспекта грамотного программирования, которые я делать Желание было включено в основное программирование - встроенные образы (например, диаграммы дизайна) и указатели на предыдущие и альтернативные попытки (например, «причина, по которой это так, потому что я попробовал этот другой путь, и это не сработало, потому что ...» ) Оба эти аспекта могут быть обработаны с помощью Doc-Comments и Uris.

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

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

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

В заключение: мой код Java сам по себе более грамотный, поскольку все «грамотные» программы хотят быть.

Я пришел к грамотному программированию наоборот - я мечтал об организации кода, так как он соответствует мне, а не в этом компиляторе. я нашел Лео почти идеально для этой цели. Он также поддерживает отслеживание файлов, измененных снаружи. Эти файлы не должны содержать какую -либо специальную разметку, поэтому я могу использовать LEO для себя, не нуждаясь в том, чтобы другие в команде знали. Эта функция - «@shadow Trees» - очень многообещающая, хотя и немного глючная, нуждается в большем количестве глазных яблок. И это также решает проблему «О, нет, все в одном большом файле» как путем организации всего в контур дерева, так и благодаря поддержке внешних файлов.

Для меня, вопреки имени, «грамотное программирование» вовсе не о документации. У меня нет больше документации, чем раньше. Речь идет о наличии структуры, которая помогает мне не теряется. Анкет Я клянусь, особенно при управлении файлами JSP Behemoth (и, несмотря на то, что Leo изначально был предназначен в основном для Python, и он не имеет поддержки языка JSP - я должен разделить файл на Leo Tree вручную!).

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
scroll top