از نظر من برنامه نویسان، بی شباهت با نوازندگان نیستند. ساز دستشون، تکنولوژی هست که باهاش کد میزنند، و هنرشون توانایی کد نویسی یا به عبارتی نوازندگی اون سازه.
فقط و فقط یک تفاوت عمده بین یک برنامه نویس و یک نوازنده وجود داره و اون اینه که فرقی نمیکنه که شما به عنوان برنامه نویس، در یک تیم بزرگ مثل یک ارکستر سمفونی و در یک سالن اپرای عظیم ساز بزنید، یا نوازنده ای باشید که برای دل خودتون و تکی می نوازید. در نهایت در کل عالم و هستی،تنها یک شنونده دارید!
و خواهید داشت!
بهتر اینه که بگم، غیر از اون، هیچ کسی نیست که توانایی شنیدنه آهنگ شما رو داشته باشه!
حتما مشتاق اید بدونید اون کیه؟...سیستم عامل!
سیستم عامل رو در تخیل خودتون شبیه مردی میان سال و خوش پوش ببینید، که همیشه کفشهاش برق میزنه.اکثر اوقات لبخندی مبهم روی لبهاشه و کارهاش با هوش و آرامش خاصی توامه.همه باور دارند اون لایق مدیرعاملی کامپیوتر هاست...سلطان بدون منازع!
ولی خب سیستم عامل وقته اینو نداره که بیاد خودش حضوری آهنگی بشنوه.تنها لطفش در حقتون اینه که حاضره فایل رکورد شده توسط دستیار اول(CLR) ، کمپانی سازنده سازتون(.NET فریم ورک) رو که با نت های 0 و 1 زده شده، تحویل بگیره.
اون دستیار اول هم این فایل رو بر مبنای فایل اسمبلی(exe یا dll) ای که منشی(کامپایلر) در اختیارش گذاشته ایجاد کرده.
دیدید؟!...
پس فکر نکنید اگر ساز زدن بلد هستید، حتما آهنگساز خوبی هم هستید! چون این به هیچ عنوان کافی نیست.
برای آهنگساز بودن و موزیسین شدن، باید اولا درک خوبی از نت ها و ملودی ها داشته باشید.
و دوما از شنونده ی خودتون و سلایق و هوش موسیقیایی اون هم آگاه باشید. جوری که قریحه ی اش رو بنوازید تا اونم بتونه باز نوازی زیباتری از کارتون رو گوش بده.
پس برنامه نویسان دات نت بدونند. فرقی نمیکنه با چه تکنولوژی(asp .NET,.NET Core,Windows Form) و با چه زبانی (++C یا سی شارپ یا اف شارپ و ...) دارید کد میزنید.زمانی موفق هستید که در باره دات نت عمیقا یاد بگیرید و بدونید دارید چی رو کد میزنید و این کد چه اثری بر روی سیستم عامل داره و چطوری میشه کدی نوشت که حافظه بهتر مصرف بشه و در نهایت سرعت بیشتر بشه و در نهایت کد شما بهینه تر و قابل توسعه تر بشه. دونستن اصول دات نت و فهم متقابل اثر کد شما روی خروجی که سیستم عامل از اجرا میاره مهمه.
معماری .NET در تصویر ذیل نشان داده شده است.
این معماری بر روی سیستم عامل قرار میگیرد.لایه 1 پایین ترین سطح، و لایه 5 بالاترین سطح آن است و IDE دات نت، Visual Studio می باشد. ابزار قدرتمندی که با محیط گرافیکی خود، قابلیت کد نویسی به زبان های .NET را بسیار آسان کرده و برنامه نویسان را از قابلیت های این معماری بهره مند میکند.
با نگاه کلی، .NET از دو بخش اساسی تشکیل شده است:
وظیفه CLR اجرا و مدیریت اجرای کد های نوشته شده تحت فریم ورک یا چهارچوب .NET است.
تصویر زیر پروسه ی اجرا شدن کد های نوشته شده تحت فریم ورک دات نت، را نشان میدهد.
زبان مشترک حین اجرا یا CLR، تنها یک کد را میفهمد، آن هم کدی به زبان IL یا MSIL است که مخفف Microsoft Intermediate Language می باشد. کامپایلرهای هر زبانی در دات نت، همگی خروجی یکسانی از نظر زبان برنامه نویسی ایجاد میکنند. IL یا MSIL یک زبان میان سطحی است.چیزی شبیه به زبان اسمبلی.
کد IL در فایلی تحت عنوان Assembly فایل نگهداری می شود که میتواند یک فایل با پسوند اجرایی یا exe باشد یا فایلی از نوع dll.
توی فایل اسمبلی غیر از کد IL اطلاعات مهم دیگه هم هست که خیلی از این اطلاعات در Reflection در دات نت، قابل استفاده مجدد در کد می شوند. که اگر عمری باشه حتما در مورد Reflection خواهم نوشت.
که توصیف تمامی Type های استفاده شده و سطح دسترسی ها و ... در کد شماست.مثلا اگر کلاسی داشته باشید به اسم X. و بعد از این کلاس اشیایی با تایپ X ایجاد کرده باشید. تمامی اطلاعات کلاس X به شکل متا دیتا قابل دستیابی هست که چه متغیرهایی داره.چه رفتارهایی داره.چه سطح دسترسی هایی داره و ...
که درباره خود اون فایل Assembly که نسخه اش چیه، از چه کامپایلری اومده و ... توضیحاتی داره.
اگر بعد از کامپایل، یک فایل با قابلیت اجرایی ایجاد شد، اطلاعات اجرایی اون فایل رو در یک هدری تحت عنوان PE نگهداری میکنه.
با اجرای برنامه، CLR وارد میشه.
سرویسی رو تحت عنوان Class Loader فراخوانی میکنه. این سرویس ، میاد اطلاعات اولیه مورد نیاز جهت اجرا کد، مثل قسمت آغاز شونده کد IL و متا دیتاها رو وارد حافظه میکنه و بارگذاریشون میکنه.
بعد این کد بارگذاری شده توسط JIT به کد ماشین تبدیل میشه و در نهایت اجرا میشه.
در تمام طول مدت اجرای اون در سطح سیستم عامل،
و ...
در حال انجام است.