Недавно я получил это интересное DM в Твиттере:

Слушал ваш первый подкаст Tales from the Crypt и полностью согласился с тем, что очень важно иметь опыт работы с компьютером как для биткойнов, так и для будущего в целом. Каков ваш рекомендуемый путь для понимания технической стороны btc? Имеет финансовый опыт, значительный вклад в австрийскую экономику и анархо-капитализм, но буквально не имеет опыта работы с компьютерными науками / программированием. Спасибо ник

Я вижу в этом вопросе несколько различных наборов навыков. Для каждого из этих предложений есть, вероятно, многое, что вы уже знаете, информация, которую вы можете просто просмотреть, и информация, которую вам просто нужно знать, чего вы не знаете. Я обещаю вам следующее: вы никогда не узнаете всего, что нужно знать о компьютерах. Никогда. Текущее состояние вычислительной техники огромно по своему охвату, история вычислительной техники насчитывает десятилетия чередующейся сложности, и каждый день выпускается новое программное и аппаратное обеспечение. Вы не можете знать всего этого, вот что делает эту область интересной! Тем не менее, вы абсолютно можете узнать достаточно, чтобы достичь своих целей, будь то просто разумная защита закрытых ключей, отправка и получение платежей через BTC / LN, или создание полноценного веб-приложения BTC / LN.

Если у вас есть предложения по улучшению этого руководства или какие-либо вопросы по этому поводу, напишите мне в DM в Twitter @pierre_rochard или напишите мне по адресу [email protected]. Спасибо!

Компьютерная грамотность

Прочтите обзор различных аппаратных компонентов компьютера и физических объектов, к которым вы будете получать доступ: https://www.explainingcomputers.com/hardware.html

Прочтите книгу Чарльза Петцольда Код: скрытый язык компьютерного оборудования и программного обеспечения, рекомендованную инженером по протоколу Lightning Лизой Нейгут. Я не читал (пока!), Но обзоры на Amazon выглядят многообещающими.

Научитесь печатать: https://www.typing.com/

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

Командная строка

Как пользователь, вы можете остановиться на этом, но если вы хотите получить техническую информацию, вам придется освоиться с командной строкой, текстовым интерфейсом, в котором ваша мышь (обычно) бесполезна! Интерфейс командной строки (CLI) противоположен тому, с чем вы, вероятно, привыкли взаимодействовать, - графическому интерфейсу пользователя (GUI). Я знаю о CLI достаточно, чтобы справиться, но есть люди, которые являются мастерами CLI. Интерфейс командной строки Windows сильно отличается от Linux и macOS, поэтому я бы рекомендовал установить Подсистему Windows для Linux (WSL). Это позволит вам изучить командную строку способом, который обычно переносится на macOS и Linux.

В Интернете есть множество руководств и документации внутри самой командной строки. Кристофер Аллен написал учебник, ориентированный на macOS https://github.com/ChristopherA/intro-mac-command-line, а у Codecademy есть курс в браузере: https://www.codecademy.com/learn / узнать-командную-строку

Git

git - это распределенная система контроля версий, широко используемая при разработке программного обеспечения. Я думаю, что git важно изучить, потому что он используется всеми проектами Bitcoin и Lightning, с которыми я сталкивался (поправьте меня, если я ошибаюсь!), А в технической документации часто используется git, и было бы здорово, если вы добавите опечатки и исправления. , улучшения и дополнения вверх по течению по мере того, как вы работаете с документами. GitHub.com - это веб-служба, построенная на основе git с графическим интерфейсом пользователя, но обычно с git взаимодействуют локально (на вашем компьютере / ноутбуке) с помощью интерфейса командной строки. Вот ресурсы и руководства для начала работы с git: https://try.github.io/

Командная строка + биткойн + молния

Внимательно прочтите Mastering Bitcoin: https://www.amazon.com/Mastering-Bitcoin-Unlocking-Digital-Cryptocurrencies/dp/1449374042 или https://github.com/bitcoinbook/bitcoinbook

Работа через программирование с помощью Bitcoin Core и Lightning Кристофера Аллена: https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line/blob/master/README.md

Предложения по улучшению биткойнов (BIP) - это мешанина, поэтому, возможно, сосредоточьтесь на тех, которые, кажется, часто возникают в ваших чтениях. Я бы не рекомендовал сесть и прочитать их все от начала до конца. Вот они все: https://github.com/bitcoin/bips/blob/master/README.mediawiki

В Mastering Bitcoin есть краткий раздел о LN. Прочтите Технический учебник LN Джо Кендзики: https://blog.usejournal.com/the-bitcoin-lightning-network-a-technical-primer-d8e073f2a82f, рекомендованный Билли Гаррисоном.

Текущие спецификации LN находятся здесь: https://github.com/lightningnetwork/lightning-rfc Я настоятельно рекомендую внимательно прочитать эти БОЛТЫ от начала до конца, при необходимости пару раз. ! Они понятны или должны быть понятны для людей, не являющихся разработчиками (если что-то неясно, исследуйте, чтобы переформулировать BOLT и отправить запрос на перенос!).

Я бы рекомендовал посмотреть серию видеороликов Chaincode Labs Lightning Residency здесь https://www.youtube.com/watch?v=aX7lOqf83h0&list=PLpLH33TRghT1SbxinAsNDS6L7RkAjC8ME, прочтите обзор Lighting Labs https://dev.lightning.community/overview/ И проработайте руководство по интерфейсу командной строки Lightning Labs https://dev.lightning.community/tutorial/

Если вам нужно ОЧЕНЬ больше ссылок о биткойнах / блокчейнах / Lightning, см. Руководство Одед Лейба https://github.com/oleiba/blockchain-getting-started

Если бы вы остановились здесь, у вас был бы очень солидный опыт работы с компьютером, по крайней мере, базовое понимание технической стороны BTC / LN и четкий путь к экспериментам с программным обеспечением других людей. Но, может быть, вы захотите написать собственное программное обеспечение!

Программирование

Я думаю, что если вы попытаетесь изучить темы программирования, которые напрямую связаны с самой популярной реализацией Биткойна («Bitcoin Core», также называемой «bitcoind»), вы, вероятно, будете поражены. Насколько мне известно, для изучения C ++ не существует гладких кривых обучения. Я думаю, что сначала легче выучить такой язык, как Python, поскольку он скрывает большую сложность и позволяет вам сначала сосредоточиться на освоении основ логики программирования. По совпадению, набор тестов Bitcoin Core написан на Python.

Об обучении программированию написано много. Мой путь заключался в том, чтобы начать с Python на Codecademy https://www.codecademy.com/learn/learn-python

Мой друг Майкл Голдштейн начал с учебника по Ruby on Rails, написанного Майклом Хартлом, у которого есть много отличных бесплатных и платных ресурсов здесь: https://www.learnenough.com/ Найти Хартла в Твиттере здесь: https://twitter.com/mhartl

Предупреждение: программирование - это заведомо разочаровывающее занятие. Вы * постоянно * будете сталкиваться с ошибками, на выяснение которых у вас уйдут часы (а причина была «глупой», возможно, опечаткой). Пожалуйста, поймите, что это опыт каждого, вы не одиноки! Активно используйте Google на ранних этапах и часто, когда сталкиваетесь с ошибками. Если вы решите проблему с помощью поиска Google, подумайте о том, как вы могли бы в первую очередь избежать ошибки и как вы можете определить причину и исправить ее без Google. Это позволит вам ускорить «отладку». В конце концов, вы напишете большой объем кода, в котором не будет слишком много «простых» очевидных ошибок, просто в коде будут действительно сложные и коварные ошибки!

Часто интегрированная среда разработки (IDE) может автоматически указывать вам на проблемы, поэтому у вас есть десятилетия опыта программиста, который поможет вам. Лично мне на протяжении многих лет нравилось пользоваться разработчиком IDE JetBrains на всех языках. Для Python у них есть PyCharm (версия сообщества бесплатна, версия pro бесплатна для студентов) https://www.jetbrains.com/pycharm/.

Вы также можете воссоздать среду, подобную Codecademy, которая является веб-ориентированной и очень интерактивной с Jupyter IPython https://ipython.org/. Я действительно рекомендую это для быстрого выполнения итераций с экспериментами.

Если после этого опыта вы пристраститесь к программированию и Python, как я, ознакомьтесь с https://docs.python-guide.org/

Я изучил основы веб-разработки, следуя мега-учебнику Flask Мигеля Гринберга: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

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

«Полнофункциональная» веб-разработка привела к тому, что я узнал о реляционных и документных базах данных, хранилищах ключей / значений, очередях сообщений, параллелизме, работе в сети и т. Д., Которые частично или полностью применимы к программированию BTC / LN. Сказав это, вы можете узнать все об этих концепциях, работая над самим BTC / LN, а не над несвязанной веб-разработкой, как я!

Когда вы освоите и освоите сценарии для любителей, начните бросать себе вызов. Какой бы современный язык программирования вы ни использовали, существуют книги для среднего и продвинутого по таким темам, как объектно-ориентированное и функциональное программирование. Есть также очень интересные книги, в которых рассказывается об архитектуре программного обеспечения, качестве кода, методологии разработки, тестировании и так далее. Вы всегда можете улучшить свои навыки программирования, изучая новые блестящие языки, читая код, который считается высококачественным, и запрашивая обзор кода на StackExchange: https://codereview.stackexchange.com/

Программирование + Биткойн

Работа через Learn Blockchains by Building One by Daniel van Flymen: https://hackernoon.com/learn-blockchains-by-building-one-117428612f46

Поэкспериментируйте с минималистской Tinychain Джеймса О’Бейрна: https://github.com/jamesob/tinychain

Если вы решите изучать JavaScript, вам повезло! Стефан Рош недавно написал очень обширное руководство по BitcoinJS: https://github.com/bitcoin-studio/Programming-Bitcoin-with-BitcoinJS

На этом этапе, если вы хотите взломать Bitcoin Core, вам придется изучить C ++! Альтернативой является btcd, который написан на go и обычно считается более легким для чтения, или bcoin, который написан на JavaScript.

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

Я изучил основы C ++ с https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113 и https://en.cppreference.com/w/

Я счел полезным создавать примеры с использованием xeus-cling https://github.com/QuantStack/xeus-cling, который является IPython, но для C ++. Я счел это полезным сделать итерацию быстрее, чем в традиционной среде C ++, когда приходится постоянно перекомпилировать.

Прочтите Contributing to Bitcoin Core, личный аккаунт Джона Ньюбери: https://bitcointechtalk.com/contributing-to-bitcoin-core-a-personal-account-35f3a594340b

Читайте об участии здесь: https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md

Прочтите заметки о недавней встрече, чтобы узнать, над чем работают другие: https://bitcoincore.org/en/meetings/

Я создал веб-сайт для просмотра всех запросов на включение Bitcoin Core, которые могут дать вам представление о том, что находится в стадии разработки и насколько далеко он находится в процессе проверки: https://bitcoinacks.com/

Программирование + Биткойн Bootcamps

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

Программирование + Lightning

Есть несколько полных реализаций в алфавитном порядке:

Прочтите подробное руководство Андре Невеса, которое поможет вам начать и оптимизировать рабочий процесс разработки приложений Lightning: https://medium.com/lightwork/lightning-network-development-for-modern-applications -e4dd012dac82