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

Я создаю pdf-документ с использованием кода C # в моем процессе

blockquote>

Используете ли вы какую-нибудь библиотеку для создания этого документа? Спецификация pdf (8.6MB) довольно велика, и все задачи, связанные с обработкой PDF, могут быть трудными без использования сторонней библиотеки. Защита паролем и шифрование ваших файлов PDF со свободной и открытой исходной библиотекой itextsharp довольно просто:

using (Stream input = new FileStream("test.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream output = new FileStream("test_encrypted.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
    PdfReader reader = new PdfReader(input);
    PdfEncryptor.Encrypt(reader, output, true, "secret", "secret", PdfWriter.ALLOW_PRINTING);
}
23
задан 5 revs, 3 users 71% 24 September 2009 в 02:29
поделиться

35 ответов

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

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

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

30
ответ дан 29 November 2019 в 03:18
поделиться

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

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

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

1
ответ дан 29 November 2019 в 03:18
поделиться

Несколько недель назад « Intentional Software » наделало много шума вокруг своего нового языка. Я еще не смотрел презентацию , но вот цитата из обзора Мартина Фаулера :

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

  • @pandemonial Вполне впечатлен! Это мило! Несколько доменов, несколько langs, ни один вопрос не останется без ответа
  • @csells OK, наблюдая за визуализацией электрической схемы и работать в файле C # чертовски чертовски круто.
  • @jolson Два слова о демо-версии Electronics для Intentional. Программное обеспечение: HOLY CRAPOLA. Вот это мой мозг наконец-то взорвался.
  • @gblock Речь идет не о шикарных демонстрациях, а о полном изменяя мир, который мы знаем.
  • @twleung хорошо, intellisense для актуарных формул просто потрясающий
  • @lobrien Это как увидеть карбюратор на 100 миль на галлон: Боже, кто-то собираюсь купить это и положить в vault!
1
ответ дан 29 November 2019 в 03:18
поделиться

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

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

  • Комментарии в текстовом поле со светло-синим фоном и без // или / * ... * / visible
  • Комментарии Javadoc могут иметь поддержку редактирования полутекстового расширенного текста (для тех, кто делает комментарии HTML Javadoc) (серьезно,
1
ответ дан 29 November 2019 в 03:18
поделиться

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

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

1
ответ дан 29 November 2019 в 03:18
поделиться

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

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

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

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

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

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

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

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

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

1
ответ дан 29 November 2019 в 03:18
поделиться

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

] Так что исходный код можно запрашивать и обрабатывать почти как с базой данных SQL.

Позволяет выполнять статический анализ исходного кода и рефакторинг даже сложного исходного кода, выполнив следующие действия:

FIND CALLERS OF FUNCTION "foo" WHERE SIGNATURE("int","int","char*") AND RETURN_TYPE("bool");
...
RENAME MACRO "max" TO "maximum" IN FILE "macros.hxx";
RENAME NAMESPACE "prj" TO "project";
RENAME SYMBOL "OLDFOO" IN NAMESPACE "project";
RENAME FUNCTION "log" TO "show_log";
RENAME CLASS "FOO" TO "OLDFOO";
RENAME METHOD "FOO::inc" TO "FOO::increment"; 
...
CHANGE SIGNATURE IN FUNCTION "foo" WHERE SIGNATURE("int","int") TO SIGNATURE("double","double");
CHANGE SIGNATURE IN METHOD "myClass::handle" WHERE SIGNATURE("char") TO SIGNATURE("unsigned char")
MOVE FUNCTION "foo" in FILE "stuff.cc" TO "foo_funcs.cc";
0
ответ дан 29 November 2019 в 03:18
поделиться

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

0
ответ дан 29 November 2019 в 03:18
поделиться

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

0
ответ дан 29 November 2019 в 03:18
поделиться

Programming languages are a specialized form of mathematical notation, since you can express a programming language mathematically. Notation changes slowly, and so we don't get fast progress in our languages. Mostly, we advance when we come up with a new thing to fit into the notation, like using i to refer to the square root of negative one.

There are documentation schemes that allow you to embed things other than text. There was at least one programming scheme, Donald Knuth's Web, that allowed you to have a presentation and an execution version of a program (unfortunately, the base source code, the stuff you'd actually hack, was rather messy).

You could easily have a text editor that could treat comments as HTML, provided of course it could recognize comments as it saw them.

1
ответ дан 29 November 2019 в 03:18
поделиться

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

2
ответ дан 29 November 2019 в 03:18
поделиться

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

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

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

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

3
ответ дан 29 November 2019 в 03:18
поделиться

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

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

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

11
ответ дан 29 November 2019 в 03:18
поделиться

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

5
ответ дан 29 November 2019 в 03:18
поделиться

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

4
ответ дан 29 November 2019 в 03:18
поделиться

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

4
ответ дан 29 November 2019 в 03:18
поделиться

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

3
ответ дан 29 November 2019 в 03:18
поделиться

Революционных улучшений не произошло с тех пор, как мы перешли от перфокарт к редактированию текста

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


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

  1. легко обрабатывается
  2. довольно легко указать
  3. насыщен информацией
  4. точен

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

13
ответ дан 29 November 2019 в 03:18
поделиться

DrScheme, давайте сделаем это. Вот то, что вы можете вставить с веб-сайта PLT:

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

3.1.6 Insert

  • Insert Поле для комментариев: вставляет поле, которое DrScheme игнорирует; используйте его для написания комментариев для людей, читающих вашу программу.
  • Вставить изображение ...: открывает диалоговое окно поиска файла для выбора файла изображения в формате GIF, BMP, XBM, XPM, PNG или JPG. Изображение обрабатывается как значение.
  • Вставить дробь ...: открывает диалоговое окно для дроби со смешанным обозначением и вставляет данную дробь в текущий редактор.
  • Вставить большие буквы ...: открывает диалоговое окно для строки текста и вставляет большую версию текста (используя точку с запятой и пробелы).
  • Insert λ: Вставляет символ λ (как символ Unicode) в программу. Символ λ обычно связывается так же, как лямбда.
  • Вставить окно комментария Java: вставляет поле, которое игнорируется DrScheme. В отличие от пункта меню «Вставить поле для комментариев», он предназначен для языковых уровней ProfessorJ. См. ProfessorJ.
  • Insert Java Interactions Box: вставляет поле, которое позволяет использовать выражения и операторы Java в программах Scheme. Результатом этого поля является значение схемы, соответствующее результату (-ам) выражений Java. В настоящее время значения схемы не могут войти в это поле. Поле будет принимать по одному оператору или выражению Java на строку.
  • Вставить окно XML: вставляет XML; см. блоки XML и блоки схемы для получения дополнительной информации.
  • Вставить блок схемы: вставляет блок, содержащий код схемы, обычно используемый внутри блока XML; см. Блоки XML и Блоки схемы.
  • Вставить блок сращивания схемы: вставляет блок, содержащий код схемы, обычно используется внутри блока XML; см. также блоки XML и блоки схемы.
  • Вставить блок изображения: Создает блок для создания изображения слайд-шоу. Внутри блока pict вставьте и расположите блоки схемы, которые производят значения изображений.

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

3
ответ дан 29 November 2019 в 03:18
поделиться

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

/* help: fooimg.png */

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

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

3
ответ дан 29 November 2019 в 03:18
поделиться

Я хотел, чтобы часть кода была доступна только для чтения

2
ответ дан 29 November 2019 в 03:18
поделиться

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

2
ответ дан 29 November 2019 в 03:18
поделиться

Похоже, вас могут заинтересовать исследования Джонатана Эдварда . См., Например:

2
ответ дан 29 November 2019 в 03:18
поделиться

Diffing and searching pictures is hard. Diff and search are very important to programmers. Using pictures instead of text is only a marginal improvement in many situations, it has some drawbacks, and it requires general acceptance before it's really worth doing (since you don't make things more understandable if your reader doesn't grok what you've done).

Plus, programmers have a million little tricks that make their lives easier, based on text representations of code, that they'd lose if you gave them code to read that was expressed in anything other than text. Sure, they might replace or re-implement those tricks over time, but in the short term they're gone.

You don't see lawyers switching from English to little back-of-a-napkin diagrams in contracts, either (the Creative Commons licenses try, but cannot make the picture be the formal representation of the contract). Probably for similar reasons.

If someone comes up with a programming language and IDE that, on balance, beats text-based ones; and successfully markets it; then you'll see the start of a revolutionary shift from text to a new format. If nobody comes up with any such thing, then we're not missing out. If someone comes up with something that is more productive but it doesn't gain traction because of independent advantages of other technologies, then that loss is the price we pay for free-market capitalism. Perhaps the ideas will be recycled eventually...

That said, integration between code and documentation could clearly be improved, and there are many efforts underway to do so, using various techniques with varying success. Again, the problem is that any particular cunning plan can in practice only really be implemented in one or a few languages and development environments at a time, and so has difficulty proving that it really is better. Embedding documentation in code is possibly the only universal advance since the invention of the API...

I think there's still a lot that can be done with text, though. For example, debugger technology makes a big difference to programmer productivity in certain common circumstances (namely: when a test fails or something else unexpected happens, but it's not obvious what the faulty assumption is in the code you're looking at). There may be lower-hanging fruit in terms of making programming better, than the actual business of expressing the program.

2
ответ дан 29 November 2019 в 03:18
поделиться

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

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

2
ответ дан 29 November 2019 в 03:18
поделиться

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

15
ответ дан 29 November 2019 в 03:18
поделиться

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

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

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

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

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

WTF "

1
ответ дан 29 November 2019 в 03:18
поделиться

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

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

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

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

2
ответ дан 29 November 2019 в 03:18
поделиться

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

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

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

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

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

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

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

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

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

3
ответ дан 29 November 2019 в 03:18
поделиться

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

1
ответ дан 29 November 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: