Перевод программирование: ПРОГРАММИРОВАНИЕ — Перевод на английский
Перевод на образовательную программу — Магистерская программа «Системное программирование» — Национальный исследовательский университет «Высшая школа экономики»
Перевод для обучения по образовательным программам осуществляется на:
- бюджетные места;
- места с оплатой стоимости обучения.
На бюджетное место могут претендовать следующие категории студентов:
1. Студенты, обучающиеся в НИУ ВШЭ на местах с оплатой стоимости обучения и имеющие право на перевод на бюджетные места в соответствии с Порядком и случаями перехода лиц, обучающихся по образовательным программам среднего профессионального и высшего образования, с платного обучения на бесплатное, утвержденным приказом Министерства образования и науки Российской Федерации от 6 июня 2013 г. № 433.
2. Студенты НИУ ВШЭ, обучающиеся в филиалах НИУ ВШЭ по тем же направлениям подготовки или специальностям, на которые они переводятся в НИУ ВШЭ, но на других образовательных программах.
3. Студенты, ранее обучавшиеся в НИУ ВШЭ по направлениям подготовки или специальностям, отличным от тех, на которые они переводятся одновременно с восстановлением в НИУ ВШЭ.
4. Студенты, обучающиеся в других образовательных организациях по тем же направлениям подготовки или специальностям, на которые они переводятся в НИУ ВШЭ.
5. Студенты, обучающиеся в других образовательных организациях по направлениям подготовки или специальностям, отличным от тех, на которые они переводятся в НИУ ВШЭ.
* Перевод студента на другую образовательную программу внутри НИУ ВШЭ в обязательном порядке согласуется с деканом факультета, с которого переводится студент.
Вакантные бюджетные места
Правила перевода студентов Национального исследовательского университета «Высшая школа экономики» и студентов других образовательных организаций в Национальный исследовательский университет «Высшая школа экономики»
Только на места с оплатой стоимости обучения могут быть переведены:
- студенты, обучающиеся в НИУ ВШЭ, в филиалах НИУ ВШЭ и других образовательных организациях на местах с оплатой стоимости обучения;
- студенты, обучающиеся в НИУ ВШЭ на бюджетных местах и имеющие не более двух академических задолженностей по дисциплинам, которые являются обязательными на той образовательной программе, на которую они желают перевестись.
Сроки подачи заявлений на перевод
• с 01 июня по 30 июня;
• с 01 декабря по 15 декабря
С особенностями процедуры перевода на образовательную программу, а так же списком необходимых документов можно ознакомиться по ссылкам:
Контактное лицо:
Русский перевод книги «The Rust Programming Language» (TRPL) / Хабр
Добрый праздничный день.
По окончанию перевода официальной версии TRPL или раст-бука (ссылка на русский вариант), я решил написать про свои размышления, наблюдения и встретившиеся сложности.
Перевод последней актуальной версии сделан на основе последней редакции из основного репозитория английского оригинала.
До перевода я в свободное время прочитал английский оригинал книг TRPL и Rust-By-Example. Предыдущий русский перевод смотрел редко, так как он на тот момент местами серьезно устарел по содержанию. Мой предыдущий опыт складывается из пары десятков лет java backend R&D проектов разной направленности, от «кровавого enterprise» до стартап-ов, с чем и связана основная деятельность. От себя могу ответственно сказать, что действительно многие нюансы языка или другие детали после первого прочтения английской версии остались мной незамеченными. По этой причине я рекомендую попробовать хотя бы «пролистать» русский вариант. Если вы новичок в Rust вроде меня, то с большой вероятностью найдете в переводе что-то не замеченное ранее. Если английский для вас «со словарем или около этого», если вы хотели бы познакомится с Rust, то тем более.
Перевод не идеален, потому что сам оригинал изобилует большим количеством длинных перегруженных, «сложных сочиненно-подчиненных» предложений. Я не берусь судить строго авторов, можно ли было написать проще? Наверное да…, но профессиональным переводчиком я не являюсь. В редких местах не всегда мотивированная сложность оригинала приводит к тому, что возможно некоторые предложения или их части выглядят слегка «инородными». Этого хотелось избегать, но может не везде удалось. Думаю, что таких мест не много в книге и что особенно важно они не влияют на главный смысл материала, имея второстепенный, вспомогательный характер. При переводе с одной стороны хотелось сохранить текст узнаваемый в оригинале (без фанатизма), с другой — не потерять важные детали концентрируясь на главном, с третьей приблизить перевод к родному языку без «тяжелых англицизмов», но с более-менее понятной, устоявшейся терминологией, с четвертой добавить не всегда очевидные мини-пояснения, вплетая их в текст. Попробуйте держать оригинал под рукой для таких, надеюсь, редких случаев.
В общей сложности перевод занял около 7 месяцев, с начала октября 2019 до почти конца апреля 2020. Мной переводилось, поправлялось, вычитывалось порядка 100 страниц книги разного объема и сложности, от коротких, до очень длинных и сложных в конце. Делал в основном вечером, в выходные или праздники, когда позволяло свободное время. Перевод выполнялся на ресурсах проекта gitlocalize.com, который предоставляет возможности коллективного перевода. Но основным преимуществом этого ресурса, я для себя нашел «встроенные» возможности «машинного перевода» (от google?), плюс код gitlocalize позволяющий получить корректными тэги кода и разметки из оригинального текста. Чтобы перевести абзац достаточно кликнуть кнопку и получить текст «разной степени пригодности» без полного и ручного набора, сохраняющий необходимые разметки и тэги из оригинала. Это все экономило время, не смотря на «машинность» перевода. Переставить слова в более естественный порядок, поправить окончания, поменять поломанный смысл было быстрее, чем делать ручной набор, допуская неизбежные «очепятки». Это было настолько удобнее, что со временем я перестал пытаться вычитывать предыдущий русский перевод, который частично имелся в наличии. Причиной было то, что новый текст изменился по содержанию и/или по встроенной в текст разметке, так что его вычитывание и изменения занимали больше времени, чем сделать машинный перевод абзаца со вполне корректной разметкой кода, внести в него необходимые исправления, причесать, поправить стилистику и т.д. По моему субъективному ощущению, я переделал или перевел с нуля от 70 до 85% текста, потому что часть вроде как готового, кем то ранее переведенного текста приходилось заново перечитывать и вносить точности из оригинала.
Коллективные возможности gitlocalize в данном случае пригодились меньше в силу малого числа участников перевода. Из хорошего — это то, что остается возможность использования репозитория для дальнейших правок и дальнейшей синхронизации при изменениях и дополнениях оригинала. Сам ресурс gitlocalize периодически переставал работать на разное время из-за не всегда успешных обновлений сайта и/или кода, но в общем это было «не смертельно», но приостанавливало перевод на время.
Зачем мне это было нужно? Можно считать это моим вкладом в open source. Около 20 лет назад я начал изучать и позже работать на новом и перспективном ЯП. С год назад я подумал о том «куда дальше», обратил внимание на движение языков/компиляторов в сторону получения кода, как можно близкого к «двоичному», его native исполнения, где-то с GC (garbage collector), где-то почти без него. По итогу размышлений я начал искать в каком направлении можно приложить знания и умения «на перспективу» — Kotlin, Scala, Go, последним в списке был Rust. После небольшого ознакомления со списком личный выбор стал очевидным. Стали понятны важные плюсы — обеспечение безопасности Rust, минусы в его сложности, высоком пороге вхождения, перспективы его развития и возможные ниши использования. Субъективно мне ЯП «зашел», он стал занимать мое свободное время для изучения и практики. Я считаю его универсальным ЯП, со временем планирую найти full-time вакансию на Rust, хотя рынок проектов на нем все еще достаточно мал по сравнению с остальными ЯП, особенно в части Enterprise решений. Субъективно могу говорить, что ЯП возможно все еще отчасти недооценён. Можно заметить оправданный интерес «ИТ гигантов» к ЯП вроде Microsoft, немного Intel, но список использующих его в реальных проектах не большой, официально порядка 150 компаний, что не много в глобальном плане.
Какие наблюдения появились за год неспешного освоения?
Вряд ли это язык для тех, кто массу сил и своего времени уже вложил в c++, как это ни парадоксально. Он им чаще не нужен по многим объективным и субъективным причинам, которые нет смысла обсуждать слишком подробно. Я бы произнес вслух определенный личностный «downgrade» в плане предыдущего опыта, у кого он был, на который не все могут решится и наследие «legacy» кода для больших компаний, хотя это не единственные причины. Субъективно, в Rust приходят в массе из ЯП «попроще», вроде Javascript, Python, Ruby, Java и т.д.
Невозможно переписать существующие проекты на Rust, это далеко не всегда нужно и далеко не целесообразно, хотя единичные, успешные примеры есть. По этим причинам, субъективно, это скорее ЯП для новых проектов.
Что меня мотивировало при переводе? Отчасти я начал перевод, а после процесс «затянул». Появился некоторый азарт и возможность видеть результат, абзац за абзацем, неделю за неделей. Еще был мотив сделать перевод для сына, студента — первокурсника ИТ специальности, да и вообще для всех студентов, будущих возможных коллег. Чтобы они получили возможность начать изучение и сами получить представление о ЯП, добавлю «сыну, одному из тысяч студентов данный перевод посвящается».
Разработка компиляторов сложное, долгое и дорогое удовольствие, но Rust развивается, цикл выпуска новых версий компилятора выдерживается, IDE хорошо подтянулись в помощи разработчику за последний год. Я как ни странно верю в большое будущее данного ЯП, что бы ни говорили про его «игрушечность». Да, разработка языка и инструментов Rust это не так легко и быстро, как этого иногда хотелось бы всем поклонникам Rust, но увы разных ресурсов довольно часто на все не хватает — таковы реалии нашей жизни. Покидать «тапки или тухлые помидоры» можно в телеграмм чате для Rust переводов.
[Перевод] Программирование только классами — PCNEWS.RU
В моем посте Implementing numbers in «pure» Ruby («Разрабатываем числа на «чистом» Ruby») я обозначил рамки, которые разрешали использовал базовые вещи из Ruby вроде оператора равенства, true
/false
, nil
, блоки и т.п.
Но что, если бы у нас вообще ничего не было? Даже базовых операторов вроде if
и while
? Приготовьтесь к порции чистого объектно-ориентированного безумия.
- Можем определять классы и методы
- Мы должны писать код так, будто в Ruby нет никаких готов классов из коробки. Просто представьте, что мы начинаем с абсолютного нуля. Даже
nil
не существует - Единственный оператор, который мы можем использовать — присваивание (
x = something
).
Условные операторы важны — они являются основой логики для наших программ. Как же справляться без них? Я придумал такое решение: мы можем интегрировать логику во ВСЕ объекты
Сами подумайте, в динамических языках вроде Ruby логические выражения не обязательно должны вычисляться в какой-нибудь класс вроде «Boolean». Вместо этого, эти языки считают любой объект правдимым кроме некоторых особых случаев (nil
и false
в Ruby; false
, 0
и ''
в JS). Именно поэтому добавление этого функционала не так уж дико, как кажется на первый взгляд. Но давайте начнем.
Базовые классы
Давайте создадим самый базовый класс, который будет предком всего остального:
class BaseObject
def if_branching(then_val, _else_val)
then_val
end
end
Метод if_branching
— основа нашей логической системы. Как видите, мы сразу же предполагаем, что любой объект правдив, так что мы возвращаем then_val.
Что насчет лжи? Давайте начнем с null:
class NullObject
То же самое, но возвращаем второй параметр.
В Ruby практически все классы наследуются от класса Object
. Но на самом деле есть другой класс по имени BasicObject
, который находится даже выше в иерархии. Давайте сымитируем этот стиль и создадим наш собственный Object
:
class NormalObject
Все, что мы определим позже должно быть унаследовано от NormalObject
. Потом мы можем добавить в него глобальные вспомогательные методы (вроде #null?
).
If-выражения
Всего этого уже достаточно для того, чтобы определить наши if-выражения:
class If
И все! Я серьезно. Оно просто работает.
Гляньте вот этот пример:
class Fries NullObject
BurgerMeal. new(Fries.new).sauce # ==> Ketchup
Возможно, вы уже думаете: «каким боком нам это полезно, если мы не можем использовать с ним блоки кода?». И что насчет «ленивости»?
Ознакомьтесь с этим примером:
# Псевдокод
if today_is_friday?
order_beers()
else
order_tea()
end
# Наш If класс
If.new(today_is_friday?, order_beers(), order_tea()).result
В нашем примере мы закажем пиво ВМЕСТЕ с чаем вне зависимости от дня недели. Это происходит из-за того, что аргументы вычисляются до передачи в конструктор.
И это (ленивость) очень важный механизм, т.к. без него наши программы были бы медленные и даже неправильные.
Решением этого является просто оборачивание кода в другой класс. Позже я буду называть такие обертки процедурами (ориг. «callable»):
class OrderBeers
def call
# do something
end
end
class OrderTea
def call
# do something else
end
end
If.new(today_is_friday?, OrderBeers. new, OrderTea.new)
.result
.call
Собственно, код не будет исполнен, пока мы явно не вызовем метод #call
. Вот и все. Таким образом мы можем комбинировать сложную логику и наш класс If
.
Булевы типы (просто потому, что мы можем)
У нас уже есть логические типы (null и все остальное), но было бы неплохо добавить специальные булевы классы для выразительности. Приступим:
class Bool
Мы определили собирательный класс Bool
, класс TrueObject
без какой либо логики (она не нужна, т.к. любой экземпляр этого класса уже автоматически будет считаться правдивым) и классFalseObject
, переопределяющий #if_branching
так же, как и NullObject
.
Вот и все. У нас есть специальные булевы классы. Я еще добавил логическое НЕ для удобства:
class BoolNot
Оно всего-лишь «переворачивает» аргументы для #if_branching
. Просто, но очень полезно.
Циклы
Окей, другая важная вещь в языках программирования — циклы. Мы можем добиться цикличности с помощью рекурсии. Но давайте напишем специальный оператор While
.
В целом он выглядит так:
while some_condition
do_something
end
Что может быть описано вот так: «если условие выполнено, то сделай вот это и повтори цикл».
Интересная особенность в нашем случае то, что условие должно быть динамичным — оно должно быть в состоянии меняться между шагами цикла. Процедуры спешат на помощь!
class While
Давайте создадим связные списки и функцию, которая считает сколько в списке null-объектов.
Список
Ничего особенного:
class List
Еще нам нужно как-то его обходить (никаких #each
с блоком в этот раз!). Давайте создадим класс, который будет этим заниматься:
#
# Позволяет обойти лист один раз
#
class ListWalk
Думаю, основная логика вполне проста. Нам также понадобились вспомогательные процедуры для #head
и #tail
, чтобы избежать null-pointer ошибок (даже при том, что наш null на самом деле не null, мы все равно рискуем вызвать несуществующий метод).
Счетчик
Просто объект, который будет использоваться для подсчетов:
class Counter
У нас пока нет чисел и я решил не тратить время на их создание. Вместо этого я использовал списки (гляньте мой пост про создание чисел здесь).
Интересная штука здесь — метод #inc_callable
. Мне кажется, если бы мы хотели разработать наш собственный «язык» со всеми этими базовыми классами, то это могло быть принятым соглашанием добавлять методы, оканчивающиеся на _callable
и возвращающие процедуру. Это что-то вроде передачи функций в качестве аргументов в функциональном программировании.
Считаем null в списках
Для начала нам нужна проверка на null. Мы можем добавить ее в NormalObject
и NullObject
как вспомогательный метод #null?
(схожий с #nil?
из Ruby):
class NormalObject
Ну, а теперь мы можем определить наш null-счетчик:
#
# Возвращает счетчик, увеличенный раз за каждый NullObject в списке
#
class CountNullsInList
Вот и все. Мы можем скормить ему любой список и он подсчитает количество null-объектов в нем.
Заключение
Объектно-ориентированное программирование — очень интересный концепт и, видимо, очень мощный. Мы, по сути, создали язык программирования (!), используя только лишь чистое ООП без каких-либо дополнительных операторов. Все, что нам нужно было: способ создать класс и переменные. Другая прикольная фишка — у нас нет никаких примитивов в нашем языке (например, у нас нет null
, вместо этого мы просто создаем экземплярNullObject
). О, чудеса программирования…
Код можно найти в моем репозитории experiments.
Habrahabr.ru
прочитано 22777 раз
In computer programming, package principles are a way of organizing classes in larger systems to make them more organized and manageable. | В компьютерном программировании пакетные принципы — это способ организации классов в более крупных системах, чтобы сделать их более организованными и управляемыми. |
RapidMind produced a stream programming package for PS3, but were acquired by Intel in 2009. | RapidMind выпустила пакет потокового программирования для PS3, но были приобретены Intel в 2009 году. |
Другие результаты | |
The important thing being I just upgraded our cable package with programming from every conceivable reality. | Важно то, что я добавил в список каналов программы из каждой возможной реальности. |
Erik Toppenberg, executive vice president of programming, received a severance package worth $5.34 million. | Эрик Топпенберг, исполнительный вице-президент по программированию, получил выходное пособие на сумму 5,34 миллиона долларов. |
Netpbm is an open-source package of graphics programs and a programming library. | Netpbm — это пакет графических программ с открытым исходным кодом и библиотека программирования. |
With SiriusXM, additional Xtra channel programming is available with the SiriusXM package. | С камеры, дополнительного программирования Экстра канал доступен в пакете с SiriusXM. |
Programming of packaged software constitutes one of the most rapidly growing segments of the computer services industry. | Программирование пакетного программного обеспечения представляет собой один из наиболее быстро растущих сегментов индустрии компьютерных услуг. |
In computer programming, a subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. | В компьютерном программировании подпрограмма представляет собой последовательность программных инструкций, выполняющих определенную задачу, упакованную в единое целое. |
CAM packages are analogous to IDEs in general programming. | Пакеты CAM аналогичны IDEs в общем программировании. |
MATLAB supports object-oriented programming including classes, inheritance, virtual dispatch, packages, pass-by-value semantics, and pass-by-reference semantics. | MATLAB поддерживает объектно-ориентированное программирование, включая классы, наследование, виртуальную диспетчеризацию, пакеты, семантику передаваемых значений и семантику ссылок. |
There are also several programming packages which provide this conversion functionality, such as BioPython, BioRuby and BioPerl. | Существует также несколько программных пакетов, которые обеспечивают эту функцию преобразования, такие как BioPython, BioRuby и BioPerl. |
Select level packages differ in terms of the premium programming they each include. | Пакеты Select level отличаются с точки зрения премиального программирования, которое они включают в себя. |
To speed creation of continuous simulations you can use graphical programming software packages like VisSim or Simcad Pro. | Для ускорения создания непрерывных симуляций вы можете использовать графические программные пакеты программирования, такие как VisSim или Simcad Pro. |
Программирование текста устного перевода посредством переводческой семантографии Текст научной статьи по специальности «Языкознание и литературоведение»
6. WDP — The Wordsworth dictionary of proverbs / G.L. Apperson [et al.], Wordsworth editions Ltd. Hertford-London, 2006.
About the valuation semantics of the concept “wine” in the English and the Russian paremies
There is given the comparative analysis of the paremies of the English and the Russian languages expressing the valuation aspects of the concept «wine”. There are considered the similarities and differences in the interpretations of the given concept in the Russian and English paremic world pictures.
Key words: concept, paremy, world picture, valuation, the English language, the Russian language.
Е.В. АликинА (Пермь)
ПРОГРАММИРОВАНИЕ ТЕКСТА УСТНОГО ПЕРЕВОДА ПОСРЕДСТВОМ ПЕРЕВОДЧЕСКОЙ СЕМАНТОГРАФИИ
Рассматривается взаимосвязь процессов порождения речи при устном переводе и одной из составляющих профессиональной компетенции — переводческой семантографии, программирующая функция которой описывается на основе психолингвистических теорий. Предлагается система коммуникативной записи. Приводятся рекомендации по организации процесса обучения устному последовательному переводу.
Ключевые слова: устный последовательный перевод, переводческая семантография, речевая деятельность, внутреннее программирование.
Специфика переводческой деятельности заключается в том, что она носит рецептивнорепродуктивный характер. Рецепция исходного текста и порождение текста перевода опосредованы наименее изученным этапом, который относится к фазе программирования высказывания.
Одним из способов экстериоризации внутренней программы высказывания можно считать переводческую семантографию (далее ПС), под которой мы понимаем а) вид профес-
сиональной фиксации информации, используемый переводчиками в процессе восприятия сколь угодно длительного отрезка речи с целью снятия нагрузки на оперативную память и создания программы порождения текста перевода; б) аналитико-синтетический процесс ментальной обработки и фиксации информации в процессе последовательного перевода [1]. Прежде чем перейти к рассмотрению программирующей функции ПС, определим ряд ключевых моментов, связанных с теорией порождения речи, в частности с фазой внутреннего программирования.
Проблемы порождения речи, а следовательно, высказывания и текста входят в круг проблем, исследуемых целым спектром наук. Широкую известность в теории порождения речи получили работы Л. С. Выготского, Н.И. Жинкина, А.А. Леонтьева, А.Р. Лурии, Т.В. Рябовой, А.А. Смирнова и др. Основополагающей в отечественной психологии речи считается модель порождения речевого высказывания Л.С. Выготского. По Л.С. Выготскому, процесс порождения осуществляется «от мотива, порождающего какую-либо мысль, к оформлению самой мысли, к опосредованию ее во внутреннем слове, затем — в значениях внешних слов и, наконец, в словах» [2, с. 375]. Л.С. Выготский выдвинул теорию фазовой структуры речевого акта, впоследствии получившую развитие в работах А.А. Леонтьева [6]. Согласно данной теории, порождение речи состоит из последовательно сменяющих друг друга этапов или фаз: интенции, внутреннего программирования речевого действия, реализации программы. Остановимся подробнее на интересующем нас этапе программирования.
Программирование предполагает деятельность, связанную с управлением и кодированием информации, а также с созданием последовательности действий с целью решения поставленной задачи. Посмотрим, как преломляется данное определение в речевой деятельности. Необходимо отметить, что термин программа речевого высказывания впервые был предложен А.А. Леонтьевым и заменил существовавшие ранее опосредование мысли во внутреннем слове (Л.С. Выготский), замысел (Н.И. Жинкин, А.Н. Соколов), внутриречевая схема высказывания (Т.В. Рябова), первичная смысловая запись (А.Р. Лурия).
Внутреннее программирование представляет собой «неосознанное построение некоторой схемы, на основе которой в дальней-
© Аликина Е.В., 2012
шем порождается речевое высказывание» [6, с. 158]. Можно сказать, что в речевой деятельности внутреннее программирование предполагает выстраивание некоторой кодированной последовательности для решения задачи формулирования мысли. Как отмечают исследователи внутреннего программирования, это связующее звено между рождающей мысль интенцией и развертыванием мысли [6], «планирование того, что должно быть выражено в высказывании» [4, с. 19], «основной тезис текста, являющийся предварительным смысловым планом» [3, с. 74-75], «содержательный инвариант будущего текста», поскольку «процесс порождения речи не замыкается в рамках отдельных высказываний, но предполагает программирование (отчасти реализацию) целостного текста и его отдельных содержательных “блоков”» [9, с. 387]. Примечательно, что именно на этой стадии тема впервые отделяется от ремы [7].
Начальным этапом внутреннего программирования являются «замысел» (Л.С. Выготский, А.Р. Лурия, Н.И. Жинкин, А.А. Леонтьев, И.А. Зимняя), «общий смысл» (Н.И. Жинкин), которые «как нерасчлененный смыслокомп-лекс» [3, с. 74] задаются говорящим в единицах «объективного языкового кода» (А.Р. Лурия, Л.С. Цветкова), «кода образов и схем» (Н.И. Жинкин) и не зависят от конкретного национального языка. Формой структурирования замысла и способом удержать его в процессе порождения речи является программа [4]. Это «динамическое образование, создающееся в процессе развертывания замысла в пространственно-временной схеме» и объединяющее в себе ответ на вопросы, «что сказать, в какой последовательности и как сказать» [3, с. 77]. В связи с этим «этап внутреннего программирования является субстратом актуального членения предложения» [6, с. 221]. Как отмечает А.Р. Лурия, тема (воплощающая цельность текста) и рема (обеспечивающая его связность), как обязательные составные части программы, образуют исходную мысль, т.е. систему тех связей, которые потенциально должны фигурировать в будущем речевом высказывании. Далее, в процессе высказывания как тема, так и рема должны будут существенно расшириться, разделившись на целую цепь звеньев и став тем самым сукцессивной последовательностью [7].
Переводческая деятельность, как любой другой вид речевой деятельности, характеризуется единством трех сторон: мотивационной, целевой и исполнительной. Психолингвистическая модель перевода, оперирующая
данными аспектами теории речевой деятельности, условно разбивает процесс перевода на два этапа: преобразование переводчиком понимания содержания оригинала в свою внутреннюю программу, а затем — развертывание программы в тексте перевода. Стяжение и развертывание программы, по мнению А.А. Леонтьева, характерно для всех видов перевода, за исключением синхронного, где наблюдается «разрывность» программы [6, с. 169]. Ряд исследователей высказывают сожаление по поводу того, что объяснительная сила модели ограничивается тем, что мы не знаем, как происходит «свертывание» и «развертывание», какие элементы содержания сохраняются во внутренней программе и как выбирается один из возможных путей реализации программы в тексте перевода. Однако мы склонны предполагать, что именно изучение ПС позволит ответить на эти вопросы.
Существенно, что инвариантом при переводе является именно «внутренняя программа речевого высказывания» как система функционально «“нагруженных” смыслами элементов предметно-изобразительного кода или действий над подобными элементами» [6, с. 172]. Более того, «успех перевода как аналитикосинтетической деятельности в значительной степени зависит от адекватности перехода от анализа к синтезу, который как раз совпадает с фазой внутреннего программирования» [4, с. 135].
Таким образом, порождение текста перевода подчинено общим закономерностям порождения речи. Особенность заключается в том, что «в переводе замысел задан другим человеком» [8, с. 39], что, однако, не исключает наличие у переводчика собственной программы. Замысел и программа, как отмечают И.А. Зимняя и В.И. Ермолович, определяются разной степенью полноты и глубины в зависимости от вида перевода [8, с. 37]. Последовательный перевод в сравнении с синхронным характеризуется большей степенью развернутости программы, что еще раз подчеркивает необходимость в целенаправленном обучении программированию высказывания в процессе подготовки последовательных переводчиков. ПС может явиться экстериоризованным средством программирования высказывания.
Впервые сходства записи переводчика и внутренней программы были выделены в психолингвистическом исследовании Н.А. Краев-ской [4], посвященном семантическому компоненту программы речевого высказывания. Было установлено, что переводческая запись соответствует этапу речевой деятельности,
непосредственно предшествующему этапу семантической и грамматической реализации, что подтвердило гипотезу о том, что «система записи отражает не столько то, что воспринято переводчиком, сколько то, что он намерен сказать» [4, с. 76]. Графическая репрезентация записи при этом соответствует основным характеристикам внутренней речи: опоре на смысл, универсальности языка записи, предикативности, свернутости, грамматической аморфности и др. «Символы, используемые переводчиками, обладают всеми этими чертами, и в то же время нет сомнений, что именно они используются в качестве смысловых опорных пунктов при порождении речи на языке перевода» [4, с. 92].
Интересным представляется вывод
Н.А. Краевской о том, что употребление символов заранее направлено на последующее порождение, т. к. в ходе восприятия текста уже имеется установка на воспроизведение, заставляющая переводчика располагать запись в соответствующем порядке (Там же, с. 75). Установка записывать так, чтобы воспроизвести наиболее полно и адекватно, чрезвычайно важна в практике обучения устному переводу. В связи с этим необходимо в большей мере ориентировать обучающихся не на запись воспринятого, а на опережение собственной речевой реализации, т.е. запись порождаемого. С этой целью в систему упражнений можно включить задания на «ретроспективную» фиксацию текста перевода и ее сопоставление с вариантом записи исходного текста.
Представление ПС как аналога внутренней программы порождения высказывания позволяет нам расставить необходимые акценты в разработке собственной системы ПС. Поскольку внутренняя программа несет в себе содержательный инвариант будущего высказывания, очевидно, что инвариант должен быть зафиксирован и при ведении ПС. Тема-рематическая организация программы еще раз подтверждает целесообразность записи темы и ремы как коммуникативных компонентов текста, а также направленность на предикативный характер записи. Все вышесказанное позволяет нам подойти к описанию предлагаемой системы записи, которая может быть обозначена тремя этапами: информация, относящаяся к теме, обводится в круг; информации, относящиеся к ремам, соединяются стрелками-лучами с темой и записываются ниже, что позволяет сохранить вертикализм; по мере того как одна из рем становится темой, она обводится, и стрелки-лучи идут от нее. Приведем пример записи переводческой семантограммы по данной системе.
Переводческая семантограмма
Как показывает переводческая и педагогическая практика, «коммуникативная система» ПС позволяет не только зафиксировать инвариант исходного текста, содержащийся в теме и реме, что отражается на качестве перевода, но и рационализировать сам процесс записи. Во-первых, переводчику не приходится осуществлять распределение поступающей информации по трем-четырем составляющим, поскольку необходимо оценивание сообщения только по двум категориям: старое — новое. Во-вторых, за счет стрелок переводчик освобождается от повторной записи одних и тех же элементов при возврате к теме через несколько высказываний. Данная система позволяет отразить не только то, что было воспринято переводчиком, но и то, что он намерен высказать на языке перевода. При этом вариантов речевого оформления перевода по одной и той же семантограмме может быть множество, что свидетельствует о мультилингвальности и элитарности переводческой личности [5].
Таким образом, владение ПС требует от переводчика когнитивной гибкости, креатив-
ности, разнообразия в мыслительных операциях, легкости кодовых переключений, особым образом организованного языкового сознания, формирование которого следует рассматривать как цель профессиональной подготовки будущих переводчиков, обучение ПС как инструмент для ее достижения, а саму запись — как материал для изучения скрытых механизмов речемыслительной деятельности.
Литература
1. Аликина Е.В. Таксономический аспект устного последовательного перевода // Вестн. Удм. унта. 2011. Вып. 2. С. 59-66.
2. Выготский Л.С. Избранные психологические исследования. Мышление и речь. Проблемы психологического развития детей. М. : Изд. АПН РСФСР, 1956.
3. Зимняя И.А. Психологические аспекты обучения говорению на иностранном языке : пособие для учителей ср. школы. М. : Просвещение, 1978.
4. Краевская Н.А. Семантический компонент внутренней программы речевого высказывания : дис. … канд. филол. наук. М., 1981.
5. Кушнина Л.В., Силантьева М.С. Языковая личность переводчика в свете концепции переводческого пространства // Вестн. Перм. ун-та. 2010. Вып. 6 (12). С. 71-75.
6. Леонтьев А.А. Психолингвистические единицы и порождение речевого высказывания. М. : Наука, 1969.
7. Лурия А.Р. Язык и сознание. М. : Изд-во МГУ, 1998.
8. Психология перевода : учеб. пособие / сост. И.А. Зимняя, В.И. Ермолович. М. : МГПИИЯ им. М. Тореза, 1981.
9. Языкознание. Большой энциклопедический словарь / гл. ред. В.Н. Ярцева. М. : Большая рос. эн-цикл., 1998.
Oral interpretation text programming by means of translation semantography
There is considered the correlation of the processes of speech production in oral interpretation and one of the components of the professional competence -translation semantography; its programming function is described on the basis of psycholinguistic theories. There is suggested the system of communicative record. There are given the recommendations in organization of the process of oral consecutive interpretation teaching.
Key words: oral consecutive interpretation, translation semantography, speech work, inner programming.
Д.В. СПИРИДОНОВ (Екатеринбург)
прагматика повествования
И ПОНЯТИЕ «ПАКТ ЧТЕНИЯ»*
Анализируется эвристический потенциал понятия «пакт чтения» (pacte de lecture) в связи с задачами изучения прагматики повествовательных текстов. Предлагается рассматривать «пакт чтения» как имплицитное соглашение между автором и читателем, описываемое как взаимодействие нарративного и рецептивного кодов.
Ключевые слова: пакт чтения, нарратив, прагматика повествования, рецепция.
Одна из фундаментальных проблем нар-ратологии заключается в определении семантического статуса повествовательных инстанций (в частности нарратора и адресата литературного повествования, такого адресата также иногда именуют эксплицитным читателем, в терминологии Р. Барта -narrataire) и, следовательно, всего нарративного означаемого. Попытки решить эту проблему путем апелляции к традиции логической семантики оказываются неудачными в силу фундаментальной неадекватности теоретических положений последней специфике литературной коммуникации, для которой категории «достоверности»/«недосто-верности», востребованные логикой, ориентирующейся прежде всего на язык науки, в сущности, иррелевантны. В методологическом отношении более перспективной представляется попытка редуцировать семантический анализ к изучению прагматики повествования, понимаемого в этом случае как особый коммуникативный акт. Эта перспектива применительно к литературному тексту была намечена Дж. Сёрлем в его знаменитой статье «Логический статус художественного дискурса» [5]. Сёрл относится к основателям теории речевых актов, по сути, именно он сформулировал основные ее положения, обобщающие опыт предшественников (прежде всего Дж. Остина), а также вписывающие эту новую дисциплину в теоретический контекст семантики и прагматики. Его по-
* Работа выполнена в рамках реализации ФЦП «Научные и научно-педагогические кадры инновационной России» при поддержке Министерства образования и науки РФ (грант № КК643Р-50).
© Спиридонов Д.В., 2012
lGl
Перевод байт-кода Java на другие представления и языки программирования
Я ищу ways/tools/projects для перевода байт-кода Java на другие языки программирования или, если это не удастся, по крайней мере, в структурированное представление (например, XML). В идеале, естественно, с открытым исходным кодом.
Я посмотрел на ASM, на «bytecode manipulation and analysis framework». Он не поддерживает перевод в другие представления, но выглядит как хорошая основа для такого проекта. К сожалению, ни один из проектов, перечисленных на их странице пользователей , не подходит близко.
java
translation
bytecode
decompiling
Поделиться
Источник
Tim Bunce
12 марта 2009 в 12:54
4 ответа
- Какие библиотеки были перенесены на разные языки программирования?
Поскольку я работаю с разными платформами и языками программирования, я обнаружил, что существует много хороших библиотек, которые портированы с другим языком программирования, чем его оригинал. Например, JUnit и Log4j, которые были перенесены на несколько разных языков. Иногда, если я уже привык…
- Языки программирования с python-подобным синтаксисом, но генерацией собственного кода
Может ли кто-нибудь указать на язык программирования, который имеет python-подобный синтаксис, но с самого начала был разработан для генерации собственного кода? Я знаю только Boo, но он использует . net, а не машинную генерацию кода. Ну, если не что иное, как python-подобные языки, которые…
7
ASM имеет дерево api, которое в основном может дать вам полную структуру байт-кода. Похоже, что это довольно легко использовать или даже посетитель api, чтобы распечатать это в XML или каком-то другом формате. Хотя не знаю, какая от этого польза.
Перевод обратно в Java — это работа декомпилятора, и такие, как Джад, делают это нормально. Но это трудно, потому что а) существует информация, потерянная во время перевода исходного кода в байт-код, и Б) существует двусмысленность в том, что несколько источников могут давать один и тот же байт-код.
Если вы действительно хотите напрямую перейти от байт-кода к другому высокоуровневому языку, это будет трудно сделать как всесторонне, так и осмысленно, по тем же причинам декомпиляция трудна, за исключением еще худшего-на другой язык.
Если вы хотите перейти от источника Java к источнику другого языка, это было сделано раньше, как в этом конвертере Java-to-Python . Это несколько проще , так как вы можете преобразовать Java в AST с помощью чего-то вроде Antlr или встроенных инструментов компилятора Java, Project Jackpot и т. д. Даже тогда, я полагаю, вы не получите очень идиоматичный код на целевом языке.
Поделиться
Alex Miller
12 марта 2009 в 14:10
2
Попробуйте BCEL (Byte code engineering library).
Вы можете реализовать интерфейс посетителя, который вы можете использовать для генерации того, что вы хотите (исходный код на другом языке , пользовательский AST, xml, что угодно).
Я использовал его для проекта в колледже, где я (в основном) модифицировал структуру анализа программ, которая работала над исходным кодом Java, в ту, которая также могла работать с кодом Java байта. Эта задача включала в себя создание узлов для внутреннего представления структуры анализа AST.
Также,
Я бегло просмотрел документацию по упомянутому вами проекту «ASM». Похоже, что он определяет несколько классов vistior. Вы должны быть в состоянии использовать их, чтобы делать то, что вы хотите, а также.
Если вы не знакомы с шаблоном посетителя, ознакомьтесь с описанием здесь . Кроме того, если вы еще не читали ее, книга «Банда четырех» — это хорошее чтение.
Поделиться
Scott Wisniewski
12 марта 2009 в 16:50
1
Похоже, вы ищете кросс-компилятор. Я знаю о проекте xmlvm , но никогда им не пользовался. Может быть, это соответствует вашим потребностям.
Поделиться
Björn Raupach
12 марта 2009 в 13:04
- Различия байт-кода в разных языках программирования
Я знаю, что несколько интерпретируемых языков программирования (PHP, Python, Java, Smalltalk) используют байт-код в качестве промежуточного шага для выполнения кода. Есть ли разница между формой байт-кода, генерируемого интерпретаторами разных языков, как и между Assembly опкодами для разных…
- Компиляция против перевода, «compiling» Java в байт-код?
Мое понимание таково, определения: Перевод -наличие кода на каком-то языке, генерация кода на каком-то другом языке. Компилятор -перевод в машинный код. Машинный код -прямые инструкции для CPU. Теперь, начиная с docs.oracle.com : компилятор языка программирования javac — Java Компилятор…? Я…
1
Вы можете попробовать GCJ преобразовать байт-код в машинный код.
Если вы хотите конвертировать в языки, подобные python/groovy/ruby, возможно, рассматривая возможность написания на этих языках непосредственно на JVM (я понимаю, что это не совсем то, что вы ищете).
Возможно, соберите несколько примеров из чего-то вроде этого средства просмотра контуров кода Eclipse байт .
Наконец, преобразование с одного низкоуровневого языка (байт-кода) на другой будет довольно сложным, и корректность будет проблемой.
Поделиться
basszero
12 марта 2009 в 13:12
Похожие вопросы:
Можно ли преобразовать байт-код LLVM в байт-код Java?
Я слышал, что google app engine может запускать любой язык программирования, который может быть преобразован в байт-код Java через его JVM . Я задался вопросом, Можно ли преобразовать байт-код LLVM…
Каковы некоторые новые и появляющиеся языки программирования
Каковы некоторые новые и захватывающие языки программирования? Я уже посмотрел на ruby и python. Есть ли там какие-нибудь другие языки
Существуют ли какие-либо языки программирования, нацеленные на PHP, кроме Haxe?
PHP не получает большой любви, но все равно является победителем в easy deployment (для дешевого хостинга). Существуют ли какие-либо языки программирования (кроме Haxe ), которые нацелены на PHP?…
Какие библиотеки были перенесены на разные языки программирования?
Поскольку я работаю с разными платформами и языками программирования, я обнаружил, что существует много хороших библиотек, которые портированы с другим языком программирования, чем его оригинал….
Языки программирования с python-подобным синтаксисом, но генерацией собственного кода
Может ли кто-нибудь указать на язык программирования, который имеет python-подобный синтаксис, но с самого начала был разработан для генерации собственного кода? Я знаю только Boo, но он использует…
Различия байт-кода в разных языках программирования
Я знаю, что несколько интерпретируемых языков программирования (PHP, Python, Java, Smalltalk) используют байт-код в качестве промежуточного шага для выполнения кода. Есть ли разница между формой…
Компиляция против перевода, «compiling» Java в байт-код?
Мое понимание таково, определения: Перевод -наличие кода на каком-то языке, генерация кода на каком-то другом языке. Компилятор -перевод в машинный код. Машинный код -прямые инструкции для CPU….
JVM: пример конструкции байт-кода, которая не может быть построена с использованием простого Java?
Я пытаюсь сравнить байт-код JVM и Java как языки программирования. Можете ли вы вспомнить какой-нибудь пример класса байт-кода, который не мог бы быть переписан в Java, даже при использовании…
Почему функциональные языки программирования требуют сборки мусора?
Согласно Википедии, перевод с исчисления lambda на комбинаторную логику тривиален. Конкатенативные языки программирования могут полагаться исключительно на стек для выделения памяти. Что мешает GHC…
Языки, которые компилируются в байт-код Java и могут работать на JVM
Я встроенный программист и работаю со встроенным JVM. Это позволяет запускать файлы Java на ограниченных устройствах. Эти файлы Java сначала компилируются для байт-кода в файлы .class, которые затем. ..
полный перевод сайта Eat the World
Мы сделали для вас перевод сайта Eat the World, который появился в Сети первого апреля. Его предназначение — объяснить людям, далеким от IT, что такое программирование, через разбор шуток для программистов. Ресурс не только проводит ликбез для «гуманитариев» — начинающим разработчикам он поможет глубже понять суть профессии, а опытным напомнит о всех её прелестях. В любом случае, кем бы вы ни были, вы скорее всего найдёте, над чем посмеяться.
Все шутки располагаются на отдельных страницах и разделены на три основные темы.
Часть I. «Ху из ху» в мире IT
Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе последним не на чем будет держаться.
— Илон Маск
Чем занимаются программисты
— Сколько программистов нужно, чтобы поменять лампочку?
— Ни одного, это проблемы на стороне аппаратного обеспечения.
Программисты занимаются разработкой программного обеспечения. Обслуживание и поддержка правильной работы оборудования — задача системного администратора.
Если вы хорошо знакомы с тяготами жизни IT-специалиста, почитайте нашу шпаргалку по общению с руководством.
Муза любит опаздывать
Руководитель проекта — человек, который думает, что девять женщин могут родить ребёнка за один месяц.
Проектный менеджер головой отвечает за то, чтобы вовремя выпустить продукт. В то время как создание этого продукта — процесс творческий и часто не укладывается в строгие рамки.
Думать вредно
Пользовательский интерфейс как шутка — если тебе приходится давать пояснения, он не так уж хорош.
Пользовательский интерфейс (UI) — это поле взаимодействия пользователя с ПО (например, форма регистрации на сайте). Хорошо спроектированный UI должен быть максимально интуитивным и понятным. Известный специалист Стив Круг говорит, что основной принцип при создании интерфейсов звучит как «не заставляй меня думать».
У нас есть статьи с советами по улучшению интерфейса: часть 1 и часть 2.
Всегда онлайн
Ubuntu — древнее африканское слово, которое означает «я не могу настроить Debian».
Ubuntu и Debian — дистрибутивы Linux, разрабатываемые сообществом Open Source. Ubuntu проще в настройке и использовании, поэтому больше подходит для новичков. Слово «ubuntu» действительно африканское и переводится как «человечность».
Linux-подобными системами часто пользуются системные администраторы при работе с серверами.
Организованная коллекция данных
SQL-запрос заходит в бар, подходит к двум столам и спрашивает: «можно присоединиться?»
Язык запросов SQL (Structured Query Language) используется для создания и модификации баз данных (БД), а также для размещения данных внутри баз и последующего к ним обращения. БД структурированы в виде таблиц, содержащих релевантные данные, которые можно, например, объединить с помощью SQL-запроса.
Предлагаем разобраться в основных моделях баз данных и сравнить популярные системы управления: SQLite, MySQL и PostgreSQL.
Если вы не захотите тестировать продукт, делать это не захотят и ваши пользователи
— Сколько тестировщиков нужно, чтобы поменять лампочку?
— Нисколько, они лишь указали, что в комнате темно. Тестировщики не исправляют проблемы, они их находят.
Роль специалистов по тестированию в процессе разработки состоит в том, чтобы запустить программу в разных средах (браузерах, операционных системах), выявить и локализовать ошибки и баги с целью повысить качество продукта.
Мы начали переводить серию статей про знакомство с фронтенд тестированием, в первой части можно подробнее прочитать про то, что такое тестирование и зачем оно нужно.
Научитесь выбирать слова
SEO-специалист заходит в бар, бары, кабак, вечеринка, отдых, ночной клуб, мини-бар, барный стул, таверна, паб, пиво.
Шутка про специалиста по SEO, который занимается оптимизацией сайта с целью поднять его как можно выше в результатах поиска. Одна из его основных задач — должным образом описать сайт соответственно контенту и определить ключевые слова.
Грамотная поисковая оптимизация определяет часть успеха веб-проекта, но не стоит забывать, что ключ к повышению его эффективности — системный подход. Мы писали об этом ранее.
И это пройдёт
Я буду знать, что конкретно хочу, после того, как это увижу.
Вы можете делать ПО для себя, друзей, компании, на которую работаете, или для своих клиентов в качестве фрилансера. Главное, помните о том, что даже если за время разработки была создана спецификация, близкая к идеальной, единственная вещь, в которой можно быть уверенным — это изменения.
Часть 2. Про будни программиста
Программное обеспечение пожирает мир.
— Марк Андрессен
Первые слова
Начинающий программист заходит в бар, оглядывается и говорит: «Hello, World!»
В книгах и руководствах по программированию распространённая практика — использовать вывод фразы «Hello, World!» для демонстрации базовых концепций языка.
На сайте Hello World Quiz размещена викторина — попробуйте угадать, на каком языке программирования написан скрипт, выводящий привет миру.
Выбор языка программирования
— Тук-тук.
— Кто там?
Очень длинная пауза…
— Java.
Программы, написанные на первых версиях Java, были очень медленными. Одной из главных причин этого была виртуальная машина, тормозящая при выполнении кода.
Есть такое популярное высказывание: «люди не хотят покупать дрель, они хотят дырку в стене». Дрель нужна для того, чтобы выполнить задачу, но главное — какую задачу. То же самое относится к множеству языков программирования.
Популярные ЯП в зависимости от целей разработки:
- веб: Python, PHP, Ruby, JavaScript;
- мобильные приложения под iOS (iPhone, iPad): Objective-C, Swift;
- мобильные приложения под Android: Java;
- операционные системы: C, C++;
- игры: C++.
Код читают не компьютеры, а люди
Когда я это писал, только я и бог знали, что я делаю. Сейчас только бог.
Программисты львиную долю времени проводят, читая код и разбираясь в нём, поэтому важно делать его понятным — как для себя, так и для коллег. Если решение кажется очевидным сейчас, это не значит, что оно останется таким через несколько месяцев или даже недель, тем более для людей, которые придут в проект после вас.
Microsoft делится примером: на Windows XP ещё можно было найти игру «Пинбол 3D», но в более поздние версии она включена не была именно потому, что код не отличался качеством и не сопровождался необходимой документацией. Программисты сами не могли понять, каким образом реализована игра, и в итоге отнять её у пользователей оказалось проще, чем портировать.
Полезные статьи про написание качественного кода: 16 лучших практик, 15 правил, оформление кода на C и на C++, как писать хороший код без обилия комментариев.
От сортировки чисел до искусственного интеллекта
Программист использует слово «алгоритм», когда не хочет объяснять, что он сделал.
Алгоритм — это чёткая инструкция с определённым порядком действий. Результат грамотно реализованного алгоритма всегда будет одним и тем же.
Знание основ по данной теме полезно в любой сфере деятельности. В первую очередь имеет смысл ознакомиться с алгоритмами поиска и сортировки данных — рекомендуем для этого прочитать нашу популярную серию статей для начинающих.
Используйте логику
Муж отправил жену-программиста в магазин и сказал: «возьми батон хлеба. Если там будут яйца, возьми десяток». Жена возвращается с десятью батонами и говорит: «там были яйца».
Ключевое слово в этой шутке — «если…». Оно намекает на оператор if, условную инструкцию, которая присутствует в большинстве языков программирования.
Вот пример алгоритма по завариванию чая с использованием этой инструкции (на естественном языке):
- Если чайник не содержит воды, наполнить чайник.
- Подключить чайник к питанию и включить.
- Если чайник для заварки не пуст, опустошить чайник для заварки.
- Поместить чайные листья в чайник для заварки.
- Если вода в чайнике не кипит, перейти к шагу 5.
- Выключить чайник.
- Налить воду из чайника в чайник для заварки.
Меньше велосипедов
У Чака Норриса есть любимый шаблон проектирования — это «Удар Чака Норриса Ногой с Разворота».
Шаблоны проектирования, или паттерны — проверенные способы решения часто встречающихся проблем. Это не фрагменты кода, которые можно скопипастить в свой проект, а подробное объяснение методов.
Не стоит путать паттерны с алгоритмами: алгоритм предлагает набор инструкций, которые необходимо выполнить в строгом порядке, тогда как паттерн показывает, какой должна быть структура кода для явного описания зависимостей между компонентами.
Зачем тебе два билета в кино, если ты идешь туда один
Оптимист скажет, что стакан наполовину полон, пессимист — что он наполовину пуст. Инженер скажет, что размер стакана в два раза больше, чем нужно.
При создании ПО нужно понимать, на каких девайсах оно будет использоваться, и учитывать ограничения составляющих (в первую очередь CPU — центрального процессора и RAM — оперативной памяти).
Сейчас запоминающие устройства стоят достаточно дёшево, а центральные процессоры отличаются более высокой производительностью в сравнении с теми, которые создавались буквально несколько лет назад. Было посчитано, что сборка iPhone в 1991 году стоила бы порядка $ 3,5 миллионов при стоимости RAM около $ 1,44 миллионов.
Умей работать в команде
Слышал шутку про Git от нескольких человек, и у каждого была своя версия.
Git — популярная система контроля версий (VCS). Одна из возможностей, которые она предоставляет, — хранение локальной копии и создание своей версии репозитория.
Использование VCS обеспечивает удобное взаимодействие между членами команды, а также помогает упорядочить код и другие необходимые материалы. Если вы хотите научиться работать с VCS, прочитайте наше руководство для начинающих и посмотрите подборку из 10 ресурсов для изучения и использования Git.
Среда разработки
Прим. перев. Оригинал с пояснениями
Why programmers like UNIX? unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep.
UNIX — операционная система, разработанная в Bell Labs в 1969 году. Слова выше — это часть команд, с которыми можно обращаться к ОС. Например, unzip используется для распаковки файлов. Шутка построена на не очень приличной непереводимой игре слов.
Эффективность ОС зависит от технологий, которые используются в конкретном проекте — например, для создания iOS-приложений больше подойдёт macOS. При работе над общим проектом также большое значение имеет выбор интегрированной среды разработки (IDE), системы контроля версий и инструментов для менеджмента (например, Jira).
Как решать проблемы
;
Чемпион по игре в прятки.
Точка с запятой используется в качестве разделителя инструкций во многих языках программирования. Сейчас многофункциональные среды разработки легко обнаруживают его отсутствие, но раньше таких технологий не было, поэтому пропущенный разделитель приходилось искать самостоятельно.
Среду разработки стоит выбирать исходя из используемой технологии — например, для создания iOS-приложений органичным выбором будет XCode. Кроме того, в Сети есть много полезных ресурсов, которые помогут решить возникающие проблемы. Один из самых популярных — Stack Overflow.
Что поставлено на кон
Свинья идёт по дороге. Курица смотрит на неё и говорит: «А давай откроем ресторан!» Свинья смотрит на курицу и отвечает: «Хорошая идея, и как ты хочешь его назвать?» Курица думает и говорит: «Почему бы не назвать „Яичница с беконом“?». «Так не пойдёт, — отвечает свинья, — ведь тогда мне придётся полностью посвятить себя проекту, а ты будешь вовлечена только частично».
Как объясняет Википедия, по методике Scrum в производственном процессе есть определённые роли, разбитые на 2 группы «свиней» и «кур». Свиньи от начала до конца создают продукт, тогда как куры в нём заинтересованы, но им в целом всё равно, будет проект удачным или нет — на них это мало отразится. Требования, пожелания, идеи и влияние кур принимаются во внимание, но им не разрешают непосредственно включаться в ход скрам-проекта.
К «свиньям» относятся владелец продукта (Product Owner), скрам-мастер (Scrum Master) и команда разработки (Development Team). Дополнительные роли «кур» занимают пользователи (Users), клиенты и продавцы (Stakeholders), управляющие (Managers) и эксперты-консультанты (Consulting Experts).
Мудрость толпы
Блондинка, алкоголик и инопланетянин заходят в бар, но это бар Microsoft, поэтому он закрыт.
В 90-х и начале 2000-х Microsoft была закрытой компанией и, как многие крупные корпорации, строго охраняла секреты разработки. В противовес такому подходу появилось движение Open Source, адепты которого создают проекты с открытым исходным кодом.
Сейчас ситуация меняется и Microsoft создаёт некоторые проекты под флагом открытой разработки. Другие крупные компании тоже поддерживают движение — одним из самых активных участников является Google, которая недавно собрала все свои open source проекты под одной http-крышей.
Такой подход имеет положительные стороны не только для пользователей и сторонних разработчиков, но и для самих корпораций: в дополнение к штатным сотрудникам они получают сотни и тысячи волонтёров по всему миру, вовлечённых в создание продукта. Это ускоряет процессы нахождения багов, добавления новых фич и выпуска свежих версий.
У нас есть серия подборок с лучшими проектами, в которых стоит поучаствовать, чтобы примкнуть к движению Open Source: на JavaScript, Java и C#, C и C++, Python.
Главное — не терять голову
Люди делятся на два типа: «я делаю бэкапы» и «я сделаю бэкапы».
Бэкап — это резервное копирование данных, которое в аварийном случае может помочь восстановить ПО. Делать бэкапы — очень хорошая практика.
Совсем недавно сисадмин GitLab случайно удалил 300 ГБ данных, восстановление которых стало возможным благодаря бэкапу, созданному вручную примерно за 6 часов до инцидента. При этом оказалось, что при автоматическом сохранении данных ранее постоянно срабатывала ошибка, но об этом никто не знал.
Чтобы не терять ценные данные, создавайте бэкапы как можно чаще и проверяйте, что система сохранения работает корректно.
Часть 3. Про эти ваши компуктеры
Компьютеры бесполезны. Они могут только давать ответы.
— Пабло Пикассо
Как мы общаемся с компьютерами
На свете существует 10 типов людей: те, кто понимает двоичную систему счисления, и те, кто не понимает.
Классическая бородатая шутка. В двоичной системе есть всего две цифры: 0 и 1. Число 10 — это двоичное представление десятичного числа 2, поэтому в шутке выше упомянуты два типа людей.
Использование бинарного кода — основа компьютерных вычислений, притом очень эффективная. Состояния 0 и 1 могут быть выражены через пониженное и повышенное напряжение.
Представление информации
Прим. перев. Оригинал с пояснениями
A guy walks into a bar and asks for 1.4 root beers. The bartender says «I’ll have to charge you extra, that’s a root beer float».
The guy says «In that case, better make it a double».
Компьютеры используют бинарный код для хранения в памяти потока нулей и единиц. Задача программиста — объяснить машине, как этот поток интерпретировать. К примеру, код 1000001 может хранить букву А или целое число 65.
Попробуем разобраться в шутке. И float, и double — формы представления данных «с плавающей точкой», они используются в компьютере для хранения дробных чисел. Парень заходит в бар и просит налить 1,4 корневого пива (root beer). Бармен ему говорит, что возьмёт с него больше денег, так как он просит шипучку (root beer float). «Тогда лучше налейте двойную порцию (double)» — отвечает парень.
Тип double часто является лучшим выбором в сравнении с float, так как он обеспечивает большую точность (но и занимает больше памяти). Чтобы больше узнать о типах данных, прочитайте нашу статью про статическую и динамическую типизацию.
Ты для меня всегда будешь на первом месте
В компьютерных науках есть две сложности: инвалидация кэша, именование и ошибка на единицу.
Ошибка на единицу, или ошибка неучтённой единицы (off-by-one error) часто встречается, когда программист ошибается, отсчитывая начало последовательности с единицы, как это обычно делают люди. Проблема в том, что индексация массивов во многих языках программирования начинается с нуля, как в шутке выше: 0, 1, 2.
Здесь обыграна известная цитата Фила Карлтона: «В компьютерных науках есть две сложности: инвалидация кэша и именование» («There are only two hard things in Computer Science: cache invalidation and naming things»).
Знай концепции, которые используешь
— Существует ли объектно-ориентированный способ стать богатым?
— Да, наследование.
В 1994 году Стив Джобс давал интервью журналу The Rolling Stone.
Джефф Гуделл: Объясните, пожалуйста, что такое объектно-ориентированный подход, используя простые термины.
Стив Джобс: Объекты похожи на людей. Они живые, дышащие сущности, которые обладают памятью и знаниями о том, как нужно действовать. И вместо того, чтобы взаимодействовать с ними на низком уровне, мы взаимодействуем с ними на очень высоком уровне абстракции.
Например, если для вас я объект-прачка, вы можете передать мне грязную одежду вместе с сообщением «постирай, пожалуйста, мою одежду». Я знаю, где в Сан-Франциско лучшая прачечная. Я говорю по-английски, в карманах у меня доллары. Я выхожу на улицу, ловлю такси и говорю таксисту, чтобы он отвёз меня в нужное место. Я стираю вещи, снова сажусь в такси и возвращаюсь. Я отдаю вам чистую одежду с сообщением: «вот ваша чистая одежда».
Вы понятия не имеете, как и какие шаги я проделал. Вы не знаете о том, что существует прачечная. Возможно, вы говорите по-французски и вы не можете поймать такси — вам нечем за него заплатить, долларов у вас нет. Тем не менее, я знал, как всё это сделать. А вам нет необходимости это знать. Вся комплексность была во мне запрятана, и мы смогли взаимодействовать на высоком уровне абстракции. В этом суть объектов — они сочетают в себе инкапсуляцию структурной сложности и высокоуровневый интерфейс.
Подробнее о принципах ООП можно прочитать в нашей вводной статье.
Рекурсия
Возможно, вы имели в виду: рекурсия.
Если ввести в поиске Google запрос «рекурсия», он взамен предложит вам вывести результаты по тому же самому запросу. Это не ошибка, а шутка, обыгрывающая понятие: рекурсия определяет функцию, которая способна вызывать сама себя.
В поисках соответствий
Вопрос: что одно регулярное выражение говорит другому?
Ответ: .+
Регулярные выражения (Regular Expressions, RegExp) — это формальный язык, который используется для работы с подстроками: с помощью него можно осуществлять, например, поиск и проверку на соответствие шаблону.
Шаблон .+ означает «что угодно», а точнее «любой символ (.) один или более раз (+)».
Новичкам предлагаем прочитать вводную статью по регулярным выражениям.
Кто стоит на защите данных
Заходит хеш-сумма в бар и говорит: «Будьте добры соль».
Одно из базовых правил безопасности — не хранить пароли в незашифрованном виде.
Хеш-сумма (хеш, хеш-код) — это строка фиксированной длины (чаще всего в шестнадцатеричном представлении), в которую преобразовывается текстовый пароль. Например, 7DD987F846400079F4B03C058365A4869047B4A0. Хеши хранятся в базе данных. Имея в распоряжении только хеш, злоумышленник практически никогда не может воспроизвести пароль, установленный пользователем. Хеши используются для идентификации, поиска данных и проверки их на целостность.
Соль — дополнительный параметр, который добавляется к паролю и обеспечивает безопасность генерируемого хеша.
Преодолевая языковой барьер
Прим. перев. Оригинал с пояснениями
Q: According to Sigmund Freud, what comes between fear and sex?
A: Fünf.
Шутка используется для демонстрации лингвистических различий, таких, как специфичные для определенного языка буквы.
В наши дни при создании ПО в подавляющем большинстве случаев нужно ориентироваться на клиентов по всему миру, следовательно, делать его доступным на нескольких языках. Кодировки обычно создаются под конкретный язык или группу языков. Например, Windows-1250 используется для представления текстов, написанных на языках Центральной Европы. Хорошей практикой является использование кодировок, покрывающих большее количество символов, алфавитов и иконок — например, UTF-8.
Предлагаем пройти тест, чтобы узнать, какой язык программирования вам подходит, и начать его изучать 🙂
Источник: Eat the World
Что такое компиляторы, переводчики, интерпретаторы и ассемблеры?
Трансляторы, компиляторы, интерпретаторы и ассемблеры — все это инструменты программирования, которые преобразуют код в другой тип кода, но каждый термин имеет определенное значение. Все вышеперечисленное работает так или иначе для перевода языка программирования высокого уровня в машинный код, который может понять центральный процессор (ЦП). Примеры процессоров включают в себя процессоры Intel (например, x86), AMD (например, Athlon APU), NXP (например.г., PowerPC) и многие другие. Важно отметить, что все переводчики, компиляторы, интерпретаторы и ассемблеры сами являются программами.
Переводчики
Самый общий термин для инструмента преобразования программного кода — «переводчик». В терминах программирования программного обеспечения переводчик — это общий термин, который может относиться к компилятору, ассемблеру или интерпретатору; все, что преобразует код более высокого уровня в другой код высокого уровня (например, Basic, C ++, Fortran, Java) или более низкого уровня (т.е.е., язык, который может понимать процессор), например язык ассемблера или машинный код. Если вы не знаете, что на самом деле делает этот инструмент, кроме того, что он выполняет некоторый уровень преобразования кода на определенный целевой язык, вы можете смело называть его переводчиком.
Компиляторы
Компиляторы преобразуют код языка высокого уровня в машинный (объектный) код за один сеанс. Компиляторы могут занять некоторое время, потому что им необходимо сразу перевести код высокого уровня на машинный язык более низкого уровня, а затем сохранить исполняемый объектный код в памяти.Компилятор создает машинный код, который выполняется на процессоре с определенной архитектурой набора команд (ISA), которая зависит от процессора. Например, вы не можете скомпилировать код для x86 и запустить его на архитектуре MIPS без специального компилятора. Компиляторы также зависят от платформы. То есть компилятор может преобразовать C ++, например, в машинный код, предназначенный для платформы, на которой работает ОС Linux. Однако кросс-компилятор может генерировать код для платформы, отличной от той, на которой он работает.
Кросс-компилятор, работающий, например, на машине Windows, может генерировать код, работающий в определенной операционной системе Windows или платформе Linux (операционной системы). Компиляторы исходного кода переводят одну программу или код в другую на другом языке (например, с Java на C). Выбор компилятора означает, что сначала вам нужно знать ISA, операционную систему и язык программирования, который вы планируете использовать. Компиляторы часто поставляются в виде пакета с другими инструментами, и у каждого производителя процессора будет по крайней мере один компилятор или пакет инструментов разработки программного обеспечения (который включает компилятор). Часто программные инструменты (включая компилятор) бесплатны; в конце концов, ЦП совершенно бесполезен без программного обеспечения для работы на нем. Компиляторы сообщат об ошибках после завершения компиляции.
Интерпретаторы
Другой способ заставить код работать на вашем процессоре — использовать интерпретатор, который отличается от компилятора. Интерпретатор транслирует код, как компилятор, но читает код и немедленно выполняет его, и поэтому изначально работает быстрее, чем компилятор. Таким образом, интерпретаторы часто используются в инструментах разработки программного обеспечения в качестве инструментов отладки, поскольку они могут выполнять один вход кода за раз.Компиляторы переводят код сразу, а затем процессор выполняет на машинном языке, созданном компилятором. Если после компиляции в код вносятся изменения, то измененный код необходимо будет скомпилировать и добавить к скомпилированному коду (или, возможно, потребуется перекомпилировать всю программу). Но интерпретатор, хотя и пропускает этап компиляции вся программа для запуска выполняется намного медленнее, чем та же программа, которая была полностью скомпилирована.
Однако переводчики
могут быть полезны в тех областях, где скорость не имеет значения (например,g., отладка и обучение), и можно взять весь интерпретатор и использовать его на другом ISA, что делает его более переносимым, чем компилятор, при работе между аппаратными архитектурами. Существует несколько типов интерпретаторов: интерпретатор, управляемый синтаксисом (то есть интерпретатор абстрактного синтаксического дерева (AST)), интерпретатор байт-кода и многопоточный интерпретатор (не путать с потоками параллельной обработки), Just-in-Time (вид гибридного интерпретатора / компилятора) и некоторые другие. Инструкции по созданию интерпретатора можно найти в Интернете.[i] Некоторыми примерами языков программирования, использующих интерпретаторы, являются Python, Ruby, Perl и PHP.
Ассемблеры
Ассемблер переводит программу, написанную на языке ассемблера, на машинный язык и фактически является компилятором для языка ассемблера, но также может использоваться в интерактивном режиме, как интерпретатор. Ассемблер — это язык программирования низкого уровня. Языки программирования низкого уровня меньше похожи на человеческий в том, что их труднее понять с первого взгляда; вы должны внимательно изучить ассемблерный код, чтобы проследить цель выполнения, и в большинстве случаев ассемблерный код содержит намного больше строк кода для представления тех же функций, которые выполняются в языке более высокого уровня.Ассемблер преобразует код языка ассемблера в машинный код (также известный как объектный код), язык еще более низкого уровня, который процессор может понять напрямую.
Код на языке ассемблера
чаще используется с 8-битными процессорами и становится все более громоздким по мере того, как путь набора команд процессора становится шире (например, 16-битный, 32-битный и 64-битный). Люди могут читать машинный код, строки из единиц и нулей, которые цифровые устройства (в том числе процессоры) используют для связи, но, вероятно, люди читают его только в случае компьютерной криминалистики или взлома методом грубой силы. Язык ассемблера — это следующий уровень по сравнению с машинным кодом, и он весьма полезен в крайних случаях отладки кода, чтобы точно определить, например, что происходит при проблемном выполнении. Иногда компиляторы «оптимизируют» код непредвиденным образом, что влияет на результаты, сбивая с толку разработчика или программиста, так что необходимо внимательно следить за пошаговыми действиями процессора в коде сборки, во многом как охотник, выслеживающий добычу или детектив следит за уликами.
[i] «Давайте построим простой интерпретатор», https: // ruslanspivak.com / lsbasi-part1
Программирование как перевод — Приращение: интернационализация
Что означает «переводить»? Быстрый ответ:
, чтобы сказать одно и то же на другом языке.
— Умберто Эко
Метафора — мощный инструмент для подхода к новым проблемам и поиска творческих решений для них. Давайте воспользуемся образной метафорой: чему мы можем научиться, рассматривая программирование как перевод?
Более конкретно, программирование переводит проблемы предметной области — инвентарь хозяйственного магазина, каталог публичной библиотеки, систему бронирования билетов — в компьютерные программы.
Многие факторы вступают в игру, когда мы адаптируем систему из реального мира в цифровой. Преобразование аналогового в цифровое требует дискретизации, не говоря уже о вещах. То, что мы отфильтровываем или на чем фокусируемся, зависит от наших предубеждений. Как обычные переводчики справляются с проблемами предвзятости? Чему программисты могут научиться у них?
Давайте рассмотрим этот вопрос на примере, взятом из книги Уильяма Кента Data and Reality : библиотека книг. Сначала мы определяем, какие основные концепции составляют нашу область, и переводим их на естественный язык.Затем мы сформируем словарь для нашей области. В этом случае у нас будут книги, авторы, издатели, жанры и так далее. С помощью словаря мы можем переводить концепции на язык программирования, создавая абстракции, чтобы представить их в понятной для компьютера форме. Но как нам узнать, какие концепции из реальности должны стать абстракциями в нашей программе?
При создании программного обеспечения для библиотеки мы можем легко предположить, что книга будет абстракцией в нашей программе. Но что представляет собой книга? Если автор — скажем, социолог Джуди Вайцман — опубликовал две книги, то чисто библиографическая база данных будет иметь в своем содержании двух представителей книги — скажем, Технофеминизм и Феминизм противостоит технологии .
А как насчет базы данных, созданной для выдачи книг? Если библиотека покупает пять экземпляров двух книг, теперь у нее есть записи для 10 книг. Что означает «книга», меняется в зависимости от контекста: в библиографической базе данных это может относиться к отдельным заголовкам; в базе данных о ссуде это может относиться к общему количеству имеющихся копий.
Если библиотека приобретет четырехтомник Дональда Кнута Искусство компьютерного программирования , как это можно описать? Это одна «книга» или четыре? Как насчет омнибусного издания «Властелина колец», которое объединило три книги трилогии в одну (как изначально и хотел Толкин)? То, что изначально кажется легкой задачей — книга есть книга, — становится более сложной, когда мы переходим к мельчайшим деталям.
К классификации нельзя относиться легкомысленно. В случае книг неправильная классификация может затруднить поиск названия, ограничивая доступ к его информации. Предвзятые или негибкие системы классификации также могут снизить влияние автора. Рассмотрим случай женщин в странах, где они принимают фамилии по браку. Пионер компьютерных технологий Кэтлин Бут, урожденная Бриттен, написала статью 1947 года, в которой она представила первый язык ассемблера как Бриттен, но продолжала публиковаться под своим женатым именем Бут.Если в базе данных нет ссылок на работы, опубликованные под ее именем при рождении и в браке, вы можете искать ее статьи и ошибочно недооценивать ее влияние. То же самое происходит, если мы ищем статьи Барбары Лисков (урожденной Хуберман) и т. Д. И принцип открытия выходит за рамки книг.
Мы можем попасть в еще более опасную местность с абстракциями, которые влияют на чью-то личность. Что, если мы включим в обсуждение что-то вроде гендера? Как показывает недавняя статья об автоматическом распознавании пола (AGR), рассмотрение гендера как бинарного может иметь катастрофические последствия для небинарных людей, включая гендерное насилие, неправильный гендер или просто стирание их идентичности. Автор статьи обнаружил, что многие методы AGR, рассмотренные в статье, даже не обсуждают, что они подразумевают под словом «пол». Считает ли их абстракция понятия личности гендер неизменным, что не изменится на протяжении всей жизни человека? Является ли это физиологическим, то есть основанным на физических характеристиках как факторах, определяющих пол? Как мы можем интерпретировать их результаты, если они не сообщают о своем понимании гендера как категории? Воплотить концепции реального мира в программное обеспечение не так просто, как кажется.
По своей сути перевод — это акт интерпретации. Когда переводчики сталкиваются с текстом, чтобы передать его на другом языке или другом носителе, они знают, что произведут интерпретацию, а не копию оригинала. Возникает вопрос: что на самом деле составляет смысл исходного текста в исходном тексте?
Умберто Эко называет это проблемой «сказать одно и то же». Он утверждает, что практически невозможно определить суть текста, элементарность текста.
Знаменитый роман Эко 1980 года « Имя розы » открывается тем, что Адсо из Мелька, средневековый монах, цитирует Библию наизусть и при этом делает некоторые ошибки. Один английский переводчик посчитал, что «дело» в этом отрывке — это Библия, а не ошибки Адсо. Вместо того, чтобы переводить их так, как их произнес Адсо — как их написал Эко — переводчик включает дословно, стихи в том виде, в котором они представлены в Библии. Ошибки Адсо исчезли.
Но роман представляет собой игру со стихом — монах XIV века мог цитировать Библию в основном наизусть.Ошибки в библейских отрывках говорят нам кое-что, независимо от того, верим ли мы в Эко или Адсо, что, очевидно, было утеряно при переводе. Сосредоточив внимание на отрывке из Библии как на сущности, переводчик стер часть духа работы.
Это не аномалия: переводчики отдают приоритет определенным аспектам текста, считая другие менее важными. В своей самой старой записанной форме «Одиссея » Гомера была написана дактильными гекзаметрами, традиционным поэтическим метром древнегреческих эпосов. Сегодня большинство переводчиков передают стихотворение вольным стихом, без единого размера. Ученый-классик Эмили Уилсон, опубликовавшая собственный перевод Одиссеи в 2018 году, не согласна с этой тактикой. Вместо этого она утверждает, что эпос Гомера как стихотворение «должен иметь предсказуемый и отчетливый ритм». Она решила перевести его на ямбический пентаметр, форму метра, распространенную в английской литературе. Это решение отражает приоритеты и убеждения Вильсона. Некоторые переводчики сосредотачиваются исключительно на содержании — улавливании точного значения отдельных слов и фраз — а не на форме, думая, что значение может быть искажено, чтобы уместить строки в определенную поэтическую структуру.Для других, таких как Уилсон, форма — не менее важный компонент работы. Дело в том.
Это возвращает нас к нашему примеру с бинарным гендером, где мы перевели все богатство и гибкость гендера во всех его выражениях в цифровую форму нулей и единиц. На скольких веб-сайтах представлены веб-формы, которые абстрагируют человека от того, что создатели формы считают наиболее важными характеристиками человека: имя, дата рождения, пол? Как часто эти же формы предлагают только бинарные варианты пола: мужской или женский? Сосредоточен ли этот перевод личности на правильных вещах?
Перевод не только изменяет и дополняет язык, на котором он поступает, — пишет Джудит Батлер в своем введении к книге Жака Деррида Of Grammatology , но и влияет на язык, на котором был написан оригинал. В своем эссе «Симулякры и симуляции» Жан Бодрийяр напоминает нам, что «сегодня абстракция больше не абстракция карты, двойника, зеркала или концепции». Он расширяет: «Территория больше не предшествует карте». Вместо этого «это карта, которая порождает территорию». В случае бинарных вариантов гендера часть человечества упускается, потому что переводчик — программист — сосредоточил свое внимание на другом.
Метафора программирования как перевода еще больше усложняется из-за умножения значений, которое происходит, когда слова появляются как в английском, так и в языках программирования.Слова, которые мы используем в наших программах, хотя они выглядят и звучат точно так же, как те, которые мы используем для общения на английском языке, не имеют того же значения.
В типичном английском разговоре слово «пользователь» вызывает в памяти образ человека, взаимодействующего с программой (или объектом или структурой), а также все различные действия, которые может выполнять пользователь, его качества и т. Д. на. В разговоре с клиентом мы можем поговорить о пользователях приложения, которое мы для него создаем.В приложении мы, вероятно, получим класс пользователей, который представляет реального человека, который использует приложение.
По мере развития нашего разговора слово «пользователь» может эволюционировать: например, от описания каждого пользователя веб-сайта (то есть клиентов и продавцов) только к определенному подмножеству (то есть клиентов, но не продавцов). Независимо от того, какое общее определение «пользователя» мы обсуждаем, определение, отраженное в коде, не будет соответствовать новой идее, пока код не будет обновлен, чтобы отразить ее. Слово «пользователь», используемое в разговоре, представляет реального человека, а слово «пользователь» в устаревшем коде — нет.Фактически, термин в коде будет представлять только те качества, которые разработчик кодирует для него.
Это имеет значение, когда другие разработчики читают наш код, или когда мы в будущем пытаемся понять код, который мы написали несколько месяцев назад, или когда мы могли запутать воспоминания о том, что делает пользователь в реальном мире по сравнению с тем, что «пользователь» означает в текст программы. Читая программы, мы всегда пытаемся вернуть перевод к его первоначальному значению, чтобы представить себе возможные миры, в которых это значение имеет смысл.Иногда это невозможно.
Метафора Деррида для этого перевода — это развалины. Всякий раз, когда мы пытаемся выполнить обратимость перевода, чтобы приблизиться к его оригиналу, мы становимся археологами, пытающимися понять, как выглядели руины до их распада. С точки зрения программирования это особенно сложно, когда дело доходит до работы с устаревшим кодом. Как программисты, мы должны спросить себя: насколько хорошо мы представили сущности в нашем коде? Когда он будет прочитан в будущем, можно ли будет понять проблему, которую на самом деле пытался решить код? Какой возможный мир соответствует этому коду?
Сказать то же самое, что и Eco, в конце концов, не так-то просто.Что мы можем с этим поделать?
Eco, к счастью, предлагает помощь. Вместо того чтобы пытаться сказать то же самое, он призывает переводчиков стремиться к «почти». Очень важно ввести квалификатор. Земля почти похожа на Марс, объясняет Эко в Dire Quasi la Stessa Cosa , поскольку оба они вращаются вокруг Солнца и имеют сферическую форму, но поскольку они почти как сферы, их также можно сравнить с апельсинами или футбольными мячами. Определение параметров того, что означает «почти», становится актом переговоров, выбора компромиссов.
В программировании нам необходимо ввести аналогичный элемент гибкости. Мы по своей природе гибки во время разговоров, приспосабливаемся и обсуждаем с нашими собеседниками значение слов, которые мы используем. Давайте поступим так же и в нашей работе.
Стивену С. Скиене однажды пришлось разработать алгоритм, чтобы найти самый дешевый рейс из города X в город Y. Его первым подходом к переводу этой реальной проблемы в программу было использование алгоритма кратчайшего пути Дейкстры. Здесь мы видим его предубеждения: это проблема с графом, я решу ее, используя кратчайший путь.Его клиенты быстро дали понять, что Skiena упускает из виду важный контекст, а именно правила авиационной отрасли. Они продолжали переговоры, пока Скиена не решила проблему с приоритетной очередью. Ему пришлось отказаться от своих предубеждений и научиться новому. В конце концов, его решение «оказалось достаточно быстрым, чтобы обеспечить интерактивный ответ пользователю», — рассказывает Скиена. Он понял, что на самом деле означает «почти то же самое» для этой проблемы.
Та же идея может быть применена к нашей концепции гендера из прошлого, или к идее пользователя, и так далее.Нам нужно подходить к кодированию с пониманием того, что изменения и адаптация неизбежны.
Итак, что мы узнали, глядя на программирование из кадра, предоставленного переводом?
Мы увидели, что с точки зрения бизнеса есть много способов перевести реальный мир в наши программы. Если вы спросите, что именно наш клиент хочет, чтобы мы решили, это поможет нам быстрее и напрямую удовлетворить их потребности.
С точки зрения программирования мы увидели, что наш перевод мира будет проецировать новые версии, возможные видения этого мира в умы наших коллег, когда они пытаются понять проблему, которую пытается решить наш код. Правильно ли мы выбрали абстракции? Сосредоточились ли мы на правильной части проблемы?
Наконец, с этической точки зрения, мы увидели, что перевод реального мира в код влияет на сущности реального мира, представленные в нашей программе, а также на пользователей, которые взаимодействуют с ними. Даже в случае с библиотекой неправильная классификация книг или авторов может сделать информацию недоступной, а материалы — стертыми. Когда мы неправильно отображаем жизни или черты людей, как в примере с полом, ставки еще выше.
Лучшие переводы — важный вклад в перевод оригинальной работы. Лучшие программы тоже могут функционировать как критические тексты о реальности. Если это так, то программисты несут ответственность за помощь в улучшении реальности, которую мы представляем.
Перевод между языками программирования | Transifex
Примечание. Эта страница была размещена в День дурака 2012 г. 😀
Вы, вероятно, уже успешно использовали Transifex для перевода приложений с английского на другие языки, такие как испанский, французский и китайский. Наша технология позволяет разработчикам брать контент с одного языка и переводить его на другой, разделяя работу на небольшие задачи, которые можно переводить независимо друг от друга, таким образом, краудсорсинг. Он очень хорошо работает для разговорных языков, но есть и другие области, где он может быть полезен.
Время от времени, когда мы объясняем, что делает Transifex, мы получаем следующий вопрос: «Когда вы говорите« перевод », вы имеете в виду разговорные языки или языки программирования, такие как C и Python?»
Ответ был первым, но последнее всегда звучало круто.Итак, поскольку нам нравится делать людей счастливыми, мы решили добавить поддержку перевода между языками программирования . Пользователи Transifex теперь смогут переводить не только с английского на испанский, но и с Python на C, Perl или PHP.
Вот пример ввода и вывода начального запуска модуля машинного перевода с Python на Ruby:
Питон | Рубин |
def fib (n): если n == 0: возврат 0 elif n == 1: возврат 1 еще: вернуть fib (n-1) + fib (n-2) я = 0 пока я <35: напечатать fib (i) я = я + 1 | def fib (n) если n == 0 возврат 0 elsif n == 1 возврат 1 еще фиб (п-1) + фиб (п-2) конец конец я = 0 пока (я <35) помещает fib (i) я = я + 1 конец |
Технологии
Используя такие технологии, как обработка естественного языка, которая уже доступна в Transifex, и комбинацию технологии компилятора, автоматов с конечным числом состояний и генетических алгоритмов, Transifex предлагает приблизительный перевод между двумя языками. Затем пользователь может просмотреть и исправить перевод с помощью нашего веб-редактора.
Вот схема используемых скрытых технологий:
- Лексический анализ : Исходный язык определяется с использованием определенных правил, которые передаются в лексер. В основном они определяются с помощью BNF. Таким образом, лексер может идентифицировать токены, разделители и ключевые слова. Чтобы поддерживать множество языков в качестве входных данных, у нас есть свой набор правил для каждого языка.Как только лексер разметит содержимое, он передает результат синтаксическому анализатору, который объединяет токены вместе.
- Syntax Analyxis : выходные данные лексера анализируются для построения абстрактного синтаксического дерева исходного кода, которое является простым представлением исходного исходного кода. Проанализированный вывод сохраняется в базе данных.
Когда вывод запрашивается на определенном языке программирования, мы используем сохраненный AST программы и применяем обратную процедуру для генерации исходного кода на этом языке, который соответствовал бы этому AST. Для этой обратной процедуры были разработаны специальные функции, которые пытаются генерировать как можно более простой и читаемый код. Однако, поскольку зачастую важна и эффективность, сгенерированный код можно редактировать вручную с помощью Lotte, веб-редактора.
Поддерживаемые языковые пары
Мы запускаем нашу первую версию со следующими языковыми парами:
- Python ↔ Ruby
- Python ↔ Javascript
- Рубин ↔ Javascript
- Python → Perl
- Python → PHP
- PHP → C
Мы запускаем это в бета-версии для выбранной группы пользователей.Если вы хотите его использовать, напишите нам в комментариях к этому сообщению.
Примечание. Эта страница была размещена в День дурака 2012 г. 😀
Translators - Computer Science GCSE GURU
Компьютеры понимают только машинный код (двоичный), это проблема, потому что программисты предпочитают вместо этого использовать различные языки программирования высокого и низкого уровня.
Чтобы обойти проблему, программный код высокого и низкого уровня (исходный код) должен пройти через транслятор.
Переводчик преобразует исходный код в машинный код (объектный код).
Существует несколько типов программ-переводчиков, каждая из которых может выполнять разные задачи.
Компилятор
Компиляторы используются для перевода программы, написанной на языке высокого уровня, в машинный код (объектный код).
После компиляции (все за один раз) переведенный программный файл может быть напрямую использован компьютером и является независимо исполняемым.
Компиляция может занять некоторое время, но переведенную программу можно использовать снова и снова без необходимости перекомпиляции.
Отчет об ошибке часто создается после перевода всей программы. Ошибки в программном коде могут привести к сбою компьютера. Эти ошибки можно исправить только путем изменения исходного исходного кода и повторной компиляции программы.
Если вам нужно узнать больше о языках высокого уровня, посетите нашу страницу языков.
Интерпретатор
Программы интерпретатора могут читать, переводить и выполнять по одному оператору за раз из программы на языке высокого уровня.
Интерпретатор останавливается, когда достигается строка кода, содержащая ошибку.
Переводчики часто используются при разработке программы. Они упрощают отладку, поскольку каждая строка кода анализируется и проверяется перед выполнением.
Интерпретируемые программы запускаются немедленно, но ваша программа может работать медленнее, чем согласованный файл.
Исполняемый файл не создается. Программа интерпретируется заново с нуля каждый раз, когда вы ее запускаете.
Если вам нужно узнать больше о языках высокого уровня, посетите нашу страницу языков.
Ассемблер
Ассемблер используются для перевода программы, написанной на низкоуровневом языке ассемблера, в файл машинного кода (объектного кода), чтобы ее можно было использовать и выполнять на компьютере.
После сборки файл программы можно использовать снова и снова без повторной сборки.
Если вам нужно узнать больше о языках низкого уровня, посетите нашу страницу языков.
Сводка переводчиков
Компилятор | Интерпретатор | Ассемблер |
---|---|---|
Переводит языки высокого уровня в машинный код | Временно выполняет языки высокого уровня, по одной инструкции за раз | Переводит сборку низкого уровня код в машинный код |
Создается исполняемый файл машинного кода (объектный код) | Не создается исполняемый файл машинного кода (нет объектного кода) | Создается исполняемый файл машинного кода (объектный код) |
Скомпилированные программы больше не нуждаются в компиляторе | Интерпретируемые программы нельзя использовать без интерпретатора | Собранные программы больше не нуждаются в ассемблере |
Отчет об ошибке создается после компиляции всей программы.Эти ошибки могут привести к сбою вашей программы. | Сообщение об ошибке создается немедленно (и программа останавливается в этой точке) | Одна инструкция на низкоуровневом языке обычно переводится в одну инструкцию машинного кода |
Компиляция может быть медленной, но в результате программный код будет выполняться быстро (непосредственно на процессоре) | Интерпретируемый код запускается через интерпретатор (IDE), поэтому он может быть медленным, например для выполнения программных циклов | |
Один оператор языка высокого уровня может представлять собой несколько строк машинного кода при компиляции |
Перевод программ
Перевод программ
В
инструкция на языке ассемблера говорит то же самое, что и машинный язык
инструкция, но она должна быть преобразована в битовый шаблон перед выполнением.Программа на ассемблере состоит из операторов ассемблера,
операторы, которые определяют данные, и некоторая дополнительная информация, которая помогает в
перевод.
Вот фрагмент программы на ассемблере и его перевод на
битовые шаблоны.
операторы сборки машинных инструкций 0011 0100 0000 0001 0000 0000 0000 1001 ori $ 1, $ 0, 9 0000 0000 0100 0001 0000 0000 0001 1000 мульт $ 2, $ 1 0000 0000 0000 0000 0100 0000 0001 0010 мфл. 8 долл. США 0011 0100 0000 0001 0000 0000 0000 1001 ori $ 1, $ 0, 5 0000 0000 0100 0000 0000 0000 0100 1000 див $ 8, $ 1
Много лет назад,
запустить программу, написанную на
FORTRAN вы использовали
компилятор
перевести программу
на язык ассемблера.Затем вы использовали ассемблер
переводить
язык ассемблера в
машинный язык.
Наконец, вы загрузили машину
язык в память компьютера
и выполнил вашу программу.
Современные компиляторы обычно переводят
исходная программа прямо на машинный язык
который содержится в файле под названием объектный модуль
(подробнее об этом позже).
А пока давайте подумаем о переводе
FORTRAN на язык ассемблера.
FORTRAN - язык высокого уровня.
Он предназначен для работы на всех типах
компьютеры вне зависимости от архитектуры.
Операторы FORTRAN могут быть написаны без
зная архитектуру компьютера,
и может работать на любом
компьютер (после перевода).
ВОПРОС 7:
Как вы думаете, такие языки, как COBOL, C,
и Паскаль переведены
нравится Фортран?
Можно ли переводить или интерпретировать языки программирования?
Чем языки программирования похожи или отличаются от языков, которые люди используют в разговорах? Могут ли они интерпретироваться или переводиться так же, как естественный язык интерпретируется или переводится на разные языки?
Эти вопросы кажутся глупыми, но их стоит изучить.Для языковых энтузиастов это будет знакомство с различными языками, используемыми в программировании, с точки зрения их сходства с языками, используемыми в общении, с точки зрения письменного и устного перевода. Как программисты в разных частях света изучают программирование?
Языки программирования
Что такое языки программирования? По сути, это формальные языки, разработанные для определения инструкций, которые приводят к различным выводам на компьютере. Языки программирования жизненно важны для разработки программ или программного обеспечения или реализации определенных алгоритмов.
Используется множество языков программирования. Фактически, были созданы тысячи языков программирования и продолжают создаваться, хотя лишь небольшая часть из них стала широко используемыми и изучаемыми языками программирования. Многие из них требуют, чтобы вычисления выполнялись в последовательности операций (императивная форма), в то время как другие просто указывают желаемые результаты (декларативная форма).
Некоторые из самых популярных языков программирования включают JavaScript, Swift, HTML, CSS, SQL, Java, Python, C #, Ruby и PHP.
- JavaScript считается самым популярным языком программирования, особенно в Интернете.
- Swift - относительно новый язык, выпущенный Apple в 2014 году, и используемый для создания собственных приложений для устройств iOS и MacOS.
- HTML - это не совсем язык программирования (это язык разметки), но он служит основой для структуры сайтов в Интернете.
- CSS или каскадные таблицы стилей также используются для проектирования веб-сайтов, а также для разработки приложений, созданных для использования в браузерах.
- SQL или язык структурированных запросов используется для обработки больших объемов данных. Это язык программирования для создания систем для доступа к базам данных и управления ими. Обычно он используется вместе с другими языками программирования, такими как PHP.
- Java - один из самых популярных языков, используемых для разработки приложений для операционной системы Android.
- Python - это язык программирования, известный своим легко читаемым кодом. Многие считают его самым простым языком программирования для начала работы.
- C # - это язык программирования, разработанный Microsoft и в основном используется для разработки программного обеспечения для бизнеса.
- PHP подходит для разработки веб-сайтов и приложений с большим объемом данных. Это язык программирования, используемый при создании Facebook и WordPress.
Эти языки подобны английскому, японскому, испанскому, французскому, китайскому и другим основным языкам мира, за исключением того, что они используются машинами, а не людьми.Они были созданы людьми для использования машинами. Языки программирования позволяют общаться между компьютерами или между приложениями на одном компьютере или на нескольких компьютерах. Это также язык, на котором люди общаются с машинами.
Различия между программированием и естественными языками
Не будет ошибкой сказать, что языки программирования произошли от естественного языка, в особенности английского языка. В конце концов, люди несут ответственность за развитие языков программирования.Однако между программированием и естественными языками есть заметные различия.
Во-первых, языки программирования должны быть простыми и недвусмысленными. Нюансы практически отсутствуют, в отличие от того, что можно наблюдать в естественных языках. В программировании слова не могут иметь более одного значения. Незначительные различия в использовании языка программирования могут привести к большим различиям или ошибкам в разрабатываемой программе.
Компьютеры, выполняя программы или выводя данные на языках программирования, не могут угадать, что именно задумал программист, если в коде программы есть орфографические ошибки или синтаксические проблемы.В отличие от естественного языка, люди могут до определенной степени угадывать смысл предложений или слов, произнесенных или написанных кем-то в случае совершения орфографических или грамматических ошибок.
Для ясности: функция автозаполнения Google или ее способность угадывать, что вы хотите найти, не могут использоваться здесь в качестве контраргумента. Эта способность угадывать, что человек, использующий Google, хочет искать, не является проявлением способности компьютера угадывать намерение на языке программирования (в случае допущения орфографических или синтаксических ошибок), а является результатом способности хорошо закодированной программы анализировать взаимодействие с человек. Другими словами, это результат полностью функционального программного обеспечения, разработанного на определенном языке программирования, используемого людьми. Интерпретации языка программирования не требуется.
Еще одно заметное отличие состоит в том, что естественный язык намного свободнее, чем язык программирования. Его можно легко изменить в зависимости от того, что решат пользователи. В языке программирования необходимо строго соблюдать структуру, написание и синтаксис, чтобы язык стал понятным. Программы или программное обеспечение не будут функционировать должным образом, если правила языка программирования нарушаются даже в малейшей степени.Изменения как у
Можно ли переводить или интерпретировать языки программирования?
Здесь мы отвечаем на вопрос, можно ли переводить или интерпретировать языки программирования. Следует отметить, что практически все языки программирования основаны на английском языке. Из-за этого ожидается, что программисты знают базовый английский язык, чтобы быть эффективными в том, что они делают. Невозможно изучить программирование, не зная базового английского, но это будет сложнее, так как потребуется больше запоминания.
Программные фреймворки или библиотеки практически все на английском языке. Они состоят из множества объектов, назначение или назначение которых можно понять, просто взглянув на их имена. Без знания английского языка программисту придется приложить больше усилий для запоминания использования этих программных объектов.
Однако это не означает, что устный или письменный перевод языков программирования влечет за собой необходимость владения английским языком. Дело не в переводе языка программирования на английский, а затем на другой естественный язык.Вопрос о переводимости или интерпретируемости языков программирования заключается в том, как один язык программирования может быть переведен на другой язык программирования, например, с Python на C ++.
Да, языки программирования можно переводить. Программа, написанная на одном языке, может быть переведена на другой язык программирования. Исходный код программы, написанной на одном языке, можно преобразовать в код на другом языке. Однако интерпретация языка программирования в настоящее время не требуется и невозможна.Люди не могут интерпретировать языки программирования для машин, но они могут отлаживать, устранять неполадки или настраивать коды, если в них есть проблемы.
Портирование: Перевод языка программирования
Перевод программного кода с одного языка программирования на другой также известен как перенос. Это процесс адаптации программного обеспечения для работы в другой вычислительной среде. Например, программное обеспечение или приложение можно перенести из Linux, чтобы оно работало в Windows.Приложения Android можно портировать на iOS. Это также можно сделать при кодировании шаблонов веб-сайтов или блогов. Вы можете найти шаблоны блогов WordPress, которые были перенесены в Blogger (Blogspot) или на другие платформы. Слово «перенос» также относится к процессу адаптации программного обеспечения или приложения к другому оборудованию или вычислительной архитектуре.
Переносимое программное обеспечение, однако, отличается от переносного программного обеспечения. Последнее не требует «перевода на язык программирования». Это программа или приложение, созданное для работы без установки.Он существует как отдельный программный файл, который можно скопировать или переместить с одного компьютера на другой (в рамках той же платформы или ОС) и мгновенно запустить, не выполняя процесс установки.
Переводчики языков программирования
Инструменты, которые могут переводить или преобразовывать программные коды с одного языка на другой, существуют. Однако вы не можете ожидать, что они будут работать достаточно хорошо, чтобы иметь возможность конвертировать приложение iOS, например, для использования на Android. Их даже нельзя сравнить с производительностью своих коллег на естественном языке.Доступные в настоящее время трансляторы программного кода ограничены в своих возможностях и не способны полностью и точно переносить все программное обеспечение, если только они не конвертируют только простую или базовую программу.
Программистам все еще нужно вносить поправки и убирать концы с концами для машинно-переведенных программных кодов. Опять же, результат не будет идеальным или готовым к использованию, если только он не предназначен для простой программы. Не ожидайте, что инструмент, который позволил бы выгрузить код на C с одной стороны и получить код на Java с другой.
Вы можете найти хорошие инструменты для перевода языков программирования, но самое большее, что они могут сделать, - это сократить время, необходимое для полного переноса программного обеспечения. Они могут правильно преобразовать определенные части программного кода, поэтому не нужно делать все вручную, но вы не можете ожидать, что даже лучшие переводчики программного кода сделают все самостоятельно.
Заключение
В некотором смысле языки программирования можно переводить. Программное обеспечение, программы или коды приложений могут быть переписаны (людьми-программистами) с одного языка программирования на другой, чтобы они могли работать на новой платформе, операционной системе или архитектуре. Однако переводчики языков программирования (машинные переводчики) по-прежнему ненадежны, когда дело доходит до преобразования целых программ или приложений для использования в другой операционной системе или платформе. С другой стороны, интерпретация языков программирования (людьми) не выполняется и в настоящее время считается ненужной.
Услуги по локализации и перевод веб-сайтов
Day Translations не предлагает решений для перевода программ или программного кода, но мы предоставляем высококвалифицированные веб-услуги и услуги по локализации, включая перевод веб-сайтов, а также лингвистическое тестирование приложений и сайтов.Если вы ищете компетентные, точные и соответствующие контексту языковые услуги, вы можете рассчитывать на Day Translations, Inc в качестве качественных решений.
Наша компания располагает разветвленной сетью переводчиков-людей в разных частях мира, которые выполняют все виды письменного и устного перевода. Мы с уверенностью можем гарантировать клиентам высокую точность и оперативное обслуживание на большом количестве языков. Наши опытные профессиональные переводчики-люди всегда готовы помочь вам.Свяжитесь с нами, позвонив по телефону 1-800-969-6853 или отправив нам электронное письмо по адресу «Свяжитесь с нами». Вы также можете связаться с нами через наше официальное мобильное приложение Terpy и назначить встречу с ним. Наши услуги доступны 24/7 круглый год.
Изображение Авторские права: andreypopov / 123RF Stock Photo
Новый AI Facebook может переводить с одного языка программирования на другой
Перевод с одного языка на другой - это не просто неприятность. Австралийский банк Commonwealth Bank потратил 5 лет и колоссальные 750 миллионов долларов на преобразование кода своей платформы с COBOL (язык программирования, впервые разработанный более 50 лет назад) на Java.
Это вряд ли исключение. Во всем мире 95% считываний банкоматов и 80% личных транзакций используют COBOL, а многие научные и промышленные исследования все еще проводятся на Fortran, другом устаревшем языке программирования.
Удивительно большая часть данных в нашей повседневной жизни основана на старых языках программирования, и их перевод на более новые и более эффективные языки чрезвычайно дороги и требует много времени.
Вот где на помощь приходит искусственный интеллект Facebook.
Пример. Источники: Lachaux et al.
Согласно новой статье, исследователи разработали транскомпилятор - систему, которая преобразует исходный код с одного языка программирования высокого уровня (такого как C ++ или Python) в другой. Когда эта миграция выполняется людьми, она является сложной и требует много времени, так как требует обширных знаний обоих языков. Но если бы вы могли обучить алгоритм делать это за вас, вы бы сэкономили много времени и ресурсов.
исследователей Facebook обучили новый искусственный интеллект (ИИ) проектам GitHub с открытым исходным кодом.ИИ не контролируется, поэтому учится самостоятельно, в основном путем поиска закономерностей в наборах данных. Это требует минимального человеческого контроля и опыта.
TransCoder (так назывался ИИ) был обучен на 2,8 миллионах репозиториев с открытым исходным кодом, нацеленных на перевод на функциональном уровне. ИИ начал с поиска общих ключевых слов, таких как «for», «while», «if» и «try», а также цифр, математических операторов и общеупотребительных английских слов или строк, которые встречаются в исходном коде.После начального периода обучения алгоритм также подвергается процессу шумоподавления и обратного преобразования компонентов (что было сделано только для функций).
Это не первая попытка сделать что-то подобное - уже разработано несколько алгоритмов перевода, но инженеры Facebook говорят, что этот ИИ превосходит их со «значительным» отрывом.
Результаты не были идеальными. TransCoder был протестирован на 852 параллельных функциях на всех трех языках и показал замечательную (но не идеальную) точность.При переводе с C ++ на Java 74,8% функций вернули ожидаемый результат. От C ++ до Python этот показатель составил 67,2%. Наибольшая точность была получена при переводе с Java на C ++ (91,6%), а наименьшая - с Python на Java (56,1%).
Итак, он все еще не совсем идеален, но подход многообещающий - и, чтобы сделать вещи еще лучше, его можно легко адаптировать к ряду различных языков программирования.
«TransCoder легко обобщается на любой язык программирования, не требует никаких специальных знаний и значительно превосходит коммерческие решения», - пишут соавторы.«Наши результаты показывают, что многие ошибки, допущенные моделью, можно легко исправить».
Хотя алгоритм еще не адаптирован для таких языков, как COBOL, до него всего один шаг. Быстрая и дешевая революция, наконец, может произойти с банкоматами.
.