تعاریف خودمونیه یک سری اصطلاحات فنی!

توی این نوشته سعی شده یک سری اصطلاحات فنی رو به صورت خودمونی و یا همون (Informal) تعریف کنیم. این پست بیشتر مناسب افرادیه که به تازگی وارد دنیای برنامه نویسی شدن و با کلی اصطلاح و کلمات جدید روبه‌رو شدن، امیدوارم کمکشون بکنه.قطعن اولین چیزی که در ابتدای ورود به دنیای برنامه‌نویسی با اون مواجه میشین چیزی هست به اسم زبان‌های برنامه‌نویسی، که قبلن در مورد تقسیم بندیشون طبق حوزه‌های تجاری موجود، اینجا (+) مطلبی نوشتم که پیشنهاد میشه قبل خوندن این پست یک سر بهش بزنین.یادگیری زبان برنامه‌نویسی اولین قدم در دنیای توسعه‌دهندگی هستش و باید بعد از یادگیری اون به سمت بخش‌های دیگه‌ای رفت که در ادامه میگم.خب حالا به فرض شما یک زبان مثلن php یا java رو به طور خاص یادگرفتین. مرحله بعد، یادگیری مفاهیم کلی برنامه‌نویسی هستش که تقریبن اصول یکسانی بین همه زبان‌های موجود دارن، مخصوصن زبان‌هایی که از یک خانواده هستند مثل زبان‌های خانواده C که طیف بزرگی از زبان‌ها رو شامل میشه. مفاهیمی مثل: تفکر شی‌گرایی در برنامه‌نویسی، ساختمان داده‌ها، اصول طراحی الگوریتم، ساختارهای کنترلی و خیلی چیزهای دیگه.بعد از گذروندن دو مرحله بالا و یادگیری یک زبان به صورت Pure، حالا وارد مرحله بعدی یعنی یادگیری یک فریم‌ورک مرتبط با اون زبان میشیم.حالا لازمه که اول بدونیم اصلن فریم‌ورک چی هست؟!فریم‌ورک (Framework) به چهارچوب یا قالبی میگن که برنامه‌نویس رو ملزم به رعایت یک سری قوانین خاص در نوشتن برنامش میکنه و با کتابخانه‌ها، کلاس‌ها، متدها و توابع مفید از پیش نوشته‌شده آماده‌ای که داره، نوشتن برنامه رو برای توسعه‌دهنده خیلی راحت‌تر میکنه و از نوشتن کدهای تکراری جلوگیری می‌کنه و اکثر عملیات رو خودش در پشت‌زمینه برای برنامه‌نویس انجام میده. برای مثال از فریم ورک های متداولی که توی زبان #C هست میشه به Microsoft ASP.net Frame Work 2, 3, 3.5, 4, 4.5 و در زبان PHP میشه به Zend FrameWork , Cake PHP ,Codeigniter, Laravel و در Java هم میشه به Hibernate, Spring, Struts و غیره اشاره کرد.همین‌طور که گفته‌شد فریم‌ورک چیزی مجزا از زبان نیست و فقط مجموعه ای از دستورات آماده هستش که توی موقعیت ها و برای مقاصد مختلف، به آسونی و بدون نوشتن کدهای اصلی قابل استفاده هستن. البته اینم باید گفت که استفاده از فریم‌ورک بسته به موقعیت و نیاز اون پروژه هستش و ممکنه خیلی وقتا استفاده از فریم‌ورک برای پروژه‌ای خاص کاره غیرضروری یا اشتباهی باشه.یک نکته اینجا هست، اونم اینه که نباید مفهوم فریم‌ورک با پلت‌فرم(Platform) رو باهمدیگه اشتباه گرفت. پلت‌فرم در واقع به بستری گفته میشه که برنامه‌های نوشته شده برای یک وسیله خاص روی اون اجرا میشه. این بستر شامل یک‌سری ملزومات سخت افزاری (مثل نوع سیستم و CPU) و هم نرم افزاری (مثل سیستم عامل) هستش. مثل پلتفرم ویندوز xp 64 bit، پلتفرم ویندوز ۸، پلتفرم ویندوز موبایل، پلتفرم لینوکس، پلتفرم اندروید، پلتفرم جاوا، پلتفرم PC، پلتفرم XBOX و…حالا قراره با یک زبان روی یک فریم‌ورک خاص تحت پلت‌فرم موردنظر برنامه‌ای بنویسیم، اما با چه ابزاری؟!اینجا با دو اصطلاح دیگه آشنا میشیم. اولین دسته از ابزارها برای کدنویسی Text Editorها هستند. این ابزارها با دادن امکاناتی مقدماتی, زمینه رو برای نوشتن برنامه‌‌ فراهم میکنن. محبوبتریناشون Sublime Text, Atom, VS Code, … هستند. بعضی از این ابزارها با پلاگین‌هایی که دارن امکانات بیشتری از یک Text Editor ساده دراختیار برنامه‌نویس‌ها قرار میدن.اما این وسط یک سری ابزارهای قدرتمندتری به‌نام محیط‌های مجتمع توسعه ( IDE – Integrated Development Environment) داریم. این ابزارها چیزی فراتر از یک ویرایشگر متن ساده هستن، بلکه شامل ویرایشگر کد برنامه(Code Editor)، کامپایلر(Compiler)، دیباگر(Debugger) و در نهایت رابط گرافیکی یا GUI هستند که به برنامه‌‌نویس کمک میکنه تا بدون دغدغه به موارد حاشیه‌ای به راحتی کد رو به صورت خام یا تحت فریم ورک خاصی نوشته، اجرا و خطاگیری کنه و صرفن روی اصل کدزنی تمرکز کنه. مثل محیط Microsoft Visual Studio, Android Studio, PHP Storm, Data Grip, …به نظرم خوب میاد که یک اشاره کوچیکی هم به روند اجرای یک برنامه توی سیستم بکنیم. قطعه کد نوشته شده توسط برنامه‌‌نویس، بسته به نوع زبان که کامپایلری یا مفسری هست، کامپایل(Compile) یا تفسیر(Interpret) و طی روندی تبدیل به کد اسمبلی میشه. بعد از اون قطعه کد اسمبلی تولید شده، توسط اسمبلر(Assembler) به زبان ماشین(Machine Code) تبدیل شده و مستقیم روی سخت افزار اجرا میشه. این بحث خودش نیاز به تعریف و معرفی ابزارها و مفاهیم دیگه‌ای هست که توی حوزه این پست نیست و در آینده در موردش مینویسم.همون‌طور که دیدیم همه این ابزارها در راستای کمک به راحتی برنامه‌نویس‌ها هستند و انتخاب هر کدوم از این ابزارها در جای مناسبش باعث سرعت توی روند تولید یک برنامه میشه.