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