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


سلام حالتون چطوره؟

اینجا اینترن پلاس پلاسه ، جایی برای کسایی که میخوان برنامه نویس شن


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

شما میتونید این قسمت اینجا رو به صورت پادکست هم گوش بدید

این قسمت : سرکی به دنیای برنامه نویسی

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

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

خب بریم سراغ دسته بندی ها:


هوش مصنوعی (Artificial Intelligence)

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

حالا به چه موجود یا چیزی میگیم هوشمند؟

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

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

کورزویل ، دانشمندی که در زمینه هوش مصنوعی جزو اولین ها بود یه تعریف ساده و قابل فهم بیان کرده :

"هوش مصنوعی هنر ایجاد ماشین‌هایی که وظایفی را انجام می‌دهند که انجام آن‌ها توسط انسان‌ها نیاز به هوش دارد."

ولی فقط به اینجا منتهی نمیشه و خودش به قسمت های زیادی تقسیم میشه:

  1. یادگیری ماشین (Machine Learning)
  2. شبکه عصبی(Neural Networks)
  3. بینایی ماشین(Machine Vision)
  4. سیستم های خبره(Expert System)
  5. پردازش زبان طبیعی(Normal Language Processing)
  6. الگوریتم ژنتیک(Genetic Algorithm)
  7. روباتیک

حالا بیایم بررسی کنیم ببینیم با چه زبان هایی میتونیم وارد این رشته بشیم؟

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

  1. Python
  2. LISP
  3. Prolog
  4. Java
  5. C++

که اگر شما با دنیای برنامه نویسی خیلی آشنا نیستید و هنوز اول کارید ، پیشنهاد من به شما شروع با زبان پایتونه ، چرا؟ چون یادگیریش به شدت آسونه و سینتکسش بسیار شبیه زبان انگلیسیه ؛ (یه نصیحتم از من داشته باشید ؛ اگه زبانتون خوبه که 1-0 جلویید! اما اگه زیادم چنگی به دل نمیزنه ، برای شروع هیچوقت دیر نیست :} )


اپلیکیشن های موبایل (Mobile Applications)

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

برنامه نویسی برای اپ های موبایل 3 تا دسته داره:

  1. Android
  2. ios
  3. Cross platform

که 2 تای اولی سیستم عامل هاییه که خیلی رواج داره ،اما سومی با یه بار کد نوشتن میتونیم برای 2 تای قبلی خروجی بگیریم و نیازی نیست جدا جدا بنویسیم.

حالا برای توسعه دادن یا اصطلاحاً develop کردن اینا نیاز به یادگیری چه زبان هایی هست؟

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


اندروید:

اولین و محبوب ترین گزینه زبان Java هست. جاوا زبان رسمی برنامه نویسی اندرویده و خب این یعنی گوگل بیشترین پشتیبانی رو از این زبان داره.

گزینه بعدی زبان برنامه نویسی Kotlin هست.

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

البته خود گوگل ابزاری رو محیا کرده که بتونیم کارایی که با جاوا به خاطر سطح بالا بودنش نمیشه کرد رو c++ , c که سطح پایین تر هستن بکنیم. (که بهش میگن ndk)


ای او اس:

چندتاشو نام میبریم:

زبان objective-c ، اولین زبان اصلی بود که اپل برای توسعه ios معرفی کرد. 2 تا از ویژگی هایی که این زبان داره اینه که:سازگار با زبان های c و cpp ، یادگیری و اجرا و توسعش آسونه.

30 سال بعد زبان برنامه نویسی swift ارائه شد که بسیار زبان قدرتمندیه و نسبت به زبان objective-c از امنیت ، سرعت رشد ، توسعه بالاتربرخورداره و خطای کمتری داره.

بریم سراغ ویژگی های این زبان:

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


کراس پلتفرم:

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

مثلا ری اکت نیتیو که با زبون جاوا اسکریپته

یا کیوت که با زبان c++ هه

یا فلاتر که با زبان دارت هه

یا مثلا فریم ورک زامارین که با زبان سی شارپه

یا خیلیای دیگه

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


بازی سازی (Game)

مارکت بازی سازی جزو شغل های پردرآمد محسوب میشه! حالا چجوری میتونیم وارد این مارکت بشیم؟

چندتا پیشنهاد برای این کار وجود داره.

Cpp:

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

C#:

سی شارپ هم یکی از گزینه های پرقدرته ، حالا چرا؟ چون شما میتونید از موتور های بازی سازی استفاده کنید. مثل چی؟ Unity 3D و زامارین.

یه نکته ی دیگه ای که راجع به سی شارپ وجود داره ، همونطور که گفته شد شما میتونید برای هر پلتفرمی مثل xbox , ps ,win , android , ios بازی بسازید و ویژگی بعدیش اینه که یادگیریش از سی پلاس راحت تره و برای مبتدیا گزینه بهتریه.

Java:

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

شما میتونید برای این کار از فریمورک های LibGDX برای بازی های 2 بعدی و JMonkeyEngine برای بازی های 3 بعدی استفاده کنید و خب خوبیش اینه که این فریمورک ها به شما کتابخونه های زیادی ارائه میدن که کد زدن رو براتون سریع تر و ساده تر میکنه.


جاوا اسکریپت یه زبان همه کارست شما از جاوا اسکریپت می تونید برای خیلی کارها استفاده کنید اما ظاهرا ساخت و توسعه بازی از لیست کارهایی که میتونه این زبان انجام بده حذف شده ولی میشه از CoffeeScript و TypeScript برای بازی سازی استفاده کرد . همچنین با ادغام جاوا اسکریپت و HTML5 میتونید بازی های تحت وب یا تحت مرورگر خوبی ساخت. در ضمن unity موتور های بازی داره که از جاوا اسکریپت هم پشتیبانی میکنه.


نگاهی به میکروکنترلرها (Microcontroller)

میکروکنترلر یه کامپیوتره بسیار کوچیکه که روی یه تراشه یا همون IC قرار گرفته.به زبان ساده تر یک تراشه است که شامل قسمت های مختلفی مثل (CPU)، رم (Ram)، چند تا پین ورودی و خروجی و یه مقداری حافظه قابل برنامه ریزی میشه.

برنامه نویس ها می تونن برنامه مورد نظر خودشون رو روی حافظه قابل برنامه ریزی میکروکنترلر قراربدن.

اساس برنامه نویسی این کامپیوتر های کوچیک خلاصه میشه تو این که

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

کلا هم به 3 دسته هم تقسیم میشن : avr , pic , arm.

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

این میکرو ها برای ساخت امبدد سیستم ها (Embedded Systems) به کار گرفته می شن.

حالا شاید بپرسید embedded system چیه :}

امبدد سیستم (Embedded System) در واقع یک مفهوم هستش کامپیوتر کوچیکی که برای یک عملکرد خاصی طراحی شده و به منظور کنترل یک دستگاه مکانیکی یا الکتریکی بزرگتر درون اون دستگاه گزاشتن. به امبدد سیستم ها در زبان فارسی "سامانه نهفته" , "سامانه توکار" یا "سیستم های تعبیه شده" هم گفته می شه اما هیچ کدوم حق مطلب رو عدا نمیکنه
شما همون بگین embedded system

حالا با چه زبون هایی میتونیم برنامه ریزیشون کنیم؟

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


سرزمین وب ( Web Applications):

خب رسیدیم به یکی از معروف ترین زمینه های برنامه نویسی .

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

امروزه ما تقریبا هر گونه نرم افزاری رو میتونیم تحت وب پیاده سازی کنیم.
تحت وب ؟ تحت وب یعنی اینکه ما اون نرم افزار رو به صورت یک وب سایت پیاده سازی کنیم تا از دو تا ویژگی خیلی خوب اون ها بهره مند بشیم
اول اینکه : برای استفاده نیاز به نصب کردن نیست !چون خود مرورگر اون رو اجرا میکنه (خب یه وبسایته دیگه ! )
دوم اینکه : شما میتونید در هر کجا که باشید و با هر سیستمی از اون استفاده کنید!

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

خب حالا این وب سایت ها چجوری ساخته میشوند ؟
در واقع هر وبسایتی از 2 قسمت اصلی تشکیل میشه : FrontEnd و BackEnd .

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

البته کسایی هستن که هر دوی اینها رو بلدن که به آونها برنامه نویس های full stack گفته میشه !

بیاید از FrontEnd شروع کنیم :
FrontEnd در واقع همون ظاهر سایت هستش که همه میبینند : دکمه ها و عکس ها و حتی متن هایی که میبینید جزیی از فرانت اند حساب میشوند.

اساس ساخت فرانت اند 3 زبان است : HTML , css , javascript
از بین این 3 زبان فقط javascript یک زبان برنامه نویسی است
HTML و css زبان های برنامه نویسی نیستند بلکه زبان نشانه گذاری اند .
صبر کنید تا با یک مثال خوب نقش هر کدام از این زبان ها در ساخت فرانت رو بهتون بگم :

اگه فرانت اند رو به یک بدن تشبیه کنیم اینجوری میتونیم بگیم که نقش استخوان ها رو HTML , نقش عضلات رو javascript و نقش همه ی اعضای ظاهری مثل پوست و مو رنگ اینها و … را هم css بازی میکند.

در کنار همه اینها یک سری کتابخانه و فریم ورک وجود دارد که کار ما رو در کد نویسی بسیار آسون تر و سریع تر میکنه .

که از معروف ترین هاش : ReactJS , angular , vueJS هستن.
تقریبا همه ی سایت های بزرگ دنیا با کمک یکی از این 3 تا نوشته شدن.

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

فکر کنم به اندازه کافی با قسمت فرانت اند آشنا شدید حالا وقت اون رسیده که یک سری به قسمت BackEnd بزنیم

BackEnd قسمتی از سایت هست که اصلا برای کاربران دیدنی نیست و همه ی اطلاعات اصلی و مهم در اونجا وجود داره .
با زبون های برنامه نویسی مختلفی مثل php , C#, java ,python , javascriptشما میتونید بک اند سایتتون رو بنویسید یا حتی ترکیبی از چند زبون البته این برای سایت های خیلی بزرگ استفاده میشه
مثل فرانت اند , بک اند هم یکسری فریم ورک و کتابخونه داره که کار شما رو توی کد نویسی خیلی راحت میکنه و این بستگی به زبون برنامه نویسی شما داره که از کدوم اونها استفاده کنید
مثلا برای php یک فریمورک خیلی معروف laravel هستش یا برای python فریمورک Django .

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

ما بالاتر زبان جاوااسکریپت رو به عنوانه یک زبان بک اند نام بردیم ! مگه این واسه فرانت اند نبود ؟ چرا
اما به کمک nodejs ما میتونیم با زبان javascript هم بک اند بنویسیم.

داستان پیدایش nodejs جالبه
اگه قسمت قبلی ما رو گوش دادید پس حتما با زبان های مفصری آشنا هستید.

و احتمالا تا الان متوجه شدید که اگه مرورگر کد های جاوااسکریپت ما رو اجرا میکنه , قطعا یه مفصر جاوااسکریپت داره

یه سری ازبرنامه نویس های عزیز اومدن با دستکاری کردن مفصر جاوا اسکریپتی که تو مرورگر کرومیم بود nodejs رو خلق و در سال 2009 به صورت رسمی به دنیا معرفی کردن. که خیلی خیلی ممنونیم ازشون :)

ما قبل تر گفتیم که backend و frontend جدا از هم پیاده سازی میشن ام پس چطوری به هم وصل میشن ؟

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

یادتون باشه که

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


اپلیکیشن های دسکتاپ

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

اما جالبه که بدونید بجز windows و mac os که سیستم عامل های خیلی معروفی تو دنیا هستن ما کلی سیستم عامل دیگه هم برای کامپیوتر ها داریم !

که البته اکثریت اونها بر مبنای یه هسته ای به نام linux هستن
سیستم عامل هایی مثل : ubuntu , sent os , debian و کلی سیستم عامل های دیگه که خیلی خیلی خوب هستن اما متاسفانه بجز برنامه نویس ها آدم های خیلی زیادی ازشون استفاده نمیکنن

تقریبا با هر زبونی ما میتونیم برای هر کدوم ازاین سیستم عامل ها برنامه نویسی کنیم
البته در بعضی زبون ها این ویژگی خود به خود وجود نداره و ما باید از یه سری ابزارها برای این کار استفاده کنیم.
ابزار هایی مثل .netcore برای C# یا electron برای javascript

س Bee ware برای python و کلی ابزارات دیگه که به ما برای این کار کمک میکنن.

(میتونیم اینجا توضیحات بیشتری در مورد این ابزار ها بدیم )

خیلی از این ابزار ها در ابتدای کار این زبون ها وجود نداشتن و رفته رفته با محبوبیت اون ها در بین برنامه نویس ها , ابزار های کمکی اون ها هم بیشتر شد

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

توضیحاتی که دادیم خیلی مختصر بود تا شما یک آشنایی کلی با این شاخه پیدا کنید

و ما حتما در قسمت های آینده بیشتر در موردشون صحبت میکنم

ودر آخر یک اختتامیه با DeskTop applications

شاید تا الان اسم هایی مثل ubuntu , centos , Debian , mac os رو شنیده باشید
شاید تو دنیای آدم های عادی فقط یک سیستم عامل وجود داشته باشه به اسم windows اما برای ما برنامه نویس ها تعدادش خیلی بیشتر از این حرف هاست

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

پس حتما تا الان به این سوال رسیدید که "با چه زبانهای برنامه نویسی برای این همه سیستم عامل مختلف برنامه مینویسند" ؟

جواب این سوال کوتاه نیست اما بسیار شبیه به جواب های قبلی میشه

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

برای windows : شما میتونید با C# , java , javascript , python هر برنامه ای که دوست داشتید از یک ماشین حساب گرفته تا برنامه های حساب داری یا برنامه ای مثل whatsapp بنویسید.

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

در اصل هسته ی اکثریت ما بقی سیستم عامل ها linux هستش و برای این سیستم عامل ها بهترین گزینه ها python , java هستن.

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


حرف آخر

خب اینم از اینم این!

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

تا قسمتای بعدی ، خدافظ :)))