دوره آموزش Rust

زبان برنامه‌نویسی Rust به توانمندسازی برنامه‌نویسان کمک می‌کند و می‌تواند مهارت‌های برنامه‌نویسی آنها را تقویت کند. در حقیقت، فارغ از نوعِ کدی که می‌نویسیم، این زبان ما را قادر می‌سازد که برنامه‌هایی بهتر و با قابلیت اطمینان بالاتر (more reliable) و در حوزه‌هایی گسترده‌تر از گذشته بنویسیم. به عنوان نمونه، برنامه‌نویسی سطح سیستم را در نظر بگیرید که با جزئیات سطح پایینی مانند مدیریت حافظه، نمایش داده‌ها و مسئله‌ی همزمانی (concurrency) سر و کار دارد. این قلمروهای برنامه‌نویسی چندان سرراست و ساده نیستند و کار کردن در این حوزه‌ها منحصر به برنامه‌نویسان با تجربه‌ای است که به واسطه‌ی سال‌ها صرف زمان و آزمایش، با مشکلات و خطاهای مرسوم در این قلمروها و نیز با مخاطرات امنیتی بالقوه در این حوزه‌ها آشنایی دارند. اما حتی این افراد باتجربه هم هنگام کار در این قلمروها جانب احتیاط را کاملاً نگه داشته و مراقبند که کد آنها به واسطه‌ی حفره‌های امنیتی در معرض سوء استفاده و خرابکاری نباشد.

Rust با از بین بردن مشکلات و دام‌های قدیمی، این محدودیت‌ها را از میان برداشته و با استفاده از یک مجموعه ابزار ایده‌آل در این مسیر به ما کمک می‌کند. برنامه‌نویسانی که به کنترل و مدیریت جزئیات سطح پایین برنامه نیاز دارند، می‌توانند این کار را با استفاده از Rust‌ انجام دهند، بدون اینکه با ریسک ناشی از حفره‌های امنیتی و دام‌های معمول مواجه باشند و یا نیازی به یادگیری دقیق یک مجموعه ابزار پیچیده داشته باشند. ارزش واقعی Rust در این است که این زبان طوری طراحی شده که ما را به طور طبیعی به سمت نوشتن کد قابل اطمینان و کارآمد از نظر سرعت و میزان استفاده از حافظه، هدایت کند.

Rust برای برنامه‌نویسانی که سابقه‌ی کار با زبان‌های سطح پایین و برنامه‌نویسی در سطح سیستم را داشته‌اند یک انتخاب جاه‌طلبانه محسوب می‌شود که می‌تواند بلندپروازی‌های آنها را جامه‌ی عمل بپوشاند. یک نمونه از این دست بلندپروازی‌ها موازی‌سازی بدون خطر است. در واقع، موازی‌سازی (parallelism) در Rust از اینرو یک فرایند کم‌خطر محسوب می‌شود که کامپایلر این زبان قادر است تا اشتباهات و خطاهای سنتی مرسوم در این حوزه را به دام اندازد. به این ترتیب، ما می‌توانیم بدون نگرانی از بسیاری از آسیب‌پذیری‌های معمول، بهینه‌سازی‌های تهاجمی‌تری را در کد خود انجام دهیم.

اما Rust به برنامه‌نویسی سیستم و سطح پایین محدود نمی‌شود. این زبان به اندازه‌ی کافی ارگونومیک هست که تولید برنامه‌های CLI (Command Line Interface) و ساخت وب‌سرورها و تولید بسیاری از برنامه‌های دیگر را بدون پیچیدگی به انجام برساند. کار کردن با Rust به ما امکان می‌دهد که مهارت‌هایی کسب کنیم که در حوزه‌های مختلف قابل استفاده باشند. به عنوان مثال، می‌توانیم Rust را با نوشتن یک اپلیکیشن وب یاد بگیریم و سپس همان مهارت را برای برنامه‌نویسی Raspberry Pi به کار بگیریم.

این دوره به شما کمک می‌کند که نه فقط دانش خود در ارتباط با Rust بلکه مهارت‌های کلی خود در برنامه‌نویسی را نیز افزایش دهید. پیش از شروع کار، ورود شما را به جامعه‌ی برنامه‌نویسان Rust خوشامد می‌گوییم.

زبان Rust به کار چه کسانی می‌آید؟

زبان برنامه‌نویسی Rust به ما کمک می‌کند که نرم‌افزارهایی بنویسیم که از قابلیت اطمینان بالایی برخوردار بوده و سرعت بسیار خوبی داشته باشند. در طراحی یک زبان برنامه‌نویسی تعدادی تعارض (conflict) وجود دارد و طراحان زبان در مواجهه با این تعارضات ناچاراً باید دست به مصالحه (trade off) بزنند. تعارض در اینجا به این معناست که تقویت یک ویژگی مثبت در یک زبان موجب تضعیف ویژگی دیگری می‌شود و مصالحه به این معناست که طراح زبان باید بین این دو ویژگی متعارض تعادل ایجاد کند و تصمیم بگیرد که هر کدام از این ویژگی‌های متعارض را در چه سطحی نگه‌دارد و یا احتمالاً کدام یک از این ویژگی‌ها را ملاک اصلی طراحی قرار دهد و کدام یک را (لااقل تا حدی) فدای دیگری کند.

یکی از تعارضات موجود در طراحی زبان‌های برنامه‌نویسی، بین راحتی استفاده و ارگونومی سطح بالا از یک سو و کنترل سطح پایین از سوی دیگر رخ می‌دهد. هر چقدر سطح انتزاع زبان را بالاتر ببریم، به زبان انسانی نزدیکتر شده و برنامه‌نویسی با آن راحت‌تر و سریع تر است. اما در عوض، چنین زبانی برای نوشتن برنامه‌هایی که باید از کارایی (performance) و سرعت اجرای مناسبی برخوردار باشند، گزینه‌ی ایده‌آلی نخواهد بود.

اما زبان Rust این تعارض را که سال‌هاست توسط برنامه‌نویسان و طراحان زبان پذیرفته شده، به چالش می‌کشد. به عبارت دیگر، سازندگان Rust بر این باورند که می‌توان زبانی ساخت که به برنامه‌نویس امکان بدهد که جزئیات سطح پایینی مانند مدیریت حافظه را کنترل کند بدون اینکه با دشواری‌ها و مشکلات سنتی مربوط به این گونه کنترل‌ها مواجه شود.

گروه‌های متعددی از مردم می‌توانند به دلایل مختلف زبان Rust را انتخاب کنند و از آن استفاده کنند. در اینجا به تعدادی از مهمترین این گروه‌ها اشاره می‌کنیم.

تیم‌های توسعه

زبان برنامه‌نویسی Rust یک ابزار مفید و سازنده برای همکاری در تیم‌های توسعه‌ی بزرگی است که سطح دانش اعضای آنها متفاوت است. اساساً کد سطح پایین مستعد ابتلا به خطاها و باگ‌های مختلف است و در سایر زبان‌های برنامه‌نویسی تنها از طریق انجام تست‌های گسترده و بررسی دقیق کدها توسط افراد باتجربه می‌توان از بروز این خطاها جلوگیری کرد. اما کامپایلر Rust مانند یک دروازه‌بان از عبور کدهای مستعد خطا از جمله باگ‌های مربوط به مسئله‌ی همزمانی (concurrency) جلوگیری می‌کند. با اتکا به چنین کامپایلر هوشمندی برنامه‌نویسان تیم می‌توانند اکثر زمان خود را به جای ردیابی باگ‌ها به منطق برنامه اختصاص دهند.

علاوه بر این، Rust ابزارهای توسعه‌ی پیشرفته‌ای را برای دنیای برنامه‌نویسی سیستم به ارمغان آورده است. برای نمونه می‌توانیم به سه ابزار کلیدی زیر اشاره کنیم:

  • Cargo: ابزاری که هم برای مدیریت وابستگی‌ها و هم برای ساخت برنامه‌ها کاربرد دارد. به بیان فنی، کارگو هم یک dependency manager و هم یک build tool است.
  • Rustfmt: به لطف این ابزار که بخشی از پکیج نصب Rust است و به همراه کامپایلر این زبان روی سیستم نصب می‌شود، یکسان بودن سبک یا استایل کدنویسی در بین برنامه‌نویسان Rust تضمین می‌شود. این ابزار به طور خودکار قوانین و قراردادهای استایل کدنویسی از قبیل میزان تورفتگی خطوط را تنظیم می‌کند.
  • Rust Language Server: این ابزار یکپارچگی IDE را برای تکمیل کدها و برخی کارهای دیگر افزایش می‌دهد.

این ابزارها به برنامه‌نویسان Rust امکان می‌دهند که از سختی‌های مربوط به کدنویسی سطح پایین فاصله بگیرند و به عبارتی دیگر، با هزینه‌ی زبان‌های سطح بالا کد سطح پایین بنویسند.

دانشجویان و دانش‌آموزان

زبان برنامه‌نویسی Rust برای دانشجویان و افرادی که به یادگیری مفاهیم مربوط به سیستم‌ها علاقمند هستند، بسیار مفید است. افراد زیادی با استفاده از این زبان با مواردی مثل توسعه‌ی سیستم‌عامل‌ها آشنا شده و می‌شوند. جامعه‌ی توسعه‌دهندگان Rust مشتاقانه به سوالات دانشجویان پاسخ می‌دهد و به دنبال این است که هر چقدر ممکن است افراد بیشتری را با مفاهیم مربوط به سیستم‌ها آشنا کند.

شرکت‌ها

صدها شرکت بزرگ و کوچک از Rust برای انجام کارهای مختلفی از قبیل ساخت ابزارهای خط فرمان، وب‌سرویس‌ها، ابزارهای DevOps، دستگاه‌های embedded، آنالیز ویدیو و صدا، رمزارزها، بیوانفورماتیک، موتورهای جستجو، اپلیکیشن‌های اینترنت اشیاء (IoT)، اپلیکیشن‌های مبتنی بر یادگیری ماشین (machine learning) و حتی ساخت بخش‌های اصلی مرورگر Firefox استفاده می‌کنند.

توسعه‌دهندگان متن‌باز

افرادی که مایلند می‌توانند در توسعه‌ی زبان Rust و نیز ابزارهای توسعه و کتابخانه‌های این زبان با توسعه‌دهندگان Rust همکاری داشته باشند.

کسانی که برای سرعت و پایداری ارزش قائلند

زبان Rust برای افرادی که از یک زبان برنامه‌نویسی توقع سرعت و پایداری دارند، گزینه‌ای ایده‌آل است. وقتی از سرعت صحبت می‌کنیم، منظورمان سرعت تولید یا نوشتن برنامه و نیز سرعت اجرای برنامه است. کامپایلر Rust با بررسی‌های استاتیکی که در زمان کامپایل روی کدها انجام می‌دهد، پایداری (stability) را تضمین می‌کند. این امر کاملاً در تضاد با رویکرد قدیمی در زبان‌هایی است که فاقد چنین بررسی‌های استاتیکی هستند. سازندگان زبان Rust با تلاش برای به صفر رساندن هزینه‌های بالا بردن سطح انتزاع و ارائه‌ی ویژگی‌های سطح بالایی که با سرعت بسیار بالا به کدهای سطح پایین تبدیل می‌شوند (به طوری که گویی این کدهای سطح پایین به صورت دستی نوشته شده‌اند و تبدیلی در کار نیست) زبانی را توسعه داده‌اند که هم امن است و هم سریع.

دوره آموزش Rust برای چه کسانی مناسب است؟

در این دوره، فرض ما بر این است که شما تجربه‌ی کدنویسی با یک زبان برنامه‌نویسی دیگر (مهم نیست چه زبانی) را دارید. ما سعی کرده‌ایم مطالب را طوری ارائه دهیم که برای طیف وسیعی از افراد با پس‌زمینه‌های مختلف از برنامه‌نویسی قابل استفاده و مناسب باشد. البته ما زمان زیادی را صرف صحبت در مورد برنامه‌نویسی و شیوه‌ی تفکر برنامه‌نویسی نمی‌کنیم. بنابراین، اگر کاملاً تازه‌کار هستید و هیچ تجربه‌ای در برنامه‌نویسی ندارید، شاید بهتر باشد که ابتدا کتابی را که به طور خاص در ارتباط با مقدمات برنامه‌نویسی است، مطالعه کنید.

هر فصل از این کتاب یا یک فصل مفهومی است و یا یک فصل پروژه‌محور. در هر فصل مفهومی شما را با یکی از جنبه‌های زبان Rust آشنا می‌کنیم و در هر فصل پروژه‌محور برنامه‌ای را با استفاده از مطالب آموزش داده شده خواهیم ساخت. فصل‌های 2 و 12 و 20 فصول پروژه‌محور و مابقی فصول مفهومی هستند.

آنچه در دوره آموزش Rust خواهید آموخت:

فصل ۱: شروع به کار با Rust

در فصل اول نحوه‌ی نصب Rust و نیز نوشتن و کامپایل یک برنامه‌ی ساده را با استفاده از این زبان یاد می‌گیریم و با روش استفاده از Cargo نیز آشنا خواهیم شد.

فصل ۲: ساخت یک بازی حدس عدد با Rust

فصل دوم یک معرفی عملی از زبان Rust ارائه می‌دهد و مناسب کسانی است که می‌خواهند بدون معطلی و بدون درگیر شدن با مطالب تئوری وارد دنیای کدنویسی با Rust شوند. اما کسانی که ترجیح می‌دهند که ابتدا یک موضوع را با دقت و جزئیات یاد گرفته و سپس آن را به صورت عملی آزمایش کنند، می‌توانند از این فصل صرف نظر کنند و بعد از اتمام کتاب به این فصل برگردند و پروژه‌ی این فصل را پیاده‌سازی کنند.

فصل ۳: مفاهیم رایج برنامه‌نویسی در Rust

در فصل سوم نیز تعدادی از مفاهیم مشترک بین همه‌ی زبان‌های برنامه‌نویسی را معرفی کرده و نحوه‌ی پیاده‌سازی این مفاهیم در Rust را خواهیم دید. برنامه‌نویسان باتجربه می‌توانند این فصل را رها کرده و به سراغ فصل چهارم بروند

فصل ۴: درک مفهوم مالکیت

در این فصل، اولین و مهمترین ویژگی منحصر به فرد Rust یعنی سیستم مالکیت (system of ownership) معرفی می‌شود.

فصل ۵: کار با نوع struct

در این فصل در مورد نوع struct صحبت می‌شود که برای ساختاردهی به داده‌های مرتبط کاربرد دارد. متدها نیز در این فصل معرفی و بررسی می‌شوند.

فصل ۶: کار با نوع enum و Pattern Matching

در این فصل ابتدا در مورد نوع enum صحبت می‌کنیم که مانند struct برای ساخت نوع‌های سفارشی کاربرد دارد و سپس، با عبارات match و الگوی Pattern Matching آشنا خواهیم شد.

فصل ۷: مدیریت پروژه با پکیج‌ها و ماژول‌ها

در فصل هفتم مطالبی را در مورد سیستم ماژول در Rust و نیز قواعد مربوط به حریم خصوصی (privacy) برای سازماندهی کد و کتابخانه‌های مورد استفاده در برنامه فرا خواهیم گرفت.

فصل ۸: نوع‌های کلکسیونی در Rust

در فصل هشتم برخی از ساختارهای داده‌ای کلکسیونی مرسوم مانند بردارها (vectors) و رشته‌ها (strings) و HashMap را که توسط کتابخانه‌ی استاندارد فراهم شده‌اند، معرفی می‌کنیم.

فصل ۹: مدیریت خطا در Rust

در فصل نهم فلسفه و تکنیک‌های مدیریت خطا (error handling) در Rust را شرح می‌دهیم.

فصل ۱۰: نوع‌های جنریک و مفاهیم Trait و Lifetime

در فصل دهم در مورد مفاهیمی مانند Generics، Traits و Lifetime صحبت می‌کنیم که به ما امکان می‌دهند که کدی تعریف کنیم که روی چندین نوع قابل اعمال باشد.

فصل ۱۱: نوشتن تست‌های خودکار

فصل یازدهم تماماً در مورد موضوع تست و آزمایش برنامه‌هاست که حتی با وجود تضمین امنیت در Rust باز هم به خاطر اطمینان از صحت منطق برنامه به آن نیاز داریم.

فصل ۱۲: ساخت یک برنامه CLI

در فصل دوازدهم از آنچه در فصول قبل آموخته‌ایم برای پیاده‌سازی یک مجموعه‌ی عملکرد اختصاصی از ابزار خط فرمان grep که متن را در فایل‌ها جستجو می‌کند، استفاده می‌کنیم.

فصل ۱۳: ویژگی‌های Functional در Rust

در فصل سیزدهم در مورد تکرارگرها (iterators) و بستارها (closures) صحبت می‌کنیم. اینها ویژگی‌هایی هستند که در زبان‌های برنامه نویسی تابعی (functional) دیده می‌شوند.

فصل ۱۴: مطالب بیشتر در مورد Cargo و crates.io

در فصل چهاردهم Cargo را با جزئیات بیشتری بررسی می‌کنیم و روش‌هایی را برای به اشتراک‌گذاری کتابخانه‌های خود با دیگران معرفی می‌کنیم.

فصل ۱۵: اشاره‌گرهای هوشمند

در فصل پانزدهم در مورد اشاره‌گرهای هوشمند (smart pointers) که توسط کتابخانه استاندارد ارائه می‌شوند و traitهایی که عملکردهای آنها را فعال می‌کنند، صحبت خواهیم کرد.

فصل ۱۶: برنامه‌نویسی غیرهمزمان در Rust

در فصل شانزدهم در مورد مدل‌های مختلف برنامه‌نویسی موازی و غیرهمزمان صحبت می‌کنیم و خواهیم دید که چطور Rust به ساده‌تر شدن نوشتن این نوع برنامه‌ها کمک می‌کند.

فصل ۱۷: شی‌گرایی در Rust

در فصل هفدهم مفاهیم واصطلاحات Rust‌ را با اصول برنامه‌نویسی شی‌گرا تطبیق می‌دهیم.

فصل ۱۸: بررسی دقیق‌تر Pattern Matching

فصل هجدهم مرجعی برای الگوها (patterns) و تطابق الگو (pattern matching) است که روش‌هایی قدرتمند برای بیان ایده‌ها در زبان برنامه‌نویسی Rust محسوب می‌شوند.

فصل ۱۹: قابلیت‌های پیشرفته‌تر Rust

فصل نوزدهم شامل موضوعات پیشرفته‌ای مانند ماکروها (macros)، کدنویسی ناامن (unsafe rust) و مطالب بیشتری در مورد Trait و Lifetime و نوع‌ها و توابع و Closure است.

فصل ۲۰: پروژه پایانی: ساخت یک Web Server

در فصل بیستم پروژه‌ی کامل پیاده‌سازی یک وب‌سرور Multithreaded سطح پایین را به انجام خواهیم رساند.

ثبت نام در دوره آموزش Rust

دسترسی رایگان: ۴ فصل

ثبت‌نام در زمان برگزاری: ۳،۰۰۰،۰۰۰ ریال

ثبت‌نام بعد از تکمیل دوره: ۶،۵۰۰،۰۰۰ ریال