هر روزه آدمها بیشتری جذب دنیای فناوری اطلاعات (یا همان آیتی) میشوند. آدمهایی که اکثرا به فکر استفاده از امکانات آن هستند و نه به فکر تولید امکانات. بعضی مواقع هم آدمهایی پیدا میشوند که میتوانند ابزار تولید کنند. ابزارهایی که میتواند بهینه و بهصرفه باشد و شاید هم ابزارهایی برای تخریب. این آدم ها برنامهنویس نام گرفتهاند و ابزار تولیدشان هم زبانهای برنامهنویسی است. از زمانی که زبانهای برنامهنویسی معدود و جانفرسا بودند مدتها گذشتهاست و در زمان حال، زبانهای برنامهنویسی مختلفی برای استفادههای مختلف موجود است. زبانهای آموزشی مثل پاسکال و یا زبان همهکارهای مثل C++ (که از استفادهاش برای نوشتن سیستمعامل گرفته تا محاسبات دانشگاهی کاربرد دارد)
اما این همهچیز نیست. این ابزار نیاز به راهکاری دارد، نیاز به دستورالعملی دارد که آن را الگوریتم(گرفته شده از اسم خوارزمی یکی از دانشمندان ایرانی) مینامند. الگوریتم مشخصکنندهی کارایی و بهینهبودن نرمافزار است و نقش اصلی را بهعهده دارد. البته الگوریتم هم تا حدودی به زبان برنامهنویسی وابسته است، مثلا اگر بخواهیم به یک روبات بفهمانیم که دربی را باز کند باید دستورات زیادی برای کنترل اجزای مختلف آن و حرکت هماهنگ آنها در قالب کد به روبات داده شود تا بتواند درب را باز کند. اما برای یک حیوان خانگی این تعداد دستورات بسیار کمتر است و برای انسان در حد یک دستور. در این مثال دستورات روبات را میتوان به کدهای اسمبلی(یا زبان ماشین) تشبیه کرد، حیوان خانگی را به زبانهای سطح بالاتری(زبانهای سطح بالا زبانهایی هستند که دستور زبان آنها به زبان انگلیسی نزدیکتر است) مثل C++ و انسان را میتوان به زبانهایی مثل C#.Net و VB.Net تشبیه کرد.
البته این که به زبان سادهتری برسیم نیازمند فدا کردن میزان قابلتوجهای از منابع سیستم است. مثلا ساختن یک انیمیشن به صورت همزمان(یعنی با کمک کد تصاویر را در لحظه بسازیم) با زبانهای سطح بالا میزان زیادی از منابع سیستم را میگیرد، اما نمونههایی جالب با حجم حداکثر ۶۴کیلوبایت که با زبان اسمبلی نوشتهشدهاست بهخوبی نشانگر فدا شدن میزان قابلتوجهای از منابع سیستم در زبانهای برنامهنویسی سطح بالاتر است.
در ادامه بخشی از مقاله خودآموز برنامهنویسی در ۱۰ سال نوشته Peter Norvig ترجمه مهدی عسگری را برایتان نقل میکنم:
محققان نشان دادند که برای متخصص شدن در بسیاری از زمینه ها (از شطرنج گرفته تا آهنگ سازی ، اپراتوری تلگراف ، نقاشی ، نواختن پیانو ، شنا ، تنیس ، عصب شناسی ، …) حدود 10 سال زمان لازم است. نکته ی مهم انجام کار پیوسته و با توجه است ، نه صرفا کاری را مدام تکرار کردن ، بلکه به چالش کشیدن خودتان با کارهایی که فراتر از توانایی فعلی تان است و تحلیل کارایی تان قبل و بعد از انجام ان کار و اصلاح اشتباهاتتان. و بعد تکرار کنید. و دوباره تکرار کنید. هیچ میانبری وجود ندارد: حتی موزارت که در 4 سالگی اعجوبه ای در موسیقی بود ، 13 سال طول کشید تا بتواند اولین کار حرفه ای و جهانیش را بسازد.
اما هر برنامهنویسی شروعی داشته است. همانطور که در اینجا گفتهام، شروع برنامهنویسی برای من با زبان پاسکال بود. فکر میکنم این شروع، شروعی عالی بود. زبان پاسکال زبانی ساده است و ساختیافتهترین زبان برنامهنویسی است؛ ساختیافته بودن پاسکال به درک آن(که مهمٰترین چیز برای یک برنامهنویس است) بسیار کمک میکند. اگر میخواهید واقعا برنامهنویس شوید(و بفهمید چه کدی مینویسید و صرفا کدها را ترکیب نکنید تا نرمافزاری ساخته شود) و بدون اطلاعات قبلی میخواهید شروع کنید بهتر است با پاسکال شروع کنید. اما مراقب آموزشهای غیراستاندارد هم باشید. توقع نداشته باشید یکشبه همهی رمز و رموز پاسکال را یاد بگیرید. آموزشی غیر استاندارد است که از شاخهای به شاخهی دیگر بپرد، زود سراغ شئگرایی برود(که البته در پاسکال تقریبا بیهوده است).
مرحله به مرحله یاد بگیرید و تمرین کنید. فراموش نکنید گوگل دوست شماست. هرآنچه مشکل شماست، فقط مشکل شما نیست. اگر در منابع فارسی نتوانستید راهحلی برای مشکل خود بیابید، مطمئن باشید که میتوانید در منابع انگلیسی زبان جواب خود را بیابید و اگر هم نیافتید میتوانید مشکل خود را با برنامهنویسان خبره تر درمیان بگذارید. اگر در زبان انگلیسی مشکل دارید بهتر است هر چه زودتر مشکل خود را حل کنید. بیش از ۹۰ درصد منابع به زبان انگلیسی هستند و آموختن زبان انگلیسی برای یک برنامهنویس(و میتوان گفت برای هر دانشجویی) تقریبا اجتناب ناپذیر است.
پس از اینکه با مفاهیم برنامهنویسی آشنا شدید پیشنهاد میکنم سراغ C++ بروید. به غیر از بیشاز حد کاربردی بودن این زبان دلیل دیگر پیشنهاد من این است که بیشتر زبانهای پرکاربرد چه در وب مثل PHP و JavaScript و چه در ویندوز مثل Java و C#.Net ساختاری بسیار مشابه به این زبان دارند و این به شما کمک میکند برای یادگیری زبانها تخصصیتر وقت کمتری صرف کنید.
اما اینها فقط ابزارند! مهمترین بخش هر نرمافزار الگوریتم آن است. بدون الگوریتم ابزارها به هیچ دردی نمیخورند. درکنار یادگیری زبانهای برنامهنویسی مقدار کمی هم الگوریتم یاد میگیرید ولی این کافی نیست. برای نوشتن کدهای بهینهتر نیاز به الگوریتمهای بهتر و پیشرفتهتری دارید. Introduction of algorithms که سومین ویرایش از ترجهی آن از بیان رسا و ترجمهی خوبی برخوردار است منبع خوبی برای شما بهحساب میآید. در کنار آن با توجه زمینهی کاریتان به دنبال الگوریتمهای مناسب باشید.
فرآیند تولید نرمافزار فرآیندی است که اگر بخواهید نرمافزاری بهینه تولید کنید زمانبر است ولی زمانی که برای تولید آن میکنید خیلی کمتر از زمانی است(که اگر ترمافزاری غیر بهینه تولید کنید) صرف اشکالیابی و رفعاشکال نرمافزار میکنید. بعضی مواقع باید کارهای سخت انجام داد تا بعدا راحتتر بود(إِنَّ مَعَ الْعُسْرِ يُسْرًا-سوره شرح آیه ۶ +) به نوعی میتوان گفت برنامهنویسی هم مثل ساختن دیوار میماند اگر راه را درست بروید نرمافزار خوبی خواهید داشت در غیر اینصورت نرمافزاری ناپایدار و پر از اشکال خواهید داشت.