اگر بخواهم در آینده به یک توسعهدهندهی بلاک چین تبدیل بشوم از کجا باید شروع کنم؟ چه زبانی برای شروع برنامهنویسی بلاک چین بهتر است؟ اگر ایدهای در حوزهی ارزهای دیجیتال و سیستمهای توزیعشده داشته باشم با چه زبانی میتوانم آن را پیادهسازی کنم؟ اینها سؤالاتیاست که ممکن است این روزها به ذهن بسیاری از علاقهمندان فناوری بلاک چین برسد. در این مقاله سعی کردیم تا راهنمایی برای انتخاب زبان برنامهنویسی مناسب برای تازهواردان گردآوری کنیم.
بهترین زبان برای برنامهنویسی بلاک چین چیست؟
پاسخ این است که زبان یکتایی وجود نداشته و بر اساس اینکه چه پروژهای میخواهید انجام دهید کاملا متغیر است. زبانهای برنامهنویسی متعددی برای اینکار وجود دارد. ابتدا باید ببینید کدامیک از ارزهای دیجیتال، پلتفرم پایهی پروژهی شما را تشکیل داده و چه عملکردی از آن انتظار دارید. شما میتوانید لیست محبوبترین زبانهای برنامهنویسی در سال ۲۰۱۸ را از وبسایتهای ieee و یا tiobe ببینید.
ممکن است توسعهدهندهای زبان C# را برای کار خود انتخاب کند درحالیکه توسعهدهندهی دیگری اسکریپتهای پایتون و یا جاوا اسکریپت همیشه محبوب را ترجیح دهد. میبینید کاملا بستگی به هدف شما دارد.
به طور کلی برنامهنویسی بلاکچین چهار حوزهی زیر را پوشش میدهد:
- راهاندازی یک ICO
- ساخت یک قرارداد هوشمند و یا برنامه غیرمتمرکز (Dapp)
- ارتقاء یک بلاک چین موجود و یا ایجاد یک بلاک چین جدید
- ساخت یک دفتر کل غیرمتمرکز نظیر هایپرلجر فابریک (fabric)
اگر قصد برنامهنویسی در هر یک از حوزههای بالا را داشته باشید، ابتدا باید فناوری بلاک چین را کاملا درک کرده باشید. منابع بسیاری برای درک این فناوری بر بستر اینترنت موجود است. پیشنهاد میشود ابتدا مفاهیم پایهای بلاک چین و کاربردهای آن را مطالعه کرده و سپس حوزهی مورد علاقهی خود را انتخاب نمایید. ما دو کتاب زیر را برای آشنایی با مفاهیم کلی پیشنهاد میکنیم:
- تسلط بر بلاک چین: Mastering Blockchain by Imran bashir
- تسلط بر بیت کوین: Mastering bitcoin By Andreas M Antonopolos
پس از مطالعهی مبانی این کار، قادر به تصمیمگیری خواهید بود. اگر قصد توسعهی کامل یک بلاک چین جدید را داشته باشید، احتمالا به زبان برنامهنویسی ++C نیاز خواهید داشت. اما ممکن است تصمیم بگیرید به جای توسعهی یک بلاک چین از صفر، از پروژههای منبعبازی مانند بیت کوین و یا اتریوم استفاده کنید.
اگر قصد ساختن یک قرارداد هوشمند (Smart Contract) بر بستر اتریوم را داشته باشید، به یادگیری زبان برنامهنویسی سالیدیتی (Solidity) نیاز خواهید داشت. برای اینکار میتوانید به راهنمای ساخت قرارداد هوشمند رجوع کنید.
برای توسعهی پروژههایی نظیر هایپرلجر فابریک، به زبانهای برنامهنویسیای نظیر زبان گو (Go) نیاز خواهید داشت.
این نکته را در نظر داشته باشید که بلاک چین تنها فناوری زیرساختی شما بوده و به برنامهنویسی فرانتاند (Front end) نیز برای امکان تعامل کاربران با برنامهی خود نیاز خواهید داشت. برای فرانتاند شاید زبان جاوا اسکریپت بهترین گزینه برای شما باشد. پیش از اینکه به معرفی زبانهای برنامهنویسی بهصورت مجزا بپردازیم، برخی از چالشهایی را که ممکن است پیش روی شما بهعنوان یک برنامهنویس بلاک چین قرار بگیرد را بیان کرده تا با دانستن آنها بهتر بتوانید برای انتخاب زبان برنامهنویسی مناسب تصمیم بگیرید.
معیارهای انتخاب زبان
امنیت (Security)
دیوید شوارتز (David Schwartz) چه زیبا بیان کرده است که بلاکچینها باید همانند دژهای نظامی مستحکم باشند. نخست آنکه کد آنها عمومی بوده و برای همگان قابل رویت است. همه میتوانند کد مربوط به آنها را بررسی کرده و نقاط ضعف امنیتی و باگها را پیدا کنند. با این وجود برخلاف سایر پروژههای منبعباز (Opensource)، یافتن آسیبپذیری در یک بلاک چین تبعات زیانبار بیشتری دارد. پیدا کردن چنین باگهایی میتواند منجر به هک سیستم و سرقت میلیونها دلار شود. درست به همین دلیل پروسهی توسعهی یک بلاک چین معمولا بسیار آهسته پیش میرود.
مدیریت منبع (Resource management)
توسعه باید همگام با نیازهای شبکه باشد. نمیتوان این نیازها را از ابتدا در نظر نگرفته و بعدا به آنها پرداخت. شما باید به خوبی سیستم خود را برای پرسشهای (queries) محلی و از راه دور (Remote) آماده کنید.
کارایی (Performance)
یک بلاک چین باید همیشه بالاترین قابلیتهای خود را به نمایش بگذارد. برای این هدف زبان برنامهنویسی که انتخاب میشود باید بسیار انطباقپذیر باشد. نکتهی مهم اینجاست که بسیاری از دستورالعملهایی که در بلاک چین انجام میشوند قابلیت اجرا به صورت موازی را داشته و تعدادی از آنها چنین قابلیتی را ندارند.
یکی از وظایفی که قابلیت موازیسازی در بلاک چین را دارد، تایید امضای دیجیتال (digital signature) است چراکه تنها چیزی که برای تایید نیاز دارید یک کلید، یک تراکنش و یک امضا است. تنها با استفاده از سه داده، میتوانید تاییدات را به موازات وظایف دیگر انجام دهید.
تمام توابع یک بلاک چین، چنین خاصیتی ندارند به عنوان مثال اجرای یک تراکنش را در نظر بگیرید. چندین تراکنش برای جلوگیری از مشکلاتی نظیر دوبار خرج کردن (Double spend) نمیتوانند به صورت کاملا موازی اجرا شوند. برخی زبانهای برنامهنویسی برای پیادهسازی توابع به شکل موازی مناسبتر هستند.
جداسازی (Isolation)
رفتار قطعی (Deterministic) چیست؟
اگر (A + B = C) باشد، بدون در نظر گرفتن هیچ پیششرطی، همواره عبارت (A+B) برابر با C خواهد بود. توابع هش (Hash function) نیز قطعی هستند و این بدین معنا است که هش متغیر A، همواره برابر با HA خواهد بود. بنابراین در یک بلاک چین،تمامی عملیات مربوط به تراکنشها باید قطعی باشند. یک تراکنش نمیتواند در دو روز رفتاری متفاوت داشته باشد. همچنین یک قرارداد هوشمند نیز نمیتواند در دو ماشین رفتاری متفاوت داشته باشد.
پیادهسازی چنین المانی تنها از طریق جداسازی و یا ایزوله کردن تراکنشها و قراردادهای هوشمند از عناصری است که عدم قطعیت در آنها وجود دارد.
تا اینجا راجع به چالشهایی که برنامهنویسان بلاک چین با آنها روبهرو هستند صحبت کردیم در ادامه به دستهبندی به بررسی و دستهبندی زبانهای برنامهنویسی خواهیم پرداخت.
زبانهای برنامهنویسی بلاک چین
سی پلاس پلاس (++C)
این زبان نخستین بار در سال ۱۹۸۵ توسط بیارنه استراستروپ به عنوان افزونهی زبان برنامهنویسی C به وجود آمد. ایدهی استراستروپ این بود که انعطافپذیری (flexibility)، امنیت (security) و کارایی (efficiency) زبان C را حفظ کرده اما به شیءگرایی آن بیفزاید. از همین رو زبان برنامهنویسی C به عنوان یک زبان برنامهنویسی ساخت یافته و ++C یک زبان شیءگرا تلقی میشود.
++C زبان برنامهنویسی قدرتمند، قدیمی و چندمنظورهای است که استفاده از آن برای برنامهنویسی هستهی بلاک چین بسیار متداول است. با این وجود به توسعهدهندگان تازه وارد هشدار داده میشود که یادگیری این زبان نسبت به همتایانش به علت وابستگی زیاد به نوع متغیر و دستورات قدیمیاش سخت است. با این وجود اگر سختی این راه را تحمل کرده و این زبان را به خوبی یاد بگیرید، درک عمیقی به شما خواهد داد که هیچ زبان دیگری قادر به ایجاد آن نیست.
در هر صورت دنیای بلاک چین به زبان ++C وابسته بوده و خبر خوش آنکه منابع بسیاری برای یادگیری این زبان در اختیار شما قرار دارد که تعدادی از آنها را در ادامه آوردهایم.
- بیت کوین کور (Bitcoin Core)
- ریپل (Ripple)
- آموزش ++C
جاوا اسکریپت (Javascript)
جاوا اسکریپت یک زبان برنامهنویسی با وابستگی کم به نوع برای وب بوده و تمامی مرورگرها از آن پشتیبانی میکنند.
جاوا اسکریپت اولین زبانی بود که برای بهبود صفحات ایستای HTML، CSS و ایجاد واسطهای کاربری تکامل یافته به وجود آمد. تعدادی از این واسطهای کاربری شامل انیمیشنها، منوهای کاربران، کادرهای گفتگو و نقشههای تعاملی هستند.
جاوا اسکریپت رفتارهای صفحات وب در مرورگرهای مدرن را پیشرفتهتر ساخته است. تصور نمیشد روزی جاوا اسکریپت لایهی نمایش (presentation layer) وب را ترک کند اما این اتفاق با روی کار آمدن Node JS که آن را به سمت سرور برد و فریمورک انگولار (Angular) و یا سکوی کاربردی تحت وب، کتابخانهی متنباز ری اکت (React) و چارچوب متنباز ویو (Vue)، این اتفاق افتاده و پشتهی HTML/CSS سمت کاربر از نو نوشته شد و جاوا اسکریپت فول استک (هم سمت سرور و هم سمت کاربر) قدرتمندتر از قبل روی کار آمد.
جاوا اسکریپت برای تازه واردان زبانی نسبتا آسان بوده و در حال تکامل است و همچنین در تمامی بخشهای وب مدرن خود را ثابت کرده است.
پروژهی مبتنی بر بلاک چین لیسک (Lisk)، پروژهی بلاک چینی است که جلودار استفاده از جاوا اسکریپت است. صفحهی فرود (landing page) آنها اعتقادشان در خصوص اینکه میتوان با جاوا اسکریپت اکوسیستم کاملی یک بلاک چین را پیادهسازی کرد را بازگو میکند. لیسک به توسعهدهندگان امکان ساخت و استقرار برنامههای مبتنی بر بلاک چین با زبان جاوا اسکریپت را میدهد.
جاوا (Java)
جاوا زبان دیگری است که دانشمندان کامپیوتر و برنامهنویسان برای توسعهی مهارتهای برنامهنویسیشان از آن استفاده میکنند. جاوا شاهکلید صفحات وب HTML/Css است که وب جهان گستر را شکل میدهند. شاید همین مساله آن را به یک گزینهی هوشمندانه برای سازگاری با وبسایتهای سنتی و فناوری وب ۳ بلاک چین تبدیل کرده است.
زبان جاوا برای ساخت بلاک چینهایی که بر خاصیت محرمانگی تمرکز دارند، مناسب است. غیرقابل تغییر (immutability) بودن فاکتور مهمی برای جلوگیری از هک و تقلب است.
پایتون (Python)
پایتون زبان نسبتا مدرنی است که تازهواردان به آن بسیار علاقه دارند. این زبان توسط خیدو فان روسوم (Guido van Rossum) با هدف سادگی و خوانایی دستورات به وجود آمد. پایتون از زمان انتشارش به عنوان یک زبان ساده و در عینحال قدرتمند و همراه با یک جامعهی پشتیبانی گسترده شناخته شده است. این منجر به یکپارچه شدن پایتون با تقریبا همهی پلتفرمها از کتابخانههای واسط کاربری تحت وب نظیر فلسک (Flask) گرفته تا بستهی نرمافزاری (NumPy) در یادگیری ماشین گردید.
با اینکه نمیتوان با زبان پایتون به تنهایی یک بلاک چین جدید نوشته و یا به قابلیتهای یک بلاک چین موجود افزود، برنامهی غیرمتمرکز نوشت و یا یک ICO برگزار کرد. اما حذف این زبان از چنین لیستی اشتباه است چراکه در تقریبا تمامی بلاک چینها، یک یا چند ابزار عمومی با پایتون و یا برای این زبان وجود دارد.
گو (Go)
زبان Go که فرم اختصاری واژهی Golang است، یک زبان برنامهنویسی عمومی نسبتا جدید است که در سال ۲۰۰۷ در گوگل توسعه یافته و برای کاربرد عموم در سال ۲۰۱۲ رونمایی شد. زبان Go ، یک زبان قوی و چندمنظوره است که با هدف ترکیب سادگی و کاربر پسند بودن زبانهای مدرنی مانند پایتون و جاوا اسکریپت، و کارایی و امنیت زبانهای قدیمیتری نظیر C توسعه یافت.
زبان Go یک زبان مفسری است و این بدین معنی است که میتواند به صورت مستقیم با سیستم عامل کار کند. این ویژگی انعطافپذیری بالایی را به هنگام استفاده از این زبان در بخشهای مختلف توسعهی یک پروژهی مبتنی بر بلاک چین میدهد. اگر قصد تغییر یک بلاک چین موجود را داشته باشید، اتریوم SDK پروتکلی دارد که به زبان Go نوشته شده است. اگر قصد نوشتن یک قرارداد هوشمند را نیز داشته باشید، بنیاد لینوکس پروژهی هایپرلجر فابریک را با زبان Go توسعه داده است.
سالیدیتی (Solidity)
سالیدیتی یک زبان با دامنه خاص مشابه جاوا اسکریپت است که توسط تیم اتریوم برای ساخت اپلیکیشنهای غیرمتمرکز در پلتفرم اتریوم ایجاد شده است. سالیدیتی تا به امروز سازگارترین و محبوبترین زبان دامنه خاص (DSL) است که از سوی جامعهی اتریوم و صنعت بلاک چین مورد پذیرش قرار گرفته است.
هر فردی که قصد ساختن یک برای غیرمتمرکز (Dapp) و یا برگزاری یک ICO را داشته باشد، زبان سالیدیتی یکی از مستقیمترین و بهترین راههایی است که میتواند از آن استفاده کند. از آنجایی که سالیدیتی پیش از هاردفورک اتریوم توسعه یافته، اتریوم و اتریوم کلاسیک هر دو از آن پشتیبانی میکنند. تیم کاردانو نیز به تازگی پشتیبانی خود از سالیدیتی را اعلام کرده است.
سالیدیتی به مرور به زبان دامنه خاص برنامهنویسی که توسط بسیاری از بلاک چینها پشتیبانی میشود تبدیل خواهد شد. این زبان با اولویت دادن به توسعهدهنده طراحی شده و دستورات آن شباهت زیادی به جاوا اسکریپت دارد.
سیمپیلیسیتی (Simplicity)
سیمپیلیسیتی یک زبان بسیار جدید برای برنامهنویسی بلاک چین است که توسط راسل اوکونر (Russell O’Connor) به وجود آمده و در نوامبر ۲۰۱۷ به بهرهبرداری رسید. این زبان نسبتا سطح بالا بوده و با هدف کاهش پیچیدگیهای اسکریپت بیت کوین به وجود آمده است. این زبان به عنوان یکی از بهترین زبانهای برنامهنویسی بلاک چین است که برای نوشتن قراردادهای هوشمند توسط توسعهدهندگان مبتدی و پیشرفته کاربرد دارد. سیمپیلیسیتی بهرهوری توسعهدهندگان را افزایش داده و سرعت توسعه را نیز بسیار بالا میبرد.
نتیجهگیری
بیت کوین و فناوری بلاک چین راه خود را در دگرگون کردن انتقال دادهها و داراییها ادامه خواهند داد. واضح است که این تاثیر جهانی بوده و تمامی صنایع را تحت تاثیر قرار خواهد داد. مهم نیست از کجا شروع کنید. اولین گام را برای یادگیری یکی از این زبانها بردارید. اگر بگوییم تعداد توسعهدهندگان امروزه از میزان افرادی که صنایع بدان نیاز دارند بسیار کمتر است، اغراق نکردهایم. پس فرصت را غنیمت شمرده و اگر به این حوزه علاقه دارید هر چه سریعتر به آن بپردازید تنها کافی است از خودتان بپرسید قصد انجام چه نوع پروژهای را داشته و چه مشکلی را میخواهید برطرف سازید.