در طول دوره خودآموزی دوره C# در CS Internship پایان هر step ارائهای صورت میگیرد. مطالعاتی که در این دوره گذروندم بر پایه کتاب Programming C# Ian Griffiths بود؛ عناوین ارائهها هم بر اساس عناوین سرفصلهای همین کتاب میباشد. علت انتخاب X بجای نسخه سی شارپ در عنوان این مطلب، به این خاطر هست که سعی کردم از نسخه 5 تا نسخه در حال نگارش این مطلب یعنی C# 12 مطالب رو برای این ارائهها جمعآوری کنم.
فصل اول و دوم: Introducing C# & Basic Coding in C# (C# Introduction)
در این ارائه فقط از خوبیهای سی شارپ گفتم😅 و اینکه کجاها میتونیم از این زبان برنامه نویسی استفاده کنیم. بدون هیچ تعصبی انصافا امروزه C# تقریبا در هر زمینهای از بازی سازی، وب، اپلیکیشنهای دسکتاپ و موبایل، سرویسهای مقیاس پذیر و ... میتونه جزء انتخابهای اول باشه.
فصل سوم: Types (Types in C#)
اینجا درباره Class و Struct گفتم و اینکه Value type با Reference type چه تفاوتهایی داره و به طور کلی به معرفی Typeهایی که به صورت گسترده در سی شارپ استفاده میشن پرداختم.
فصل چهارم: Generics (Generics in C#)
درک و استفاده صحیح از Genericها از اوجب واجبات هست، در این ارائه سعی کردم نشون بدم که Genericها چطور میتونن در توسعه و نگهداری کدها به ما کمک کنند و چه امکانات و محدودیتهایی دارن.
فصل پنجم: Collections (Collections in C#)
شناخت علت وجودی انواع مجموعه در سی شارپ و اینکه کاربرد و مزایای هر کدام چیست به برنامه نویس کمک میکند که کد بهینه با پرفرمنس خوب و کم مصرف(حافظه) بنویسد. متاسفانه در زمان این ارائه C# 12 منتشر نشده بود، حتما مطالب مرتبط با تغییرات C# 12 رو مطالعه کنید، و برای مطالعه تکمیلی این مطلب توصیه میشه.
فصل ششم: Inheritance (Inheritance in C#)
ارث بری جزء اصول پایهای هستش که در زبانهایی مثل سی شارپ که از OOP پشتیبانی میکنند باید آن را عمیقا فرا گرفت. در این ارائه یک اشاره کوچک هم به Covariant و Contravariant داشتم که پیشنهاد میکنم برای درک بهتر این دو مورد حتما مقاله مهران داودی رو مطالعه کنید.
فصل هفتم: Object Lifetime (Object Lifetime in C#)
زبان سی شارپ مثل هر زبان دیگهای ساختار خودش رو برای مدیریت حافظه و نگهداری مقادیر داره. در این ارائه به چگونگی عملکرد Garbage Collector پرداخته شده. درک این بخش به شما کمک میکنه که از میزان مصرف حافظه در طول اجرای برنامههاتون متعجب نشین و تصمیم درست تری در انتخاب و استفاده از اشیاء(objects) بگیرید.
فصل هشتم: Exceptions (Exceptions in C#)
از این مبحث به سادگی نگذرید. اگر میخواهید برنامهای پایدار داشته باشید حتما این مبحث رو با جان و دل یاد بگیرید. مدیریت استثناها(خطاها) حداقل دو مزیت کلی دارد، اول اینکه به قول عموم مردم برنامه شما به یکباره بسته نمیشود و دوم اینکه میتوانید به کمک لاگ کردن این استثناها متوجه شوید که چه اتفاقی در برنامه شما رخ داده است.
فصل نهم: Delegates, Lambdas, and Events (Delegates in C#)
اگر به مبحث فانکشنال پروگرمینگ علاقه مند هستید و میخواهید آن را در سی شارپ پیاده سازی کنید، این قسمت برای شماست. همینطور اگر برنامه نویس دسکتاپ هستید و میخواهید مطالعهای درباره رویدادها(Events) داشته باشید مطالعه Delegateها در سی شارپ توصیه میشه.
فصل دهم: LINQ (LINQ)
این مبحث در واقع در ادامه مبحث Delegate هست و در این ارائه به چگونگی عملکرد LINQ به کمک برنامه LINQPad پرداخته شده است. مباحث تکمیلی این ارائه از کتاب C# 12 in a Nutshell گرفته شده است.
فصل هجده: Asynchronous Language Features (Asynchronous Language Features)
در این ارائه با یک مثال از یک برنامه دسکتاپی به کارکرد و تقاوتهای Thread و Async پرداخته شد. و به مقوله مهم پاسخگو بودن برنامه به کاربر یا کاربران در حین انجام یک عملیات سنگین پرداخته شد."فصلهای 11-17 جزء فصلهای مطالعاتی نبودند."
ارائه پایانی: New Features in C# 6-8
آخرین ارائه مربوط میشد به مقالات منتشر شده در سایت مایکروسافت درباره تازهها در سی شارپ در نسخههای منتشر شده از 6 تا 8 از جمله: tuples, pattern matching, span, nullable reference types
کلام آخر: به نظر من از لحاظ محتوا و نکاتی که در این کتاب به آن پرداخته شده بسیار غنی و عالی هستن به غیر از فصل 18. اما خواندن این کتاب بسیار سخت است و نویسنده از عبارات ادبی زیادی در یک کتاب فنی استفاده کرده و حتی در بخشها از طنز استفاده کرده که خواندن را برای یک غیر انگلیسی زبان سخت و خسته کننده میکند. اما تجربهای که طی 7 ماه مطالعه در دوره CS Internship داشتم به من ثابت کرد خواندن کتاب و رفرنسهای اصلی بسیار به درک و یادگیری عمیق کمک میکند، البته به شرطی که این عبارت را در هنگام مطالعه از ذهن خود دور کنید: "این رو که بلدم😈"