Понимание технической стороны Биткойна 2020
Многие люди полностью согласны с тем, что обладать техническими навыками в области программирования критически важно – как для Биткойна, так для будущего в целом
При этом, они хотят получить грамотные рекомендации относительно изучения технической стороны Биткойна. Ведь некоторые из них, например, могут быть хорошо знакомы с постулатами австрийской экономики и анархо-капитализма, но, абсолютно не иметь значительного опыта работы с компьютерами и, в частности, с программированием. Что думают по этому поводу и рекомендуют делать такие специалисты, как Пьер Рочард?
Данный вопрос, в первую очередь, сводится к набору различных навыков. Вы можете уже что-то знать и просто бегло просмотреть представленную информацию, и, несомненно, для вас есть незнакомые вещи, которые знать просто необходимо.
Но, самое главное: вы никогда не сможете изучить всю информацию касательно компьютеров! Никогда.
На сегодня, отрасль вычислительной техники огромна, а её история насчитывает десятилетия. При этом, каждый день выпускается новое программное и аппаратное обеспечение. Да, вы не можете знать всего из этого, но, именно поэтому это так интересно!
Тем не менее, вам доступно знать конкретно то, что позволит достичь поставленных целей – будь то защита закрытых ключей, отправка или получение платежей посредством Биткойна/Lightning Network, а также создание полноценного приложения для Биткойна/Lightning Network.
Компьютерная грамотность
Для начала, стоит ознакомиться с обзором различных аппаратных компонентов компьютера и прочих физических девайсов, с которыми потенциально придётся работать:
https://www.explainingcomputers.com/hardware.html [eng]
Аппаратное обеспечение или компьютерные комплектующие
«Аппаратное обеспечение, аппаратные средства, компьютерные комплектующие, «железо», (англ. hardware) — электронные и механические части вычислительного устройства, входящие в состав системы или сети, исключая программное обеспечение и данные (информацию, которую вычислительная система хранит и обрабатывает). Аппаратное обеспечение включает: компьютеры и логические устройства, внешние устройства и диагностическую аппаратуру, энергетическое оборудование, батареи и аккумуляторы. К аппаратному обеспечению относятся устройства, образующие конфигурацию компьютера».
________________________________________
Прочитайте книгу Чарльза Петцольда «Код. Тайный язык информатики», которую рекомендовала специалист по Lightning Network – Лиза Нейгут. Прочитайте её, если ещё не сделали этого – отзывы довольно многообещающие.
«Код» – это детально иллюстрированная и максимально понятная книга, дающая реальный контекст для понимания современного мира ПК, цифровых медиа и Интернета. Ваш уровень технической подготовки не имеет значения: «Код» захватит вас с первых страниц и, возможно, даже растормошит вашего внутреннего технофила».
________________________________________
Научитесь быстро печатать: https://www.typing.com/
Обзор клавиатурных тренажёров для обучения методу слепой печати
«Клавиатурные тренажёры – тип программного обеспечения и веб-сервисов, предназначенных для обучения набору текста на клавиатуре компьютера. С их помощью можно увеличить скорость, уменьшить число опечаток, повысить выносливость во время набора текста, а также постигнуть метод скоростного набора текста, при котором используются все десять пальцев рук, без необходимости смотреть на клавиатуру («слепая» печать). Клавиатурные тренажёры, как правило, содержат обучающие инструкции, как правильно набирать текст – положение тела за столом компьютера, расположение пальцев на клавиатуре и т.п., а также практические занятия».
________________________________________
Чтобы получить общий обзор операционных систем с точки зрения пользователя – прочтите любой актуальный мануал для начинающих, в зависимости от того, какой системой пользуетесь: Linux, macOS или Windows.
Но, ещё лучше, если есть время и желание, установите все три операционные системы на одном или разных компьютерах, чтобы понять, какая вам предпочтительна, и получить доступ ко всему программному обеспечению, которое является эксклюзивным для конкретной операционной системы.
Командная строка
В принципе, для простого пользователя хватит, но, если вам нужна подробная техническая информация, то придётся освоиться с командной строкой – текстовым интерфейсом, где мышь (почти) бесполезна. Да, интерфейс командной строки (CLI) противоположен тому, с чем вы, вероятно, привыкли взаимодействовать – графическому интерфейсу (GUI).
Базовых знаний командного интерфейса, зачастую, вполне достаточно, но, есть люди, которые в этом настоящие мастера. Стоит учитывать, что командная строка в Windows отличается от её аналога в Linux и macOS. Поэтому, в Linux рекомендуется установить подсистему WSL (Windows Subsystem). Подобный способ изучения командной строки, как правило, доступен, как для Linux, так и для macOS.
В Сети размещено достаточно руководств и документации по командной строке. Например, Кристофер Аллен написал учебник, ориентированный на macOS:
https://github.com/ChristopherA/intro-mac-command-line [eng]
Macintosh Terminal. Карманный справочник
«Terminal — одна из наиболее мощных программ для управления Маc. В некотором смысле ее можно назвать аналогом командной строки DOS в Microsoft Windows (однако Terminal имеет значительно более широкие возможности). В книге рассматриваются наиболее важные и полезные возможности Terminal, которые позволят вам работать гораздо эффективнее.
Вы изучите команды для принудительного завершения программ, не отвечающих на запросы, переименования большого количества файлов за несколько секунд, для запуска заданий в фоновом режиме при выполнении другой работы, для операций с каталогами, сравнения файлов, управления сетевыми соединениями и пр. Для каждой команды приводится краткое описание ее предназначения и возможностей».
________________________________________
Книга «Командная строка Linux. Полное руководство»
«Эта книга познакомит вас с основами навигации по файловой системе, настройки среды, последовательностями команд, поиском по шаблону и т.д.
Вы легко научитесь создавать и удалять файлы, каталоги и символьные ссылки; администрировать систему, включая сетевое оборудование, установку пакетов и управление процессами; редактировать файлы; писать скрипты для автоматизации общих или рутинных задач; выполнять любые работы с текстовыми файлами.
Преодолев начальный страх перед оболочкой Linux, вы поймете, что командная строка – это естественный, логичный и простой способ общения с компьютером».
________________________________________
В свою очередь, у Codecademy тоже есть подобный онлайн-курс:
https://www.codecademy.com/learn/learn-the-command-line [eng]
Основы командной строки. Бесплатный практический курс
Git
Git – это распределённая система контроля версий, которая широко используется при разработке программного обеспечения. Изучение Git важно, потому что он используется такими проектами, как Bitcoin и Lightning, с которыми вы столкнётесь в первую очередь. Git часто используется при работе с технической документацией и, что здорово, позволяет вам вносить правки, улучшения и дополнения при совместной работе с документами.
Как использовать GIT при документировании. Хабр
GitHub.com – это веб-сервис, созданный поверх Git с GUI, но, обычно с Git взаимодействуют локально на компьютере/ноутбуке посредством командной строки.
Вот ресурсы и руководства для начала работы с Git: https://try.github.io/ [eng]
Пошаговая инструкция по работе с Git и Github
Знакомство с Git и GitHub: руководство для начинающих
Командная строка + Биткойн + Lightning
Для начала, внимательно прочтите книгу «Осваиваем биткойн. Программирование блокчейна» (Mastering Bitcoin. Andreas M. Antonopoulos). Скачать можно здесь (ну или здесь).
«Эта книга предназначена в основном для программистов-кодеров. Если вы можете писать программы на каком-либо языке программирования, то из этой книги вы узнаете, как работают криптографические валюты, как их использовать и как разрабатывать программное обеспечение (ПО) для работы с ними. Кроме того, несколько первых глав можно рассматривать как подробное введение в технологию биткойна для тех, кто не занимается программированием, но пытается понять внутреннее устройство и функционирование биткойна и криптографических валют».
________________________________________
Bitcoin Core, Lightning и программирование от Кристофера Аллена:
https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line/blob/master/README.md [eng]
Эта книга разделена на следующие разделы:
- Часть первая: Подготовка – понимание основ Bitcoin и настройка сервера для использования.
- Часть вторая: Использование Bitcoin-CLI для создания транзакций.
- Часть третья: Bitcoin-скрипты
- Часть четвертая: Повышение безопасности вашего узла с помощью Tor
- Часть пятая: Использование Lightning-CLI для создания транзакций
- Часть шестая: Программирование с помощью RPC
________________________________________
Bitcoin Improvement Proposals (BIP) – это полная мешанина, поэтому просто сосредоточьтесь на тех аспектах, с которыми вам приходится сталкиваться чаще всего. Наверное, не стоит читать всё от начала до конца. Но, во всяком случае, вот они все:
https://github.com/bitcoin/bips/blob/master/README.mediawiki [eng]
________________________________________
Между прочим, в книге Mastering Bitcoin есть отдельный раздел о Lightning Network. Также, о Lightning Network можно прочитать в техническом учебнике от Джо Кендзики:
https://blog.usejournal.com/the-bitcoin-lightning-network-a-technical-primer-d8e073f2a82f [eng]
________________________________________
Пара важных статей на русском:
https://bitnovosti.com/2016/06/22/understanding-the-lightning-network/
https://bitnovosti.com/2019/12/07/lightning-setup-guide/
________________________________________
Текущие спецификации Lightning Network (LN) находятся здесь:
https://github.com/lightningnetwork/lightning-rfc [eng]
Обязательно прочитайте это от начала до конца, при необходимости, пару раз. Это должно быть понятно даже людям, которые не являются разработчиками.
Также, прочтите обзор от Lighting Labs: https://dev.lightning.community/overview/ [eng], а также изучите их руководство по интерфейсу командной строки: https://dev.lightning.community/tutorial/ [eng].
________________________________________
Ещё больше ссылок касательно Биткойна/Lighting и блокчейна можно отыскать в руководстве от Одеда Лейбы:
https://github.com/oleiba/blockchain-getting-started [eng]
________________________________________
Даже если вы остановитесь только на изучении вышеперечисленного– у вас всё равно будет солидный опыт работы, базовое понимание технической стороны Биткойна 2020 и Lightning Network, а также выход на результаты экспериментов других людей с программным обеспечением.
Но, возможно, вы пожелаете писать собственное программное обеспечение!
Программирование
Стоит предположить, что вы будете несколько обескуражены, когда возьмётесь за изучение языков программирования, напрямую связанных с наиболее популярной реализацией – Bitcoin Core, которую ещё называют bitcoind. Насколько известно – не существует простого пути для изучения C++.
Поэтому, не исключено, что язык Python окажется в освоении более простым, поскольку поначалу в нём избегается излишняя сложность, что позволяет сосредоточиться на основах логики программирования. По удачному совпадению тестовый Bitcoin Core написан именно на Python.
На тему программирования написано огромное количество материалов. Вы можете начать с изучения Python на Codecademy:
https://www.codecademy.com/learn/learn-python [eng]
Топ 15 лучших онлайн-курсов по Python
________________________________________
Но, в принципе, вы можете начать с учебника по Ruby on Rails (фреймворк, написанный на языке программирования Ruby), написанного Майклом Хартом, у которого есть множество отличных бесплатных и платных учебных ресурсов:
________________________________________
Предупреждение: программирование – это заведомо сложный опыт. Вы постоянно будете сталкиваться с собственными ошибками, на выявление которых будут уходить часы. А причина, возможно, будет сокрыта в «тупой» опечатке. Пожалуйста, поймите, что с этим сталкиваются все, и вы не одиноки!
На ранней стадии, когда сталкиваетесь с ошибками – активно используйте Google. Если вы решили проблему с помощью Google – в первую очередь, подумайте, как вы могли избежать этой ошибки или как определить причину и исправить ошибку без Google. Это позволит вам ускорить отладку кода. В итоге, вы напишите большой объём кода, в котором не будет много «простых» очевидных ошибок – просто в коде будут действительно сложные и коварные ошибки!)
Часто интегрированная среда разработки (IDE) может автоматически указывать вам на проблемы, поэтому в вашем распоряжении есть десятки лет опыта разработки, который, несомненно, поможет. Например, некоторым нравится пользоваться средой разработки JetBrains. Для языка Python у них есть PyCharm (версия для коммьюнити – бесплатна, а версия PRO бесплатна для студентов).
Дополнительно, вы можете воссоздать рабочую среду Jupyter IPython, как на Codecademy, которая является веб-ориентированной и очень интерактивной: https://ipython.org/. Данный вариант крайне рекомендуется для различных экспериментов.
Если после всего этого вы пристраститесь к программированию на Python – стоит посетить этот ресурс: https://docs.python-guide.org/ [eng].
В свою очередь, основы веб-разработки можно изучить, следуя следующему учебнику от Мигеля Гринберга: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world [eng].
Вероятно, вам не составит труда подобрать ту же комбинацию в виде интерактивного учебника + простого пособия по веб-фреймворкам для любого языка программирования. Здесь наиболее популярным языком является JavaScript, поскольку его можно использовать как в веб-браузере пользователя, так и на сервере, на котором размещается веб-контент.
«Полнофункциональная» веб-разработка позволит узнать вам о реляционных и документных базах данных, хранилищах ключей/значений, очередях сообщений, параллелизме, работе в сети и т.д. И всё это частично или полностью применимо к программированию для Биткойна или Lightning Network. Это даст вам даже больше нежели просто несвязанный процесс веб-разработки.
Когда наберёте достаточно опыта в «сценариях для любителей» – начните бросать себе вызов. Какой бы современный язык вы не использовали – существуют книги для «среднего» и «продвинутого» уровня по таким темам, как объектно-ориентированное и функциональное программирование.
Также, есть очень интересные книги, в которых рассказывается об архитектуре программного обеспечения, качестве кода, методологии разработки, тестировании и т.д. Поэтому, вы всегда можете улучшить свои навыки программирования, изучая новые языки, читая код, который считается высококачественным и запрашивая обзор кода на StackExchange: https://codereview.stackexchange.com/.
Программирование + Биткойн
Статья «Learn Blockchains by Building One» от Даниэля Ван Флюмена:
https://hackernoon.com/learn-blockchains-by-building-one-117428612f46 [eng]
Создаем Blockchain с нуля на Python
________________________________________
Поэкспериментируйте с «карманным» блокчейном от Джеймса О`Берни:
https://github.com/jamesob/tinychain [eng]
Tinychain – это мини-реализация Биткойна. Его цель – быть компактным, понятным, работающим воплощением алгоритма оригинального консенсуса. В первую очередь, он написан для того, чтобы послужить отправной точкой для программистов, которые интересуются Биткойном или прочими криптовалютами, но, не имеют с ними близкого знакомства.
________________________________________
Если же вы недавно начали изучать JavaScript, то вам повезло! Стефан Рош написал очень обширное руководство по BitcoinJS:
https://github.com/bitcoin-studio/Programming-Bitcoin-with-BitcoinJS [eng]
________________________________________
Но, если вы на этом этапе и правда решили как следует разобраться в Bitcoin Core, то вам придётся изучить C++! Альтернативой является btcd, который написан на Go и обычно считается более лёгким для чтения или bcoin, который написан на JavaScript.
Хотя, перед тем, как начинать изучение C++ – подумайте о том, чтобы сделать обходной путь, начав с Rust, поскольку он может упростить процесс обучения.
Возможно, стоит начать обучение с этих ссылок:
Основы C++. Программирование для начинающих
Основы программирования на C++. Самоучитель
______________________________________
При этом, можете попробовать писать код с использованием xeus-cling: https://github.com/QuantStack/xeus-cling [eng], что является тем же IPython, но, для C++. Работа может пойти гораздо быстрей нежели в традиционной среде C++, особенно, с учётом необходимости в постоянном перекомпилировании.
________________________________________
Также, прочтите работу Contributing to Bitcoin Core от Джона Ньюбери: https://bitcointechtalk.com/contributing-to-bitcoin-core-a-personal-account-35f3a594340b [eng]
О правилах содействия можно прочитать здесь:
https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md [eng]
Прочтите заметки о последних встречах, чтобы узнать, над чем работают другие: https://bitcoincore.org/en/meetings/ [eng]
________________________________________
Кстати, существует сайт для просмотра всех запросов на включение кода в Bitcoin Core, которые могут дать вам представление о том, что находится в стадии разработки и сколько ещё ждать проверки: https://bitcoinacks.com/ [eng]
Программирование + Bitcoin Bootcamps
Каждый буткэмп имеет разную направленность, посетите их веб-сайты, чтобы узнать темы, даты и цены (прим. Буткэмп – центр интенсивного обучения программированию, т.н. «тренировочный лагерь для программистов»):
- Джимми Сонг → https://programmingblockchain.com/ [eng]
- Джастин Мун → https://buidlbootcamp.com/ [eng]
- Vortex → https://programmingwithbitcoin.com/ [eng]
Программирование + Lightning
Для Lightning Network есть несколько полноценных реализаций:
- c-lightning написано на C: https://github.com/ElementsProject/lightning [eng]. А вот здесь есть пример того, как программировать для c-lightning на Python: https://github.com/ElementsProject/lightning/blob/master/contrib/pylightning/lightning/lightning.py [eng]
- Eclair, написанный на Scala (разновидность функционального программирования Java): https://github.com/ACINQ/eclair [eng]
- LND, написанный на Go: https://github.com/lightningnetwork/lnd [eng]
И, напоследок – обязательно прочтите подробное руководство от Андре Невеса, которое поможет вам начать и оптимизировать рабочий процесс разработки приложений Lightning.
Автор: Pierre Rochard
Переработано и дополнено: Ne-Standart @ БитНовости
Source: https://bitnovosti.com/2020/09/13/techno-bitcoin-user-manual-dev/