При разговоре о языках программирования, каково определение Волшебства?

Вы можете использовать min(), чтобы получить последовательность, которая имеет наименьшую абсолютную разницу между суммой и целью, например, используя параметр key для min():

import itertools as it

# From itertools recipes
def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return it.chain.from_iterable(it.combinations(s, r) for r in range(len(s)+1))

In []:
target = 2842.77
result = min(powerset(numbers), key=lambda seq: abs(sum(seq)-target))
result

Out[]:
(2505.71, 337.86)

In []:
sum(result)

Out[]:
2843.57
5
задан Jonathan Leffler 26 May 2015 в 05:19
поделиться

13 ответов

"Любая технология, достаточно усовершенствованная, неотличима от волшебства" — Arthur C. Clarke.

На самом деле не совсем это — волшебство используется для сложного и скрытого, а не усовершенствованного (хотя, по-видимому, разработчики думали, что они совершенствовались), такие как системы, которые требуют определенных состояний перед вызовами процедуры (модели потоков COM), а также 'автоволшебные' преобразования типов (варианты VB, JavaScript ==, автоупаковка Java).

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

Существует также хорошее волшебство — http://aggregate.org/MAGIC/

10
ответ дан 18 December 2019 в 05:27
поделиться

Что-то волшебно при игнорировании его / Вы не знаете, как это работает.

8
ответ дан 18 December 2019 в 05:27
поделиться

В Microsoft это имеет тенденцию использоваться два пути

1) Отрицательным способом (вероятно, наиболее распространенное использование). Например, кто-то мог бы сказать, что следующий "Я не понимаю; сначала Вы осуществите рефакторинг API, затем Вы сохраните старый API и иметь слой между ними, который выполняет волшебство?"

Импликация - то, что волшебный компонент слишком сложен, слишком не определен, или также 'что-то'.

Другой отрицательный контекст - когда что-то определяется наивно: Это часто происходит, когда кто-то предполагает, что существует простое решение сложной проблемы, потому что они не понимают, что проблема действительно сложна. Блог Raymond Chen полон этих видов примеров.

2) Менее часто, что термин 'волшебство' используется положительно. Но это действительно происходит. Полезно для обращения к вещам, которые выполняют сложные задачи, это просто работает. Мне NTFS является таким волшебством. NTFS действительно, действительно станьте зрелым, и скрывает большую сложность позади некоторых довольно простых API. Компилятор может рассматриваться как 'волшебство' таким образом также - Вы действительно понимаете, глубоко, как компилятор C++ работает? Я не делаю - я просто полагаю, что они делают.

4
ответ дан 18 December 2019 в 05:27
поделиться

Волшебство очень относительно Вашего понимания.

Я записал изрядное количество C и C++, прежде чем я начал писать в Java. Я должен был выделить и освободить всю свою память. Это не была большая забава, после того как я начал получать утечки памяти. После того как я начал писать в Java, я знал (в основном), что продолжалось негласно для создания всех моих объектов экземпляра. Таким образом, мне, это не рядом столько же волшебства (я сделал выделение, но как это на самом деле хранит объекты и знает, когда освободить их, является немного более "волшебным" мне), как это было бы кому-то, кто запустился на Java (кто никогда не должен был вручную обрабатывать память.)

Другим примером является ORM. Я прокрутил свой собственный временный объект Реляционная структура Отображения рано в проекте, пока у меня не было времени, чтобы действительно приняться за дело и учиться, в спящем режиме или что-то подобное. Я должен был записать в вещах как картопостроители ResultSet, Ленивая Загрузка и некоторое основное кэширование. Теперь, когда я возвращаюсь и заменяю этот материал более сформировавшимся, в спящем режиме, или JPA отобразил объекты, у меня все еще будет основное понимание того, что продолжается. Если Вы никогда не использовали JBDC или что-либо подобное, все, что Вы собираетесь действительно знать, то, что данные идут от базы данных до объекта и назад снова.

Все имеют дело с определенным уровнем волшебства в их карьере. Мы не можем знать все. Волшебство действительно может быть synonomous с Абстракцией. То, когда это становится "слишком волшебным", - когда Абстракция начинает покрывать вещи, которыми необходимо смочь управлять. Пример на днях был то, что в программе JSF, я не знал, как запустить контекст JSF. JSF просто делает это, когда Вы перешли к странице JSF впервые. Я должен был запустить контекст с регулярного сервлета. Я закончил тем, что имел необходимость сделать фиктивную страницу JSF для обработки его вместо этого. У меня просто не было времени в этом проекте изучить "волшебство" управления контекстом JSF.

4
ответ дан 18 December 2019 в 05:27
поделиться

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

Например, волшебные константы: константы со скрытым смыслом.

Когда мы говорим о "черной магии", происходящей в некотором запутываемом коде, мы подразумеваем, что что-то происходит в этом коде, который мы не понимаем; или это что-то незаписанное происходит, но скрыт от считывателя штрихкода.

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

3
ответ дан 18 December 2019 в 05:27
поделиться

Ruby on Rails, например, является Волшебным.

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

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

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

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

3
ответ дан 18 December 2019 в 05:27
поделиться

Вы называете что-то "волшебным", когда Вы не понимаете это.

Люди использовались, чтобы быть записанными в средневековье, когда они, где, делая / знающий / высказывание чего-то, та остальная часть мужчин coundn't понимает. Они обвинялись в выполнении "волшебства".

Вы называете код / платформа / язык "волшебство", когда Вы не понимаете то, что это делает. Легче назвать что-то "волшебным", чем провести время для понимания этого.

Волшебство не существует!

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

1
ответ дан 18 December 2019 в 05:27
поделиться

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

w:[true, false]

Эта нотация имеет форму:

w:[P, Q]

и представляет программу это при выполнении в состоянии где P верно, завершится в состоянии где Q верно, при замене только в w.

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

Намного более легкая программа:

w:[true, true]

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

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

2
ответ дан 18 December 2019 в 05:27
поделиться

Для Java

  • GC - По моему скромному мнению, не волшебный, это точно так же, как имеет инструмент для очистки дома
  • Автоупаковка - волшебство - невидимый transmogrification вещи во что-то еще
0
ответ дан 18 December 2019 в 05:27
поделиться

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

Но существуют tho короли неизвестных:

  • Отсутствие знаний на стороне разработчиков о том, как работают вещи. (Например, GC, это не волшебно, просто слишком мало разработчиков на самом деле потрудилось узнавать и понимать, что это - основы),

  • Неопределенное волшебство поведения, где вещи происходят позади занавесок и нет никакого общеизвестного факта о том, как они на самом деле работают. Это - истинное волшебство в программировании.

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

0
ответ дан 18 December 2019 в 05:27
поделиться

Один контекст, где я использую термин "черная магия", является управлением байт-кодом (в Java) - преобразование кода программы во времени выполнения так, чтобы это сделало что-то другое, чем, что сделал бы простой код. Часто управление байт-кодом времен очень полезно, но также очень легко выстрелить себе в ногу с ним.

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

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

0
ответ дан 18 December 2019 в 05:27
поделиться

Для некоторых хороших примеров черной магии посмотрите на документацию в исходном коде жемчуга ;-)

0
ответ дан 18 December 2019 в 05:27
поделиться

Классическая волшебная история из приложения к файлу жаргона.

http://catb.org/jargon/html/magic-story.html

прочтите это.

1
ответ дан 18 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

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