چگونه یک توسعه دهنده ی بلاکچین شویم؟

بکتاش انصاریمقدمهدر این مقاله قصد داریم با هم مسیر تبدیل شدن به یک توسعه دهنده ی بلاکچین را طی کنیم و با موضوعات مختلف ، سختی ها و مراحل این مسیر آشنا شویم، تلاش کردم منابع مناسب و کاربردی و تجربیات خودم را در این مقاله با شما به اشتراک بگذارم، با من همراه شوید.نکته : در این مقاله سعی شده برای هر موضوعی که مطرح میشود منبعی برای مطالعه معرفی شود که آن منبع در قالب Hyper Text در متن گنجانده شده است.برای شروع به چند سوال بنیادی میپردازیم.توسعه دهنده ی بلاکچین چه کسی است ؟یک توسعه دهنده ی بلاکچین تلاش میکند با مهارت های برنامه نویسی ، نگاه و تفکر الگوریتمی به حل مسائل مختلف، گسترش یک ایده، ایجاد زیرساخت های مناسب و توسعه ی ساختار های مختلف در حوزه ی بلاکچین بپردازد. پس میتوانیم بگوییم یک توسعه دهنده در هر حوزه ای از تکنولوژی ستون های آن حوزه را بنا میکند و در قرن جدید و حتی در آینده، توسعه دهندگان (برنامه نویسان) میتوانند نقشی کلیدی برای پیشرفت تکنولوژی ایفا کنند.توسعه دهنده بلاکچین چه اهدافی را دنبال میکند و چه کار هایی را انجام می دهد ؟در پاسخ به این سوال یک جواب کوتاه و هوشمندانه این است که بگوییم :"توسعه دهنده ی بلاکچین به توسعه ی بلاکچین میپردازد! "اما این جواب خیلی آسان بود.اگر بخواهیم دقیق تر به این سوال جواب دهیم ابتدا باید توسعه دهندگان را به دو دسته تقسیم کنیم1. توسعه دهندگان هسته و زیرساخت های بلاکچین (Core Blockchain Developers)2. توسعه دهندگان نرم افزار های بلاکچین (Blockchain Software Developers)دسته ی اول توسعه دهندگانی هستند که به طراحی امنیت و معماری سیستم های بلاکچین میپردازندو در اصل این دسته از توسعه دهندگان پایه ای را ایجاد میکنند که دیگر توسعه دهندگان آن را بنا میکنند .دسته ی دوم کسانی هستند که با استفاده از هسته های طراحی شده به ساخت و ایجاد اپلیکشن های غیر متمرکز (Dapps) و قراردادهای هوشمند (Smart Contracts) میپردازند.البته در شرایطی یک فرد میتواند هر دو نقش را انجام دهد مخصوصا در تجارت ها و بیزنس های کوچک.در هر صورت مسئولیت ها و نقش های رومزه ی توسعه دهنده ی بلاکچین عبارت اند از :1. طراحی پروتکل های بلاکچین2. طراحی یک ساختار و معماری برای شبکه که بتوان از آن برای غیرمتمرکز کردن یا حتی متمرکز کردن داده ها استفاده کرد.3. توسعه و طراحی بک اند (Backend) بر اساس پروتکل های بلاکچین4. توسعه و طراحی فرانت اند (Frontend) بر اساس نیاز های کاربران و کلاینت ها (Clients)5. توسعه و نظارت بر قرارداد های هوشمندتا اینجا تا حدودی با یک توسعه دهنده ی بلاکچین آشنا شدیم. حال با وجود تمام این مسئولیت ها، چگونه میتوانیم خودمان را با مجموعه ای از مهارت ها تجهیز کنیم و آموزش هایی را ببینیم تا بتوانیم وارد این حوزه شویم و خود را با چالش های این حوزه روبرو کنیم؟در اینجا قصد دارم یک نقشه ی راه را برای تمامی افراد (چه کسانی که از قبل با برنامه نویسی و بینش الگوریتمی آشنا هستند و چه کسانی که هیچ دانشی ندارند) معرفی کنم .از کجا شروع کنم؟ به کجا برم؟تقویت زبان انگلیسیبله! این مورد اولین مورد و شاید مهم ترین مورد باشد.شما نه تنها به عنوان توسعه دهنده بلکه به عنوان یک فعال در حوزه ی بلاکچین باید بتوانید مقالات و متون انگلیسی را مطالعه کنید و متوجه آن ها شوید زیرا منابع اصلی و اخبار به این زبان منتشر میشوند و اگر شما منتظر کامیونیتی فارسی برای ترجمه شوید، ممکن است زمان زیادی را از دست دهید زیرا یکی از کلیدی ترین نکات در این حوزه بروز بودن و آپدیت بودن است.تمامی منابعی که در این مقاله معرفی شده اند به زبان انگلیسی هستند.آشنایی با مفاهیم پایه ای و اولیه ی بلاکچینبرای شروع این مسیر مهم ترین موضوع این است که ما یک دید مناسب از بلاکچین و ساختار آن داشته باشیم (Blockchain Explained) و بدانیم که اصلا بلاکچین برای چه هدفی ایجاد شده و مفهوم و ساختار پشت آن چیست. درباره ی رویداد های مهم پیش آمده در این حوزه تحقیق کنیم و مسیر تکامل و پیشرفت این حوزه را دنبال کنیم از ابتدای ابتدا.درباره ی مفهوم و اهداف غیرمتمرکز بودن ساختار ها تحقیق کنیموایت پیپر (whitepaper ) بیت کوین را مطالعه کنیم و با پروتکل های آن آشنا شویمo Bitcoin_Whitepapero Bitcoin white paper explainedدرباره ی رمزنگاری و مفاهیم آن مطالعه کنیم و با مفهوم Elliptic Curve Cryptography آشنا شویم.o Cryptography in Blockchain Explainedo Elliptic Curve Digital Signature Algorithmیکی از دوره هایی که میتوانیم برای شروع یادگیری مفاهیم پایه ای بلاکچین استفاده کنیم دوره ی کوتاه و رایگان Blockchain Theory 101 از سایت یودمی میباشد.آشنایی با مفاهیم الگوریتمی و زبان های برنامه نویسیبرای تبدیل شدن به یک توسعه دهنده ی بلاکچین اول باید به یک برنامه نویس تبدیل شویم و بتوانیم نوع تفکر خودمان را الگوریتمی کنیم و با رویکرد الگوریتمی به حل مسائل بپردازیم.برای مثال باید با برخی ساختارداده ها (Data Structures) مانند Tree , Merkle Tree, Stack, Heap و همینطور با الگوریتم های مختلف حل مسئله و روش حل مسئله با بهترین الگوریتم آشنا شویم.با یکی از زبان های برنامه نویسی شی گرا مانند Python یا JavaScript یا حتی C++ آشنا شویم و آنرا یاد بگیریم و به مفهوم شی گرایی (Objected Oriented Programing) مسلط شویم.برای آشنایی و ورود به دنیای کامپیوتر و الگوریتم یکی از بهترین دوره ها دوره ی CS50 دانشگاه هاروارد است که لینک یوتیوب این دوره با 13 جلسه قرار داده شده. این دوره نسبتا طولانی است اما اگر بتوانید این دوره را ببینید و از آن استفاده کنید قدم بزرگی در این مسیر گذاشته اید.برای یادگیری زبان برنامه نویسی،پیشنهاد من به شما زبان پایتون میباشد . زبان پایتون یکی از راحت ترین و در عین حال محبوب ترین زبان های برنامه نویسی میباشد که برای شروع بسیار مناسب است.برای یادگیری پایتون میتوانید از داکیومنت آن استفاده کنید یا از دوره ی حدودا 4 ساعته ی CodeAcademy در یوتیوب استفاده کنید.آشنایی با ابزار ها و مفاهیم عمومی مناسب برای توسعه دهندگان و برنامه نویسانشما یه عنوان یک توسعه دهنده و برنامه نویس نیاز است با بعضی مفاهیم و ابزار ها آشنا شوید و آنها را درک کنید تا بتوانید از آنها به مناسب ترین شیوه استفاده کنید.چند تا از این ابزار ها به شرح زیر هستند :آشنایی با گیت و گیت هاب ( ابزارهای کنترل ورژن)(Git , GitHub)o What is Git and Github ?o Git and GitHub for Beginnersآشنایی با پروتکل ها و تاریخچه ی اینترنت (Web1 , Web2 , HTTP(S) , Request methods )o HTTPمطالعه و تحقیق درباره ی شبکه های معروف و محبوب بلاکچینبعد از اینکه شما توانستید با مفاهیم ابتدایی بلاکچین و نحوه عملکرد آن آشنا شوید نوبت آن است که با انواع شبکه ها و اهداف هر کدام آشنا شوید که برای اینکار میتوانید از سایت رسمی هر کدام استفاده کنید.یکی از شبکه هایی که بسیار محبوب است و اکثر توسعه دهندگان بلاکچین در آن فعالیت میکنند شبکه اتریوم (Ethereum) میباشد که با خود قراردادهای هوشمند(Smart Contracts) را وارد دنیای غیرمتمرکز کرده است.نکته ی قابل توجه این است که برای آشنایی با هر شبکه و توسعه ی آن (برای مثال شبکه ی اتریوم و توسعه ی قرارداد های هوشمند) بهترین منبع سایت رسمی خود شبکه میباشد. برای مثال سایت رسمی شبکه ی اتریوم ethereum.org میباشد که شما میتوانید با مجموعه ای از آموزش ها در زمینه ی Developing روبرو شوید و همینطور میتوانید با مطالعه ی داکیومنت و whitepaper اتریوم اطلاعات بیشتری کسب کنید.توصیه میکنم حتما به سایت رسمی اتریوم سر بزنید و حتما whitepaper اتریوم را مطالعه کنید زیرا به شما دید مناسبی برای ادامه ی مسیر فعالیت در این حوزه میدهد.آشنایی با قراردادهای هوشمند و زبان سالیدیتی (Solidity)یکی از مفاهیم بسیار کلیدی و مهم، قرارداد های هوشمند میباشند که توسعه دهندگان با توسعه و ایجاد قرارداد های هوشمند جدید میتوانند ایده های مختلفی را به فضای بلاکچین وارد کنند.برای مثال میتوانند با توسعه ی یک قرارداد هوشمند یک توکن جدید با پروتکل خاصی را عرضه کنند و یا با یک قرارداد هوشمند در بستر اتریوم خدمات مالی غیرمتمرکز مختلفی را ارائه کنند.برای توسعه و ایجاد قرارداد های هوشمند از زبان سالیدیتی (Solidity) استفاده میشود پس نیاز است در این مسیر به یادگیری این زبان کاربردی بپردازیم.زبان سالیدیتی یک زبان شی گرا برای توسعه ی قرارداد های هوشمند میباشد که یادگیری آن برای افرادی که از قبل تجربه ی برنامه نویسی شی گرا را داشته اند اصلا سخت نیست.برای یادگیری این زبان بهترین منبع داکیومنت خود این زبان هست که لینک آن قرار داده شده است.در صورتی که حس میکنید داکیومنت این زبان برای شما سنگین میباشد میتوانید از دوره ی کامل و جامع freeCodeCamp که در یوتیوب موجود است استفاده کنید.آشنایی با Dapp ها (Decentralized applications)ما در طول روز از بسیاری از اپلیکیشن ها در گوشی و یا کامپیوتر و یا بر روی Browser خود استفاده میکنیم که همه این اپلیکیشن ها از دو بخش Frontend و Backend ساخته شده اند، اما موردی که اکثر این اپلیکیشن ها شامل آن میشوند این است که ساختار بک اند آنها بصورت متمرکز است .یکی از انواع اپلیکیشن ها که ساختار بک اند آنها بر روی بلاکچین پیاده میشود و میتوان بک اند آن را توسط قرارداد هوشمند توسعه داد Dapp ها یا اپلیکیشن های غیرمتمرکز هستند که یک توسعه دهنده ی بلاکچین میتواند به توسعه ی آن ها بپردازد و حتی میتواند ایده ی بسیاری از اپلیکیشن های متمرکز را بر روی Dapp ها پیاده سازی کند.برای ساخت یک Dapp ما به برنامه نویسی یک قرارداد هوشمند نیاز داریم که توسط سالیدیتی انجام میشود.بک اند (BackEnd)بعد از اینکه شما توانستید یک قرارداد هوشمند را با توجه به ایده ی خاص خودتان کدنویسی کنید، وقت آن است که قرارداد خود را بر روی شبکه ی اتریوم و در EVM (EthereumVirtual Machine) منتشر کنید (Deploying Contract) .این کار را میتوانید با متصل شدن به Ethereum node انجام دهید که این کار را میتوانید با کتابخانه ی معرفی شده در زیر و یا API (ABI) ها انجام دهید.کتابخانه ی Web3.pyیکی دیگر از ابزار های کاربردی کتابخانه ی web3.py میباشد که به ما اجازه میدهد با بلاکچین اتریوم ارتباط برقرار کنیم و اطلاعات و داده ها را فراخوانی کنیم و به عنوان یک node در شبکه، اطلاعات بلاک ها،transaction ها و Smart Contract ها را دریافت کنیم.برای آشنایی بیشتر با این کتابخانه میتوان به داکیومنت آن مراجعه کرد.فرآیند متصل شدن به بلاکچین اتریوم و ارتباط با EVM توسط API ها و JSON-RPC انجام میگیرد. که میتوان برای اطلاعات بیشتر در این زمینه به سایت اتریوم مراجعه کرد.فرانت اند (FrontEnd)اما برای اینکه بتوانیم یک محیط user-friendly برای ارتباط بیشتر کاربر با Dapp ایجاد کنیم باید از فرانت اند استفاده کنیم و یک محیط شکیل برای اپلیکیشن خودمان ایجاد کنیم.برای این کار میتوانیم از ابزار های HTML , CSS , JS و همینطور کتابخانه ها یا فریم وورک های مختلفی استفاده کنیم.برای یادگیری این ابزار ها منابعی در زیر معرفی شده اند :JavaScriptHTML &amp; CSSیکی از فریم وورک های معروف جاوااسکریپت برای ساخت رابط کاربری(User Interfaces) ، React میباشد که بسیار پیشنهاد میکنم از آن استفاده کنید.ابزار Truffle Suiteیکی از محیط های توسعه در فضای بلاکچین Truffle میباشد که بسیاری از ابزار های مورد نیاز را برای ما در یک جا جمع آوری کرده است که ما میتوانیم برای توسعه ی راحت تر از آن استفاده کنیم. برای آشنایی بیشتر میتوانید به سایت Truffle مراجعه کنید .تا اینجا حدود 80 الی 90 درصد مباحث و ابزار های مورد نیاز گفته شد و شما اگر به این موارد تسلط پیدا کنید به یک توسعه دهنده ی حرفه ای در فضای بلاکچین تبدیل میشوید البته تمام موارد بالا نیاز به تمرین و تکرار دارند و یک شبه نمیتوان به آنها مسلط شد.در این مسیر باید صبوری کنید و برای پیشروی نباید عجله کنید.مواردی که میتوانید بعد از مراحل بالا به آنها بپردازید Distributed Storage ها مانند IPFS هستند که یک فضای ذخیره ی توزیع شده میباشند.همینطور میتوانید به امنیت قرارداد های هوشمند (Contract Security) بپردازید. و درباره ی ENS (Ethereum Name Service ) ها مطالعه کنید.شِمای کلی نقشه ی راه را میتوانید در این لینک مشاهده کنید .حال اگر من به مباحث بالا مسلط شدم آموزش و مطالعه را رها کنم؟قطعا نه! سرعت پیشرفت و تکنولوژی در زمینه بلاکچین بشدت بالا است و بسیار مهم است که شما خود را آپدیت نگه دارید و از دغدغه ها و مباحث روز این حوزه باخبر باشید و با ایده های مختلف در زمینه های مختلف برای مثال Defi (Decentralized finance) با خبر باشید، پس باید اخبار را دنبال کنید و خود را در توسعه ی ایده های مختلف به چالش بکشید.سعی کنید در شبکه های مجازی مانند توییتر و دیسکورد فعال باشید و کامیونیتی های بلاکچینی را دنبال بکنید.اگر تا اینجا به موارد گفته شده مسلط شده باشید، بقیه ی مسیر برای شما کاملا هموار است و 80 الی 90 درصد مسیر را طی کرده اید و تبریک میگویم، شما به یک توسعه دهنده ی بلاکچین تبدیل شده اید. ?برای مطالعه ی بیشتر :در انتها برخی منابعی که میتوانند بیشتر در این زمینه به شما کمک کنند، معرفی میکنم.CryptoZombies منبعی متفاوت برای یادگیری زبان سالیدیتیBlockChain Demo در این سایت شما میتوانید به صورت عملی نحوه ی عملکرد بلاکچین را مشاهده کنیدDapp University آموزش های یوتیوبی در زمینه ی بلاکچینChainShot میتوانید از کورس های رایگان این سایت استفاده کنیدIvan on Tech از بلاگ های این سایت میتوان اطلاعات مفیدی بدست آوردEat the Blocks منبع ویدیو های آموزشی در زمینه توسعهsolidity, Blockchain, and Smart Contract Course یک دوره ی کامل برای یادگیری مباحثBlock Geeksدر این مسیر اگر سوالی برای شما ایجاد شد و یا اگر خواستید با افراد مانند خودتان که در حال فعالیت در این حوزه هستند تعامل کنید میتوانید از این دو انجمن معروف استفاده کنید و سوال بپرسید یا به سوالات دیگران پاسخ دهید :https://ethereum.stackexchange.com/https://stackoverflow.com/منابعhttps://dev.to/envoy_/blockchain-app-developer-roadmap-31p5https://en.wikipedia.org/wiki/Main_Pagehttps://ethereum.org/https://www.moesif.com/blog/blockchain/ethereum/Tutorial-for-building-Ethereum-Dapp-with-Integrated-Error-Monitoring/https://medium.com/https://github.com/OffcierCia/DeFi-Developer-Road-Maphttps://docs.soliditylang.org/en/v0.8.12/https://en.bitcoin.it/wiki/Main_Pagehttps://github.com/smartcontractkit/full-blockchain-solidity-course-py#what-is-a-blockchainhttps://www.upgrad.com/blog/skills-needed-to-become-blockchain-developer/در پایان ممنونم که این مقاله را مطالعه کردید و امیدوارم برایتان مفید بوده باشد.Gmail : baktash.ansari1381@gmail.comTelegram-id : @baktashansari