بررسی تاریخچه برنامه نویسی

 

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

نرم افزار چیست؟

یک پاسخ ساده برای آن عبارتست از: سخت افزار را می توانید لمس کنید اما نرم افزار را نه!

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

برنامه کامپیوتری چیست؟

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

قدیمیترین نمونه عملی از برنامه نویسی به سال ۱۸۰۱ در کشور فرانسه توسط شخصی بنام جکارد برمی گردد. او یک دستگاه بافندگی طراحی کرده بود که می توانست اعمال خاصی از بافندگی را که روی کارتهای سوراخ شده (Punched card) ثبت شده بودند به ترتیب انجام دهد. این تکنولوژی اجازه تولید بافت های پیچیده و با کیفیت تر را به کارگران معمولی می داد. اکنون به جای کارگران متعدد و ماهر، فقط یک نفر برای مدیریت کل دستگاه کافی بود. روند تقریبا مشابهی نیز در خلال انقلاب صنعتی در انگلیس به وقوع پیوست. به دنبال استفاده از ماشینهای خودکار و کاهش نیروی کار انسانی، جنبشی تحت عنوان لودیت ها به راه افتاد. این جنبش متشکل بود از افرادی که مخالف توسعه تکنولوژی بودند و برای جایگاه شغلی، نان و رزق و روزی خود با تکنولوژی می جنگیدند.

دستگاه بافندگی خودکار توسط کارتهای سوراخ شده

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

در سال ۱۸۴۷ یک ریاضیدارن انگلیسی بنام George Boole با ارائه جبر منطقی، ارتباط میان علم ریاضیات و منطق را اثبات کرد. برای اولین بار او اثبات کرد که علم منطق بیشتر بخشی از ریاضیات است تا فلسفه! این عمل که یک گام بزرگ در تفکر بشریت به حساب می آید تقریبا صد سال (تا سال ۱۹۴۰) طول کشید تا در محاسبات کامپیوتری به کار گرفته شود.

در دهه ۱۹۴۰ اولین کامپیوتر الکترونیکی ساخته شد. حافظه محدود و سرعت بسیار پایین (به نسبت سرعت کامپیوترهای امروزی) از ویژگی های بارز کامپیوترهای الکترونیکی اولیه بودند. در این سالها که به عصر اطلاعات معروف بود، اجرای برنامه ها در کامپیوترها مستلزم تنظیم کلیدها، سوییچ ها و اتصال سیم های مختلف بود که منطق برنامه را مشخص می کردند.

برنامه نویسی با کامپیوتر انیاک

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

جان وان نیومن در سال ۱۹۴۵ هنگامی که در انیستیتو تحقیقات عالی مشغول بکار بود، ۲ اصل اساسی را ارائه کرد که تاثیر مستقیمی بر مسیر توسعه برنامه نویسی گذاشت؛ اولین اصل “تکنیک برنامه مشترک” (Shared-program technique) نام داشت. بر طبق این اصل سخت افزار کامپیوترها باید بسیار ساده باشند و نیازی نیست که برای هر برنامه به صورت دستی سیم کشی و تجهیز شوند. در عوض، دستورات نرم افزاری باید از ترکیب همان دستورات ساده سخت افزاری تشکیل شوند و یک دستور نرم افزار مرکب و پیچیده تر را بسازند. این اصل سخت افزارها را ساده و دستورات نرم افزاری را پیچیده می کرد.

وان نیومن اصل دوم خود را “انتقال کنترل به صورت شرطی” (Conditional Control Transfer) نامید. بر طبق این اصل که تاثیر عمیقی بر توسعه برنامه نویسی گذاشته است، برنامه کامپیوتری می تواند شامل بلاک های کوچکتری از دستورات بنام زیرروال (Subroutine) شود که می توانند در هر جای برنامه اصلی جای گیرند. این بلاک ها می توانند هر چندبار که لازم است در هر کجای برنامه اصلی استفاده شوند. بخش مهم دیگری از این اصل، کنترل روند برنامه کامپیوتری توسط دستورات منطقی مانند IF…Then و حلقه هایی مانند FOR را امکانپذیر می کرد.

سال ۱۹۴۸ همزمان بود با ارائه تئوری ریاضی ارتباطات توسط کلود شانن (Claude Shannon, 1916-2001). ارائه تز تئوری ریاضی ارتباطات او اساس تئوری اطلاعات (Information Theory) را شکل داد. این تئوری نحوه استفاده از منطق باینری (اعداد در مبنای دو، همان صفر و یک ها) در محاسبات نرم افزاری در کامپیوترها را بیان می کرد. تز ارائه شده توسط شانن دنیای صفر و یک ها (باینری) که اساس و پایه کامپیوترهای الکترونیکی امروزی هستند را شکل می داد. بعدها اولین کامپیوتر باینری در حین جنگ جهانی دوم توسط یک آلمانی بنام زوس ساخته شد.

در سال ۱۹۴۹، پس از ارائه ۲اصل وان نیومن، زبان برنامه نویسی بنام کد کوتاه (Short Code) به وجود آمد. کد کوتاه که دستورات آن به صورت یک سری صفر و یک تشکیل شده بود، اولین زبان برنامه نویسی برای کامپیوترهای الکترونیکی به حساب می آید. ساخت این زبان برنامه نویسی به عنوان اولین قدم در جهت ساخت دنیای برنامه نویسی امروز به حساب می آید. در سال ۱۹۵۱، گریس هاپر اولین کامپایلر دنیای کامپیوتر را به نام A-0 نوشت. کامپایلر به برنامه ای گفته می شود که دستورات برنامه نویسی را به دستورات صفر و یک (در آن زمان دستورات زبان کد کوتاه) تبدیل می کند. از آن پس برنامه نویس نیازی به ورود کدهای صفر و یک نداشت و توسعه دنیای برنامه نویسی سرعتی چند برابر یافت.

پس از آن فورترن (FORTRAN) به عنوان اولین زبان برنامه نویسی به شکل امروزی در سال ۱۹۵۷ توسط شرکت IBM ساخته شد. نام آن مخفف سیستم تبدیل فرمول (FORmula TRANslating system) بود. دستورات آن بسیار ساده بودند و فقط شامل دستورات IF ، DO و GOTO می شدند. هرچند دستورات این زبان امروزه بسیار محدود و ناکارآمد تلقی می شود اما در آن زبان قدم بسیار بزرگی رو به جلو بود. انواع داده ای نیز برای اولین بار در زبان FORTRAN ارائه شدند. داده هایی مانند متغیرهای منطقی، صحیح، حقیقی و اعداد با دقت مضاعف در FORTRAN قابل تعریف و استفاده بودند.

اگرچه زبان FORTRAN در کار با اعداد و داده ها بسیار خوب عمل می کرد اما در دریافت ورودی و صدور خروجی بسیار محدودیت داشت. با شروع استفاده از کامپیوتر در دنیای تجارت، زبانهایی مانند COBOL نیز پا به عرصه ظهور گذاشتند. COBOL که از ابتدا به منظور استفاده در حوزه برنامه های تجاری طراحی شده بود، فقط شامل انواع داده ای عددی و رشته متنی می شد. امکان گروه بندی داده ها در آرایه ها و رکوردها، مدیریت داده ها را تسهیل می کرد. این امکانات فضا را برای رشد نرم افزارهای ذخیره و بازیابی اطلاعات فراهم کرد.

تا سال ۱۹۷۲ بیش از ۲۰۰ زبان برنامه نویسی مختلف ظهور کرد. اکثر این زبانها به منظور کاربرد خاصی توسعه یافته بودند، برخی دیگر نیز ویرایش جدیدی از زبانهای قبلی بودند.

نسل زبان های برنامه نویسی

با توجه به مطالعات پیشین در زمینه روند توسعه ابزارهای برنامه نویسی، می توان این ابزارها را به چند نسل مختلف تقسیم بندی کرد؛

نسل اول

در سالهای دهه ۱۹۵۰ برنامه نویسی کامپیوترهای اولیه توسط تغییر سیم ها و تنظیم هزاران کلید و سوییچ انجام میشد. در برخی موارد این تنظیمات بر روی کاغذهای طومار گونه و یا کارت های سوراخشده نوشته می شدند که به کامپیوتر می گفتند چه کاری را (What)، به چه صورت (How) و در چه زمانی (When) انجام دهد.

به منظور اجرای یک نرم افزار، برنامه نویس باید اطلاعات جامع و کاملی از کامپیوتر موردنظر می داشت. یک اشتباه کوچک منجر به شکست در کل برنامه کامپیوتری میشد.

نسل دوم

در این دوره افراد به دنبال ابزارهای سریعتر و راحتتری برای برنامه نویسی بودند. نتیجه این تلاشها تولد نسل دوم زبان های برنامه نویسی در اواسط دهه ۱۹۵۰ شد. در این نسل از نمادها به جای دستورات صفر و یک استفاده می شد.

نسل سوم

در اواخر دهه ۱۹۵۰ مفسرهای زبان های طبیعی و کامپایلرهای پا به عرصه ظهور گذاشتند. قدیمیترین زبان برنامه نویسی این نسل FORTRAN است که در سال ۱۹۵۳ توسط IBM ساخته شد. در سال ۱۹۵۹ زبان برنامه نویسی COBOL به منظور استفاده در دنیای نرم افزارهای تجاری عرضه گردید.

زبانهای سطح بالای برنامه نویسی مانند BASIC ، PASCAL ، ALGOL ، PL/I و C در این دوره معرفی شدند.

نسل چهارم

زبانهای این نسل برنامه نویس را قادر می سازند تا کارهای سطح بالاتر و بیشتری را توسط کد کمتری انجام دهد. هر دستور از زبانهای این نسل معادل صدها دستور از زبانهای نسل سوم است. برنامه هایی که توسط این زبانهای نوشته می شوند، نیاز به یک محیط سخت افزاری خاص و امکانات خاص برای اجرا شدن دارند. در دهه ۱۹۹۰ درخواست ها برای استفاده از این زبانها بسیار زیاد شد و کمپانی هایی مانند Oracle و SUN تلاشهایی در این زمینه انجام دادند.

نسل پنجم

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

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

آنچه گذشت مروری اجمالی بود بر رویدادهایی که قدم به قدم دنیای امروز ما را شکل داده اند.