یادگیری زبان C – راهی که من رفتم

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

گام نخست – منابع یادگیریِ مفاهیم و سینتکس:

در قدم اول این سوال احتمالاً مطرح می‌شود که از چه منبعی شروع به یادگیری کنیم؟

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

گر مرد رهی میان خون باید رفت                     وز پای  فتاده سرنگون  باید  رفت

تو پای به راه در نه و هیچ مپرس                     خود راه بگویدت که چون باید رفت

اما با این وجود من دو منبع که خودم ازشون استفاده کردم و هنوز گاهی رجوع می‌کنم را به شما معرفی خواهم کرد تا اگر خواستید با آن‌ها جلو بروید. این منابع برای من و کسانی که تا الان بهشون پیشنهاد دادم خوب و رضایت بخش بوده. اگر شما هم از این منابع استفاده کرده‌اید و یا منابع دیگری سراغ دارید، خوشحال می‌شم در زیر همین پست، تجربه خودتون رو بیان کنید.

کورس اصول برنامه نویسی C و ++C استاد کیارش بازرگان:

کیارش بازرگان در مقطع لیسانس علوم کامپیوتر شریف خوانده و ارشد و دکترای مهندسی کامپیوترش را در دانشگاه نورث وسترن به اتمام رسانده. بعد از آن هم استاد دانشگاه مینی سوتا شده. سال 2008 میلادی برای یک فرصت مطالعاتی به دانشگاه صنعتی اصفهان میاد و این کورس را آنجا ارائه میده. خوشبختانه استاد بازرگان این ویدیوها رو ضبط کرده و شما می‌تونید آنها را از طریق سایت مکتبخونه دانلود کنید.

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

کتاب برنامه نویسی به زبان C – نوشته جفرنژاد قمی:

بعضی‌ها به اسم جعفرنژاد قمی حساسیت دارند و از بیخ و بن نوشته‌هایش را نمی‌پسندن. اگرچه سایر کتاب‌های این نویسنده پرکار را نخواندم و از کم و کیف آن‌ها اطلاعی ندارم، اما حقیقتاً به عنوان یک کتاب مرجعِ فارسیِ روان در خصوص زبان C، این کتاب رو قبول دارم و هنوز هم اگر لازم باشد به آن مراجعه می‌کنم.

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

گام بعدی – بعد از یادگیری این منابع چه کار کنیم؟

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

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

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

در این مسئله، قرار بود تا بازی Snake معروف آن زمان را با دات ماتریکس و 4 کلید شبیه سازی کنیم. اعتراف می‌کنم که خیلی دوست داشتم این چالش را حل کنم و به جمع آن معدود افراد استاد بپیوندم 🙂 از همین رو کل تعطیلات سال نو، کوچکترین فرصت آزادم را برای حل این چالش صرف کردم. پایان تعطیلات فوق العاده بود. دیدن حاصل کار بعد از کلی کلنجار رفتن با مسئله بسیار لذت بخش است. من خودم آن مسئله و حل آن را نقطه عطفی در مهارت برنامه‌نویسی‌ام می‌دانم و به همین خاطر اگر قرار باشد توصیه‌ای در این زمینه بکنم. پیشنهاد می‌کنم برای خودتان مسئله تعریف کنید. این مسئله می‌تواند موضوع پروژه کارشناسی یا یک پروژه که دوست دارید آن را بسازید باشد. برای آن وقت بگذارید و آن را تا حد ممکن بهبود بدهید. این کار شاید به سال هم بکشد اما قطعاً بعد از انجام موفقیت آمیز آن با امروزتان بسیار متفاوت خواهید بود. این نکته را هم توجه داشته باشید که سختی این پروژه را با توجه به سطح مهارتتان تعیین کنید. بیش از حد ساده بودن آن کمکی به افزایش مهارت شما نمی‌کند و سختی بیش از حد آن، ممکن است شما را خسته کند. پس ترجیحاً هدفی انتخاب نکنید که بیش از یکسال رسیدن به آن طول بکشد.

پی‌نوشت:

– بازی snake در آن سال‌ها به واسطه گوشی‌های ساده نوکیا(قبل از انقراض توسط گوشی‌های هوشمند) بسیار متداول بود. اگر هیچ تجربه‌ای از این بازی ندارید یا دوست دارید حس آن دوران را دوباره برای خودتان تکرار کنید، عبارت “play snake” را گوگل کنید. در اولین گزینه، به شما پیشنهاد انجام این بازی به صورت آنلاین می‌دهد.

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

۲۷ دیدگاه‌ها

  1. محمد جلوخانی

    سلام دوست عزیز
    ممنون از توضیحات خوبتون
    خیلی هم عالیه و خداپسندانه
    احساس میکنم نیتتون خیره پی مطمئن باشید ثمر میده

    حداقل دعای خیری پشت سرتون هست
    منم برنامه نویسم ولی خیلی دوست دارم این آموزش شما رو دنبال کنم

    لطفا با امید ادامه بدید ، مطمئن باشید بعد از پایان شوق سرشار ببینندگان رو خواهید دید

  2. بسیار عالی استاد
    پروژه های اسنکی ادامه دار باد *آمین*

  3. سلام استاد من از سرچ گ.گل به سایت و نوشته شما رسیدم واقعیتش خیلی خودمانی و تودل برو نوشتید چند وقتی است که میخواهم به زبانهای برنامه نویسی htmlوcssو phpو علاقه مند شدم شاید نمیخواهم یک برنامه نویس حرفه ای بشم اما دوست دارم لا اقل این زبانها را در حد خودم بفهممم واقعا الان چند مدتی است سرگردانم و نمیدانم از کجا شروع کنم ؟افسرده و نا امید شدم از بس فیلم های اموزشی دان کردم واقعا کلافه شدم و در این بین وقتم هم تلف شده و نیجه ای نگرفته ام !!!
    باور کنید خیلی دلم میخواهد بصورت پایه ای از یه جایی شروع کنم اما نمیدانم از کجا
    تا اینکه با سرچ یادگیری زبان برنامه نویسی c به سایت شما رسیدم
    خواهشا به من بگید چه کار کنم >؟
    منابع مطمئن معرفی کنید
    خداوند خیرتون بده
    جواب . برام میل کنید

    • سلام دوست عزیز
      حقیقتش من در برنامه نویسی در حوزه‌هایی که مطرح کردید سررشته‌ای ندارم و کار نکردم. اما با توجه به اینکه یکی از آشنایانم مطالعاتی در این زمینه داشته اند، برای شروع بهتر است از سایت w3school شروع کنید و بعد که سررشته کار دستتون اومد بهتر میتونید فیلم آموزشی مناسب خودتون رو پیدا کنید. باز هم میگم من تجربه ای در این زمینه ندارم اما شاید اگر خودم میخواستم در این حوزه کار کنم سراغ آموزش های سایت uncox میرفتم.
      در ضمن از منبع مهم تر پای به راه نهادنه. شک نکنید که “خود راه بگویدت که چون باید رفت” شاد و پیروز باشید.:)

  4. سلام من از ویندوز و زبان کامپیوتر چیزی نمی دانم .
    بنظرتون با این منابعی که شما گذاشته اید استارت بزنم می تونم زبان سی رو یاد بگیرم ؟

    • سلام. والا چی بگم. یعنی چی از ویندوز چیزی نمیدونید؟
      اگه واقعاً در استفاده از ویندوز هم مبتدی هستید باید یکم کار کنید و حداقل در حد یک کاربر معمولی بتونید ازش استفاده کنید و بعد برید سراغ برنامه نویسی.

  5. سلام و تشکر بابت مطلب مفیدتون
    اگر ممکنه بگید از چه کامپایلر و IDE استفاده کنیم که خیلی اذیت نکنه؟ برای مثالکامپایلدی که خود آقای بازرگان استفاده میکنه چی هست؟
    و همینطور این که چه ابزار های دیگه ای رو لازمه که نصب کنم؟
    ممنون.

    • سلام، خواهش میکنم.
      متوجه منظورتون نمیشم. یعنی چی اذیت نکنه؟
      کامپایلری که آقای بازرگان استفاده می‌کنه ویژوال استادیو هست، اگر اشتباه نکنم.
      شما قصد یادگیری برنامه نویسی برای میکروکنترلر رو دارید؟ و اینکه اگر بله چه شرکتی؟

  6. سلام من هیچی نمیدونم درمورد زبانها …ولی خیلی دوس دارم‌یاد بگیرم..لطفا اگ میشه بگید چطور شروع کنم.

  7. سلام من ۱۴ سالمه.تیزهوشانیم. عاشق کامپیوترم ولی خب یکم درک این کتابا برام سخته. پیشنهادی برام ندارین؟

    • سلام. البته با یک خط توضیح کلی احتمالاً نمی‌تونم جواب خوب و دقیقی رو بهت بدم. اما خب، چیزی که می‌تونم بهت بگم -که البته یک جواب کلی است- اینه که، اغلب چیزهای به درد بخور یادگیریشون اولش سخته. حتی شاید به خودت شک کنی که چرا اینقدر کند یاد میگیری یا نمیفهمی. ولی این اصلاً غیرطبیعی نیست. تا جایی که می‌دونم این واسه بقیه هم همینجوریه. ولی کم کم, با مداومت یادگیریت سرعت میگیره و احتمالاً لذت بیشتری خواهی برد. پس نگران نباش، برای یک مدت ادامه بده. مطمئنم قبلاً هم تجربه مشابه داشتی. چیزهایی بوده که اولش یادگیریشون برات سخت بوده ولی کم کم توش راه افتادی. درسته؟

      • اره اولش بنظرم خیلی پیچیده بود ولی الان کمکم دارم یاد میگیرم
        راستی منابع پیشنهادیتون خصوصا فیلم های استاد بازرگان خیلی عالین
        مرسی از راهنماییتون

  8. سلام من ۱۶ ساله هستم و از برنامه نویسی خوشم میاد و علاقه زیادی به هکری دارم و نمیدونم از کجا شروع کنم چه برنامه نصب کنم و یاد بگیرم

    • سلام، حقیقتش من آدم مناسبی واسه پاسخ این سوال شما نیستم. اما پیشنهاد می‌کنم واسه اینکار حتماً به بلاگ جادی سر بزنید و مطالبش رو در این رابطه بخونید. مثلاً میتونید با این یکی شروع کنید:
      https://jadi.net/2011/01/saveshe-hacker-shodan/

  9. سلام این ویدئو های استاد بازرگان انگار قدیمی ان
    آیا این مشکلی بوجود نمیاره مخصوصا ک هنوز ی چیز جدیدی ب برنامه نویسی اضافه میشه
    پیشاپیش از پاسخگوییتون ممنون

    • سلام نه برای برنامه نویسی زبان سی مشکلی نداره. حتی جلسات آخرش رو هم که مربوط به C++ هست، گوش دادنش خیلی مفیده، گرچه C++ هم فراتر از اون جلساته و هم اینکه تغییرات زیادی نسبت به اون زمان داشته.🙏

  10. سید رضا زبردست

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

    • سلام رضاجان
      ببین یادگیری فرآیند راحتی نیست. نیاز به صبر و مداومت داره. منم مثله تو یه روزی گیج بودم که اینا یعنی چی. ولی ادامه دادم. یکم که راه افتادی باید یه پروژه دست بگیری -حالا یا خودت تعریف کنی یا از یه شخص/شرکت دیگه ای بگیری- فشاری که حل اون پروژه بهت میاره بسیار رشدت میده و اونوقت میبینی که در عمل هرکدوم از این چیزهایی که خوندی کجا به دردت میخوره. بعد از حلش هم بسیار برات مسیر شیرین تر میشه. موفق باشی

  11. خیلی ممنون از توضیحاتی که دادین🙏

  12. ممنون از سایت خوبتون.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *