Подтвердить что ты не робот

Улучшить способ написания кода?

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

Подумайте об этом: не было революционного улучшения, поскольку мы перешли от перфокарт к редактированию текста. Последнее улучшение, которое я видел, - подсветка синтаксиса и контекстно-зависимая справка (например, Intellisense или ctags). Не то, что я бы назвал революционным.

Это заставляет меня задаться вопросом: почему это так?

Я начну с чего-то плохого:

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

Что вы можете придумать, чтобы облегчить ваши задачи по редактированию/редактированию текста/документации?

4b9b3361

Ответ 1

Я удивлен, что никто еще не упомянул No Silver Bullet. В 1986 году (!) Фредерик Брукс предсказал, что:

Существует ни одна разработка, ни по технологии, ни по методу управления, которая сама по себе promises даже в один раз в десять раз улучшилась за десятилетие в производительности, в надежности, в простоте. [...] Мы не можем ожидать, что когда-нибудь увидим двукратную прибыль каждые два года ".

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

Ответ 2

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

Ответ 3

Не было революционного улучшения, так как мы перешли от перфокарт к редактированию текста

Никогда не использовал редактор строк, не так ли?


Но серьезно, текст (особенно в представлениях, выбранных для современных языков)

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

Все, что приходит, чтобы заменить его, должно быть чистой победой во всех четырех этих свойствах. Нелегко.

Ответ 4

Я не согласен. У нас есть изменения, небольшие, но изменения.

Насколько распространена конструкция "для каждой"? Сравните это с 20 лет назад. Как насчет перемещения доменных языков? Как насчет идеи о том, что мы должны кодировать слои? Как насчет развития, управляемого поведением? Кодирование, соблюдая спецификацию... которая записывает хороший документ как вывод, когда все работает нормально. Как насчет стандартизации регулярных выражений? PCRE. Как насчет Работа в DSL в группе Алана Кэя по теме "Закон о защите от Moore" , в котором была рассмотрена более продвинутая реализация Каира и сгенерированный код TCP/IP используя диаграммы из RFC?

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

Ответ 5

Одна вещь, которую я недавно сделал в некоторых более сложных разделах моего приложения, - включить разметку LaTeX для конкретного уравнения в качестве комментария /docstring. Прямо сейчас, я просто скопирую-вставляю в онлайн-редактор уравнений, но было бы очень полезно увидеть формулу (с такими вещами, как греческий буквы и суб/надстрочные), а не кучу кода ASCII.

Ответ 6

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

Ответ 7

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

Ответ 8

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

/* help: fooimg.png */

И тогда у вас есть внешняя система документации, а затем большая.

Еще лучше было бы позволить нашему текстовому редактору рассматривать эти вещи как гиперссылки на внешнюю документацию.

Ответ 9

DrScheme позволяет вам делать это. Вот что вы можете вставить с сайта PLT:

http://docs.plt-scheme.org/drscheme/Menus.html#(part._.Insert)

3.1.6 Вставка

  • Вставить блок комментариев: Вставляет поле, которое игнорируется DrScheme; используйте его для написания комментариев для людей, которые читают вашу программу.
  • Вставить изображение...: открывает диалог поиска файлов для выбора файла изображения в формате GIF, BMP, XBM, XPM, PNG или JPG. Изображение рассматривается как значение.
  • Insert Fraction...: открывает диалог для фракции смешанной нотации и вставляет данную дробь в текущий редактор.
  • Вставить большие буквы...: открывает диалог для строки текста и вставляет большую версию текста (используя точки с запятой и пробелы).
  • Вставка λ: Вставляет символ λ (как символ Юникода) в программу. Символ λ обычно связан с lambda.
  • Вставить блок комментариев Java. Вставляет поле, которое игнорируется DrScheme. В отличие от пункта меню "Вставить комментарий", это предназначено для уровней языка ProfessorJ. См. ProfessorJ.
  • Вставить ящик взаимодействий Java: вставляет поле, которое позволит выражениям Java и операторам в программах Scheme. Результатом поля является значение схемы, соответствующее результату (-ам) выражений Java. В это время значения схемы не могут войти в поле. Ящик будет принимать один оператор Java или выражение для каждой строки.
  • Вставить XML-блок: вставляет XML; см. "Коробки XML" и "Схемы" для получения дополнительной информации.
  • Вставка схемы: вставляет ящик, содержащий код схемы, обычно используемый внутри поля XML; см. XML-боксы и схемы.
  • Insert Scheme Splice Box: Вставляет ящик, содержащий код схемы, обычно используемый внутри поля XML; см. также XML-ящики и схемы.
  • Вставить Pict Box: Создает окно для создания слайд-шоу. Внутри ящика для пиктограмм вставьте и упорядочьте квадраты Схемы, которые создают значения изображения.

Вы также вставляете свои модульные тесты с помощью кода, который вы тестируете. Довольно аккуратный материал.

Ответ 10

Я думаю, что интегрированные IDE с смысловой подсветкой и ** семантически ограниченные предложения * (a la IDEA или Eclipse) - это огромное продвижение.

Но это произошло 8-10 лет назад.

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

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

Ответ 11

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

Ответ 12

Я, конечно, уважаю аргумент Фреда Брукса Нет Silver Bullet, но я думаю, что способ, которым мы пишем код, нигде не близок к оптимальному, так что есть больше возможностей для улучшения. Я попытался объяснить это в моей книге.

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

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

Если минимизируемая мера - это время выполнения настенных часов, вы можете сделать агрессивную оптимизацию.

Если мерой является размер исходного кода (строки или символы), вы получаете "код гольфа".

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

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

Таким образом, инструменты и методы, которые помогают минимизировать количество редактирований, могут, на мой взгляд, считаться "серебряными пулями". DSL является одним из таких. Генерация кода - другая. Мой любимый метод оптимизации - это еще один. Для кодирования динамически изменяющихся пользовательских интерфейсов существует дифференциальное выполнение. Скорее всего, их ждет больше, ожидая их открытия. Конечно, все зависит от обучения и опыта "стрелка" (кодера).

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

Ответ 13

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

Ответ 14

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

Ответ 15

Возможность сделать раздел кода только для чтения - это то, что я хотел

Ответ 17

Последнее улучшение, которое я видел, - это подсветка синтаксиса и контекст чувствительная помощь

Тогда ты много не выглядишь. Современные IDE могут многое сделать, FAR больше, чем это, а именно показать вам семантическую структуру кода (например, иерархии наследования) и даже манипулировать им (автоматический рефакторинг) или обогатить его внешними данными (например, кто последний изменил конкретную строку кода).

Ответ 18

Разнообразные и поисковые снимки сложны. Diff и поиск очень важны для программистов. Использование изображений вместо текста является лишь незначительным улучшением во многих ситуациях, оно имеет некоторые недостатки, и оно требует всеобщего признания, прежде чем оно действительно стоит (так как вы не делаете вещи более понятными, если ваш читатель не знает, что у вас есть сделано).

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

Вы не видите, что адвокаты переходят с английского на небольшие диаграммы с пропиской в ​​контрактах, либо (лицензии Creative Commons пытаются, но не могут сделать изображение формальным представлением контракта). Вероятно, по тем же причинам.

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

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

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

Ответ 19

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

Например, Python добавил += в какой-то момент, когда мой код был усеян линиями x = x + 1. Если бы я мог написать команду поиска и замены, которая работала над деревом разбора, я бы быстро очистил большое количество исходного кода.

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

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

Ответ 20

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

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

Ответ 21

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

Существуют схемы документирования, которые позволяют вставлять другие объекты, кроме текста. Была, по крайней мере, одна схема программирования, Дональд Кнут, которая позволила вам иметь презентацию и версию исполнения программы (к сожалению, базовый исходный код, материал, который вы на самом деле взломали, был довольно запутанным).

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

Ответ 22

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

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

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

Вокальное программирование против кодирования. Эффективность этого метода будет вращаться вокруг эффективности вокального синтаксиса, который решил создать код и переместить курсор. Например, вы можете сказать микрофону "для переменной от нуля до 10", и система автоматически сгенерирует следующий код, помещая курсор внутрь:

for (x=0;x<10;x++){
  // Cursor would be there after after the call
}

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

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

Ответ 23

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

Они начали тревожно, обычные невоспитательные Powerpoints, но затем они переключились на показ верстак и занавес наконец открыт. Чтобы измерить реакцию, возьмите посмотрите на Twitter.

  • @pandemonial Довольно впечатлен! Это мило! Несколько доменов, несколько langs, вопрос не остаётся без ответа.
  • @csells OK, просматривая живую электрическую схему и работа в файле С# довольно чертовски круто.
  • @jolson Два слова, чтобы сказать о демонстрации Electronics для Intentional Программное обеспечение: HOLY CRAPOLA. Что это, мой мозг наконец взорвался.
  • @gblock Речь идет не о дразнящих демках, это касается полностью меняя мир, который мы его знаем.
  • @twleung ok, intellisense для актуарных формул просто потрясающе
  • @lobrien Это похоже на карбюратор 100 миль на галлон: OMG кто-то собираюсь купить это и положить его в хранилище!

Ответ 24

На вопрос сразу приходят две цитаты:

"Если он не сломался, не исправляйте". "Используйте лучший инструмент для работы".

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

Ответ 25

Это были затронуты другими, и это не революционизировало программирование, но в любом случае...

Я думаю, было бы неплохо, если бы редакторы кода слегка переместились за рамки текстовых редакторов. Даже с подсветкой синтаксиса и завершением кода (что я считаю невероятно хорошими), сегодняшние редакторы (по крайней мере, те, которые я использую) по-прежнему отображают точно такой же текст ASCII (или любой другой), который находится в исходных файлах, Мне было бы интересно посмотреть, насколько это хорошо, если бы редакторы отображались, например (некоторые примеры более предприимчивы, чем другие):

  • Комментарии в текстовом поле со светло-голубым фоном и без // или /* ... */ visible
  • Комментарии Javadoc могут иметь поддержку полу-богатого редактирования текста (для тех, кто делает комментарии HTML Javadoc) (серьезно, я был бы признателен, если бы редакторы кода отображали комментарии Javadoc как HTML, потому что они нелегко сбрасывать, когда их HTML как обычный текст)
  • Функции в текстовых полях, которые могут быть свернуты, чтобы отображать только подпись (свертывание может выполняться текущими редакторами) и могут быть перемещены в виде ящиков
  • Строки между функциональными блоками для указания того, как связаны функции.
  • Уменьшение, чтобы вместо просмотра одного исходного файла (класса на многих языках) вы могли видеть несколько файлов и способ подключения друг к другу (это, по существу, должно было бы создавать диаграммы, подобные UML, непосредственно в редакторе кода)

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

Ответ 26

Часть проблемы может возникнуть из-за того, что, когда вы не кодируете, мы не называем это программированием: например, сборка модульных компонентов с использованием графического интерфейса.

Ответ 27

Вам могут быть интересны эти альтернативные языки программирования.

[Лестница] [1], предназначенная для имитации работы релейно-логических схем. Ужасно ИМО, но легко понять для старых парней, которые делали логику с палками и камнями. [http://www.amci.com/tutorials/images/ladder-diagram.gif][2]

[SFC, Последовательная функциональная диаграмма] [3], предназначенная для упрощения параллельного программирования. Код записывается в ящики, и эти поля могут быть помещены параллельно друг другу и, таким образом, выполняться одновременно. Соединив конец нескольких ящиков, вы можете синхронизировать события. Очень часто для приложений автоматизации.

[Mathematica] [5]!!!, Возможно, это не лучший язык программирования, но подсветка синтаксиса (если можно так выразиться) - это потрясающе! Например, вы можете ввести матрицу, увидев матрицу, выровненную аккуратно, вместо огромного двойного [] []. Графы могут быть вставлены в код, и форматирование математических выражений выглядит так, как при записи на бумаге. Больше никаких паратетов-безумия или длинных выражений Math.PI, которые действительно нужны только одному персонажу. И, самое главное, файлы - это просто текст, даже если он хорошо отображается в редакторе!

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

WTF "новые пользователи могут публиковать максимум одну гиперссылку", вам нужно будет опубликовать материал, который я изначально добавил в это сообщение > : (

Ответ 28

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

Он помещается в текстовый файл, потому что это тот тип ввода, который требует компилятор. Это 50-летняя идея, которая должна быть переосмыслена.

Компилятор/компоновщик должен быть интегрирован с IDE, чтобы освободить программиста от беспокойства о том, какой код входит в какой модуль, и что мне нужно сделать, чтобы сделать этот код видимым. Глобал? Экстернов? # включить файлы, пути библиотеки... выкинуть их из окна.

Один из них должен иметь возможность открыть среду IDE и просмотреть список проектов. Вы открываете один из них. Если вы дизайнер, вы видите конструкторскую документацию. Если вы разработчик, вы видите код. Если вы пользователь, вы видите wiki.

Документация по дизайну гиперссылка на код и код обратно в документ и обратно в руководство пользователя, поэтому вы можете перейти на любой уровень, который вам нужен. Итак, вы находитесь в какой-то функции, и вы задаетесь вопросом: "Почему же так они поступали?" Вы понимаете, почему. Вы следуете оттуда в документ требований. Вы следуете этому имени человека, который предложил его в качестве требования.

Все управление файлами. Он оставлен внутренним элементам IDE.

Ответ 29

Разве я могу сказать, что это может быть новый язык разработки (возможно, даже новая парадигма), чтобы провести нас через такую ​​революцию;

Ответ 30

Думаю, вам стоит взглянуть на Leo. Это один из парней, пытающихся ответить на то, о чем вы просите. Я все еще не могу обернуть вокруг себя VIM-голову, но другие быстро приходят к ней. Это не просто программирование IDE, а больше организатор информации. Он написан на Python, но я не понимаю, почему вы не можете кодировать на нем другие языки. Сила Льва - это не столько язык, сколько способность выражать свои мысли и организовывать их, будь то в коде, диаграммах, изображениях или диаграммах. Просмотрите учебник и примеры, чтобы понять это. Вам может понравиться.