Разное

На каком языке программирования можно создать ии: Языки программирования для ИИ? — Хабр Q&A

Содержание

Как создать искусственный интеллект? История первая. Что такое интеллект? / Хабр

В серии статей мы расскажем о новых подходах в ИИ, моделировании личности и обработке BIG Data, которые недоступны для большинства специалистов по ИИ и общественности. Ценность этой информации в том, что она вся проверена на практике и большинство теоретических наработок реализованы в прикладных проектах.

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

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

Первое, что мы с вами сделаем это определим, что такое интеллект.

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

  • Обязательно ли встраивать в программу интеллекта компьютера особенности языка (описывать семантику, грамматику, морфологию) или он смог бы выучить языки самостоятельно через взаимодействие с человеком?
  • Если бы вам поставили задачу научить компьютер языку, то что бы вы делали?
  • Если бы в обучении принимали участие только вы, то на кого он был бы похож?

А теперь, ответьте на эти вопросы еще раз, с той лишь разницей, что обучать пришлось бы:

  • Породистого попугая, теоретически способного к общению.
  • Новорожденного ребенка.

Мы с вами только что проделали интеллектуальную работу, и я надеюсь, что многие из вас получили новые знания. И вот почему:

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

Существует множество подходов к определению интеллекта. Мы определим главные его признаки…

В первую очередь интеллект – это способность обучаться и воображать.

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

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

Какие принципы работают, когда ребенок учится понимать язык и говорить на нем?

  1. Чем чаще он слышит слово в разных контекстах, тем быстрее он его запомнит. Слово, которое он произнесет первым скорее всего будет – «мама».

    «Мама тебя любит»

    «Мамочка тебе ручки помоет»

    «Мама тебя целует»

    «А где мама?»

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

    ребенок слышит: «Мама тебя любит».

    ребенок видит улыбку мамы.

    ребенок чувствует тепло исходящее от мамы.

    ребенок чувствует вкус и запах маминого молока.

    ребенок говорит «Мама».
  3. Ребенок не сможет воспроизвести слово сразу правильно. Он будет пытаться, пробывать. «М», «Ма», «Мам», «М» … «Мама». Обучение происходит в действии, каждая следующая попытка корректируется пока не получим результат. Метод проб и ошибок. Очень важно получение обратной связи из реальности.
  4. Не воспитывайте своих детей, все равно они будут похожи на вас. Ребенок стремится быть похожим на окружающих его людей. Он подражает им и учится у них. Это один из механизмов моделирования личности, о котором мы поговорим более подробно в следующих статьях.
Какова же роль воображения?

Представьте себе, что вы едите на автомобиле по незнакомой трассе. Проезжаете знак ограничения скорости 80 км/ч. Едите дальше, и видите еще один знак ограничения скорости, но он забрызган грязью и его практически не разобрать. Вы передвигаетесь со скоростью 95 км/ч. Что будете делать? Пока вы принимали решение из-за кустов выглянул сотрудник полиции, и вы увидели лучезарную улыбку на его лице. В голове у вас мгновенно достроился «образ знака», и вы поняли почему тут стоит полицейский, и что вам срочно нужно нажать тормоз. Вы сбрасываете скорость до 55 км/ч, улыбка с лица полицейского мгновенно пропадает, и вы едите дальше.

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

Воображение – это моделирование ситуации на произвольных условиях.

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

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

Вам не кажется, что определяя интеллект мы упустили из виду какие-то важные компоненты или забыли о чем-то рассказать?

Да, мы упустили из виду восприятие, и забыли рассказать про память.

Представьте себе, что вы смотрите в глазок и видите часть буквы:

Что это за буква?

Может быть «К»?

Конечно нет, это же японский иероглиф «вечность».

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

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

Образ – субъективное видение реального мира, воспринимаемого при помощи органов чувств (каналов поступления информации).

Восприятие субъективно, потому что зависит от последовательности обучения, последовательности появления образов в жизни человека и их влияния.

Восприятие начинается с распознания образов светло/темно. Открываем глаза – светло, закрываем – темно. Далее человек учится распознавать все более сложные образы – «мама», «папа», мяч, стол, собака. Мы получаем опорные данные, а все последующие образы – это надстройка над предыдущими.

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

Память служит для хранения образов и их взаимосвязей.

А воображение – это способность достраивать незавершенный образ.

Для обобщения приведем еще один эксперимент из мира животных:

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

Шимпанзе показали знакомый ей образ «гроздь бананов». Но образ для нее оказался незавершенным – их нельзя достать и съесть. Но так как это был единственный источник пищи из доступных, то незавершенный образ наращивал внутреннее напряжение и требовал завершения.

Средства для решения проблемы (завершения образа), всегда имелись в наличии, но возникновение решения требовало преобразования имеющихся образов (требовалось обучиться с помощью воображения). Шимпанзе необходимо было представить себе (умственно перечислить все возможные варианты): «что будет если я возьму палку», «а что будет если…» и наиболее вероятные предположения проверить на практике, попробовать и получить обратную связь, опять вообразить, попробовать, получить обратную связь и так далее до тех пор, пока мы не завершим образ(научимся).

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

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

  • Пересечение избыточной информации из разных информационных каналов создает образ.
  • Обучение – это преобразование информационных потоков в информационное поле.
  • Информационное поле(память) – хранение образов и их взаимосвязей.
  • Воображение – …

    – «Уважаемый читатель, дострой образ воображения самостоятельно, используя избыточную информацию из своего жизненного опыта и этой статьи».
  • Интеллект – это способность обучаться и воображать.

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

В следующей статье мы рассмотрим такую задачу как интеллектуальный поиск информации в интернете. Определим критерии интеллектуальности, разработаем практические подходы и «пощупаем» реальное приложение, в котором реализованы принципы, описанные в этой статье.

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

Читайте следующую статью на хабре:
Как создать искусственный интеллект? История вторая. Алгоритмы интеллектуального поиска и хранения информации

Как я писал ИИ для пошаговой стратегии / Хабр

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

Игра написана на языке программирования Lua, поэтому и примеры кода я буду приводить на этом языке.

Опишу некоторые детали игры, важные для ИИ:

  1. Игра – пошаговая стратегия. Вначале ходит игрок, потом ИИ делает свои действия за каждую страну. ИИ работает только при нажатии Следующий ход и понятия не имеет, что происходит в другое время.
  2. В игре есть карта, на которой можно рекрутировать/перемещать/распускать войска. ИИ должен анализировать ее и принимать необходимые решения.
  3. В игре можно заключать мир/объявлять войну/подписывать пакт о ненападении/заключать и расторгать союзы. ИИ должен уметь справляться и с этим.
  4. Технологии и политические институты доступны только игроку. У ИИ бонусы не меняются с начала игры, в отличие от игрока.

Функция, которая отвечает за начало следующего хода выглядит так:

function next_step()
	--Обрабатываем перемещения игрока на карте
	--ИИ отвечает на предложения, поступившие к нему
	for k, v in pairs(game_data.lands) do
		calc_ai(k)
	end
	--Все остальное
End

Вы, должно быть, заметили волшебную функция calc_ai, которая и отвечает за все действия ботов. Еще можно увидеть одну интересную деталь: функция выполняется поочередно за каждую страну.

Теперь ответим на вопрос, что же происходит в calc_ai.

function calc_ai(land)
	if land == game_data.player_land or land == "Undeveloped_land" 
	or not game_data.lands[land] then
		return
	end
	--ИИ разбирается с кем воевать, а с кем дружить
	for k, v in pairs(game_data.lands) do 
		local option = math.random()
		--Устанавливаем данные ИИ, отличающиеся для взаимодействия с ботом и игроком.
		if k == game_data.player_land then
			ai_data = fixed_ai_data[game_data.difficulty].player
		else
			ai_data = fixed_ai_data[game_data.difficulty]
		end
  	end
	move_army( math.random(), land) --Перемещаем армию
	balance_army( math.random(), land) -- Балансируем армию
end

Пока мы не будем глубоко разбираться, как ИИ принимает решения в политике, а заметим следующее:

  1. Cуществует проверка, чтобы ИИ случайно не пошел за игрока или за непонятное Undeveloped_land. Это просто земля без страны(На самом деле у провинции всегда должна быть страна, владеющая ей, поэтому Undeveloped_land – это обозначение в первую очередь для игры).
  2. ИИ выбирает разные таблицы для взаимодействия со страной в зависимости от того, игрок ей управляет или нет.
  3. ИИ вначале перемещает армию, и лишь потом нанимает.

fixed_ai_data – сама таблица. Названа так из-за того, что она не меняется (точнее сказать, что переменная ссылается всегда на корневую таблицу).
ai_data – непосредственно таблица, которая меняется в зависимости от того, с игроком бот имеет дело или нет(переменная просто ссылается на нужную таблицу).

На самом деле в игре есть только одна таблица, связанная с ИИ, и условно выглядит она так:

local ai = {
	standard = {
		peace = {
			conquer = 0.0001,
			war = 0.0002,
			war_neighbour = 0.004,
			pact = 0.005,
			agree_pact = 0.018,
			alliance = 0.001,
			alliance_small = 0.002,
			agree_alliance = 0.002,
			kick = 0.0005,
			envy = 0.02
		},
		war = {
			agree_peace = 0.005,
		},
		player = {
			peace = {
				war = 0.0002,
				war_neighbour = 0.002,
				pact = 0.008,
				agree_pact = 0.08,
				alliance = 0.001,
				alliance_small = 0.002,
				agree_alliance = 0.002,
				kick = 0.0005,
				support = 0.005,
				voluntary_support = 0.002,
				envy = 0.01
			},
			war = {
				agree_peace = 0.02,
			}
		},
		bonuses = {
			population_increase = 1.4,
			money_increase = 1.5,
			upgrade_province = 0.005
		}
	},
}

standard – уровень сложности. Уровней сложности несколько, и значения в разных таблицах различаются.

peace, war – состояния страны. Таблица peace используется для любых действия, таблица war – только для действий с противником.

Третья таблица player содержит таблицы peace и war с измененными значениями. Как вы уже знаете, в игре ИИ может по-разному относиться к игроку и боту.

Значения в таблицах, я думаю, понятны по названию. Но в любом случае некоторые из них мы рассмотрим.

А пока нам нужно разобраться, как же устроен ИИ в игре. Здесь все просто, в зависимости от состояния бот может выбрать любое значение из списка. Числа, которые выше, — это вероятность наступления каждого события. Рассмотрим на примере:
pact = 0.005 – означает, что с шансом 0.005 страна предложит другой стране заключить пакт о ненападении. Да, все просто. Вы можете сказать: «Как тогда можно играть, зная, что ИИ все делает наугад?». На самом деле не совсем так и это мы разберем чуть позже.

А пока посмотрим на следующую функцию:

function get_answer(option,state)
	local sum_option = 0
	for k, v in pairs(state) do
		sum_option = sum_option + v
		if option < sum_option  then
			return k
		end
	end
	if sum_option > 1 then
		print("AI Error, sum_option > 1")
	end
end

option – Случайное число от 0 до 1
state – Состояние страны
Функция get_answer просто возвращает случайное действие. Зачем она нужна, и почему нельзя просто проверять option

Эта функция проверяется во всех возможных действиях для ИИ:

if возможно_предложить_пакт and get_answer(option, ai_data.peace) == "pact" then
	предлагаем_пакт
end

Все просто. На этом, казалось бы, можно и закончить, но нет.

Проясним несколько моментов:

  1. ИИ с разным шансом объявляет войну соседям и не соседям(war, war_neighbour)
  2. Маленькие страны чаще вступают в союзы по сравнению с крупными(alliance, alliance_small)
  3. У ИИ есть зависть(envy). По названию не совсем понятно, но это шанс, с которым страна объявит войну слишком сильной по меркам игры державе.
  4. Мы забыли про таблицу бонусов(bonuses). В ней хранятся значения, которые никак не связаны с отношением к другим странам, например, бонус к росту населения или шанс улучшения провинции.

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

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

  • strategy – идентификатор стратегии. Бывает:
    1. retreat – страна уменьшает свою армию, чтобы накопить денег.
    2. recruit – страна нанимает максимальную армию.
  • target – цель. Это любая страна, которой наш ИИ решил объявить войну, но начал стратегию.
  • ultimatum – nil, если нет ультиматума, данные об ультиматуме, если он есть.
  • value – количество ходов до объявления войны. Придумать название переменной получше не смог, извините.

То есть, если ИИ начинает стратегию, то он:

  1. Уменьшает свою армию и копит деньги.
  2. Нанимает максимально возможную армию.
  3. Объявляет войну игроку.

С определенным шансом страна может выдвинуть ультиматум, при выполнении которого война отменяется. Например:
Уменьшите вашу армию в провинции lipetsk до 5 000, иначе мы объявим Вам войну.

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

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

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

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

Программируем в мире Minecraft / Блог компании Microsoft / Хабр

Хабр, привет! Пока все обсуждают ИИ в мире Pacman, мы начнем делать свой ИИ в Minecraft с фреймворком Malmo от Microsoft Research. Pacman у нас тоже появится. Если вы любите кубический мир, или вам хотелось бы начать изучать искусственный интеллект, или у вас есть дети, с которыми вы не можете найти общие увлечения, или же вас просто заинтересовала тема – прошу под кат.


В этой статье я постараюсь затронуть несколько тем:

  • Выскажу свое мнение о помешательстве детей на кубической игрушке
  • Расскажу об основной идее Malmo
  • Покажу несколько примеров с кодом и дам понимание, куда можно идти дальше
  • Расскажу об идее и результатах Malmo Challenge

Minecraft: моя предыстория

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

Для меня Minecraft стал продолжением любимой игрушки детства – Lego, исправив ее главный недостаток: постоянную нехватку деталей. Аналог Lego с безлимитными деталями, что может быть лучше.

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

У Minecraft очень размытое понятие финальной цели. Конечно, вы можете прокачаться и убить дракона, с гордостью сказав, что вы прошли игру. Но так никто не делает. Основной кайф мира Minecraft в том, что каждый раз в нем можно придумать свою личную цель: исследовать мир и найти пещеру с тайниками, построить дом своей мечты, изучить основы электричества или зайти на сервер вместе с другом и делать друг другу всевозможные ловушки. Отсутствие цели в игре – на мой взгляд, главное ее преимущество. Minecraft дает огромный простор для творчества, при этом почти не ставит ограничений.

Изучая сабж, я случайно узнала, что мир Minecraft не ограничивается игрой, мерчем, летсплеями и фан артами. В игре снимают целые сериалы, и – неожиданно – они являются довольно популярными. На мой взгляд, это забавно.

Меня очень обрадовала новость о наличии open source фреймворка для программирования в мире Minecraft. Я твердо уверена, что в будущем в подавляющем числе профессий могут понадобиться базовые навыки программирования. Фреймворк на базе любимой игрушки, на мой взгляд, отличный способ показать ребенку захватывающий мир программирования.

Malmo: основная идея

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

Технические моменты

Установка

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

Поддержка ОС и языков программирования

Несмотря на смелое заявление о поддержке всех трех популярных ОС, мне показалось, что тестирование было как следует проведено лишь для ОС Windows. Победив проблемы с установкой, ваша головная боль на ОС Windows обещает закончиться. На Linux проблемы, скорее всего, продолжатся, так как поднятый сервер периодически падает, не сообщая причин. Если вы продолжите мои эксперименты – обязательно пишите в комментарях о вашем опыте.

Авторы постарались поддержать большое число популярных языков и сделали обвязки для C#, C++, Lua, Python2 и Java. Я выбрала Python.

Как играть программировать в Malmo

Основной процесс выглядит следующим образом: в одном окошке вам необходимо поднять сервер и клиента. Для этого есть скрипт ./Minecraft/launchClient.*. После того, как сервер поднялся, в другом окне вы можете запустить код с основной логикой для управления персонажем. Как узнать, что сервер поднялся? Все крайне логично: вы увидите запущенный экземпляр Minecraft с начальным меню внутри, а в терминале будет гордо красоваться надпись Building 95%.

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

Логику для каждого из человечков вы можете реализовать в коде, а также можно управлять персонажем самостоятельно всем знакомыми клавишами AWSD.

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

Авторы позаботились о нас и сделали внушительное число примеров, добавив к ним описание.

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

agent_host.sendCommand("move 1")

И насладитесь первыми шагами своего героя. Учтите, что по умолчанию используется т.н. ContinuousMovementCommands. Воспринимайте отдаваемые персонажу команды как изменение положения рычага. Говоря "move 1", вы сделаете не один шаг. Вы будете бежать, пока не дадите команду "move 0". Такой код на практике не сдвинет человечка с места:

agent_host.sendCommand("move 1")
agent_host.sendCommand("move 0")

Команды выполнятся за считанные доли секунды. Не забывайте вставлять периодические строчки "time.sleep(X)". Я уверена, что вы знаете, где брать информацию об остальных командах (хотя, по моему опыту, проще по диагонали просмотреть туториал и затем искать нужное в исходниках).

В xml файле вы можете задать режим игры:

<AgentSection mode="Survival"> 
<!-- замените на Creative и летайте по миру -->

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

Вот этот код нарисует вам Пакмана, который поедает шарики и уходит в радужный кратер:

<FlatWorldGenerator generatorString="3;7,44*49,73,35:1,159:4,95:13,35:13,159:11,95:10,159:14,159:6,35:6,95:6;12;lake,lava_lake" />
<DrawingDecorator>
    <DrawSphere x="-60" y="70" z="0" radius="30" type="air"/>
    <DrawSphere x="-60" y="80" z="30" radius="10" type="wool" colour="YELLOW"/>
    <DrawCuboid x1="-50" y1="80" z1="30" x2="-70" y2="70" z2="20" type="air"/>
    <DrawSphere x="-60" y="75" z="25" radius="2" type="wool" colour="WHITE"/>
    <DrawSphere x="-60" y="68" z="18" radius="2" type="wool" colour="MAGENTA"/>
    <DrawSphere x="-60" y="61" z="11" radius="2" type="wool" colour="PURPLE"/>
    <DrawSphere x="-60" y="54" z="4" radius="2" type="wool" colour="PINK"/>
</DrawingDecorator>

Наконец, в xml можно добавить необходимые координаты для добавления обзора персонажу:

<ObservationFromGrid>
    <Grid name="floor3x3">
        <min x="-1" y="0" z="-1" />
        <max x="1" y="0" z="1" />
    </Grid>
</ObservationFromGrid>

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

grid = observations.get(u'floor3x3', 0)

Мы получим массив со строками. Каждая строка – это текстовое представление типа одного из кубиков.

floor3x3: ['lava', 'obsidian', 'obsidian', 'lava', 'obsidian', 'obsidian', 'lava', 'obsidian', 'obsidian']

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

Фичи для ИИ

Конечно же, первое, что мне захотелось увидеть для реализации алгоритмов ИИ в malmo – это возможность двигаться дискретно. В вопросе ИИ и так хватает сложностей, и не хочется добавлять ко всему прочему постоянную корректировку направления и скорости движения.
Включаем нужное в xml так:

<DiscreteMovenetCommands/>

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

<Placement x="4.5" y="46.0" z="1.5" yaw="0"/>
<!-- y - высота, x, z - плоскость движения  -->

Целые координаты поставят вас в пересечение кубов, персонаж откажется двигаться с места, никаких предупреждений и ошибок вы не увидите. В туториале об этом также не предупреждают. Я потратила около 4 часов, чтобы осознать суть проблемы и сделать координаты x и z половинчатыми. (y отвечает за высоту и не играет роли в данной истории).

Кроме этого, исследователи добавили несколько приятных фич для решения задачи обучения с подкреплением (Reinforcement Learning). Алгоритмы этого типа подразумевают постоянное награждение или наказание искусственного интеллекта за те или иные действия. Разработчики продумали этот момент и добавили возможность прописать эти действия/события в xml, избавив код от постоянных одинаковых проверок. Вы также можете задать окончание игры по наступлению некоторого события:

<RewardForTouchingBlockType>
    <Block reward="-100.0" type="lava" behaviour="onceOnly"/>
    <Block reward="100.0" type="lapis_block" behaviour="onceOnly"/>
</RewardForTouchingBlockType>
<RewardForSendingCommand reward="-1" />
<AgentQuitFromTouchingBlockType>
    <Block type="lava" />
    <Block type="lapis_block" />
</AgentQuitFromTouchingBlockType>

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

Malmo: вывод

Авторы фреймворка подарили нам потрясающую возможность погрузиться в любимый мир с другой стороны. Malmo пока что находится в бете, во многих ситуациях он… заставляет совершенствовать свои навыки в troubleshooting. Тем не менее, его плюсы перевешивают все его минусы, а тот факт того, что исходники лежат в открытом доступе на github, позволяет нам самостоятельно доделать нужное место или создать issue для исправления критических багов.

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

Malmo Challenge: история и результаты

Кроме самого фреймворка, Microsoft также проводил соревнование на базе платформы, названной Malmo Challenge. Оно было призвано побудить ученых и исследователей к работе над коллаборативными алгоритмами. Конкурс стартовал примерно полгода назад, а результаты появились 5 июня.

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

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

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

Я рада поделиться с вами результатами соревнования. Меня очень удивило распределение мест в турнирной таблице.

Первое место занял проект команды из Великобритании. Авторы трезво оценили сильный недостаток времени, поняли, что они вряд ли успеют адаптировать для задачи сложные существующие алгоритмы. Они выбрали Байесовский вывод для определения типа напарника, а также Марковские цепи для непосредственного игрового процесса. И победили.

Участники, занявшие второе место, решили взять самые сложные из существующих решений, они использовали DNN, Reinforcement learning, DQN, A3C model… И это все не помогло им обойти Байеса и Марковские цепи.

Подытожим статью мыслью о том, что нужно быть проще.

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

Видео с моим рассказом о Malmo на встрече Петербургского Python митапа уже появилось на моем канале на Youtube. Там также есть записи других моих лекций и прочая болтовня про IT.

Какой язык программирования выбрать для работы с данными? / Хабр

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

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

Специфичность

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

Универсальность

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

Эффективность

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

Производительность

В некоторых случаях очень важно оптимизировать производительность вашего кода, тем более при работе с большими объемами особо важных данных. Однако скомпилированные языки обычно намного быстрее, чем интерпретируемые. Аналогично, статически типизированные языки значительно более отказоустойчивы, чем динамически типизированные. Таким образом, единственным компромиссом является снижение производительности.

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

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

R, который является прямым потомком старшего языка программирования S, был выпущен в далеком 1995 году и с тех пор становится все совершеннее. Написанный на таких языках как C и Fortran данный проект сегодня поддерживается Фондом языка R для статистических вычислений (R Foundation for Statistical Computing).

Лицензия:

Бесплатная

Преимущества:

  • Отличный набор высококачественных предметно-ориентированных пакетов с открытым исходным кодом. R имеет в своем распоряжении пакеты практически для любого количественного и статистического применения, которое можно только себе представить. Сюда входят нейронные сети, нелинейная регрессия, филогенетика, построение сложных диаграмм, графиков и многое-многое другое.
  • Вместе с базовой установкой в довесок нам предоставляется возможность установки обширных встроенных функций и методов. Кроме того, R прекрасно обрабатывает данные матричной алгебры.
  • Возможность визуализации данных является немаловажным преимуществом наряду с возможностью использования различных библиотек, например ggplot2.

Недостатки:

  • Низкая производительность. Здесь нечего сказать: R не является быстрым ЯП.
  • Специфичность. R прекрасно подходит для статистических исследований и науки о данных, но он не так хорош, когда дело доходит до программирования для общих целей.
  • Другие особенности. R имеет несколько необычных особенностей, которые могут сбить с толку программистов, привыкших работать с другими ЯП: индексирование начинается с 1, использование нескольких операторов присваивания, нетрадиционные структуры данных.

Наш вердикт – идеальный вариант для первоначальных целей

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

Python

В 1991 году Гвидо ван Россум представил язык программирования Python. С тех пор этот язык стал чрезвычайно популярным ЯП общего назначения и широко используется в сообществе специалистов по данным. В настоящее время основными версиями являются Python 3,6 и Python 2,7.

Лицензия:

Бесплатная

Преимущества:

  • Python – это очень популярный, широко используемый язык программирования общего назначения. Он имеет обширный набор специально разработанных модулей и широко используется разработчиками. Многие онлайн-сервисы предоставляют API для Python.
  • Python очень прост в изучении. Низкий порог вхождения делает его идеальным первым языком для тех, кто занимается программированием.
  • Такие программные пакеты как pandas, scikit-learn и Tensorflow, делают Python надежным вариантом для современных приложений в области машинного обучения.

Недостатки:

  • Типобезопасность. Python – это динамически типизированный язык, а это значит, что вы должны быть осторожными при работе с ним. Ошибки несоответствия типов (например, передача строки (string) в качестве аргумента методу, который ожидает целое число (integer)) могут время от времени случаться.
  • Например, в случае если имеются конкретные цели статистического анализа и анализа данных, то обширный набор пакетов языка R дает ему преимущество перед Python. Кроме того, существуют более быстрые и безопасные альтернативы Python среди языков программирования.

Наш вердикт – удобен во всех отношениях

Python является хорошим вариантом для целей науки о данных (data science), и это утверждение справедливо как для начального, так и для продвинутого уровней работы в данной области. Большая часть науки о данных сосредоточена вокруг процесса ETL (извлечение-преобразование-загрузка). Эта особенность делает Python идеально подходящим для таких целей языком программирования. Библиотеки, такие как Tensorflow от Google, делают Python очень интересным языком для работы в области машинного обучения.

SQL

img align=«center» src=«habrastorage.org/web/f7e/2cf/42d/f7e2cf42d60b4b8fa6f442504828fe57.png»/>

SQL («язык структурированных запросов») определяет, управляет и запрашивает реляционные базы данных. Язык появился в 1974 году и с тех пор претерпел множество видоизменений, но основные его принципы остаются неизменными.

Лицензия:

Есть бесплатные и платные варианты.

Преимущества

  • Очень эффективен при работе с запросами, обновлениями, а также при обработке реляционных баз данных.
  • Декларативный синтаксис делает SQL очень читаемым языком. Нет никакой неопределенности в том, что SELECT name FROM users WHERE age > 18 должен делать!
  • SQL очень часто используется в различных приложениях, так что знакомство с ним может очень пригодиться. Модули, такие как SQLAlchemy, упрощают интеграцию SQL с другими языками.

Недостатки:

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

Наш вердикт – эффективный, несмотря на время

SQL более полезен в качестве языка для обработки данных, чем в качестве передового аналитического инструмента. Тем не менее, так много процессов в области науки о данных зависит от ETL, а долговечность и эффективность SQL лишний раз свидетельствуют о том, что такой ЯП должен знать каждый специалист по данным (data scientist).

Java

Java – это чрезвычайно популярный язык общего назначения, который работает на виртуальной машине Java Virtual Machine (JVM). Это абстрактная вычислительная система, которая обеспечивает плавную переносимость между платформами. В настоящее время поддерживается корпорацией Oracle.

Лицензия:

8-я версия – бесплатная

Преимущества:

  • Универсальность. Многие современные системы и приложения разработаны с помощью языка Java. Огромным преимуществом такого ЯП является способность интегрировать методы науки о данных непосредственно в существующую кодовую базу.
  • Строгая типизация. Обеспечение типобезопасности не пустой звук для Java, и в случае разработки критически важных приложений для работы с большими данными эта особенность как никогда важна.
  • Java – это высокопроизводительный, скомпилированный язык общего назначения. Это делает его пригодным для написания эффективного производственного кода ETL, а также алгоритмов машинного обучения с использованием вычислительных средств.

Недостатки:

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

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

Много чего можно сказать в пользу изучения Java как языка для работы в области науки о данных. Многие компании оценят возможность беспрепятственной интеграции готового кода программного продукта в собственную кодовую базу, а производительность и типобезопасность Java являются его неоспоримыми преимуществами. Тем не менее, к недостаткам такого языка можно отнести тот факт, что у него отсутствуют наборы специфических пакетов, которые доступны для других языков. Несмотря на такой недостаток, Java является языком программирования, которому обязательно стоит уделить внимание, особенно если вы уже знаете R или Python.

Scala

Функционирующий на JVM язык программирования Scala был разработан Мартином Одерски в 2004 году. Это язык с несколькими парадигмами, позволяющий использовать как объектно-ориентированные, так и функциональные подходы. Кроме того, структура кластерных вычислений Apache Spark написана на Scala.

Лицензия:

Бесплатная

Преимущества:

  • Используя Scala и Spark, у вас появляется возможность работать с высокопроизводительными кластерными вычислениями. Scala – это идеальный выбор для тех, кто работает с большими объемами данных.
  • Мультипарадигматический. Для программистов, работающих со Scala, доступны как объектно-ориентированные, так и функциональные парадигмы программирования.
  • Scala компилируется в байт-код Java и работает на JVM. Это позволяет ему взаимодействовать с языком Java, делая Scala очень мощным языком общего назначения. Кроме того, он также хорошо подходит для работы в области науки о данных.

Недостатки:

  • Если вы только-только собрались работать со Scala, то будьте готовы изрядно «поломать» голову. Лучше всего загрузить sbt и настроить IDE, например Eclipse или IntelliJ, с помощью специального плагина Scala.
  • Есть мнение, что синтаксис и система типов Scala являются достаточно сложными. Таким образом, программистам, привыкшим работать с динамическими языками, например Python, придется несладко.

Наш вердикт – идеальный вариант для работы с большими данными

Если вы решили использовать кластерные вычисления для работы с большими данными, то пара Scala + Spark – это идеальное решение. Более того, если у вас уже есть опыт работы с Java и другими статически типизированными языками программирования, то вы непременно оцените эти возможности Scala. Однако, если ваше приложение не имеет ничего общего с большими объемами данных, работа с которыми может оправдать добавление всех составляющих Scala, вы, скорее всего, добьетесь большей производительности, используя другие языки, такие как R или Python.

Julia

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

Лицензия:

Бесплатная

Преимущества:

  • Julia – это скомпилированный язык JIT («точно в срок»), благодаря которому удается достичь хорошей производительности. Этот язык является достаточно простым, он предусматривает возможности динамической типизации и сценариев интерпретируемого языка, такого как Python.
  • Julia был предназначен для проведения численного анализа, он также может рассматриваться в качестве языка программирования общего назначения.
  • Читаемость. Многие программисты, работающие с данным языком, считают, что такая особенность является его наибольшим преимуществом.

Недостатки:

  • Незрелость. Поскольку Julia является достаточно новым языком, некоторые разработчики сталкиваются с нестабильностью во время работы с его пакетами. Тем не менее, базовые средства языка считаются стабильными.
  • Еще одним признаком незрелости языка является ограниченное количество пакетов программ, а также небольшое число поклонников среди разработчиков. В отличие от устоявшихся R и Python язык программирования Julia не располагает большим количеством пакетов программ (пока что).

Наш вердикт – язык, который себя еще проявит

Да, главная проблема языка Julia – это его молодость, однако его нельзя за это винить. Поскольку Julia был создан лишь недавно, он пока что не может конкурировать со своими основными конкурентами, Python и R. Будьте терпеливыми и вы поймете, что существует множество причин обратить пристальное внимание на этот язык, который, непременно, сделает выдающиеся шаги в ближайшем будущем.

MATLAB

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

Лицензия:

Цены варьируются в зависимости от выбранного вами варианта языка

Преимущества:

  • MATLAB, предназначенный для численных вычислений, хорошо подходит для использования количественного анализа со сложными математическими требованиями, такими как обработка сигналов, преобразования Фурье, матричная алгебра и обработка изображений.
  • Визуализация данных. MATLAB имеет ряд встроенных возможностей построения графиков и диаграмм.
  • MATLAB часто можно встретить во многих курсах бакалавриата по точным наукам, таким как физика, инженерия и прикладная математика. Таким образом, он широко используется в этих областях.

Недостатки:

  • Платная лицензия. Вне зависимости от выбранного вами варианта (для научных, личных целей или целей компании) вам придется раскошелиться на дорогостоящую лицензию. Наш совет: обратите внимание на бесплатную альтернативу – Octave.
  • MATLAB – это не лучший язык программирования для общего назначения.

Наш вердикт – лучший вариант для целей, требующий значительных математических расчетов

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

Другие языки

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

C++

Зачастую, C++ не используется в области науки о данных. Тем не менее, он имеет молниеносную производительность и широкую популярность. Главной причиной, по которой C++ не обрел популярности в области науки о данных, является его неэффективность для такой цели.

Как написал один из участников форума:

«Предположим, что вы пишете код для проведения какого-либо специального анализа, который, вероятно, будет запускаться только один раз. Так вот, вы предпочли бы потратить 30 минут на создание программы, которая будет работать в течение 10 секунд или потратить 10 минут на программу, которая будет работать в течение 1 минуты?»

И этот парень прав! Тем не менее, C++ станет отличным выбором для реализации алгоритмов машинного обучения, оптимизированных на низком уровне.

Наш вердикт – не лучший выбор для повседневной работы, но если дело касается производительности…

JavaScript

Ввиду того, что за последние несколько лет платформа Node.js активно развивалась, язык программирования JavaScript все больше и больше обретал черты серверного языка. Однако его возможности в области науки о данных и машинного обучения на сегодняшний день достаточно скромны (тем не менее, не стоит забывать про brain.js и synaptic.js!). К недостаткам JavaScript можно отнести:

  • Слишком рано для него, чтобы вступить в игру (Node.js всего 8 лет!)…
  • Платформа Node.js и вправду быстрая, но всегда найдутся те, кто будет активно критиковать JavaScript.

К неоспоримым преимуществам Node.js можно отнести его асинхронный ввод-вывод, его растущую популярность, а также тот факт, что существует множество языков, которые компилируются с JavaScript. Так что вполне возможно, что в недалеком будущем мы увидим полезный фрейморк для работы в области науки о данных с возможностью обработки с помощью ETL в режиме реального времени. Другой вопрос: будет ли это актуально на то время…

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

Perl

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

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

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

Ruby

Ruby – это еще один динамически типизированный интерпретируемый язык общего назначения. Тем не менее, похоже, что у его создателей нет никакого желания сделать его пригодным для работы в области науки о данных, как в случае с Python.

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

Наш вердикт – не совсем правильный выбор для науки о данных, но в вашем резюме знание Ruby не помешает

Заключение

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

Я регулярно использую R, Python и SQL, так как моя текущая работа в основном сосредоточена на разработке существующих конвейеров данных и ETL-процессов. Эти языки совмещают правильный баланс общности и эффективности для выполнения этой работы с возможностью использования более совершенных статистических пакетов R, когда это необходимо.

Однако, возможно, вы уже неплохо набили руку в Java, или вам не терпится испробовать в действии Scala для работы с большими данными, или, может быть, вы без ума от проекта Julia.

А может вы зубрили MATLAB на парах в институте или не прочь дать SciRuby шанс показать себя? Да у вас могут быть сотни разных причин! Если так, то оставьте свой комментарий внизу – ведь для нас действительно важно знать мнение каждого из вас!

Спасибо за внимание!

Маркетинг для вашего проекта на Reddit, Medium и Bitcointalk.

Как языки программирования получили свои названия / Хабр

Возможно, вы слышали поговорку о том, что в информатике есть только две сложные вещи, одна из них — придумывать названия. Некоторые имена языков программирования действительно имеют смысл, например, Google назвали свой язык Go(lang). Другие названия — например, Python и Java — не так очевидны.

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

Python

Python был создан Гвидо ван Россумом как программистское «хобби», чтобы занять себя на время рождественских каникул. Ван Россум хотел, чтобы его язык был лаконичным, уникальным и немного загадочным. Если рассматривать логотип Python «две змеи», можно подумать, что Python назван в честь огромных питонов.

Но на самом деле, находясь в «слегка непочтительном настроении», Гвидо назвал его в честь «Летающего цирка» Монти Пайтона, британского комедийного сериала 70-х годов. Оказывается, он был большим его поклонником и в то время почитывал сценарии шоу.

Java

Java был разработан в начале 1990-х в Sun Microsystems как часть Green Project. Создание нового языка даже не было целью проекта: Java был создан, потому что разработчикам был нужен независимый от процессора язык, который располагал бы большей частью возможностей C++, но с которым было бы проще работать. Сверхсекретная Green Team была сформирована для создания «следующей технологической волны» за пределами ПК, устройства *7, которое, как они считали, станет интерактивной бытовой электроникой с цифровым управлением (предшественником «умных устройств»).

Устройство выглядело так

Первоначально Java была названа Oak (рус: дуб) в честь дерева за окном одного из разработчиков. Однако, когда юристы Sun определили, что товарный знак Oak уже зарегистрирован кем-то другим, Green Team провела мозговой штурм за чашечкой кофе и было придумано название Java. Они хотели выбрать имя, которое отражало бы суть языка: «динамичного, революционного, живого и веселого». После встречи, которая была описана как «фундаментально сплошное безумие», имя Java казалось идеальным выбором.

И хотя * 7 опережал время, он так и не стал популярным. А вот язык программирования, созданный для него, навсегда вошел в историю.

JavaScript

JavaScript был создан Бренданом Эйхом в 1995 году в Netscape — компанией, стоящей за Navigator, самым популярным веб-браузером того времени. Тогда веб-страницы были полностью статичными, но Netscape хотели, чтобы веб-сайты были динамичными и интерактивными, как те, что существуют сегодня. Испытывая давление со стороны Microsoft Internet Explorer, они наняли Эйха, чтобы тот интегрировал язык сценариев в их браузер.

Netscape хотела создать язык, который был бы простым и легким в использовании. Осознав быстро растущую популярность Java, они представили этот язык как «помощника по написанию сценариев для Java», подобно тому, как Visual Basic был дополнением к C / C ++. Сделав акцент на быстрой разработке и простоте, Эйх позаимствовал большую часть синтаксиса Java и написал первую версию JavaScript всего за 10 дней. Этой версии дали название Mocha.

Когда этот язык впервые интгрировали в Netscape, он назывался LiveScript. Вскоре после этого, Netscape сделала ставку на «Java компаньона». Они стали партнерами Sun, переименовав свой язык в JavaScript и рекламировали его “выезжая” на связи с Java: JavaScript рекламировался как язык сценариев для выполнения небольших клиентских задач в браузере, а Java продвигался как более крупный профессиональный инструмент для разработки функциональных веб-компонентов. На самом деле, название JavaScript возникло в результате маркетинговой уловки Netscape, которые пытались конкурировать с Microsoft.

Семейство C (C, C ++, Objective-C, C #)

Первый язык программирования — Ada, был назван в честь Ады Лавлейс. Вскоре появился язык под названием B, разработанный Денисом Ричи из Bell Labs, который еще позже разработал язык C. Этот язык многие считают первым языком программирования высокого уровня.

C имеет множество расширений, включая C++, Objective-C и C #. Имена C++ и Objective-C говорят сами за себя*, тогда как C# менее очевиден. C # вдохновлен музыкой: знак # (диез) означает, что ноту нужно повысить на полтона. Еще более интересно то, что символ # представляет собой лигатуру из 4+ символов в квадрате 2×2, что идеально подходит, учитывая, что C # является «инкрементом» C++.

*C++ — название указывает на эволюционную природу перехода к нему от C; также «++» — это операция приращения в C.)

Objective-C — т.к. объектно-ориентированный.

Swift

Swift был разработан Apple в 2010 году и выпущен четыре года спустя. Основное влияние на Swift оказал Objective-C. Apple продвигает Swift как быстрый, простой в использовании и безопасный по архитектуре язык. Изначально Swift назывался Shiny, словно они разработали «новую блестящую вещь». У него даже было расширение файла .shiny.

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

Haskell

Haskell назван в честь логика Хаскелла Брукса Карри, известного своими работами в области комбинаторной логики. Фактически, есть язык программирования, названный в честь каждого из его имен: Haskell, Brook и Curry.

С его именем связаны парадокс Карри и соответствие Карри — Ховарда, а также функциональная операция «каррирование», широко используемая в языках программирования.

Интересным аспектом Haskell, который редко обсуждают, является его логотип. В логотипе можно заметить символ λ — дань лямбда-исчислению. Однако если посмотреть внимательнее, можно увидеть, что λ “зажата” между > и =. Это происходит от печально известного оператора связывания для монад: >> =. Логотип Haskell — это оператор связывания, переплетенный с λ.

Логотип Haskell

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

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

7 лучших языков программирования, широко используемых в проектах искусственного интеллекта / машинного обучения

Сегодня мы познакомимся с различными языками программирования, которые используются в проектах искусственного интеллекта / машинного обучения. Мы также научимся использовать язык программирования в проектах AI / Machine Learning.

Давайте быстро начнем это руководство с изучения одной новости о рыночной ситуации.

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

Приведенное выше объявление о вакансии не раскрывает полной картины. Согласно недавнему отчету , количество патентов на ИИ / машинное обучение выросло на 34%. Apple, Google, Microsoft и многие другие технологические гиганты вкладывают деньги в ИИ.

А теперь давайте проверим некоторые факты и новости. По данным CNBC, ИИ в ближайшее время закроет 1,8 миллиона рабочих мест, но, с другой стороны, ИИ / машинное обучение также добавит 2.3 миллиона рабочих мест на рынке.

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

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

Языки программирования в искусственном интеллекте / машинном обучении

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

Среди экспертов Berkley University состоялась интересная дискуссия о том, почему одни языки программирования выживают, а другие умирают. Они выступили с некоторыми пунктами, которые способствуют прекращению языков программирования:

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

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

1.Python

Язык программирования Python развивается в обоих аспектах; функции, а также популярность с момента его появления. Вот график, демонстрирующий его рост.

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

Это первый язык, который вы должны выучить, а также наиболее предпочтительный язык программирования в области науки о данных, искусственного интеллекта и машинного обучения, если вы хотите погрузиться в сектор искусственного интеллекта / машинного обучения. Существует множество библиотек для решения большинства задач науки о данных и искусственного интеллекта / машинного обучения, таких как AIMA, Pybrain, Numpy и т. Д.

Он также широко используется в сфере веб-разработки.

2. R Программирование

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

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

3. C ++

C ++ — один из самых быстрых языков из-за его способности передавать сообщения на аппаратном уровне. Это язык программирования для проектов искусственного интеллекта / машинного обучения, чувствительных ко времени. Он отлично работает со статистическим подходом AI, который является частью нейронных сетей.

C и C ++ также использовались для разработки многочисленных библиотек машинного обучения / глубокого обучения.

C ++ дает вам твердую власть над временем выполнения и производительностью. Вы можете безопасно использовать его шаблоны и для обобщения API.

4. Java

Java — это язык программирования , который затронул многие сегменты ИТ-индустрии, включая искусственный интеллект и машинное обучение. Вы можете использовать технологию Java Virtual Machine для создания единой версии приложения. Запустить его на машинах с поддержкой Java не составит труда.

Java имеет отличную поддержку больших проектов (что важно в AI / Machine Learning), упрощенную визуализацию, легкую отладку, плавное взаимодействие с пользователем. Вы можете легко найти помощь в Интернете благодаря обширному онлайн-сообществу.

Вот некоторые из хорошо известных приложений Java:

  • Пакет машинного обучения WEKA
  • Робокод
  • Нейродвигатель JOONE
  • ALICE (приложение AI)

5. JavaScript

JavaScript — популярный язык для создания онлайн-программ и интерактивных веб-приложений. Однако он вошел в мир искусственного интеллекта / машинного обучения и становится все более популярным.

Вы можете найти множество библиотек для выполнения задач AI / Machine Learning.Вот некоторые из популярных:

  • ConventJS для реализации глубокого обучения
  • Synaptic для разработки и обучения нейронных сетей
  • Mind для тренировочных данных

6. Юлия

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

Julia совместима со всем основным оборудованием, таким как IBM, Intel, ARM и Nvidia. Вы найдете его синтаксис, похожий на Python, R и MatLab, и он имеет большую скорость, как C ++. Это устраняет необходимость оценки модели на одном языке и вызывает необходимость в другом из-за его простоты и скорости. Многие крупные корпорации используют Юлию для своих проектов.

В 2016 году разработчики использовали Джулию для решений глубокого обучения для улучшения диагностики зрения в сельских районах Индии.

7. Haskell

Последний язык в списке — Haskell. Это надежный язык статической типизации, который существует с 1990 года. Есть авторитетные организации, которые используют Haskell в своих проектах, однако он более популярен в академических кругах.

Язык

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

Haskell также отлично подходит для вероятностного программирования, что важно для разработчиков AI / Machine Learning, чтобы быстро выявлять ошибки на этапе компиляции итерации.

К вам

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

Вам не нужно изучать сразу все языки программирования в AI / Machine Learning. Сначала выучите один язык, а затем перейдите на другой. Зная один язык программирования, не составит труда добавить еще один. Мы рекомендуем начать ваше путешествие с Python.

Какие еще языки программирования в AI / Machine Learning вы хотите добавить? Если да, не стесняйтесь делиться своими взглядами в комментарии ниже.

.

17 самых простых языков программирования для изучения

  • Home
  • Лучшие проекты
    • All Star Projects
    • Веб-разработка
    • Мобильная разработка
    • Дизайн
    • Data Science
  • Bootcamp
    • Best Online Bootcamp
    • Best Online Bootcamps
    • Лучшие учебные курсы по науке о данных
    • Лучшие учебные курсы по аналитике данных
    • Лучшие учебные курсы по кибербезопасности
    • Лучшие учебные курсы ISA 2020
  • программ
    • Веб-разработка
    • Мобильная разработка
    • Управление продуктами
    • Цифровой маркетинг
    • Дизайнер UX / UI
    • Администрирование баз данных
    • Управление социальными сетями
    • InfoSec Analyst
    • Инженер по обеспечению качества
    • SEO Manager
    • Computer Systems Analyst
    • 9 0003 Разработчик WordPress

  • Блог
    • Bootcamps
    • Кодирование
    • Ресурсы для карьеры
    • Tech Fields
    • Новости и комментарии

  • Главная страница Веб-разработка
  • Мобильная разработка
  • Дизайн
  • Data Science
  • Bootcamps
    • Best Coding Bootcamps
    • Best Online Bootcamps
    • Best Web Design Bootcamps
    • Best Data Science Bootcamps
    • Best Data Science Bootcamps
    • Учебные курсы по безопасности
    • Лучшие учебные курсы ISA 2020
  • Программы
    • We
  • .

    Как выбрать язык программирования

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

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

    Я призываю вас подумать о том, чего вы хотите достичь с помощью кода.Быть конкретной. Недостаточно точно найти хорошую работу. В конце концов, хороша ли работа или работа , если она хорошо оплачивается, но вы ее ненавидите? Код есть везде, а это значит, что у вас есть много вариантов. Вы хотите создавать мобильные приложения? Вас интересуют Arduino и Raspberry Pi? Вы исследователь, который хочет больше контролировать свои данные? Вы можете многое сделать с помощью кода, и возможности продолжают расширяться.

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

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

    Но не все так просто

    Я знаю, что делаю это просто. Достаточно сложно решить, чем вы хотите заниматься. Как только вы получите общее представление, оно может стать более запутанным. Допустим, вы хотите создавать веб-приложения. Отлично, теперь вы гуглите языки, которые используются для создания веб-приложений, и … вы … вы найдете сообщение на форуме, которое … ОК … PHP кажется популярным … но также и Руби … ну, этот человек с ТОННОЙ подписчиков в Twitter говорит … ААААА … ЗАБЫВАЙ !

    Кто-то посоветует вам сначала изучить JavaScript, затем кто-то другой скажет вам, что синтаксис Python проще, поэтому вам следует начать с Python.Тогда вы услышите о Java и всех доступных вакансиях. Это продолжается и продолжается.

    Так что же вы делаете? Вы можете продолжать уточнять свою цель. Может быть, есть конкретная компания, в которой вы хотите работать. Что они там используют? Вы можете получить общее представление о stackshare, сайте, на котором показаны технологические стеки многих компаний (различные элементы технологий, которые объединяются и образуют сервис, который вы используете).

    Некоторые другие полезные ресурсы включают Stack Overflow и Reddit. К сожалению, эти форумы могут привести к некоторой путанице, упомянутой ранее.

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

    Я также рекомендую заглянуть в сообщество Treehouse. Еще до того, как я начал работать в Treehouse, я нашел сообщество полезным местом. Учителя Treehouse активны, а отзывы сообщества дружелюбны к новичкам.Интернет может быть трудным местом, и мы работаем над тем, чтобы сообщество Treehouse оставалось доступным.

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

    Или пропустите подробности и перейдите к бесплатному тесту на размещение обучения в Treehouse.

    Мои Излишне упрощенные общие рекомендации , чтобы сэкономить на поиске в Google

    HTML / CSS:

    Люди часто начинают с изучения HTML и CSS.Почему? Эти два языка необходимы для создания статических веб-страниц. HTML (язык гипертекстовой разметки) структурирует всего текста, ссылок и другого содержимого, которое вы видите на веб-сайте. CSS — это язык, который заставляет веб-страницу выглядеть так, как она есть — цвет, макет и другие визуальные элементы, которые мы называем стилем .

    Почему бы просто не начать с HTML и CSS? Возможно, вы не заинтересованы в создании контента для Интернета. Как я сказал ранее, вы можете многое сделать с помощью кода, и Интернет — лишь его часть.Однако, если вы заинтересованы в создании веб-сайтов, определенно начните с HTML и CSS.

    JavaScript

    JavaScript — это первый полноценный язык программирования для многих. Почему? Это следующий логический шаг после изучения HTML и CSS. JavaScript обеспечивает часть веб-сайта с поведением . Например, когда вы видите, что поле формы указывает на ошибку, это, вероятно, работает JavaScript.

    JavaScript становится все более популярным, и теперь он также существует вне веб-браузеров.Изучение JavaScript поможет вам добиться успеха, поскольку он станет языком более общего назначения. Кажется, что в последнее время JavaScript повсюду.

    Ява

    Несмотря на свое название, Java никак не связана с JavaScript. JavaScript был назван, когда Java стала популярной. Некоторые маркетинговые умы решили запутать всех нас, пытаясь сделать язык LiveScript более популярным, изменив его название на JavaScript. Просто помните, что Java — это не JavaScript.

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

    Objective-C

    Подобно Java, Objective-C может использоваться для написания программного обеспечения для настольных компьютеров и мобильных приложений. Однако Objective-C по сути является территорией Apple. До недавнего выпуска языка программирования Swift Objective-C был языком для разработки собственных приложений для iPhone и iPad.Многие основные приложения по-прежнему написаны на Objective-C, и программисты для этих приложений пользуются большим спросом. Если вы хотите работать с приложениями для iPhone и iPad, неплохо изучить Objective-C.

    Swift

    Apple выпустила Swift в июне 2014 года как современный язык для разработки приложений Mac, iPad, iPhone, Apple Watch и Apple TV. Если вы хотите войти в мир iOS, Swift — это язык, с которым Apple намерена двигаться вперед. Да, многие приложения уже написаны на Objective-C, но Swift никуда не денется.Если вас привлекает экосистема Apple, вам понадобится некоторое понимание как Objective-C, так и Swift.

    PHP

    PHP — один из самых популярных веб-языков для тех, кто пытается выбрать язык программирования. Он управляет огромными сайтами, такими как Facebook и Etsy. WordPress и Drupal написаны на PHP, и сегодня на этих двух платформах работает огромное количество сайтов. Из-за его популярности изучение PHP пригодится вам, если вы собираетесь писать код для Интернета.

    Python

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

    Рубин

    Ruby часто ассоциируется с фреймворком Rails, который помог его популяризировать. Рабочие места Ruby и Rails, которые широко используются как веб-стартапами, так и крупными компаниями, найти довольно легко.Ruby и Rails позволяют легко превратить идею в работающее приложение, и они были использованы для создания Twitter, GitHub и Treehouse.

    Не беспокойся

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

    Концепция переменной, цикла, массива или функции не зависит от того, какой язык вы выберете. Если вы решите заняться интерфейсной веб-разработкой, вы можете выбрать JavaScript. Со временем вам может стать скучно. Тогда вы думаете, что создание приложения для телефона звучит весело. Теперь вам нужно изучить Objective-C, Swift или Java. Было ли все ваше изучение JavaScript зря? Не за что. Большинство вещей, которые вы узнали о JavaScript, применимы к следующему языку, которым вы будете заниматься.

    Часть обучения программированию — это изучение синтаксиса языка (его грамматических или структурных правил).Гораздо большая часть обучения программированию, часть, которая занимает больше времени и вызывает больше головной боли, — это научиться решать проблемы, как программист. Вы можете довольно быстро выучить грамматическую структуру английского языка; однако вы не поймете язык по-настоящему, пока не примените эту грамматическую структуру в разговоре. То же самое и в программировании. Вы хотите изучить основные концепции для решения проблем. Выполнение этого на одном языке похоже на выполнение этого на другом.

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

    Что я сделал

    Меня восхищает практически все, и то, как работает этот something . Мне нравится играть с электроникой, мне нравится бить медиатором по струнам гитары, мне нравится снимать видео… Вы уловили идею.

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

    Когда я начал учиться программировать, Treehouse не существовало. Не было никаких следов или тропинок. Я просто гуглил, пока глаза не горели как угли. В конце концов я начал работать с Drupal. Изучение PHP стало необходимостью.

    После некоторого времени, проведенного с Drupal и PHP, мне стало скучно и я заинтересовался Python.

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

    Что бы я хотел сделать / Что я в итоге сделал

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

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

    Это сделало мое понимание других языков более ясным. Как я уже сказал, основы одинаковы для большинства языков. Когда я возвращаюсь к JavaScript для проекта, я чувствую себя более подходящим для решения проблемы на этом языке. Я лучше умею думать как программист. Помните, я сказал, что решать проблемы как программист труднее?

    В изучении языка программирования все еще есть проблемы.

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

    Из всего вышесказанного не забывайте о первом пункте — постарайтесь выбрать проект, который вам интересен. Если вам просто наплевать на свой проект, возможно, вы захотите найти новый. Ваши ранние проекты должны волновать вас. Это еще не работа.Все под контролем, так что получайте удовольствие. Так вы узнаете больше.

    Вывод о выборе языка программирования

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

    Удачи в программировании.


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

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *