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

Кто-нибудь порекомендовал бы изучать J/K/APL?

Я столкнулся с J/K/APL несколько месяцев назад, проработав несколько способов

4b9b3361

Ответ 1

Тысячи лет назад я был программистом APL. К тысячам, я имею в виду еще в 70-м году, когда пользовательский набор символов означал, что у нас были специальные терминалы печати с клавиатурой APL и набором символов, а также IBM selectical typeballs со специальными символами и т.д.

Я пошел на лекцию Кена Айверсона "Почему APL был классным".

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

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

Точка APL (и J и K) состоит в том, чтобы суммировать большие алгоритмы в аккуратные обозначения.

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

Кроме того, поскольку я преследую Project Euler, проблемы с "функциональным программированием lite" Python, поддержанные моими "пропитанными Джином воспоминаниями APL", оба очень полезны в решении упражнений.

Ответ 2

Я работал в J и APL большую часть последних 25 лет и могу полностью рекомендовать оба. Я все еще вернусь к тому или иному, когда у меня есть какая-либо форма анализа данных ad-hoc, и я также использовал его в Project Euler.

Если вас интересует Project Euler, то J определенно тот, который нужно выбрать. Его поддержка бесконечных целых чисел и простых чисел делает его очень подходящим.

Ответ 3

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

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

Некоторые примеры функций J:

1) Любая функция, определенная для работы на одном числе, может быть использована для работы с массивами произвольного ранга. Например:

totient=: * [email protected]%@~.&.q:

NB. Finding the totient of 10
totient 10

NB. Finding the totient of all numbers from 1 to 10
totient"0 (1+i.10)

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

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

NB. Converts an array of binary digits to a decimal number
(#.) 1 0 1
5

NB. Converts a decimal number to an array of binary digits
(#.^:_1) 5
1 0 1

Ответ 4

Я зарабатываю на жизнь APL с 1980 года. Я смотрю, чтобы продолжать делать это еще несколько лет. Это не только очень интересно использовать APL, язык предлагает отличные функции отладки. Современные реализации - это полноценные функциональные языки и объектно-ориентированные.

Я много лет встречался со многими людьми, спрашивая меня, как долго я догадываюсь, что смогу продолжить APL. Этими парнями были dbase и PL/1 и ALGOL, Pascal и Forth, C и Focus и другие программисты. Получил?!

Ответ 5

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

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

Я очень приблизился к добавлению J в качестве выключателя транзакций в моем профиле карьеры на careers.stackoverflow.com, но в конечном итоге я его оставил. Для меня использование J в порядке, производство J, однако, не является.

EDIT:

Это было давно. Я все еще плохо думаю о полных J решениях на производстве (то есть, все ваши MVC). Начиная с исходного ответа, я использовал J как COM в проекте С#, где J имеет большую матрицу, которая была бы неудобной для управления на С# с большим удовлетворением.

Часть нашей работы заключается в том, чтобы сделать модели данных и код говорить. Это не просто преодоление этого качества и J очень краткий синтаксис. В нескольких системах, в отличие от J, есть простые в работе - с IDE и имеют достаточную поддержку, позволяющую упорядочить код по-человечески. Возможности J über-matrix не компенсируют того, чего не хватает.

Ответ 6

Я думаю, что ваши 3 балла показывают, что вам НЕ НУЖНО учиться J. Однако я не могу придумать никакой ситуации, когда изучение нового языка вредно.

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

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

Ответ 7

В эльдарные дни я был разработчиком языка APL, кодируя в ассемблере 370. Я поместил J в OS2, но не научился использовать его для реальной работы. Я сейчас работаю в Java и PHP и оцениваю Python. После первых трех разделов учебника Python меня поразило много общего с APL, которое привело меня сюда.

Я настоятельно рекомендую изучать APL или J как интеллектуальное упражнение. Это изменит ваш подход к программированию (деформирует ваш мозг) и, вероятно, поможет вашему кодированию на Python. Также есть несколько рабочих мест для программистов APL и J и, вероятно, меньше программистов, чем заданий.

Ответ 8

Я работал в качестве программиста APL несколько лет назад в 1970-х годах. Я люблю этот язык, но не использовал его в течение многих лет.

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

Для этого отлично подходят статистические и матричные операции. Вы можете решить проблему программирования лайнера в 3 символа. Гораздо проще доказать правильность этой реализации LP, чем та, которая берет страницы в C, например.

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

Ответ 9

Это забавное подтверждение для меня, пятидесятилетнего человека.

Ранее сегодня я решил изучить новый язык программирования 21-го века после 27-летнего перерыва в нулевом программировании. Я выбрал Python, совершенно наугад, опасаясь основанного на ги и объектно-ориентированного мира, в котором мы все сейчас живем.

К моему большому удовольствию, мои годы, зарабатывающие на жизнь как парень APL в начале 80-х, означают, что я буквально замалчиваю материал, мгновенно понимая:) Просто подумал, что я поделюсь этим.

Ответ 10

Да, изучите APL/J/K, это даст вам уникальный взгляд на то, что возможно.

Я указываю, что @MPelletier "сколько треугольников вписывается в круг" и подразумевается "... но не для реальных проблем", немного близоруко. Да, J Software IDE не хватает некоторых вещей, но создание одной собственной IDE не является большой проблемой, и хорошая среда IDE может маскировать плохой язык (сокращение от 20 строк до 20 символов не должно быть чиханием.) Я делаю APL, если @KaiJaeger имеет, если не дольше, и мой ум может быть искажен, но я никогда не был счастлив программированием чего-либо еще.