هر دستگاه متصل به اینترنت دارای یک شناسه منحصر به فرد است. امروزه اکثر شبکه ها ، از جمله تمام رایانه های موجود در اینترنت ، از TCP/IP به عنوان استانداردی برای برقراری ارتباط در شبکه استفاده می کنند. در پروتکل TCP/IP ، این شناسه منحصر به فرد آدرس IP است. دو نوع آدرس IP عبارتند از: IPv4 و IPv6. آدرس IPv4 با چهار عدد که با نقطه از هم جدا شده اند بیان می شود. هر عدد نمایندگی اعشاری (پایه 10) برای یک عدد باینری هشت رقمی (پایه 2) است که به آن اکتت نیز گفته می شود.
IPv6 از 128 بیت دودویی برای ایجاد یک آدرس منحصر به فرد در شبکه استفاده می کند. یک آدرس IPv6 توسط هشت گروه از اعداد هگزادسیمال (پایه 16) با کولون ها جدا شده است. گروههایی از اعداد که حاوی تمام صفرها هستند غالباً برای صرفه جویی در فضا حذف می شوند و یک جداکننده بزرگ برای نشان دادن فاصله ایجاد می کند.
فضای IPv6 بسیار بزرگتر از فضای IPv4 به دلیل استفاده از هگزادسیمال و همچنین داشتن 8 گروه است. اکثر دستگاه ها از IPv4 استفاده می کنند. با این حال ، به دلیل ظهور دستگاه های IoT و تقاضای بیشتر برای آدرس های IP ، دستگاه های بیشتری IPv6 را می پذیرند.
رایانه شما چگونه آدرس IP خود را دریافت می کند؟ یک آدرس IP می تواند پویا یا استاتیک باشد.
آدرس استاتیکی است که خودتان با ویرایش تنظیمات شبکه رایانه خود پیکربندی می کنید. این نوع آدرس ها نادر است و اگر از آن بدون درک خوب TCP/IP استفاده کنید ، می تواند مشکلات شبکه ایجاد کند.
آدرس های پویا رایج ترین هستند. آنها توسط پروتکل پیکربندی میزبان پویا (DHCP) ، سرویسی که در شبکه اجرا می شود ، تعیین می شوند. DHCP معمولاً بر روی سخت افزار شبکه مانند روترها یا سرورهای اختصاصی DHCP اجرا می شود. آدرس های IP پویا با استفاده از سیستم لیزینگ صادر می شود ، به این معنی که آدرس IP فقط برای مدت محدود فعال است. اگر قرارداد اجاره منقضی شود ، کامپیوتر به طور خودکار درخواست اجاره نامه جدید می کند.
معمولاً فضای IPv4 به ما اجازه می دهد بین 0.0.0.0 تا 255.255.255.255 آدرس داشته باشیم. با این حال ، برخی از اعداد در آن محدوده برای اهداف خاصی در شبکه های TCP/IP محفوظ است. این رزروها توسط مرجع آدرس دهی TCP/IP ، مرجع شماره اختصاص داده اینترنت (IANA) به رسمیت شناخته می شود. چهار رزرو خاص شامل موارد زیر است:
رزرو آدرس IP دیگر برای کلاس های زیر شبکه است. زیر شبکه یک شبکه کوچکتر از رایانه ها است که از طریق روتر به شبکه بزرگتری متصل می شوند. زیر شبکه می تواند سیستم آدرس مخصوص به خود را داشته باشد ، بنابراین رایانه های موجود در یک زیر شبکه می توانند بدون ارسال داده به یکدیگر سریع ارتباط برقرار کنندشبکه بزرگتر یک روتر در یک شبکه TCP/IP ، از جمله اینترنت ، طوری پیکربندی شده است که یک یا چند زیر شبکه را تشخیص داده و ترافیک شبکه را به طور مناسب مسیریابی کند. آدرس های IP زیر برای زیر شبکه ها محفوظ است:
سه مورد اول (در کلاس های A ، B و C) بیشترین استفاده را در ایجاد زیر شبکه ها دارند. بعداً خواهیم دید که چگونه یک زیر شبکه از این آدرس ها استفاده می کند. IANA کاربردهای خاصی را برای آدرس های چند رسانه ای در سند RFC 5771 Engineering Engineering Task Force (IETF) بیان کرده است. با این حال ، از آنجا که این بلوک در سند 1989 خود RFC 1112 ذخیره شده است ، هدف یا برنامه ای برای آدرسهای کلاس E تعیین نکرده است. IPv6 ، اینترنت پر بود از این که آیا IANA باید کلاس E را برای استفاده عمومی منتشر کند. ) ، اطلاعات کاملی از اطلاعات آدرس IP خود را مشاهده خواهید کرد. من از قسمتی که به آن علاقه دارم ، اسکرین شات گرفته ام.
ipconfig جزئی خروجیآدرس IP در زیر شبکه دارای دو قسمت است: شبکه و گره. قسمت شبکه خود زیر شبکه را مشخص می کند. گره ، که میزبان نیز نامیده می شود ، یک قطعه جداگانه از تجهیزات رایانه ای است که به شبکه متصل است و نیاز به یک آدرس منحصر به فرد دارد. هر رایانه می داند چگونه دو قسمت آدرس IP را با استفاده از ماسک زیر شبکه جدا کند. یک ماسک زیر شبکه تا حدودی شبیه یک آدرس IP است ، اما در واقع فقط یک فیلتر است که تعیین می کند کدام قسمت از آدرس IP شبکه و گره را تعیین می کند.
در شرایط کنونی ، ماسک زیر شبکه 255.255.255.0 است که نشان می دهد 1 بایت برای میزبان اختصاص داده شده است. همچنین می تواند 255.255.0.0 (2 بای) و 255.0.0.0 (3 بایت) باشد.
اخیراً ، من بصورت تمام وقت روی پروژه هایم به عنوان تکمیل بخشی از برنامه Nanodegree مهندس خودران Udacity (گروه فوریه 2017) کار می کنم. چهارمین پروژه ، و مورد علاقه من ، این است که ما وظیفه داریم مرزهای خط جاده و شعاع انحنای آن را از طریق جریان ویدئوها مشخص کنیم. این ویدئوها از دوربینی که روی خودرو قرار داده شده گرفته شده است. در این مقاله ، من در مورد چیزهایی که در انجام این پروژه آموخته ام صحبت می کنم. "> اگر این مقاله به نوعی به شما کمک کرد ، در نظر داشته باشید که برای من قهوه بخرید :)
به طور خلاصه ، I ' مراحل زیر را برای انجام این کار انجام داده اید:
به دلیل خصوصیات فیزیکی یک لنز دوربین ، تصویر دو بعدی گرفته شده کامل نیست. اعوجاج تصویر وجود دارد که اندازه و شکل ظاهری یک شی را تغییر می دهد. مهمتر اینکه باعث می شود برخی اجسام بیشتر یا دورتر از آنچه که هستند به نظر برسند. خوشبختانه ما می توانیم این تحریف ها را اندازه گیری کرده و آنها را اصلاح کنیم. ما می توانیم همه اطلاعات اعوجاج مورد نیاز خود را با داشتن تصاویری از اشیاء که می دانیم نقاط تئوریک کجا باید باشند استخراج کنیم. معمولا از صفحه های شطرنج روی سطح صاف استفاده می شود زیرا صفحات شطرنج دارای الگوهای منظم با کنتراست بالا هستند. به راحتی می توان تصور کرد که صفحه شطرنج بدون تحریف چگونه است.
< img src = "https://cdn-images-1.medium.com/max/426/1*sq1BRcJGSvm3fdxnbS08yw.png">پس از تصحیح تصویر ، ما تصویری بدون تحریف از یک جاده از دیدگاه وسیله نقلیه خواهیم داشت. ما می توانیم این تصویر را از دید پرنده ای در آسمان به تصویری از جاده تبدیل کنیم. برای استخراج همه اطلاعاتی که برای چرخاندن این تصویر از نمای خودرو به نمای آسمان نیاز داریم ، فقط به مختصات مکان نیاز داریم. به طور خاص ، تنها چیزی که ما نیاز داریم یک تصویر است که از دیدگاه ورودی (نمای خودرو) و مکانهای مربوط به چشم انداز مورد نظر (نمای آسمان) را در اختیار داریم. من به این مختصات مکان می گویم نقاط مبدا و نقاط مقصد. تصویری آسان که می توانیم به آن دقت کنیم خطوط موازی مستقیم هستند. نکته جالب این است که ما همچنین اطلاعات لازم برای چرخاندن از نمای آسمان به نمای خودرو را داریم.
برای برآورد خمیدگی جاده ، ما به تمام اطلاعات از تمام پیکسل های یک تصویر جاده نیاز نداریم. خطوط راه جاده از جریان ویدئو زرد و سفید است ، بنابراین ما می توانیم همه چیز را به جز رنگ زرد و سفید تصویر پنهان کنیم. به عنوان یک احتیاط اضافی ، زیرا ممکن است برخی از خطوط زرد و خطوط غیر خطی را مشاهده کنیم ، یا ممکن است خطوطی وجود داشته باشد که به طور مشخص زرد و سفید نیستند ، ما از آنچه اپراتور Sobel نامیده می شود استفاده می کنیم. یک اپراتور Sobel اساساً میزان تغییر ارزش (و جهت آن) را بین دو مکان تصویر اندازه گیری می کند. این همچنین از نظر فنی مشتق یا گرادیان نامیده می شود. در مورد این بعداً بیشتر
من رنگها را نشان دادمبا فرمت HSL مقدار Hue نشان دهنده تعداد رنگ درک شده بر اساس ترکیب قرمز ، سبز و آبی است. مقدار اشباع میزان میزان رنگ آمیزی یا کسل کننده بودن آن است. سبکی این است که رنگ چقدر به سفید نزدیکتر است. خطوط زرد به خوبی با ترکیبی از سبکی و اشباع بالای مقدار مشخص می شوند. خطوط سفید بدون در نظر گرفتن میزان اشباع و رنگ بسیار روشن می شوند.
من عملگر Sobel را به مقدار روشنایی تصویر اعمال کردم. ما از ترکیبی از آستانه شیب مولفه افقی ، بزرگی شیب و جهت شیب استفاده کردیم. من می خواهم مکان های گرادیان را که تغییر اندازه کافی چندانی ندارند ، کنار بگذارم. آستانه اندازه گرادیان و همچنین x جزء شیب کار خوبی را در این زمینه انجام می دهد. من فقط شیب های یک جهت خاص را در نظر می گیرم. کمی بالاتر از 0 درجه (یا حدود 0.7 در رادیان) ، و زیر 90 درجه (یا حدود 1.4 در رادیان). صفر دلالت بر خطوط افقی و نود خطوط عمودی دارد و خطوط ما (در نمای خودرو) بین آنها قرار دارد.
افزودن هر دو نتیجه رنگ و آستانه گرادیان ، خطوط خط را به خوبی فیلتر می کند. مقادیر اضافی را از لبه های تصویر به دلیل سایه ها دریافت می کنیم ، بنابراین آنها را بعداً مخفی کنید.
ما می توانیم یک منحنی برای هر خط خط با یک تابع چند جمله ای درجه دوم x = y² + By + C قرار دهیم. ما باید ضرایب مربوط به هر خط [A ، B ، C] را پیدا کنیم. ما می توانیم از تابع داخلی polyfit () استفاده کنیم تنها کاری که باید انجام دهیم تغذیه نقاط آن است و ضرایب چند جمله ای از یک درجه مشخص از منحنی را که متناسب با نقاط تغذیه شده است ، بیرون می آورد.
برای تصمیم گیری که کدام پیکسل ها بخشی از یک خط هستند ، بیایید این الگوریتم اساسی را پیاده سازی کنیم. من می توانم هیستوگرام همه ستون های تصویر پایینی را بگیرم و گراف با دو قله شبیه به نمودار بالا دریافت می کنم. قله های برجسته هیستوگرام شاخص های خوبی برای موقعیت x پایه خط هستند. بنابراین من از آنها به عنوان نقطه شروع استفاده می کنم.
< p> من می توانم یک "تکنیک پنجره کشویی" را انجام دهم - یکی از پنجره ها روی پنجره دیگر که از خطوط بالای قاب پیروی می کند. پیکسل های داخل یک "پنجره" به عنوان "پیکسل های مورد علاقه" علامت گذاری می شوند و به لیست نقاط در خط اضافه می شوند. ما مقادیر x این پیکسل ها را متوسط می کنیم تا به خوبی نقطه پایه پنجره بعدی بالا را نشان دهیم. ما می توانیم این کار را بارها و بارها تکرار کنیم تا به بالای خط برسیم. به این ترتیب ما تمام پیکسل هایی را که به آن علاقه داریم جمع کرده ایم و به تابع polyfit () که ضرایب چند جمله ای درجه 2 را مشخص می کند ، تغذیه می کنیم. ما می توانیم شعاع انحنای هر خط را محاسبه کنیموقتی معادلات منحنی را می دانیم.برای تخمین موقعیت وسیله نقلیه ، می توانم عرض خط را بر حسب پیکسل در پایین تصویر (نزدیک ترین به دوربین) محاسبه کنم. بگویید عرض آن 1000 پیکسل بود. این بدان معناست که هر پیکسل در مقیاس واقعی با 3.7 متر مطابقت دارد. سپس می توانم تعداد پیکسل هایی که مرکز تصویر از مرکز خط خارج شده است را محاسبه کرده و افست را در متر در نظر بگیرم.
خوب است! ما در واقع اطلاعات زیادی در مورد جاده با توجه به یک تصویر واحد از جاده جمع آوری کرده ایم. همانطور که قبلاً در بخش Perspective Transformation گفتم ، ما می توانیم از همان اطلاعات برای پیچاندن تصویر از نمای آسمان به نمای خودرو استفاده کنیم.
چون ما در حال حاضر پارامترهای منحنی خط خط را داریم نقاط منحنی ها و تابع fillPoly () برای کشیدن ناحیه خط روی تصویر. اکنون می توانیم اندازه گیری خود را در مسیر تصویر نشان دهیم. ما این را به زیبایی در یک عملکرد کوچک و شیک به نامbirdsEye.project ()
< /img>بنابراین به طور خلاصه ، این تقریباً تمام مراحلی است که باید برای تشخیص خطوط خط انجام دهیم. ما همچنین می توانیم شعاع خمیدگی را تخمین زده و موقعیت خودرو را با توجه به هر یک از این خطوط خط تخمین بزنیم. ابتدا ، اعوجاج دوربین را تصحیح کردیم ، همه چیز را به جز پیکسل های خط خط پنهان کردیم. ما تصویر را به "نمای آسمان" تغییر دادیم و از این پیکسل های خط استفاده کردیم تا با استفاده از تکنیک "sliding-window" و تابع polyfit () بهترین منحنی را پیدا کنیم. ما همچنین می توانیم خطوط خمیده را برای نمای فوق العاده به تصویر "نمای خودرو" بازگردانیم :). منحنی که منطقی است من فکر می کنم هنوز باید تغییراتی ایجاد کنم تا شعاع تخمین خمیدگی بهتری حاصل شود. من همچنین فکر می کنم اگر بیشتر فکر کنم می توانم الگوریتم پنجره کشویی را با خواندن تمیزتری انجام دهم تا پیکسل های مورد علاقه هر خط را بدست آورم. به نظر می رسد کلاس Curves مسئول بسیاری از موارد است ، شاید بتوانم این را به چند کلاس کوچکتر تقسیم کنم. نکته دیگر این است که من فکر می کنم عملکرد پروژه () در کلاس BirdsEye من نامناسب است ، شاید من باید به جای درخواست ضرایب اتصالات منحنی ، خطوط خط خارج را محاسبه کنم ، تابع باید برای نمایش تصویر درخواست کند در عوض.
یک س veryال بسیار رایج که من دریافت می کنم این است ، "چگونه می توان با یادگیری عمیق شروع کرد؟". در حال حاضر ، در حال حاضر پاسخ های بسیار خوبی در مورد این موضوع مانند این و این وجود دارد (آنها منابع زیادی را ذکر کرده اند و شما قطعاً باید آنها را بررسی کنید). این فقط تلاشی است برای پاسخ به این س basedال بر اساس تجربه من ، ارائه یک مسیر دقیق تر و دقیق تر و سفری از طریق چالش های مختلفی که احساس کردم. این پست با آشنایی با مبانی علوم کامپیوتر و ریاضی شروع می شود ، از طریق شروع به یادگیری ماشین و یادگیری عمیق ، به تخصص و مشاوره در پروژه ، ساختن مشخصات خود ، شبکه و اهمیت و در نهایت با نکاتی که من به آنها می دادم پایان می یابد. خود جوانتر من.
اکنون بر هیچ کس پوشیده نیست که MOOC (دوره های آنلاین گسترده گسترده) مانند Coursera ، Udacity ، NPTEL ، Stanford Online & MIT Opencourseware چشم انداز آموزش را تغییر داده و دوره های مدارس فوق لیسانس را در دسترس مخاطبان گسترده تری قرار می دهد. آنها منبع اصلی یادگیری من برای موضوعات مختلف بوده اند و روش مبتنی بر تکلیف درک واضح تری از مفاهیم زیرین را تضمین می کند. من لیست دوره هایی را که توصیه می کنم به کسی که قبلاً چیزی به او آموزش نداده اند توصیه می کنم ، بنابراین با خیال راحت از دوره هایی که قبلاً با آنها آشنایی دارید صرف نظر کنید.
پس از اتمام مراحل اولیه ، اکنون می توانید در دوره های خاص یادگیری ماشین و /یا یادگیری عمیق شرکت کنید. یادگیری عمیق در حال حاضر در تعداد زیادی از حوزه ها از بینایی رایانه و پردازش زبان طبیعی گرفته تا تولید هنر و اتومبیل های خودران استفاده می شود. من ابتدا دوره هایی را که به صورت آنلاین به صورت رایگان در دسترس هستند لیست می کنم و سپس پیوندهایی را به چند برنامه گران قیمت اضافه می کنم ، اما به دلیل نوع پشتیبانی که دریافت می کنید ، ارزش آن را نیز دارد.
به من اعتماد کنید وقتی می گویم من در بسیاری از موارد دست خود را امتحان کرده ام ( بینایی رایانه ای ، پردازش زبان طبیعی ، تصویربرداری پزشکی ، ژنومیک) همانطور که من مجذوب هر چیزی و هر چیزی که این زمینه ارائه می دهد ، شدم. اما بزرگترین درسی که آموخته ام اهمیت تمرکز بر روی یک (دو ، حداکثر) چیز خاص است. من قبلاً به این موضوع اعتقاد نداشتم ، اما پس از انجام چندین کار ، برایم واضح است که اگر می خواهیم واقعاً به چیزی برسیم ، باید در یک کار صفر عمل کنیم و بهترین کار را انجام دهیم. قسمت سخت این است که نگذارید سر و صدا حواس شما را پرت کند. من این زمان را برای افزودن یک نقل قول که خلاصه ای از آنچه می خواهم بگویم ، اختصاص می دهم:
در حال حاضر ، بهترین راه برای یادگیری چیزی ساختن چیزی است. نه تنها به شما در درک مفاهیم کمک می کند ، بلکه به رزومه شما نیز ارزش می بخشد (بیشتر در مورد ایجاد نمایه در بخش بعدی). منابع مختلفی برای دریافت پروژه ها وجود دارد و مطمئن شوید که در هر زمان یکی (حداکثر دو مورد) را انتخاب می کنید.
این نکته باید بسیار تأکید شود. مشخصات شما مهم است برای دانش آموزان ، درست است که در موقعیت های شما چندان اهمیتی نخواهد داشت ، اما پس از فارغ التحصیلی و تمایل به تغییر شرکت چه می شود؟ این تصور اشتباه وجود دارد که ساختن مشخصات شما فقط برای یافتن شغل است. خیلی بیشتر است شما می توانید خود را در اینترنت ، کل سابقه خود و شخصی که به عنوان یک شخص هستید قرار دهید. نمایه شما یک لایه اصالت به حضور آنلاین شما می افزاید و دسترسی افراد با شما را بسیار آسان می کند. 3 مورد وجود دارد که شما باید از آنها مراقبت کنید - LinkedIn ، نمایه های Github و وب سایت شما. مال منم همینطور. یک وب سایت شخصی از یک الگوی کلی پیروی می کند و شما می توانید برای سرفصل ها و محتوایی که باید در هر عنوان قرار داده شود به این قسمت مراجعه کنید. شبکه اجتماعی است ، اما یک شبکه اجتماعی حرفه ای است. شما این فرصت را پیدا می کنید که با افراد همفکر خود در آنجا ارتباط برقرار کنید ، ایده های خود را به اشتراک بگذارید ، برای مشاغل درخواست دهید و اساساً ، ارتباطات خود را تقویت کنید. افرادی که بیشترین فعالیت را در LinkedIn دارند دائماً محتوای ارزشمندی ایجاد می کنند و هر دقیقه صرف شده در LinkedIn مفید است (تا حدی). در هر درگاه درخواست کار ، از شما خواسته می شود که پیوند نمایه LinkedIn خود را ارائه دهید. یک USP بزرگ LinkedIn قابلیت جستجوی عالی است. شما به معنای واقعی کلمه می توانید تمام فارغ التحصیلان خود را در آنجا جستجو کنید و حتی افرادی را که در یک شرکت /موسسه کار می کنند بررسی کنید. نمایه LinkedIn شما به شما این امکان را می دهد که کل سابقه خود را مشخص کنید و آنها اخیراً شروع به مطابقت شما با مربیان احتمالی کرده اند. برای اطلاع از نکات مربوط به بهینه سازی پروفایل LinkedIn خود به اینجا مراجعه کنید.
اکثر مردم از ساختن پروفایل Github خود چشم پوشی می کنند و دلیل اصلی آن نیز عدم آگاهی است. بر اساس توصیه من برای مشارکت منبع باز ، Github به شما این فرصت را می دهد تا کار خود را نه تنها در قالب کلمات ، بلکه با کد واقعی به نمایش بگذارید. یک استخدام کننده بالقوه می تواند به جستجوی شما بپردازدمشخصات و نحوه کدگذاری خود ، تعداد دفعات کدگذاری و غیره را مشخص کنید. یک نمودار کوچک همراه با نمایه شما وجود دارد که مشارکت های شما در سال گذشته را نشان می دهد:
در حال حاضر ، مجبور نیستید شخص دیگری را که می توانید کدگذاری کنید توجیه کنید. آنها به معنای واقعی کلمه می توانند آن را ببینند. همچنین ، اغلب تصور می کنیم که دیگران همان دانش ما را دارند و می توانند به تنهایی بفهمند که چگونه کد ما کار کند. شامل مستندات مناسب برای همه کارهای شما برای ایده منبع باز مهم است. بنابراین ، اگر وقت خود را صرف برنامه نویسی می کنید ، بگذارید نمایه شما نیز این را برای شما بیان کند.
در نهایت ، موضوع شبکه بسیار کمتر از آنچه که باید صحبت می شود. باز هم ، این می تواند یک پست جداگانه داشته باشد ، اما من سعی می کنم در اینجا خلاصه کنم. شبکه به دنبال استخدام احتمالی بعدی شما نیست. این در حال ایجاد روابط واقعی با افرادی است که با آنها ارتباط برقرار می کنید. امروزه بسیاری از ما بر تفکر "چه چیزی برای من خوب است" متمرکز شده ایم و به مشخصات یک شخص بیشتر از شخص او اهمیت می دهیم. همیشه مراقب باشید تا با هر کسی و هر کسی که ملاقات می کنید (حتی به صورت مجازی) روابط ثمربخش داشته باشید. آنها نه تنها می توانند برای شما ضمانت کنند که واقعاً به کمک آنها نیاز دارید ، بلکه این در طبیعت انسان است که احساس خوشبختی و رضایت داشته باشید تا واقعاً با همسالان خود ارتباط عمیقی برقرار کنید. من در سال 2015 در استارتاپی به نام Twango (فریاد تیم اگر کسی در حال خواندن آن بود) کارآموزی کرده بودم و اگرچه کارآموزی فقط یک ماه بود ، اما پیوندی که ما با هم داشتیم تا به امروز ادامه دارد و من هنوز توصیه نامه ای برای کارم در آنجا دریافت می کنم. آن را بخواهید یک نکته کوچک: وقتی از نظر فیزیکی با افراد ملاقات می کنید یا با شخصی در LinkedIn ارتباط برقرار می کنید ، به دنبال راه هایی نباشید که طرف مقابل می تواند به شما کمک کند. در عوض ، اطمینان حاصل کنید که در صورت هرگونه کمک مورد نیاز ، به شخص اطلاع دهید که شما آنجا هستید. سرانجام ، این ویدئو وقتی اولین بار آن را دیدم واقعاً دیدگاه من را تغییر داد و من درس هایی را که از آن آموختم ، همیشه به خودم یادآوری می کنم: > روی چیزهای کمتر تمرکز کنید
من سعی کرده ام تمام منابعی را که استفاده کرده ام (و برخی دیگر باید) برای یادگیری من ، همراه با برخی از درسهای اصلی که از چهار سال تحصیل در مقطع کارشناسی به دست آمده است. می دانم که این مطلب طولانی خوانده شد و اگر تا اینجا پیش رفته اید ، می خواهم از شما برای نظراتم تشکر کنم و صمیمانه امیدوارم که این بتواند کمکی برای شما باشد.
سلام!
هوش مصنوعی (AI) دیگر حوزه ای نیست که فقط به مقالات پژوهشی و دانشگاهی محدود شود. مشاغل و…
یک تعریف پیچیده: علم کامپیوتر مطالعه فناوری اطلاعات ، فرایندها و تعاملات آنها با جهان است.
یک تعریف ساده: علوم کامپیوتر مطالعه استفاده از رایانه برای حل مشکلات است.
رایانه دستگاهی است که محاسبات را بر اساس دستورالعمل انجام می دهد.
یک کامپیوتر از دو جزء تشکیل شده است:
سخت افزار شامل اجزای فیزیکی کامپیوتر شما می باشد. اگر می توانید آن را لگد بزنید ، مشت کنید یا بلند کنید تا پرتاب شود ، سخت افزار است.
از طرف دیگر ، نرم افزار جزء فیزیکی نیست. نرم افزار شامل مجموعه ای از دستورالعمل ها برای سخت افزار است. این دستورالعمل ها معمولاً در فایل های رایانه شما ذخیره می شوند. دستورالعمل ها به زبان انگلیسی یا هیچ زبان گفتاری دیگری نیستند ؛ آنها در نوع خاصی از زبان هستند که زبان برنامه نویسی نامیده می شود. نرم افزار دستورالعمل هایی را ارائه می دهد که به سخت افزار می گوید چه کاری انجام دهد.
یک برنامه مترادف یک قطعه نرم افزار یا یک برنامه کاربردی است. در اصل ، این یک فایل ذخیره شده در رایانه شما است که به زبان برنامه نویسی نوشته شده است و حاوی دستورالعمل هایی است که به رایانه می گوید هنگام راه اندازی برنامه چه کاری باید انجام دهد.
کد مترادف "دستورالعمل" موجود است یک فایل. همچنین مترادف با نرم افزار است. "کد" فقط مجموعه ای از کلمات و علائم نقطه گذاری در یک برنامه کامپیوتری است که به زبان برنامه نویسی نوشته شده است.
برای یادگیری برنامه نویسی ، ابتدا باید اصول اولیه سخت افزار کامپیوتر.
اجزای مختلف سخت افزار کامپیوتر هر کدام اهداف مختلفی را ارائه می دهند.
6 جزء اصلی وجود دارد که سخت افزار کامپیوتر را تشکیل می دهند:
CPU اغلب "مغز" رایانه نامیده می شود. مسئول اجرای دستورالعمل ها ، مانند کد در برنامه است.
حافظه اصلی ، که به آن "حافظه دسترسی تصادفی" (RAM) نیز گفته می شود ، برای ذخیره موارد زیر استفاده می شود: برنامه ها و 2) داده هایی که کد در حین اجرای فعال برنامه اجرا می کند. وقتی برنامه ای مانند Microsoft Word را در رایانه خود باز می کنید ، کد اجرای Microsoft Word در حافظه اصلی بارگذاری می شود.
Secondary Storage برنامه ها و داده های شما را هنگامی که به طور فعال مورد استفاده قرار نمی گیرند ذخیره می کند.
دستگاه های ورودی/خروجی به افراد امکان می دهد با رایانه تعامل داشته باشند. دستگاه های ورودی/خروجی به افراد امکان می دهد داده ها را به رایانه (صفحه کلید ، ماوس ، میکروفون) یا داده های خروجی را به کاربر (مانیتور ، چاپگر ، بلندگوها) وارد کنند.
Bus گروهی از سیم ها است که اجزای سخت افزاری مختلف این سیم ها اجازه می دهند داده ها بین اجزای سخت افزاری مختلف منتقل شوند. به عنوان مثال ، هنگامی که برنامه ای را در رایانه خود اجرا می کنید ، گذرگاه داده (شامل کد واقعی برنامه) ذخیره شده در Storage Storage را به حافظه اصلی ارسال می کند.
یک شبکه به کامپیوتر شما امکان اتصال به کامپیوترهای دیگر در سراسر جهان شبکه ها به شما امکان می دهند داده ها را از رایانه های دیگر ارسال کنید و دریافت کنید ، مانند ایمیل به یا از دوستان خود.
به طور کلی ، می توانید به هریک از سه گروه زیر از کلمات به عنوان مترادف. در حالی که هر کدام می توانند چیزی را نشان دهند کهبرای درک مقدماتی خود ، می توانید موارد زیر را معادل تصور کنید:
رایانه و انسان اطلاعات را در قالب های مختلف نشان داده و درک می کنند.
هر زمان که داده ها را ذخیره می کنید (مانند سند 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 ، توسط اریک رابرتز