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

Я хочу внести свой код в один из этих проектов - с чего начать?

Используется ли какой-либо один язык специально для блокчейнов?

Я не умею программировать - могу ли я сразу перейти к программированию на блокчейне?

Несколько месяцев назад я имел удовольствие модерировать группу из четырех активных программистов NEO на конференции NEO Dev в Сан-Франциско. Темой панели было общее программирование блокчейнов, однако дополнительная оговорка сделала эту конкретную группу участников очень интересной: все четыре программиста использовали разные языки для работы над проектом NEO.

Один предпочитал язык C # старой школы, другой создавал сценарии Python, третий пропагандировал неизменно популярную реализацию Javascript, а четвертый участник с энтузиазмом обсуждал предстоящий предметно-ориентированный язык NEO.

Две мысли запомнились мне после панели:

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

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

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

Новая индустрия

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

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

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

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

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

Почему вы хотите изучать программирование на блокчейне? Над каким проектом вы хотите конкретно поработать? Какую проблему (проблемы) вы пытаетесь решить?

Деконструкция программирования блокчейн

Если вы уже знаете, над каким проектом вы лихорадочно хотите поработать, слава богу - я предлагаю перейти в репозиторий организаций на GitHub или выбрать язык с помощью Ctrl-Fing, чтобы читать дальше. Следующий раздел принесет наибольшую пользу тем, кто не может точно определить, какой проект и требуемый набор навыков / язык им больше всего подходит в качестве отправной точки для будущих потенциальных планов обучения.

Как правило, программирование блокчейна может означать три разных вещи:

  • Развертывание первичного предложения монет (ICO)
  • Создание смарт-контракта или децентрализованного приложения (DAPP)
  • Внесение вклада в существующую или развертывание новой цепочки блоков.

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

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

  • Универсальные и предметно-ориентированные языки
  • Читаемость синтаксиса и кривая обучения

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

Универсальные и специфичные для домена

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

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

Универсальный язык

Языки общего назначения - это языки, о которых вы, вероятно, слышали, например Java, Javascript, Ruby, C ++ и Python. Среди языков общего назначения можно найти бесконечное количество способов их дальнейшей классификации по качественным и количественным различиям и сходствам, таким как удобочитаемость, компиляция, строго типизированный, интерфейсный / бэкэнд и т. Д. следующее:

Javascript, Python и Ruby, как правило, проще для новичков, поскольку им требуется меньше времени на обучение, в то время как C ++ и Java обычно требуют больше времени для изучения из коробки.

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

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

Язык для домена

Чтобы предоставить контекст, давайте вернемся к программированию на блокчейне. Хотя это довольно новая область программирования, сама концепция новой области программирования не так уж и нова - вам не нужно слишком далеко заглядывать за недавнее модное словечко машинное обучение, чтобы увидеть это. Несколько дополнительных областей программирования, которые также стали свидетелями естественной эволюции одного или нескольких предметно-ориентированных языков: статистика (R, MatLab), запросы к базе данных (SQL), веб-интерфейс (HTML, CSS).

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

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

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

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

Следующая диаграмма разбивает пул возможных точек входа в программирование блокчейна из сегментации DSL / GDL; прозрачные / далекие языки - это языки, которые не подробно описаны:

Читаемость синтаксиса и кривая обучения

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

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

Свободный или строгий ввод

Все программы широко используют переменные; однако существует не просто один обычный тип переменной - существует множество переменных, каждая из которых обладает уникальными свойствами. Вы, наверное, слышали о некоторых из этих типов переменных, таких как строки, целые числа и логические значения. Каждый язык программирования использует эти естественные типы в своем синтаксисе; тем не менее, каждый язык накладывает эти типы переменных на свою собственную логику обращения к переменным. Некоторые языки, такие как Python и Javascript, позволяют разработчикам просто использовать одну переменную «var»: var example = «coincentral». Эта гибкость позволяет разработчикам обойти утомительный процесс проверки правильности установки каждого типа переменной в каждой строке. Языки, которые скрывают низкоуровневое присвоение переменных, известны как языки со слабой типизацией.

Последняя категория, строго типизированные языки, состоит из более подробного, хотя и более описательного синтаксиса. Объявление переменных в строго типизированных языках состоит из конкретного объявления исходного типа переменной, который разработчик намеревается использовать: string example = «coincentral». Если вы сравните это с предыдущим объявлением переменной, обратите особое внимание на выделенную жирным шрифтом «строку». Строгая типизация переменной - ключевое различие в синтаксисе между языком со слабой типизацией и языком со строгой типизацией. Разница в синтаксисе вовсе не сводится к простому объявлению переменных, это ключевая особенность дизайна языка, которая распространяется на все языки.

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

О языковом ландшафте

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

изначально опубликовано

Https://www.setzeus.com/

источники

Освоение биткойнов: программирование открытой цепочки блоков

Освоение Ethereum: создание смарт-контрактов и DApps

Блокчейн-приложения: практический подход