برنامه نویسی بلاک چین برای توسعه دهندگان تازه کار – بخش اول


شاید تاکنون از خود پرسیده باشید که آیا زبان خاصی برای برنامه نویسی بلاک چین وجود دارد؟ و یا اگر با برنامهنویسی آشنایی چندانی نداشته باشید، شاید برایتان این سؤال پیش آمده باشد که آیا میتوان بدون مقدمه وارد عرصه برنامهنویسی بلاک چین شد. در این نوشته به معرفی مبانی زبان برنامهنویسی برای ورود به عرصه بلاک چین میپردازیم.
واقعیت این است که زبان برنامهنویسی خاصی برای توسعه بلاک چین وجود ندارد و زبانهای زیادی هستند که کمابیش چنین قابلیتهایی دارند. برخی افراد زبانهای قدیمی مانند #C را ترجیح میدهند در حالی که عدهای دیگر از اسکریپتهای پایتون استقبال میکنند. پیادهسازیهای زبان بسیار رایج جاوا اسکریپت و همچنین برخی زبانهای خاصی که برای توسعه بلاک چین طراحی شدهاند نیز محبوبیت زیای دارند. برای مثال در مورد بلاک چین نئو (NEO) میتوان گفت که کامپایلر نئو پشتیبانی جدی از توسعه چند زبانی دارد. از طرفی یادگیری برنامهنویسی بلاک چین در ابتدا بسیار دشوار است و از فقدان منابع سازمان یافته به خصوص برای توسعهدهندههای جدید رنج میبرد.
در این مقاله سعی میکنیم مانعی که در مسیر توسعهدهندگان تازهکار برای ورود به عرصه بلاک چین وجود دارد را رفع کنیم. در واقع مخاطبان اصلی این نوشته برنامهنویسان جوان و تازهکاری هستند که میخواهند به طور خاص وارد فضای توسعه بلاک چین شوند. البته بخشهای بعدی برای برنامهنویسان و توسعهدهندگان حرفهای و مهندسان نرمافزار نیز ممکن است نکات مفیدی در برداشته باشد؛ اما به طور کلی سطح آن را ابتدایی ارزیابی خواهند کرد. مهندسان سطوح بالاتر نیز میتوانند با مراجعه به بخش دوم این مقاله در وقت خود صرفهجویی کنند.
اگر تصور میکنید در مورد ورود به عرصه برنامهنویسی بلاک چین انگیزه کافی دارید با ما همراه باشید تا در ادامه بیان کنیم که برنامهنویسی بلاک چین دقیقاً به چه معنا است؟
صنعت جدید
به طور کلی موضوعاتی که مورد علاقه شخص و با ارزشهای وی همسو باشند یادگیری بسیار آسانتری نسبت به موضوعاتی که مورد علاقه نیستند، دارند. این مسئله در حوزه کاملاً پیچیده و به شدت در حال تکاملی مانند برنامهنویسی بلاک چین اهمیتی دو چندان دارد. پیش از آغاز باید برخی از چالشهایی که یک توسعهدهنده بلاک چین در این صنعت نوپا با آنها مواجه خواهد بود را معرفی کنیم.
نخستین و مهمترین نکته در تفاوت پیوسته و عمومی ریشه دارد که افراد مختلف در مورد تعریف ماهیت بلاک چین دارند. اگر کمی در فضای توییتر در حوزه رمزپولها (یا همان ارزهای دیجیتالی) بچرخید برای شما مشخص میشود که جوامع رمزپول تا چه حد پراکنده هستند و این موضوع در مورد جوامع توسعهدهندههای رمزپولها نیز دوچندان است. این فرقهگرایی طبیعی منجر به گفتگوهای تعصبآمیز در مورد هدف نهایی کریپتوها شده و موجب میشود که توسعهدهندههای تازهکار با یک لایه دیگر از آشفتگی مواجه شوند.
همچنین با وجود اکثریت پروژههایی که در فاز تست هستند و پروژههای زندهای که به طور مداوم بهروزرسانی و فورک میشوند و یا مورد هک قرار میگیرند، جای شگفتی نیست که شاهد مستندات و راهنماهای ناقص باشیم. این حوزهای است که به طور مداوم در حال تکامل است و نیازمند تکرار پیوسته است که برای هیچ تیمی کار آسانی محسوب نمیشود.
نکته آخر این که برنامهنویسی بلاک چین به شدت پیچیده است و از چندین حوزه با ارتباط متقابل تشکیل یافته است که نیازمند دستکم درکی مقدماتی از مفاهیم اقتصاد، رمزنگاری، پول، ساختمان داده، سیاستها و قوانین مالی است. یادگیری حتی بخش کوچکی از این حوزهها که به برنامهنویسی بلاک چین مرتبط است به زمان زیادی نیاز دارد و هیچ میانبری نیز برای آن متصور نیست.
فرقهگرایی، مستندات ناقص و بنیادهای پیچیده، همگی این موارد نشانههای هشداری از صعب بودن مسیر صعود به برنامهنویسی بلاک چین هستند. برای این که فرد انگیزه کافی برای گذر از این موانع داشته باشد، بهتر است ابتدا به تعریف دقیق معنی برنامهنویسی بلاک چین بپردازیم. به علاوه بهتر است مشخص کنیم که چرا باید یک نفر به برنامهنویسی بلاک چین علاقهمند باشد و این که دوست دارد روی چه نوع پروژهای کار کند و جه نوع مسائلی را باید حل کند؟
تحلیل برنامهنویسی بلاک چین
اگر از قبل میدانید که قرار است روی چه پروژهای کار کنید بهتر است به ریپازیتوری گیتهاب مربوطه مراجعه کنید یا زبانی که انتخاب کردهاید را در این مقاله جستجو کنید و به مطالعه آن بپردازید. بخش بعدی این مقاله مناسب کسانی است که نمیتوانند دقیقاً مشخص سازند که روی چه نوع پروژهای میخواهند کار بکنند یا این که کدام زبان/مهارتها برای آغاز کارشان در این حوزه مناسبتر است.
به طور کلی برنامهنویسی بلاک چین میتواند واجد سه معنا باشد:
- انتشار یک پیشنهاد عرضه اولیه سکه (ICO).
- ساخت یک قرارداد هوشمند یا اپلیکیشن توزیع یافته (DAPP).
- مشارکت در یک بلاک چین موجود یا انتشار یک بلاک چین جدید.
بهتر است هر یک از گزینههای سهگانه فوق را به دقت بررسی کنید، چون هر کدام از آنها نیازمند مجموعه زبانهای مختلف و روشهای یادگیری متفاوت هستند. علاوه بر آن، این گزینهها کمک میکنند که یک گام به شناسایی گزینه ترجیحی خود نزدیکتر شوید. اینک به مراحل نهایی انتخاب زبان برنامهنویسی رسیدهایم؛ اما نباید فراموش کنید که ترجیح شخصی بر همه این موارد اولویت دارد، زیرا موجب ایجاد انگیزه در شما برای یادگیری یک مهارت جدید میشود.
اگر فرض کنیم شما یک مهندس نرمافزار کاملاً مبتدی هستید که به هر سه گزینه فوق نیز علاقه دارید شاید بپرسید چه معیار دیگری برای انتخاب یک مسیر ترجیحی وجود دارد؟
- زبانهای چندمنظوره در برابر زبانهای دامنه خاص
- خوانایی دستور زبان و شیب یادگیری زبان
با در نظر گرفتن این معیارها در نهایت یک چارچوب محکم به دست آوردهایم که بر اساس آن میتوانیم زبان مورد نظر خود را از میان زبانهای مختلف برنامهنویسی انتخاب کنیم.
زبانهای چندمنظوره در برابر زبانهای با دامنه خاص
دستهبندی ابزارها بر مبنای مقادیر کیفی به ندرت منجر به نتیجهای مشخص میشود و زبانهای برنامهنویسی نیز از این قاعده مستثنی نیستند. ما در این نوشته همه زبانهای با قابلیت برنامهنویسی بلاک چین را به دو دسته کلی تقسیم میکنیم: زبانهای دامنه خاص و زبانهای چندمنظوره.
به طور معمول زبان دامنه خاص (DSL) یک زبان رایانهای است که به طور خاص برای یک کاربرد مشخص طراحی و مناسبسازی شده است. یک زبان چندمنظوره (GPL) چنان که از نامش بر میآید، زبانی است که در دامنههای وسیعی از برنامهنویسی قابل استفاده است.
زبان چندمنظوره
زبانهای چندمنظوره زبانهایی هستند که نامشان بیشتر به گوش ما میخورد، مانند جاوا، جاوا اسکریپت، روبی، سی پلاس پلاس و پایتون. در میان زبانهای چندمنظوره میتوان روشهای نامحدودی برای دستهبندی بر اساس تفاوتهای کمّی و کیفی و مشابهتهایی مانند میزان خوانایی، کامپایل شدن، تعریف نوع صریح، فرانتاند/بکاند و غیره داشت. قاعده سرانگشتی مناسب برای تعیین میزان سادگی برای اولین استفاده به صورت زیر است:
جاوا اسکریپت، پایتون و روبی به طور معمول برای افراد مبتدی آسانتر هستند، زیرا شیب یادگیری آنها ملایم است؛ اما سی پلاس پلاس و جاوا معمولاً به زمان بیشتری برای آماده به کار شدن نیاز دارند.
دقت کنید که ما از ورود به نتایج سطح دوم و سوم انتخاب یک زبان برنامهنویسی از سوی فرد مبتدی اجتناب کردهایم. مباحث مختلفی در مورد ویژگیهای اضافی این زبانها وجود دارد، مثلاً برخی زبانها افراد مبتدی را وادار میکنند که در وهله اول انواع متغیر را بیاموزند، چون زبانی از نوع متغیر کاملاً تعریف شده هستند. ما از ورود به این مباحث خودداری کردهایم زیرا میخواهیم افراد تازهکار بیشتر روی فضای بلاک چین متمرکز شوند.
بزرگترین مزیت انتخاب یک زبان چندمنظوره از سوی فرد مبتدی برای ورود به عرصه بلاک چین، توانایی بیدرنگ وی برای بهکارگیری آن زبان در چندین حوزه خارج از برنامهنویسی بلاک چین است. متأسفانه روی دیگر این مزیت آن است که موجب میشود افراد مبتدی وقتی میخواهند وارد بازار کار شوند، مجبور باشند با مهندسان نرمافزار ارشد و حرفهای حوزههای دیگر رقابت کنند که سالها تجربه در زمینه آن زبان برنامهنویسی چندمنظوره دارند.
زبان با دامنه خاص
برای این که بتوانیم این نوع زبانها را توضیح بدهیم باید یک گام به عقب برداریم و از حوزه برنامهنویسی بلاک چین خارج شویم. با این که این حوزه خودش یک حوزه برنامهنویسی جدید محسوب میشود؛ اما مفهوم برنامهنویسی برای حوزههای جدید خودش چندان جدید محسوب نمیشود. لازم نیست سالهای چندان دوری را در نظر بگیریم، چون بحث یادگیری ماشین در طی سالهای اخیر چنین وضعیتی را داشته است. چند زمینه دیگر برنامهنویسی نیز هستند که شاهد تکامل طبیعی یک یا چند زبان خاص دامنه در طی سالهای اخیر بودهاند. از آن جمله در حوزه آماری زبانهای R و MatLab، در حوزه کوئری پایگاه داده زبان SQL، و در زمینه UI وب زبانهای HTML و CSS هستند.
برنامهنویسان مسلط به زبانهای با دامنه خاص با تقاضای کاری بالایی مواجه هستند و عرضه در این حوزه کم است. این زبانهای نوپا که تنها هدف آنها یکی از سه گزینه برنامهنویسی است که در بخشهای قبلی اشاره کردیم، بیشک روشنترین مسیر برای ورود به این حوزه از برنامهنویسی محسوب میشود.
از آنجا که این زبانها از ابتدا با در نظر گرفتن بلاک چین و مهندسی قراردادهای هوشمند طراحی شدهاند، توسعهدهندههای با تجربه ممکن است در تنظیم مجدد چارچوب مرجع خود که در زبانهای دیگری شکل یافته است با مشکل مواجه شوند؛ در حالی که افراد تازهکار با عادتهای برنامهنویسی نو به سرعت با شرایط جدید توسعه پروژههای جاری یا آتی تطبیق مییابند.
البته در این حالت در صورتی که آن زبان با دامنه خاص منسوخ شود، فرد برنامهنویس با دور زدن بنیانهای کاملاً مهم برنامهنویسی که در زبانهای چندمنظوره وجود دارند ممکن است خود را در موقعیتی ببیند که با مشکلات جدی مواجه شده است.
در ادامه وضعیت ورود به دنیای برنامهنویسی بلاک چین از حوزههای DSL یا GDL بررسیشده است.
خوانایی دستور زبان و شیب یادگیری
زبانهای مختلف برنامهنویسی سطوح متفاوتی از خوانایی را بر اساس میزان سادگی یا پیچیدگی قواعد نحوی خاص خود را ارائه میدهند. منظور از نحو یا دستور زبان، قواعد گرامری و تلفظی اختصاصی یک زبان برنامهنویسی هستند. به طور معمول خوانایی دستور زبان با میزان تند بودن شیب یادگیری آن زبان همبسته است، یعنی هر چه خوانایی یک کد دشوارتر باشد یادگیری آن نیز دشوارتر میشود. با این حال، در این مورد نیز استثناهای معینی وجود دارند؛ اما برای مقاصد مورد نظر ما تصور یک رابطه خطی بین این دو متغیر مناسب خواهد بود.
ما از دو ویژگی متفاوت، اما مشترک نحوی زبان برنامهنویسی برای ایجاد درکی از خوانایی آن و به طور خاص برای توسعهدهندههای تازهکار و زبانهای برنامهنویسی بلاک چین استفاده خواهیم کرد. رایجترین مورد از این مفاهیم نوعبندی صریح در برابر نوعبندی سست است.
نوعبندی صریح یا سست
در همه جنبههای برنامهنویسی، استفاده گستردهای از متغیرها میشود؛ با این وجود یک نوع متغیر منفرد و معمولی وجود ندارد؛ بلکه انواع مختلفی از متغیرها هستند که هر یک خصوصیات منحصر به فردی دارند. احتمالاً با برخی از آنها از جمله رشتهها، اعداد صحیح و مقادیر بولی آشنا هستید. هر زبان برنامهنویسی از این انواع متغیرها در ساختار خود بهره میگیرد؛ اما هر زبان با منطق ارجاع متغیر خاص خود این انواع متغیرها را لایهبندی میکند. برخی زبانها مانند پایتون و جاوا اسکریپت به توسعهدهندگان امکان میدهند که به سادگی از یک متغیر منفرد var استفاده کنند. برای نمونه:
var example = “coincentral”
این سطح از انعطافپذیری به توسعهدهنده امکان میدهد که فرایند دشوار اطمینان یافتن از درست بودن هر نوع متغیر در همه خطوط را دور بزند. زبانهایی که انتسابهای سطح پایین نوع متغیرها را پنهان میکنند به نام زبانهای از نوع سست (loosely-typed) شناخته میشوند.
دسته دوم زبانها که زبانهای با نوع صریح (strictly-typed) هستند، شامل توضیح بیشتری هستند و البته ساختار توصیفیتری را مورد استفاده قرار میدهند. اعلان متغیرها در زبانهای با نوعبندی صریح شامل اعلان مشخص نوع متغیر اصلی که توسعهدهنده میخواهد استفاده کند است. برای نمونه:
string example = “coincentral”
اگر این مثال را با اعلان مثال قبلی مقایسه کنید، متوجه میشوید که تفاوت در استفاده از عبارت string است. این نوعبندی صریح یک متغیر تفاوت کلیدی در دستور زبان بین زبانهای با نوعبندی صریح در برابر زبانهای دارای نوعبندی سست است. این اختلاف نحوی صرفاً به اعلان متغیرها محدود نمیشود، بلکه یکی از خصوصیات طراحی زبان است که در سطح کل زبان بازتاب مییابد.
زبانهای با نوعبندی سست و زبانهای دارای نوعبندی صریح هر کدام معایب و مزایای خاص خود را دارند. یکی از مهمترین جنبههایی که افراد مبتدی باید در نظر بگیرند، شیب یادگیری مرتبط با این دو نوعبندی است. به طور کلی زبانهای با نوعبندی سست، دستور زبان سادهتری دارند و از این رو ورود به آنها آسانتر است؛ اما مهمترین عیب آنها این است که وقتی برنامهنویس مجبور باشد با نوعهای مختلف متغیرها مواجه شود، با شکاف بزرگی در دانش بنیادی خود از مهندسی نرمافزار روبرو میشود.
سخن پایانی
در این نوشته تلاش کردیم اطلاعاتی در خصوص آغاز کار در حوزه برنامهنویسی بلاک چین ارائه کنیم. همان طور که دیدیم پاسخ به سؤال «آیا زبان برنامهنویسی خاصی برای آغاز کدنویسی بلاک چین وجود دارد؟» ما را از منظرهای متفاوت به پاسخهای مختلفی هدایت کند. اینک با کسب اطلاعاتی از این مقاله زمان آن رسیده است که چشمانداز زبانهای برنامهنویسی در حوزه بلاک چین را در سال 2018 بررسی کنیم. این موضوع را میتوانید در بخش دوم این نوشته (+) دنبال کنید.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای علوم کامپیوتر
- اصطلاحات رایج بلاک چین و رمزپول ها — راهنمای جامع
- مجموعه آموزشهای پروژه محور برنامهنویسی
- دستگاه ماینر بیت کوین چیست و چگونه کار می کند؟ | گام به گام و به زبان ساده
- آموزش طرز کار بلاک چین با PHP و JSON — راهنمای مقدماتی
- آموزش ساخت بلاک چین (Blockchain) با پایتون — راهنمای جامع و ساده
- بلاک چین چگونه کار میکند؟ — به زبان ساده
==
ممنونم از متن فوق العادتون
واقعا مفید و موثر توضیح دادید. بسیار متشکرم.