Нотация как инструмент мысли - как далеко мы приехали?

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

Эти дополнительные нажатия клавиш улучшают производительность? Они служат цели, которая была определена количественно, например, уменьшив кодирующий коэффициенты ошибок?

Проблема, поскольку я вижу его, - то, что язык программирования, записанный, прежде всего, для размещения Архитектуры фон Неймана - а не способ, которым мы думаем - вынуждает нас решить проблемы путем манипулирования тремя проблемными областями в наших головах (a) исходный probem (b) проблема, реструктурированная для установки Архитектуре фон Неймана (c) отображающиеся правила, должен был перевести назад и вперед между (a) и (b).

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

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

Для интереса я провел подсчет байта 37 различных решений игры Conway жизни и придумал следующую статистику:

J : 80, 
APL : 145, 
Mathematica : 182, 
Ursala : 374, 
JAMES II : 394, 
SETL : 559,
ZPL : 652, 
PicoLisp : 906, 
F# : 1029, 
Vedit macro language : 1239, 
AutoHotkey : 1344, 
E : 1365, 
Perl 6 : 1372, 
TI-89 BASIC : 1422, 
Perl : 1475, 
PureBasic : 1526, 
Ocaml : 1538,
Ruby : 1567, 
Forth : 1607, 
Python : 1638, 
Haskell : 1771, 
Clojure : 1837, 
Tcl : 1888, 
R : 2031, 
Common Lisp : 2185, 
OZ : 2320, 
Scheme : 2414, 
Fortran : 2485, 
C : 2717, 
ADA : 2734, 
D : 3040, 
C# : 3409, 
6502 Assembly : 3496, 
Delphi : 3742
ALGOL 68 : 3830, 
VB.NET : 4607, 
Java : 5138, 
Scala : 5427   

(См., например, http://rosettacode.org/wiki/Conway 's_Game_of_Life),

Комментарии?

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

15
задан Kara 23 June 2014 в 17:56
поделиться

3 ответа

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

См .: Что случилось с APL? и мой рассказ о моем комбинаторическом задании, в котором APL сравнивается с PL / I.

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

Ваш счетчик байтов 145 для игры Конвея, решающей APL, неверен. Вы искали это очень неэффективное решение.

Это одно из решений :

alt text
(источник: catpad.net )

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

Также см. это видео об этом .

8
ответ дан 1 December 2019 в 04:46
поделиться

Вы действительно сравниваете del / s *. * с его реализацией? Готов поспорить, что автор сценария мог бы выполнить оболочку и выполнить встроенную команду del . Невозможно сказать, почему он этого не сделал, но у него могла быть веская причина.

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

2
ответ дан 1 December 2019 в 04:46
поделиться

Повышают ли продуктивность эти дополнительные нажатия клавиш? Служат ли они цели, которая была определена количественно, например, уменьшению количества ошибок кодирования?

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

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

-1
ответ дан 1 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

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