برنامه نویسی C از یک ذهنیت سطح بالا

تازه با قسمت 2 از “یادگیری C برای همه” دکتر چاک به پایان رسید و می خواست یک ثانیه را برای تأمل بگذارد. اگر علاقه مند به رفتن به یک زبان سطح پایین از سطح بالایی هستید ، این مقاله بینش برخی از چیزهایی را که ممکن است انتظار داشته باشید یاد بگیرید ، به شما می دهد. در حداقل لخت ، شما با فکر خوبی که همچنان به سفر برنامه نویسی شما ادامه می دهد ، دور می شوید. در اینجا 8 بینش من در طول یک ماه و نیم گذشته وجود دارد:
تبدیل پایه در c
ج ، یا حداقل برخی از مشکلات برنامه نویسی که در این دوره معرفی شده است ، باعث می شود که در مورد ریاضی (و واقعاً کل جهان ما) متفاوت فکر کنید. نوشتن برنامه ای که اعداد را بین پایه های مختلف (اعشاری ، هگز ، اکتال و باینری) تبدیل می کند ، ممکن است خیلی خوب ذهن شما را برای پیچ و تاب (این کار انجام دهد) به وجود آورد. تبدیل بین پایه های مختلف به صورت دستی بسیار ساده است ، اما نوشتن یک برنامه منطقی کمی دشوار است! وقتی شروع به کار با پایه 8 و 16 کردم ، صادقانه احساس کردم که با یک زبان بیگانه کار می کنم. در یک جهان موازی مستقر در Hex ، یک لایحه 64 دلاری با بنیامین فرانکلین روی پوشش آن وجود دارد.
با استفاده از پرچم -s
هنگام تهیه کد C ، می توانید پرچم -s را برای تولید کد مونتاژ اضافه کنید. بسته به معماری CPU مورد نظر شما بسته به معماری CPU متفاوت خواهد بود.
درک مفسران
من آن را یک میلیون بار شنیده ام ، تفاوت بین یک زبان گردآوری و تفسیر شده ، اما مانند هر چیزی در برنامه نویسی ، شما تا زمانی که واقعاً این کار را انجام ندهید ، واقعاً نمی فهمید. شما احتمالاً آن را از نظر مفهومی درک می کنید: زبانهای کامپایل شده همه بلند کردن سنگین را در جلو انجام می دهند ، در حالی که موارد تفسیر شده آن را همانطور که می روند ، می خوانند ، به صورت خط می خوانند. لحظه Lightbulb برای من هنگامی آمد که من یک تابع را در C (نه یک مترجم واقعی ، بلکه به اندازه کافی نزدیک) نوشتم که از stdin با استفاده از fgets () خوانده شد ، هر خط را با SSCANF () تجزیه کرد و عملیات را بر اساس آن ورودی اجرا کرد. من اساساً یک زبان کوچک جعلی ایجاد کردم و برای اولین بار می توانم تصور کنم که چگونه ممکن است زبانی مانند C در مورد خواندن و پردازش ورودی متن به همان روشی باشد که یک مترجم ممکن است JavaScript را اداره کند. اگر تدوین و تفسیر را در سطح بالایی درک کنید ، ایجاد یک سرپرست شبه ، درک خوبی در سطح پایین از آنچه در واقع اتفاق می افتد به شما می دهد!
آگاهی ASCII
C واقعاً باعث می شود ASCII را درک کنید. اگر شما یک برنامه نویس هستید ، از آن شنیده اید ، اما هنگامی که شروع به نوشتن کد C کردید ، به چیزی تبدیل می شود که در واقع به آن فکر می کنید. شما شروع به فکر کردن مانند رایانه می کنید. نامه ها دیگر فقط حروف نیستند – آنها شماره هستند. به عنوان مثال ، در C ، شخصیت “W” فقط “W” نیست ، بلکه در واقع شماره 87 در حافظه (مقدار ASCII آن) است. در C#، جاوا ، پایتون ، جاوا اسکریپت و سایر زبانهای سطح بالا ، بیشتر به شخصیت ها فکر می کنید که آنها نشان می دهند ، نه با نحوه ذخیره آنها. اما در ج ، دانستن اینکه “W” واقعاً زیر کاپوت است ، بخشی از نحوه نوشتن و استدلال در مورد کد است. این قطعاً هنگام ورود از یک زبان سطح بالاتر ، تغییر ذهنیت است.
هیچ کلاس در C
هیچ کلاس در C. اگر از C# یا Python آمده اید ، این کمی شوک سیستم خواهد بود. اگر می خواهید داده های مرتبط را در C گروه بندی کنید ، باید از یک ساختار استفاده کنید. در C ، داده ها و رفتار در جهان های جداگانه زندگی می کنند: توابع در کتابخانه ها می روند ، ساختارها داده های خود را نگه می دارند ، و شما به صورت دستی آن را با هم سیمی نگه دارید. در یک زبان معمولی OOP ، داده ها و روش ها در داخل یک کلاس ذخیره می شوند. من در بخش های آینده بیشتر در مورد این موضوع می آموزم ، بنابراین من شما را به روز می کنم و امیدوارم بینشی را ارائه دهم که به شما امکان می دهد تا بین کلاس ها و ساختارها بهتر و بهتر کار کنید.
مستندات خوب
این واقعاً مربوط به C نیست ، اما اطلاعات بیشتر در مورد اسناد موجود در پرونده های کد C که برای ESP-IDF نوشته شده است. شاید آنجا باشد و من فقط با آن روبرو نشده ام ، اما من واقعاً چیزی را به تفصیل ندیده ام. این مستندات در مورد منطق نیست بلکه مستندات مربوط به متغیرهای مختلف در انگلیسی ساده است. من در بسیاری از کد های رمزگذاری شده ام که به قسمت های داده ها نگاه می کنم و باید از طریق حلقه ها پرش کنم تا بفهمم هدف آنها چیست. حتی در کتابخانه های پایه Microsoft .NET ، مستندات آنچه در زمینه های داده نشان می دهد بسیار عالی نیست. صرف نظر از این ، مستندات درون کد ESP-IDF آنقدر خوب بود که مجبور شدم به آن فریاد بزنم. اعلامیه های بیشتر در زمینه کد باید مانند این باشد:
واقعاً یک ماشین مجازی است
این ممکن است واضح به نظر برسد ، اما یک ماشین مجازی به هیچ وجه دستگاه نیست. من احساس می کنم که باید گفته شود زیرا علم کامپیوتر عاشق دادن نام هایی است که به نظر می رسد از نظر جسمی تر از آنچه در واقع هستند. یک ماشین مجازی فقط یک برنامه است که معمولاً در چیزی مانند C نوشته می شود ، که یک کامپیوتر کامل را شبیه سازی می کند. این یک کامپیوتر جعلی است که برنامه های واقعی را بر روی یک رایانه واقعی اجرا می کند. زبانهایی مانند C#، Java و JavaScript همه در این مجموعه های مجازی اجرا می شوند. C# از CLR استفاده می کند. جاوا از JVM استفاده می کند. JavaScript به مرورگر بستگی دارد. Chrome از V8 استفاده می کند. Firefox دارای عنکبوت است. همه این موارد به صورت C نوشته شده و فقط در آنجا می نشینند که کد را در زیر کاپوت اجرا می کند. به راحتی می توان در همه “اوه ها” و “آه” که همه چیز هوشمندانه به نظر می رسد ، گرفتار شوید ، اما در پایان روز ، این همه فقط پرونده ها و برنامه ها به فرآیند تبدیل می شوند. هیچ چیز جادویی فقط کد وانمود می کند که یک دستگاه است و روی یک دستگاه واقعی کار می کند. c ستون فقرات همه آن است.
یک عملکرد بازگشتی نوشت
نکته آخر اینکه ، من اولین عملکرد بازگشتی C را بدون هیچ کمکی از Chatgpt نوشتم. در حالی که خونسرد و همه چیز ، بازگشت به ندرت باید استفاده شود و همانطور که دکتر چاک بیان شده است. این فقط در هنگام برخورد با مشکلاتی که به نوعی درخت نیاز دارند ، واقعاً ضروری است.
در بالا برخی از نکات برجسته و تحقق من ساخته شده است و امیدوارم که آنها در مورد دوره دکتر چاک یا فقط برخی از افشاگری هایی که ممکن است با آنها روبرو شوید اگر از یک زبان سطح بالا به پایین بیایند ، با آنها روبرو شوید ، من تا کنون ، من تا فصل 4 (از 8) را در کتاب اصلی تکمیل کرده ام. با این حال ، همانطور که توسط دکتر چاک بیان شده است ، همه چیز در فصل 5 قدرتمند (و دردناک) شروع می شود. چتگپ گفت: “مهمانی تازه شروع به کار کرده است ، و شما در جلو هستید. فصل 5 وقتی چراغ ها پایین می روند و دی جی نشان می دهد.”