مبانی آدرس های IP در شبکه های کامپیوتری

مبانی آدرس های IP در شبکه های کامپیوتری

هر دستگاه متصل به اینترنت دارای یک شناسه منحصر به فرد است. امروزه اکثر شبکه ها ، از جمله تمام رایانه های موجود در اینترنت ، از TCP/IP به عنوان استانداردی برای برقراری ارتباط در شبکه استفاده می کنند. در پروتکل TCP/IP ، این شناسه منحصر به فرد آدرس IP است. دو نوع آدرس IP عبارتند از: IPv4 و IPv6. آدرس IPv4 با چهار عدد که با نقطه از هم جدا شده اند بیان می شود. هر عدد نمایندگی اعشاری (پایه 10) برای یک عدد باینری هشت رقمی (پایه 2) است که به آن اکتت نیز گفته می شود.

IPv6 از 128 بیت دودویی برای ایجاد یک آدرس منحصر به فرد در شبکه استفاده می کند. یک آدرس IPv6 توسط هشت گروه از اعداد هگزادسیمال (پایه 16) با کولون ها جدا شده است. گروههایی از اعداد که حاوی تمام صفرها هستند غالباً برای صرفه جویی در فضا حذف می شوند و یک جداکننده بزرگ برای نشان دادن فاصله ایجاد می کند.

فضای IPv6 بسیار بزرگتر از فضای IPv4 به دلیل استفاده از هگزادسیمال و همچنین داشتن 8 گروه است. اکثر دستگاه ها از IPv4 استفاده می کنند. با این حال ، به دلیل ظهور دستگاه های IoT و تقاضای بیشتر برای آدرس های IP ، دستگاه های بیشتری IPv6 را می پذیرند.

Static vs Dynamic

رایانه شما چگونه آدرس IP خود را دریافت می کند؟ یک آدرس IP می تواند پویا یا استاتیک باشد.

آدرس استاتیکی است که خودتان با ویرایش تنظیمات شبکه رایانه خود پیکربندی می کنید. این نوع آدرس ها نادر است و اگر از آن بدون درک خوب TCP/IP استفاده کنید ، می تواند مشکلات شبکه ایجاد کند.

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

کلاس های IP

معمولاً فضای IPv4 به ما اجازه می دهد بین 0.0.0.0 تا 255.255.255.255 آدرس داشته باشیم. با این حال ، برخی از اعداد در آن محدوده برای اهداف خاصی در شبکه های TCP/IP محفوظ است. این رزروها توسط مرجع آدرس دهی TCP/IP ، مرجع شماره اختصاص داده اینترنت (IANA) به رسمیت شناخته می شود. چهار رزرو خاص شامل موارد زیر است:

0.0.0.0 - این نشان دهنده شبکه پیش فرض است که مفهوم انتزاعی فقط اتصال به شبکه TCP/IP است. 255.255.255.255 - این آدرس مختص پخش شبکه یا پیام هایی است که باید به تمام رایانه های موجود در شبکه ارسال شود. 127.0.0.1 - این آدرس loopback نامیده می شود ، به این معنی که رایانه شما می تواند خود را تشخیص دهد ، خواه ناخواه آدرس IP اختصاصی دارد. 169.254.0.1 تا 169.254.255.254 - این محدوده آدرس های خصوصی IP آدرس دهی (APIPA) است که به طور خودکار هنگام دریافت آدرس رایانه از سرور DHCP ناموفق تعیین می شود. < /uli>

رزرو آدرس IP دیگر برای کلاس های زیر شبکه است. زیر شبکه یک شبکه کوچکتر از رایانه ها است که از طریق روتر به شبکه بزرگتری متصل می شوند. زیر شبکه می تواند سیستم آدرس مخصوص به خود را داشته باشد ، بنابراین رایانه های موجود در یک زیر شبکه می توانند بدون ارسال داده به یکدیگر سریع ارتباط برقرار کنندشبکه بزرگتر یک روتر در یک شبکه TCP/IP ، از جمله اینترنت ، طوری پیکربندی شده است که یک یا چند زیر شبکه را تشخیص داده و ترافیک شبکه را به طور مناسب مسیریابی کند. آدرس های IP زیر برای زیر شبکه ها محفوظ است: 172.16.0.0 تا 172.31.255.255 - این در محدوده آدرس کلاس B از 128.0.0.0 تا 191.255.0.0 قرار می گیرد ، که در آن دو بیت اول 10. 192.168 است. 0.0 تا 192.168.255.255 - این محدوده در محدوده کلاس C از 192.0.0.0 تا 223.255.255.0 قرار دارد ، که در آن سه بیت اول 110 است. Multicast (قبلاً کلاس D نامیده می شد) - چهار بیت اول در آدرس 1110 ، با آدرسهای بین 224.0.0.0 تا 239.255.255.255. برای استفاده در آینده/تجربی (قبلاً کلاس E نامیده می شد) - آدرس 240.0.0.0 تا 254.255.255.254.

سه مورد اول (در کلاس های A ، B و C) بیشترین استفاده را در ایجاد زیر شبکه ها دارند. بعداً خواهیم دید که چگونه یک زیر شبکه از این آدرس ها استفاده می کند. IANA کاربردهای خاصی را برای آدرس های چند رسانه ای در سند RFC 5771 Engineering Engineering Task Force (IETF) بیان کرده است. با این حال ، از آنجا که این بلوک در سند 1989 خود RFC 1112 ذخیره شده است ، هدف یا برنامه ای برای آدرسهای کلاس E تعیین نکرده است. IPv6 ، اینترنت پر بود از این که آیا IANA باید کلاس E را برای استفاده عمومی منتشر کند. ) ، اطلاعات کاملی از اطلاعات آدرس IP خود را مشاهده خواهید کرد. من از قسمتی که به آن علاقه دارم ، اسکرین شات گرفته ام.

ipconfig جزئی خروجی آدرس IP: 192.168.1.69 ماسک زیر شبکه: 255.255.255.0 بیست و چهار بیت (سه اکتت) برای هویت شبکه ذخیره شده است هشت بیت (یک اکتت) برای گره ها محفوظ است هویت زیر شبکه بر اساس ماسک زیر شبکه (آدرس اول): 192.168.1.0 آدرس پخش رزرو شده برای زیر شبکه (آخرین آدرس ): 192.168.1.255 نمونه آدرسها در یک شبکه: 192.168.1.1 ، 192.168.1.103 آدرسهای نمونه در یک شبکه مشابه: 192.168.2.1 ، 192.168.2.103

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

در شرایط کنونی ، ماسک زیر شبکه 255.255.255.0 است که نشان می دهد 1 بایت برای میزبان اختصاص داده شده است. همچنین می تواند 255.255.0.0 (2 بای) و 255.0.0.0 (3 بایت) باشد.

تشخیص خطوط جاده با استفاده از تکنیک های پیشرفته بینایی کامپیوتر

تشخیص خطوط جاده با استفاده از تکنیک های پیشرفته بینایی کامپیوتر

اخیراً ، من بصورت تمام وقت روی پروژه هایم به عنوان تکمیل بخشی از برنامه Nanodegree مهندس خودران Udacity (گروه فوریه 2017) کار می کنم. چهارمین پروژه ، و مورد علاقه من ، این است که ما وظیفه داریم مرزهای خط جاده و شعاع انحنای آن را از طریق جریان ویدئوها مشخص کنیم. این ویدئوها از دوربینی که روی خودرو قرار داده شده گرفته شده است. در این مقاله ، من در مورد چیزهایی که در انجام این پروژه آموخته ام صحبت می کنم. "> اگر این مقاله به نوعی به شما کمک کرد ، در نظر داشته باشید که برای من قهوه بخرید :)

GITHUB LINK | گزارش کامل فنی

به طور خلاصه ، I ' مراحل زیر را برای انجام این کار انجام داده اید:

برای اعوجاج دوربین پیکسل های خط فیلتر دریافت "نمای آسمان" منحنی “Best-Fit” را تنظیم کنید خط را به تصویر "نمای خودرو"

1 بازگردانید. CALIBRATION CAMERA

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

< img src = "https://cdn-images-1.medium.com/max/426/1*sq1BRcJGSvm3fdxnbS08yw.png">

2. TRANSFORMATION چشم انداز

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

3. پیش بینی درجه و رنگ

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

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

من عملگر Sobel را به مقدار روشنایی تصویر اعمال کردم. ما از ترکیبی از آستانه شیب مولفه افقی ، بزرگی شیب و جهت شیب استفاده کردیم. من می خواهم مکان های گرادیان را که تغییر اندازه کافی چندانی ندارند ، کنار بگذارم. آستانه اندازه گرادیان و همچنین x جزء شیب کار خوبی را در این زمینه انجام می دهد. من فقط شیب های یک جهت خاص را در نظر می گیرم. کمی بالاتر از 0 درجه (یا حدود 0.7 در رادیان) ، و زیر 90 درجه (یا حدود 1.4 در رادیان). صفر دلالت بر خطوط افقی و نود خطوط عمودی دارد و خطوط ما (در نمای خودرو) بین آنها قرار دارد.

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

4. CURVE FITTING

ما می توانیم یک منحنی برای هر خط خط با یک تابع چند جمله ای درجه دوم x = y² + By + C قرار دهیم. ما باید ضرایب مربوط به هر خط [A ، B ، C] را پیدا کنیم. ما می توانیم از تابع داخلی polyfit () استفاده کنیم تنها کاری که باید انجام دهیم تغذیه نقاط آن است و ضرایب چند جمله ای از یک درجه مشخص از منحنی را که متناسب با نقاط تغذیه شده است ، بیرون می آورد.

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

< p> من می توانم یک "تکنیک پنجره کشویی" را انجام دهم - یکی از پنجره ها روی پنجره دیگر که از خطوط بالای قاب پیروی می کند. پیکسل های داخل یک "پنجره" به عنوان "پیکسل های مورد علاقه" علامت گذاری می شوند و به لیست نقاط در خط اضافه می شوند. ما مقادیر x این پیکسل ها را متوسط ​​می کنیم تا به خوبی نقطه پایه پنجره بعدی بالا را نشان دهیم. ما می توانیم این کار را بارها و بارها تکرار کنیم تا به بالای خط برسیم. به این ترتیب ما تمام پیکسل هایی را که به آن علاقه داریم جمع کرده ایم و به تابع polyfit () که ضرایب چند جمله ای درجه 2 را مشخص می کند ، تغذیه می کنیم. ما می توانیم شعاع انحنای هر خط را محاسبه کنیموقتی معادلات منحنی را می دانیم.

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

5. پروژه LANE برای مشاهده وسیله نقلیه

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

چون ما در حال حاضر پارامترهای منحنی خط خط را داریم نقاط منحنی ها و تابع fillPoly () برای کشیدن ناحیه خط روی تصویر. اکنون می توانیم اندازه گیری خود را در مسیر تصویر نشان دهیم. ما این را به زیبایی در یک عملکرد کوچک و شیک به نامbirdsEye.project ()

< /img>

خلاصه و بعد از اندیشه ها

بنابراین به طور خلاصه ، این تقریباً تمام مراحلی است که باید برای تشخیص خطوط خط انجام دهیم. ما همچنین می توانیم شعاع خمیدگی را تخمین زده و موقعیت خودرو را با توجه به هر یک از این خطوط خط تخمین بزنیم. ابتدا ، اعوجاج دوربین را تصحیح کردیم ، همه چیز را به جز پیکسل های خط خط پنهان کردیم. ما تصویر را به "نمای آسمان" تغییر دادیم و از این پیکسل های خط استفاده کردیم تا با استفاده از تکنیک "sliding-window" و تابع polyfit () بهترین منحنی را پیدا کنیم. ما همچنین می توانیم خطوط خمیده را برای نمای فوق العاده به تصویر "نمای خودرو" بازگردانیم :). منحنی که منطقی است من فکر می کنم هنوز باید تغییراتی ایجاد کنم تا شعاع تخمین خمیدگی بهتری حاصل شود. من همچنین فکر می کنم اگر بیشتر فکر کنم می توانم الگوریتم پنجره کشویی را با خواندن تمیزتری انجام دهم تا پیکسل های مورد علاقه هر خط را بدست آورم. به نظر می رسد کلاس Curves مسئول بسیاری از موارد است ، شاید بتوانم این را به چند کلاس کوچکتر تقسیم کنم. نکته دیگر این است که من فکر می کنم عملکرد پروژه () در کلاس BirdsEye من نامناسب است ، شاید من باید به جای درخواست ضرایب اتصالات منحنی ، خطوط خط خارج را محاسبه کنم ، تابع باید برای نمایش تصویر درخواست کند در عوض.

پیوند GITHUB | گزارش فنی کامل

اگر این مقاله به نوعی به شما کمک کرد ، برای من قهوه بخرید :)

راهنمای متقاضیان یادگیری عمیق با تمرکز بر دانش آموزان غیر کامپیوتر

راهنمای متقاضیان یادگیری عمیق با تمرکز بر دانش آموزان غیر کامپیوتر

منبع: https://imgur.com/gallery/ulEBFF

یک س veryال بسیار رایج که من دریافت می کنم این است ، "چگونه می توان با یادگیری عمیق شروع کرد؟". در حال حاضر ، در حال حاضر پاسخ های بسیار خوبی در مورد این موضوع مانند این و این وجود دارد (آنها منابع زیادی را ذکر کرده اند و شما قطعاً باید آنها را بررسی کنید). این فقط تلاشی است برای پاسخ به این س basedال بر اساس تجربه من ، ارائه یک مسیر دقیق تر و دقیق تر و سفری از طریق چالش های مختلفی که احساس کردم. این پست با آشنایی با مبانی علوم کامپیوتر و ریاضی شروع می شود ، از طریق شروع به یادگیری ماشین و یادگیری عمیق ، به تخصص و مشاوره در پروژه ، ساختن مشخصات خود ، شبکه و اهمیت و در نهایت با نکاتی که من به آنها می دادم پایان می یابد. خود جوانتر من.

دلیل اینکه عنوان عنوان می کند در درجه اول برای دانش آموزان غیر CS است زیرا آنها مانع ذاتی را در مسیر خود احساس می کنند و فقط به دلیل رشته تحصیلی خود در دانشگاه احساس محدودیت می کنند ، در حالی که تعداد زیادی منابع آنلاین در حال حاضر این مشکل را حذف کرده اند (تا حدی ، هنوز نمی توانید نمرات در رشته دانشگاهی خود را بهم بزنید ، نمی توانید).

مبانی علوم کامپیوتر و ریاضیات

اکنون بر هیچ کس پوشیده نیست که MOOC (دوره های آنلاین گسترده گسترده) مانند Coursera ، Udacity ، NPTEL ، Stanford Online & MIT Opencourseware چشم انداز آموزش را تغییر داده و دوره های مدارس فوق لیسانس را در دسترس مخاطبان گسترده تری قرار می دهد. آنها منبع اصلی یادگیری من برای موضوعات مختلف بوده اند و روش مبتنی بر تکلیف درک واضح تری از مفاهیم زیرین را تضمین می کند. من لیست دوره هایی را که توصیه می کنم به کسی که قبلاً چیزی به او آموزش نداده اند توصیه می کنم ، بنابراین با خیال راحت از دوره هایی که قبلاً با آنها آشنایی دارید صرف نظر کنید.

ریاضیات

دوره احتمال توسط دانشگاه هاروارد جبر خطی * آکادمی خان * ماهیت جبر خطی توسط 3Blue1Brown (کوتاه تر ، بصری تر) حساب دیفرانسیل * Calculus One توسط دانشگاه ایالتی اوهایو در Coursera * Essence of Calculus by 3Blue1Brown آمار توسط سباستین ترون در مورد Udacity

علوم کامپیوتر (نه برای برنامه نویسی رقابتی)

ساختارها و الگوریتم های داده * فیلم های دوره IIT دهلی (نظریه) * تخصص UC San Diego در Coursera (پیاده سازی) * InterviewBit (تمرین) سیستم عامل ها توسط UC Berkeley ریاضیات برای علوم کامپیوتر توسط MIT (برای علاقه مندان)

شروع کار با یادگیری ماشین و عمیق یادگیری < /h1>

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

بنیادها

یادگیری ماشین توسط دانشگاه استنفورد در Coursera و YouTube (CS 229) ، تدریس اندرو نگ. تخصص یادگیری عمیق توسط deeplearning.ai ، تدریس توسط اندرو نگ. آموزش عمیق عملی برای برنامه نویسان توسط fast.ai

دامنه خاص

یادگیری عمیق برای دید رایانه ای توسط دانشگاه استنفورد یادگیری عمیق برای زبان طبیعی پردازش توسط دانشگاه استنفورد یادگیری تقویتی توسط دیوید سیلور (UCL/DeepMind) یادگیری تقویت عمیقتوسط UC Berkeley

برنامه های پولی

مهندس اتومبیل خودران Nanodegree نانو درجه Robotics نانو درجه اتومبیل پرواز هوش مصنوعی نانو درجه

منابع آموزشی اضافی

کانال سراج راوال در YouTube (فیلم های هفتگی و چالش های کد نویسی) وبلاگ WildML کریستوفر وبلاگ Olah (بسیار مفید) وبلاگ Distill وبلاگ Andrew Trask وبلاگ تحقیقاتی Google وبلاگ OpenAI وبلاگ DeepMind کتاب یادگیری عمیق اخبار NLP- توسط سباستین رودر (http://newsletter.ruder.io/) inFERENCe- توسط فرنس هوسر (http://www.inference.vc/about/) BAIR - از UCB (http://bair.berkeley.edu/) offConvex - توسط موریز هاردت و دیگران (http://www.offconvex.org/) وبلاگ Otoro - توسط hardmaru— (http://blog.otoro.net/)

تخصص و مشاوره پروژه < /h1>

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

اکثر مردم آنچه را که می توانند در یک سال انجام دهند ، بیش از حد ارزیابی می کنند و آنچه را که در ده سال می توانند انجام دهند دست کم می گیرند. - بیل گیتس

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

پروژه زیر نظر استاد: برای دانش آموزان ، این بهترین گزینه است. شما با مرور ادبیات بیانیه مشکل شروع می کنید ، که به شما طعم و مزه ای از تاریخ و پیشرفت های اخیر در حوزه مربوط می دهد. سپس ، ممکن است چیزی را که پروفسور در مورد آن فکر کرده است پیاده سازی کنید یا ممکن است چند بحث در مورد نحوه حل مشکل داشته باشید. در هر صورت ، فرصتهای یادگیری بسیار زیاد است و باید مطمئن باشید که صادقانه کار می کنید (برای کسانی که به راحتی حواسشان پرت می شود ، ایده خوبی می تواند رزرو یک مکان باشد ، مانند آزمایشگاهی که توسط استاد نظارت می شود ، جایی که روزانه به محل کار می روید). به سرانجام ، اگر پروفسور احساس کند که شما مشارکت خوبی داشته اید ، او با خوشحالی (در بیشتر موارد) به شما توصیه می کند و اعتبار اخلاق کاری شما از طرف پروفسور در حرفه حرفه ای و تحصیلی شما بسیار پیش می رود. مشارکت منبع باز: من از طرفداران بزرگ توسعه منبع باز هستم. بسیاری از چیزها در دنیای امروز ما بدون مشارکت منبع باز میلیون ها نفر در سراسر جهان وجود نداشت. من خودم یادگیری ماشین را با مشارکت در یادگیری اسکیت شروع کردم. این امر نه تنها مهارت های برنامه نویسی من را بسیار افزایش داد ، بلکه مفاهیم آموخته شده من را نیز بسیار شفاف تر کرد. همچنین ، شرکت ها برای کارهای منبع باز ارزش زیادی قائل هستند ، تقریباً در صفحه مشاغل هر شرکتپیوندی به نمایه Github شما می پرسد. به این پست و این صفحه HackerEarth نگاهی بیندازید که چگونه می توانید با مشارکت منبع باز شروع کنید. این نیز می تواند یک خواندن خوب باشد - دانش آموزان و منبع باز: 3 پیش فرض رایج. کارآموزی از راه دور: این گزینه شما است در صورتی که اولین مورد به نتیجه نرسد. وب سایت های زیادی مانند Internshala & AngelList وجود دارد (به نظر من بهترین آنها) که در آن ها قطعاً می توانید استارتاپ هایی را پیدا کنید که برای مناطق مورد علاقه خود کار از راه دور ارائه می دهند. انگیزه شما در این برهه از زمان نباید کسب درآمد باشد ، بلکه باید بیشتر بر روی یادگیری متمرکز باشد. یک نکته خوب در مورد درخواست برای استارتاپ ها این است که می توانید از بنیانگذاران خود جستجو کرده و مستقیماً (از طریق ایمیل یا LinkedIn) در مورد برنامه خود با آنها تماس بگیرید تا روند را تسریع کنید.

ایجاد نمایه ، شبکه و اهمیت

این نکته باید بسیار تأکید شود. مشخصات شما مهم است برای دانش آموزان ، درست است که در موقعیت های شما چندان اهمیتی نخواهد داشت ، اما پس از فارغ التحصیلی و تمایل به تغییر شرکت چه می شود؟ این تصور اشتباه وجود دارد که ساختن مشخصات شما فقط برای یافتن شغل است. خیلی بیشتر است شما می توانید خود را در اینترنت ، کل سابقه خود و شخصی که به عنوان یک شخص هستید قرار دهید. نمایه شما یک لایه اصالت به حضور آنلاین شما می افزاید و دسترسی افراد با شما را بسیار آسان می کند. 3 مورد وجود دارد که شما باید از آنها مراقبت کنید - LinkedIn ، نمایه های Github و وب سایت شما. مال منم همینطور. یک وب سایت شخصی از یک الگوی کلی پیروی می کند و شما می توانید برای سرفصل ها و محتوایی که باید در هر عنوان قرار داده شود به این قسمت مراجعه کنید. شبکه اجتماعی است ، اما یک شبکه اجتماعی حرفه ای است. شما این فرصت را پیدا می کنید که با افراد همفکر خود در آنجا ارتباط برقرار کنید ، ایده های خود را به اشتراک بگذارید ، برای مشاغل درخواست دهید و اساساً ، ارتباطات خود را تقویت کنید. افرادی که بیشترین فعالیت را در LinkedIn دارند دائماً محتوای ارزشمندی ایجاد می کنند و هر دقیقه صرف شده در LinkedIn مفید است (تا حدی). در هر درگاه درخواست کار ، از شما خواسته می شود که پیوند نمایه LinkedIn خود را ارائه دهید. یک USP بزرگ LinkedIn قابلیت جستجوی عالی است. شما به معنای واقعی کلمه می توانید تمام فارغ التحصیلان خود را در آنجا جستجو کنید و حتی افرادی را که در یک شرکت /موسسه کار می کنند بررسی کنید. نمایه LinkedIn شما به شما این امکان را می دهد که کل سابقه خود را مشخص کنید و آنها اخیراً شروع به مطابقت شما با مربیان احتمالی کرده اند. برای اطلاع از نکات مربوط به بهینه سازی پروفایل LinkedIn خود به اینجا مراجعه کنید.

اکثر مردم از ساختن پروفایل Github خود چشم پوشی می کنند و دلیل اصلی آن نیز عدم آگاهی است. بر اساس توصیه من برای مشارکت منبع باز ، Github به شما این فرصت را می دهد تا کار خود را نه تنها در قالب کلمات ، بلکه با کد واقعی به نمایش بگذارید. یک استخدام کننده بالقوه می تواند به جستجوی شما بپردازدمشخصات و نحوه کدگذاری خود ، تعداد دفعات کدگذاری و غیره را مشخص کنید. یک نمودار کوچک همراه با نمایه شما وجود دارد که مشارکت های شما در سال گذشته را نشان می دهد:

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

در نهایت ، موضوع شبکه بسیار کمتر از آنچه که باید صحبت می شود. باز هم ، این می تواند یک پست جداگانه داشته باشد ، اما من سعی می کنم در اینجا خلاصه کنم. شبکه به دنبال استخدام احتمالی بعدی شما نیست. این در حال ایجاد روابط واقعی با افرادی است که با آنها ارتباط برقرار می کنید. امروزه بسیاری از ما بر تفکر "چه چیزی برای من خوب است" متمرکز شده ایم و به مشخصات یک شخص بیشتر از شخص او اهمیت می دهیم. همیشه مراقب باشید تا با هر کسی و هر کسی که ملاقات می کنید (حتی به صورت مجازی) روابط ثمربخش داشته باشید. آنها نه تنها می توانند برای شما ضمانت کنند که واقعاً به کمک آنها نیاز دارید ، بلکه این در طبیعت انسان است که احساس خوشبختی و رضایت داشته باشید تا واقعاً با همسالان خود ارتباط عمیقی برقرار کنید. من در سال 2015 در استارتاپی به نام Twango (فریاد تیم اگر کسی در حال خواندن آن بود) کارآموزی کرده بودم و اگرچه کارآموزی فقط یک ماه بود ، اما پیوندی که ما با هم داشتیم تا به امروز ادامه دارد و من هنوز توصیه نامه ای برای کارم در آنجا دریافت می کنم. آن را بخواهید یک نکته کوچک: وقتی از نظر فیزیکی با افراد ملاقات می کنید یا با شخصی در LinkedIn ارتباط برقرار می کنید ، به دنبال راه هایی نباشید که طرف مقابل می تواند به شما کمک کند. در عوض ، اطمینان حاصل کنید که در صورت هرگونه کمک مورد نیاز ، به شخص اطلاع دهید که شما آنجا هستید. سرانجام ، این ویدئو وقتی اولین بار آن را دیدم واقعاً دیدگاه من را تغییر داد و من درس هایی را که از آن آموختم ، همیشه به خودم یادآوری می کنم: > روی چیزهای کمتر تمرکز کنید شبکه بیشتر (بیشتر بدهید) بیشتر همدل باشید بیشتر کمک کنید شما هم فکر نکنید خیلی وظیفه خود را انجام دهید ، بقیه در جای خود قرار می گیرند

نتیجه گیری

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

سلام!

من فکر می کنم این امکان وجود دارد که مردم عادی انتخاب کنند که فوق العاده باشند - ایلان ماسک

> اگر چیزی هست که شما بخواهید با من در میان بگذارید یا به من بدهید نوعی بازخورد در مورد نوشتار/افکار من ، دوست دارم آن را از زبان شما بشنوم. با خیال راحت با من در توییتر ، LinkedIn یامن را در Github دنبال کنید برای اینکه از پست های من مطلع شوید ، من را در Medium دنبال کنید.

هوش مصنوعی قابل توضیح

هوش مصنوعی قابل توضیح

تفسیر مدل های یادگیری عمیق برای بینایی رایانه ای

تفسیر مدل های شبکه عصبی متحرک ساخته شده با TensorFlow

یک مدل یادگیری عمیق واقعاً چه چیزی را می بیند؟

مقدمه

هوش مصنوعی (AI) دیگر حوزه ای نیست که فقط به مقالات پژوهشی و دانشگاهی محدود شود. مشاغل و…

معرفی اصطلاحات علوم کامپیوتر

معرفی اصطلاحات علوم کامپیوتر

علوم کامپیوتر

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

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

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

رایانه دستگاهی است که محاسبات را بر اساس دستورالعمل انجام می دهد.

یک کامپیوتر از دو جزء تشکیل شده است:

سخت افزار نرم افزار

سخت افزار شامل اجزای فیزیکی کامپیوتر شما می باشد. اگر می توانید آن را لگد بزنید ، مشت کنید یا بلند کنید تا پرتاب شود ، سخت افزار است.

از طرف دیگر ، نرم افزار جزء فیزیکی نیست. نرم افزار شامل مجموعه ای از دستورالعمل ها برای سخت افزار است. این دستورالعمل ها معمولاً در فایل های رایانه شما ذخیره می شوند. دستورالعمل ها به زبان انگلیسی یا هیچ زبان گفتاری دیگری نیستند ؛ آنها در نوع خاصی از زبان هستند که زبان برنامه نویسی نامیده می شود. نرم افزار دستورالعمل هایی را ارائه می دهد که به سخت افزار می گوید چه کاری انجام دهد.

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

کد مترادف "دستورالعمل" موجود است یک فایل. همچنین مترادف با نرم افزار است. "کد" فقط مجموعه ای از کلمات و علائم نقطه گذاری در یک برنامه کامپیوتری است که به زبان برنامه نویسی نوشته شده است.

سخت افزار کامپیوتر

برای یادگیری برنامه نویسی ، ابتدا باید اصول اولیه سخت افزار کامپیوتر.

اجزای مختلف سخت افزار کامپیوتر هر کدام اهداف مختلفی را ارائه می دهند.

6 جزء اصلی وجود دارد که سخت افزار کامپیوتر را تشکیل می دهند:

پردازش مرکزی واحد (CPU) حافظه اصلی ذخیره ثانویه دستگاه های ورودی/خروجی (دستگاه های ورودی/خروجی) شبکه Bus

CPU اغلب "مغز" رایانه نامیده می شود. مسئول اجرای دستورالعمل ها ، مانند کد در برنامه است.

حافظه اصلی ، که به آن "حافظه دسترسی تصادفی" (RAM) نیز گفته می شود ، برای ذخیره موارد زیر استفاده می شود: برنامه ها و 2) داده هایی که کد در حین اجرای فعال برنامه اجرا می کند. وقتی برنامه ای مانند Microsoft Word را در رایانه خود باز می کنید ، کد اجرای Microsoft Word در حافظه اصلی بارگذاری می شود.

Secondary Storage برنامه ها و داده های شما را هنگامی که به طور فعال مورد استفاده قرار نمی گیرند ذخیره می کند.

دستگاه های ورودی/خروجی به افراد امکان می دهد با رایانه تعامل داشته باشند. دستگاه های ورودی/خروجی به افراد امکان می دهد داده ها را به رایانه (صفحه کلید ، ماوس ، میکروفون) یا داده های خروجی را به کاربر (مانیتور ، چاپگر ، بلندگوها) وارد کنند.

Bus گروهی از سیم ها است که اجزای سخت افزاری مختلف این سیم ها اجازه می دهند داده ها بین اجزای سخت افزاری مختلف منتقل شوند. به عنوان مثال ، هنگامی که برنامه ای را در رایانه خود اجرا می کنید ، گذرگاه داده (شامل کد واقعی برنامه) ذخیره شده در Storage Storage را به حافظه اصلی ارسال می کند.

یک شبکه به کامپیوتر شما امکان اتصال به کامپیوترهای دیگر در سراسر جهان شبکه ها به شما امکان می دهند داده ها را از رایانه های دیگر ارسال کنید و دریافت کنید ، مانند ایمیل به یا از دوستان خود.

اصطلاحات برنامه نویسی - مترادف

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

"کد" = "دستورالعمل رایانه" = "نرم افزار" = "برنامه" = "برنامه" = "برنامه" < /oli> "برنامه نویسی" = "برنامه نویسی" = "توسعه نرم افزار" = "مهندسی نرم افزار" "برنامه نویس" = "برنامه نویس" = "توسعه دهنده نرم افزار" = "توسعه دهنده وب" = "نرم افزار engineer ”

زبان ماشین در مقابل زبان برنامه نویسی

رایانه و انسان اطلاعات را در قالب های مختلف نشان داده و درک می کنند.

هر زمان که داده ها را ذخیره می کنید (مانند سند Word ) در رایانه شما ، رایانه همه کاراکترهایی را که تایپ می کنید در قالب خاصی ذخیره می کند ، به نام باینری ، همچنین به عنوان زبان ماشین معروف است. هر کاراکتر روی صفحه کلید شما دارای یک نمایش دوتایی منحصر به فرد است که کاراکتر را از بقیه متمایز می کند.

یک کاراکتر می تواند یک حرف ، رقم عددی ، علامت نقطه گذاری ، نماد ، فاصله ، بازگشت خط بعدی ، برگه و غیره باشد. هر شخصیت دارای یک کد عددی منحصر به فرد است که آن را از دیگران متمایز می کند. می توانید کد عددی (کد ASCII) برای هر کاراکتر را با جستجوی آن در یک جدول ASCII ، مانند اینجا پیدا کنید: https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

توجه داشته باشید که کاراکتر "A" به طور جداگانه از "a" متمایز شده است.

"A" دارای کد عددی است: 65

'a 'دارای کد عددی است: 97

این بدان معناست که هر زمان که کاراکتر' a 'در سند شما ظاهر می شود ، رایانه شما داده ها را برای آن در دوتایی معادل مقدار 97 ذخیره می کند.

توجه داشته باشید که 97 یک فرمت قابل خواندن برای انسان است که به آن قالب "دهدهی" گفته می شود. "اعشاری" نام قالب مقادیر عددی است که در مبنای 10 نشان داده شده است ، بدین معنی که از اعداد 0 تا 9 برای تشکیل مقادیر استفاده می شود.

قالب "دودویی" به این معناست که مقادیر عددی نشان داده می شوند در base-2 ، به این معنی که از رقم 0 و 1 برای تشکیل مقادیر استفاده می شود. این ممکن است کاملاً انتزاعی به نظر برسد ، اما می توانید با استفاده از فرمول های ریاضی یک عدد اعشاری را به دوتایی (و دودویی به اعشاری) تبدیل کنید. نیازی به انجام این کار نیست - این فقط برای اطلاع شما است. اگر واقعاً می خواهید نمای دوتایی یک عدد اعشاری را دریافت کنید ، می توانید از ماشین حساب استفاده کنید ، مانند: https://codebeautify.org/decimal-binary-converter

هنگام ذخیره سند Word خود و برنامه Word خود را ببندید ، کامپیوتر شما در واقع سند شما را در 0s و 1s ذخیره می کند. مردم رایانه ها را طوری طراحی کردند که بطور م byثر توسط انسان استفاده شود. از آنجا که زبان دوتایی وسیله ارتباطی کارآمد برای انسان ها نیست ، برای انسان منطقی نیست که اسناد ورد خود را در قالب دوتایی ببینند. به همین دلیل ، هنگامی که بعداً سند خود را دوباره باز می کنید ، از فرمت دوتایی ترجمه می شود و دوباره به انگلیسی (یا هر زبانی که استفاده می کردید) ترجمه می شود.

دوتایی ("زبان ماشین") به عنوان " زبان سطح پایین " این زبان "سطح پایین" در نظر گرفته می شود زیرا زبانی است که ماشین ها آن را می فهمند.

برنامه نویسان برنامه های خود را با یک زبان برنامه نویسی تایپ می کنند. زبان سطح بالا ”زیرا زبانی است که انسان می تواند بخواند و بفهمد.

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

برنامه نویسی که چندین زبان برنامه نویسی مختلف را می شناسد ، مناسب ترین زبان برنامه نویسی را برای استفاده در هر شرایط خاص انتخاب می کند. به عنوان مثال ، زبانهای برنامه نویسی وجود دارند که بیشتر برای توسعه وب مناسب هستند (ساخت وب سایت) و برخی دیگر که برای توسعه تلفن همراه مناسب هستند (ساخت برنامه های تلفن های هوشمند).

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

در اینجا یک تعریف ساده برای کلمه "پارادایم" آمده است.

پارادایم یک روش تفکر است یا راهی برای انجام کاری پارادایم یک طرز فکر است.

پارادایم برنامه نویسی راهی برای طبقه بندی زبان برنامه نویسی بر اساس سبک یا روش برنامه نویسی است.

در اینجا چند نوع رایج از پارادایم های برنامه نویسی آورده شده است:

پارادایم برنامه نویسی کاربردی پارادایم برنامه نویسی رویه ای پارادایم برنامه نویسی ضروری پارادایم برنامه نویسی شی گرا

به عنوان مثال ، جاوا و C نمونه هایی از زبان های برنامه نویسی هستند. زبان برنامه نویسی جاوا نمونه ای از زبان برنامه نویسی شی گرا است. زبان برنامه نویسی C نمونه ای از زبان برنامه نویسی رویه ای است.

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

نوشتن و ذخیره کد

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

وقتی می خواهید مقاله بنویسید ، از یک برنامه رایانه ای مانند Word یا هر ویرایشگر متن استفاده می کنید. شما به سادگی برنامه ویرایشگر متن را باز می کنید ، یک فایل ایجاد می کنید ، قسمتی از متن را تایپ می کنید و سند خود را در قالب فایل دلخواه مانند .docx یا .pdf ذخیره می کنید.

روند نوشتن کد مشابه است.

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

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

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

کامپایل و اجرای کد

فرض کنید شما یک برنامه به زبان برنامه نویسی C نوشته اید و برنامه خود را به عنوان myprogram.c ذخیره کرده اید. در مرحله بعد ، می خواهید کد خود را اجرا کنید تا ببینید برنامه شما همان کاری را که شما در نظر داشتید انجام می دهد.

قبل از اینکه بتوانید کد خود را اجرا کنید ("اجرا") ، فایل منبع شما باید از C (زبان سطح بالاتر) به یک فایل اجرایی باینری (زبان سطح پایین). یک فایل اجرایی (یا "قابل اجرا") فایلی است که حاوی ترجمه دوتایی کد شما است و در صورت راه اندازی ، برنامه شما را اجرا می کند ("اجرا"). این فرایند ترجمه Compilation نامیده می شود.

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

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

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

هنگامی که برنامه خود را با موفقیت کامپایل کردید ، می توانید اجرا کنید ("راه اندازی" یا "execute") قابل اجرا است و رایانه شما دستورالعمل برنامه شما را اجرا می کند.

توجه: بسیاری از این موضوعات در کتاب آموزشی مقدماتی زیر برای برنامه نویسی C پوشش داده شده است: The Art and Science of C ، توسط اریک رابرتز