
داشتم توی نت میچرخیدم و خیلی اتفاقی به یه صفحه برخوردم که یه کاربری راجع به برنامه نویسی سوال پرسیده بود و یکی از جوابها منو به شدت به فکر فرو برد که چطور یک نفر میتونه بدون آگاهی با قاطعیت پاسخ بده!!!
به عنوان کسی که سالهاست از نظر ذهنی برنامه نویسی رو درک کرده و صد البته بدون اشکال هم نیستم این متن رو مینویسم.
این متن چکیدهای از یافتههای خودم از برنامهنویسی هست که با شما به اشتراک میذارم تا حداقل بتونه کمکی باشه برای تازهکارها.
سعی کردم تا جایی که میشه از اصطلاح و بحث تخصصی استفاده نکنم، که متن ساده و قابل درکی برای عموم افراد علاقمند به برنامهنویسی باشه.
در یک تعریف ساختاری و کلی، برنامهنویسی یعنی نوشتن مجموعهای از دستورالعملها به زبان ماشین که روی سختافزار اجرا میشه و کاربر رو به خواسته و یا نیازش میرسونه.
این مجموعهی دستورالعملها میتونه هرچیزی باشه، از یه جمع و تفریق ساده تا مجموعهمحاسبات پیچیده در یک مدل سازی یا دیتابیس بزرگ.
نکته: به فرآیند تبدیل کدهای نوشته شده به زبان ماشین کامپایل گفته میشه.
باز هم میگم من دارم به زبان خودم میگم که بهتر درک کنید. پس ممکنه یه مثال بیربط ولی قابل درک بگم!
یه چیز جالب در برنامهنویسی برای تازهکارها وجود داره مثل جریان مرغ و تخممرغ، البته اگه بهش فکر کنید و اطلاعات اولیه نداشته باشید توی یه لوپ پرسش گیر میافتین!
این تله یا لوپ یه سواله:
هر برنامه رو با یه زبانبرنامهنویسی نوشتن، حالا خود زبانبرنامهنویسی رو با چی نوشتن؟
اگه اطلاعات اولیه و یا درکی از برنامهنویسی نداشته باشید قطعاً توی این چرخه گیر میکنید!
جواب سادست: زبان ماشین!
در ابتدا قبل از پیدایش زبانهایبرنامهنویسی قابل درک برای انسان که به زبان انسانی نزدیک هستن، متخصصها برای برنامهریزی کامپیوترها از زبان باینری ( صفر و یک ) استفاده میکردن.
یعنی اصولاً کامپایلر به شکل فعلی وجود نداشت و هر خواستهی انسانی ابتدا باید محاسبه و بعد به زبان ماشین تبدیل و وارد کامپیوتر میشد تا خواسته و یا نیاز مورد نظر اجرا و نتیجه به کاربر داده بشه.
متخصصها کمکم به فکر ساخت زبانهایبرنامهنویسی افتادن که به جای عدد 0 و 1 به زبان انسانی نزدیکتر باشه و این شد که نسلهای بعدی زبانها مثل اسمبلی و بعدها C و سایر زبانهایبرنامهنویسی ساخته شدن.
اصولاً هر زبانبرنامهنویسی برای رفع یک نیاز ساخته شده، و این نیازها به حدی بوده که الان انواع و اقسام زبانهایبرنامهنویسی رو شاهد هستیم.
اگه بخوام زبانهایبرنامهنویسی رو تفکیک و رتبه بندی کنم به این ترتیب میرسم:
که البته اَشکال دیگهای هم برای تقسیم بندی زبانها وجود داره ولی این تقسیم بندی بر اساس نزدیکی به زبان ماشین هست
اکثر برنامههای نوشته شده در هر زبانی، برای کارکردن نیاز دارن که بهکدهای ماشین تبدیل بشن تا سختافزار بتونه دستورات اون برنامهرو انجام بده.
در برخی زبانها مثل زبان سی، کدها نوشته میشه و بعد توسط یک کامپایلر به زبان ماشین ترجمه میشن، خروجی ترجمه شده یک برنامهی اجرایی به زبان باینری هست که کاربر میتونه اونو اجرا و ازش استفاده کنه.
یکی از مشکلات چنین زبانهایی اینه که برای هر پلتفُرم باید روی همون پلتفرم کدها آماده سازی و کامپایل بشن.
مثلاً کاربران سیستمعامل ویندوز برنامهی X رو وقتی میتونن استفاده کنن که روی بستر سختافزار مشابه و سیستم عامل ویندوز کامپایل شده باشه یا اگه بخوام یه مثال دیگه بزنم مثلاً برنامههای تحت لینوکس روی ویندوز قابل اجرا نیستن و بلعکس.
رفع ابهام: سختافزار مشابه منظورم معماری مشابه هست مثل X86 یا X86_64 یا ARM و ...، برای مثال سیستمعامل ویندوزی که روی پردازندهی 64 بیتی داره کار میکنه با ویندوزی که روی پردازندهی 32 بیتی کار میکنه متفاوته، چون کدهای 64 بیتی روی سیستمعامل 32 بیتی کار نمیکنن.
البته توی معماری 64 بیتی میشه کدهای 32 و یا حتی دربرخی موارد 16 بیتی رو به راحتی اجرا کرد که این از محاسن این معماری به مراتب جدیدتره.
اما به هرحال نوع معماری و سیستمعامل برای کامپایل کردن مهمه و توسعه دهندگان نرمافزار مجبورن در چنین زبانهایی برای تمامی پلتفرمهای هدفشون در سختافزارها و سیستم عاملهای مختلف کدها رو کامپایل کنن.
شاید نگهداری و توسعهی نرمافزار با شرایط گفته شده مثل یه کابوس باشه و همین کابوس باعث شد زبانهایی ساخته بشه که این مشکل رو مرتفع کردن...
زبانهایی مثل زبان جاوا که به جای کامپایلر از مفسّر استفاده میکنن، در چنین زبانهایی یک بار کد نوشته میشه و روی تمامی پلتفرمها و سیستمعاملها قابل اجرا هست.
البته لازمهی اجرای این برنامهها وجود برنامهی مفسر در کامپیوتر مقصد هست. در واقع شما وقتی میتونید از کدهای جاوا استفاده کنید که ماشین مفسر جاوا روی سیستم شما نصب و راه اندازی شده باشه.
این برای تمامی زبانهای مفسری صدق میکنه.
مثال/رفع ابهام: در زبان جاوا کدهای برنامه در ابتدا به بایتکد یا کد میانی تبدیل میشن که هنوز در واقع کد ماشین یا باینری نیستن و بعداً توسط مفسر خط به خط این کدهای میانی به کد باینری تبدیل و اجرا میشن.
البته بازم میگم من خیلی از مفاهیم و بحثهای تخصصی رو فاکتور گرفتم چون نمیخوام زیاد تخصصی و پیچیده بشه.
گاهی بهشون میگن زبانبرنامهنویسی و گاهی بهشون میگن زباننشانهگذاری...! این تصمیم شماست که چی صداشون کنید!
چنین زبانهایی گستره وسیع و کاربردهای مختص به خودشون رو دارن و عمومیترین زباننشانهگذاری که ممکنه همین الان بهش مسلط باشید قطعاً زبان HTML هست.
مشخصاً چنین زبانهایی برای نمایش متون و اِلِمانهای درون یک صفحه کاربرد دارن و ممکنه در کنار سایر زبانهای برنامه نویسی به کار برده بشن.
بعد از کلی نوشتن رسیدیم به اصل مطلب!
وقتی کسی میخواد برنامهنویسی یاد بگیره باید نیازهاش رو به سوال تبدیل کنه:
اول باید ببینه میخواد در چه لایهای برنامه نویسی کنه. آیا نیازه داره با سختافزار مستقیماً درگیر بشه و یا میخواد با کمترین زحمت برنامهای کراسپلتفرم بنویسه؟
برنامهای که میخواد بنویسه آیا کاربرد عمومی داره یا خاص؟
آیا نیاز داره برنامه یوزر فرندلی باشه با گرافیکهای زیبا و یا صرفاً میخواد یه کار محاسباتی، آماری، تحقیقاتی و... انجام بده که ظاهرش زیاد مهم نیست؟
آیا قراره کلی اطلاعات ذخیره و مدیریت بشن یا نه؟
آیا نیاز به هوش مصنوعی و یا محاسبات مرتبط داره یا نه؟
و کلی سوال دیگه...
کافیه بعد از طرح سوال به دنبال جواب سوالاتتون بگردید...
وقتی به جمع بندی کلی برسید میبینید که زبان یا زبانهایبرنامهنویسی مورد نیازتون لیست شدن و جلوی چشم شما قرار دارن و میتونید شروع به یادگیری اونها کنید.
در واقع این نیاز شماست که تعیین میکنه چه زبانبرنامهنویسی رو باید یاد بگیرید و به دردتون میخوره.
هرچند که میدونم توی نگارش این مطلب گند زدم ولی امیدوارم بتونه بهتون کمک بکنه...
راستی اگه مطلب تکمیلی یا نکتهی مهمی توی ذهنتون دارید خوشحال میشم با من توی بخش کامنتها در میون بذارید.