├── .gitignore ├── 0. Hello World! └── 0. Introduction.md ├── 1. Basics ├── 1.0 About .NET and C#.md ├── 1.1 Tooling.md ├── 1.2 File Types.md ├── 1.3 C# under the hood.md ├── 1.4 Namespace.md └── 1.5 New Project.md ├── 4. Advanced ├── 4.0 Generics.md ├── 4.1 Delegate.md └── 4.2 Thread Basics.md ├── Images ├── Diagram1.png ├── Diagram10.png ├── Diagram11.png ├── Diagram12.png ├── Diagram13.png ├── Diagram14.png ├── Diagram15.png ├── Diagram16.png ├── Diagram17.png ├── Diagram18.png ├── Diagram19.png ├── Diagram2.png ├── Diagram20.png ├── Diagram21.png ├── Diagram22.png ├── Diagram23.png ├── Diagram24.png ├── Diagram25.png ├── Diagram26.png ├── Diagram27.png ├── Diagram28.png ├── Diagram29.png ├── Diagram3.png ├── Diagram30.png ├── Diagram31.png ├── Diagram32.png ├── Diagram33.png ├── Diagram34.png ├── Diagram35.png ├── Diagram36.png ├── Diagram37.png ├── Diagram38.png ├── Diagram39.png ├── Diagram4.png ├── Diagram40.png ├── Diagram41.png ├── Diagram42.png ├── Diagram43.png ├── Diagram5.png ├── Diagram6.png ├── Diagram7.png ├── Diagram8.png ├── Diagram9.png └── MegaPlanet.jpg └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /.vs 2 | .vscode/settings.json 3 | -------------------------------------------------------------------------------- /0. Hello World!/0. Introduction.md: -------------------------------------------------------------------------------- 1 | # Kirish 2 | 3 | Siz dasturlashni puxta o'rganmoqchimisiz? 4 | Xalqaro kompaniyada dunyoning eng yetuk dasturchilari bilan yonma-yon ishlashni xohlaysizmi? 5 | Buning ortidan mo'maygina daromad topishnichi? 6 | 7 | Unda ushbu kurs aynan siz uchun. Kurs davomida siz _xalqaro maydonda katta obro'ga ega bo'lgan_, _juda tez sur'atda o'sib takomillashib borayotgan_, C# dasturlash tilini o'rganasiz. Bu til va kurs davomida o'rgatiladigan barcha texnologiyalarda foydalanib har qanday dasturning yuragi (yoki texnik til bilan aytganda _backend_) qismini yozishni o'rganamiz. 8 | 9 | Kursni tamomlaganingizda _dotnet backend_ dasturchi sifatida ishga yoki amaliyotga topshirishingiz. 10 | 11 | ## Muallif haqida 12 | 13 | Ismim Elbek. Dasturlashga ilk bor Xalqaro Vestminster Universitetiga o'qishga qabul qilinganimda qadam qoyganman. Va 3 yil davomida dasturlashni muntazam o'rganganman. Ha, 3 yil muntazam o'qish. Aynan shu vaqt mobaynida O'zbek, Rus, Belorus va Ukraina millatiga mansub insonlardan to'g'ridan to'g'ri, qolaversa YouTube, Udemy va shunga platformalar orqali Ingliz va Hind dasturchilarining video-darslarini ko'rib o'rganganman. O'rganish hali ham nihoyasiga yetgani yo'q, hozirgi kunlarda Microsoft kompaniyasida Bosh Enjinering Menejeri (Senior Engineering Manager) lavozimida ishlab kelayotgan va PiorSoft kompaniyasi asoschisi [Hassan Rezk Habib](https://www.linkedin.com/in/hassanrezkhabib) Uztozimizga ham shogird ham qo'llarida dasturchi sifatida bu soha sir asrorlarini o'rganib kelyapman. 14 | 15 | Bundan tashqari [YouTube kanalim](https://www.youtube.com/DasturlashniOrganamiz) orqali minglab insonlarga bilganlarimni ulashib kelmoqdaman. 16 | 17 | O'ylaymanki, hozirda ixtiyoringizda bo'lgan o'quv qo'llanmasi innovatsiyalar olamiga qadam qoyishingizga ko'makchi bo'ladi. Ushbu kurs orqali sizlarga [Exadel](https://exadel.com) va [PiorSoft](https://piorsoft.com) kompaniyalarida to'plagan tajribam va bilimim bilan ulashishni niyat qildim. 18 | 19 | ## Kursda nimalar o'rgatiladi 20 | 21 | Til: C# 22 | 23 | Framework: .NET 6 24 | 25 | Ma'lumotlar bazasi bilan ishlashda _Entity Framework_ ishlatiladi. 26 | 27 | ## Ushbu soha egasining odatiy ish kuni 28 | 29 | C# dasturlash tili bilan ishlaydigan dasturchilar xilma-xil pozitsiyalarda ish olib borishadi. Bu o'z ichiga o'yinlar yaratish, dastur 'backend' qismini yaratish va hozirda jadallik bilan rivojlanayotgan dasturning 'frontend' qismini yozish ham imkoniyati tug'ilmoqda. 30 | 31 | Biz siz bilan backend dasturchi pozitsiyasiga tayorlanayotgan ekanmiz, o'zimni misolimda ushbu soha vakilining odatiy kun tartibi haqida gaplashib olamiz. 32 | 33 | Ertalab soat 9:00 dan taxminan 9:20 / 30 gacha jamoa a'zolari bilan uchrashuv. Agar chet elliklar jamoasida ishlayotgan bo'lsangiz bu uchrashuv Zoom, Microsoft Teams yoki shunga o'xshagan dastur orqali amalga oshiriladi. Bu payt davomida kecha nima qilganingiz va bugungi rejalaringiz haqida ma'lumot berib o'tasiz. 34 | 35 | Meetingdan so'ng choy yoki kofeni oldingizga olasida, sizga yuklatilgan vazifani qilishni boshlaysiz. Agar jamoada erkinlik berilgan bo'lsa ro'yxatdan eng muhim ishni olib shuni ustida ishlashni boshlaysiz. Asosan ishingiz ma'lum bir ma'lumotni bazadan olib frontendga uzatish yoki aksini realizatsiya qilish bo'ladi. Butun boshli biznes protses sizning qo'lingizda bo'ladi. 36 | 37 | Yoki, aynan mana shu ma'lumotlar uzatish jarayonida ko'p hollarda xatoliklar chiqib turadi. Buni texnik tilda "BUG" ('bag' deb talaffuz qilinadi) deyishadi. Ishingiz shu "BUG" larni to'g'rilash bo'ladi. 38 | 39 | Ishlash jarayonida qiyinchilikga duch kelib qolsangiz birga ishlaydigan sherigingizdan yordam so'rashingiz mumkin bo'ladi va birgalikda bu ishni tugallashingiz ham mumkin. 40 | 41 | ## Kurs oxirida qanday natija kutiladi 42 | 43 | Kursni muvaffaqiyatli tamomlaganingizda hozirda Toshkentda faoliyat yuritayotgan xalqaro IT kompaniyalardan biriga amaliyot o'tashga topshiringiz mumkin bo'ladi. Agar kursning oxirgi bo'limida o'rgatiladigan mavzularni puxta o'zlashtirib berilgan vazifalarni to'liq bajara olsangiz junior .net dasturchi pozitsiyasiga ham qabul qilishingiz mumkin bo'ladi. 44 | 45 | Nima bo'lgan taqdirda ham, ushbu safarni boshlayotgan ekansiz o'z yo'lingizni topib olguningizgacha qo'ldan kelgan yordamni ko'rsatishga harakat qilaman. 46 | 47 | Kurs davomida siz 3 ta dastur tuzib borasiz. Bular: 48 | 1. KESCHA ("kesha" o'qiladi). Bu dastur sizlarga C# asoslarini o'rganish va uni amalda qo'llab borish uchun yozib boriladigan dastur. 49 | 50 | 2. CALCULATR ('kalkulator' o'qiladi). Bu dastur sizlarga C# asoslarini o'rganish va uni amalda qo'llab borish uchun yozib boriladigan 2 chi dastur. 51 | 52 | 3. SHINAM - ijaraga shinam uy topish endi oson. Bu dastur sizlarga C# ning murakkab mavzularini amalda qo'llash va ma'lumotlar bazasi va API chiqarishni amalda qo'llash uchun yoziladigan dastur. 53 | 54 | 55 | ## Maslahatlar 56 | 57 | __Dasturlash/dasturchilar haqida to'g'ri tasurotga bo'ling__ 58 | 59 | Ko'pchilik dasturchi deganda inovatsiyalar va minglab dollarlik startaplar xayoliga keladi. Ammo, bu to'liq emas, to'laqonli taasurotga ega bo'lish uchun yana bir necha komponentlarni qo'shishkerak. 60 | 61 | ![Full Cycle of Programming](../Images/Diagram1.png "a title") 62 | 63 | Bularning har biri ikkinchisiga asos bo'lib xizmat qiladi. Har qanday innovatsiya qilish uchun yillar davomida mehnat qilish kerak bo'ladi. Aksariyat hollarda, mehnat tekingga qilasiz. Facebook, Instagram yoki shunga o'xshagan biror bir dastur yo'qki ularning dunyoga taqdim qilgan insonlar ma'lum bir vaqt tekinga ishlashmagan bo'lishsa. 64 | 65 | Demak, sabrning o'rnini tushunib yetgan bo'lsak, endi shu sabrni yoqilg'isi bo'lmish _xolis niyat_ haqida gaplashsak. Agar sizda niyatingiz o'zingizdan kattaroq bo'lmasa, avvalo yillar davomida dasturlashni o'rganishga va bundan so'ng hech qanday pul topmasdan o'tirib inovatsiya qilishga sabringiz yetmasligi mumkin. 66 | 67 | Har bir insonning dunyo qarashi, e'tiqodi va hayotdagi prinsiplaridan kelib chiqib, ushbu o'zidan kattaroq maqsad turlicha bo'lishi mumkin. Misol uchun, farzandi uchun borini bergan, uni kamolotga yetkazish va o'z yo'lini topib ketishi uchun tun-u kun mehnat qilgan o'ta-onasini ko'rgan o'quvchi, o'ziga o'xshagan birodarlarini tezroq o'rganishlari va tezroq hayotda o'rin egallashlari uchun ta'lim platformasi ustida jiddu-jahd bilan mehnat qilishi mumkin. 68 | 69 | 70 | ## Kursni Boshlashdan Oldin O'quvchidan Nimalar Talab Qilinadi. 71 | 72 | Tirishqoqlik. Mehnatsevarlik. Sabr. Chalg'imaslik. 73 | 74 | Boshqa bilim va ko'nikma talab etilmaydi! 75 | 76 | ## Hello World! 77 | 78 | Keling, endi kod yozishni birgalikda boshlaymiz. Hozir ishlatib turgan veb-brauzeringizda [sharplab.io](https://sharplab.io) deb yozing va bu saytga o'ting. 79 | 80 | ![sharplab.io](../Images/Diagram2.png "online compiler") 81 | 82 | Tepadagi kabi veb-sahifa ochilishi kerak sizda ham. Chap tomondagi oynadan barcha kodni o'chirib tashlang. 83 | 84 | Endi esa quyidagi kod parchasini aynan o'sha oynaga ko'chiring: 85 | 86 | ```csharp 87 | using System; 88 | 89 | Console.WriteLine("Hello, World!"); 90 | ``` 91 | 92 | Agar sizda ham o'ng tomondagi kabi yozuv chiqgan bo'lsa, tabriklayman birinchi C# dasturingizni muvaffaqiyatli yoza oldingiz. 93 | 94 | ![sharplab.io](../Images/Diagram3.png "online compiler") 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /1. Basics/1.0 About .NET and C#.md: -------------------------------------------------------------------------------- 1 | ## .NET o'zi nima? 2 | 3 | .NET dasturlash ekosistemasi hisoblanadi. Rostini aytadigan bo'lsam, bu gapni C# o'rganishni boshlaganimda o'zim ham unchalik tushunmas edim. Keling sizga ham sodda tilda tushuntiraman. 4 | 5 | 6 | ![Mega Planet](../Images/MegaPlanet.jpg "Mega Planet") 7 | 8 | Tepadagi rasmda ko'rib turganingiz Toshkent shahrida qad ko'targan Mega Planet majmuasi. Bu joy sizning xarid qilishingiz, dam olishingiz va mazza qilib ovqatlanishingiz uchun ekosistema hisoblanadi. Buning uchun bu majuamada savdo do'konlari, atraksionlar va kafelar siz uchun qurib qoyilgan. 9 | 10 | Demak, 11 | 12 | ![Mega Planet](../Images/Diagram8.png "Mega Planet") 13 | 14 | 15 | Xuddi, shu tarzda .NET bu: 16 | 17 | ![.net offers](../Images/Diagram9.png ".net") 18 | 19 | 20 | .NET ekosistemasida esa siz turli xil dasturlar yarata olasiz. Misol uchun, siz mobil (Android, IOS), web va kompyuter (Windows, macOS) dasturlarni tuza olasiz. Qolaversa, o'yinlar, sun'iy intellekt va machine learning, cloud va IoT platformalarini ham tuza olasiz. 21 | 22 | ![.net offers](../Images/Diagram7.png ".net") 23 | 24 | Oldin aytib o'tganimdek, .NET bu - kutubxonalar va dasturlash tillari. Kutubxonalar sizga turli platformalar bilan hech qanday qiyinchiliksiz bog'lana olishingiz imkonini beradi. Masalan, veb-sahifa tuzmoqchi bo'lsak kodni brauzerga aks ettirishni .NET siz uchun qilib beradi. Mobil va kompyuter ilovalar uchun ham shunday. 25 | 26 | Turli xil qurilmalar bilan bo'g'lana oldik, endilikda ular uchun kod yozish kerak. Buning uchun .NET taqdim qiladigan dasturlash tillari mavjud. Bular C#, F# va VB (visual basic). Buning orasida eng mashhuri C# ni ushbu kursda siz bilan o'rganamiz. 27 | 28 | 29 | -------------------------------------------------------------------------------- /1. Basics/1.1 Tooling.md: -------------------------------------------------------------------------------- 1 | ## Kerakli Dasturlarni O'rnatamiz 2 | 3 | Bu bo'limgacha yetib kelgan ekansiz, allaqachon birinchi dasturni yozib o'zingizni dasturchi sifatida his qilgan bo'lishingiz kerak. Endilikda kod yozish uchun bizga kerak bo'ladigan dasturni va biz uchun Microsoft jamoasi tomonidan yozib berilgan kod kutubxonalarini komyuterimizga o'rnatishimiz kerak bo'ladi. 4 | 5 | Keling, birinchi aynan shu kutubxonalardan boshlaymiz. 6 | 7 | [Download .NET 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) 8 | 9 | Tepadagi linkni ustida bosganingizda, sizda mana bunday sahifa ochilishi kerak: 10 | 11 | ![Download .NET 6](../Images/Diagram4.png "") 12 | 13 | Chap tomondagi tepadan birinchi jadvaldan, o'zingizni kompyuteringizni operatsion sistemasi va protsessoriga moslab .NET kutubxonalarini yuklab olasiz. Mening holatimda Windows x64 versiyasi mos kelgani uchun, shuni yuklab oldim. 14 | 15 | ![My laptop settings](../Images/Diagram5.png "") 16 | 17 | 18 | ![My laptop settings](../Images/Diagram6.png "") 19 | 20 | Tepadagi rasmda ko'rsatilgan dasturni o'rnatish qo'lingizdan kelishiga ishonaman. Shunchaki uni ustiga bosib, dasturni o'rnatib oling. 21 | 22 | So'ngra Windowns Qidiruv qismiga o'tib __CMD__ deb qidiring. 23 | 24 | ![My laptop settings](../Images/Diagram10.png "") 25 | 26 | _Command Prompt_ dasturini oching. Sizda ham mana bunday dastur ochilishi kerak: 27 | 28 | ![My laptop settings](../Images/Diagram11.png "") 29 | 30 | 31 | Quyidagi kodni shu qora oyna ichiga yozing: 32 | 33 | ``` 34 | dotnet --version 35 | ``` 36 | 37 | ![My laptop settings](../Images/Diagram12.png "") 38 | 39 | Manda .NET ning 7 chi - hozirda eng oxirgi versiyasi o'rnatilgan. 40 | 41 | 42 | Sizda esa shu 6 chi versiyasini ko'rsatishi kerak. 43 | 44 | Endi esa komyuteringizdan quyidagi papkaka kiring va .NET nimaligini o'z ko'zingiz bilan ko'rishingiz mumkin: 45 | 46 | ``` 47 | C:\Program Files\dotnet\sdk 48 | ``` 49 | 50 | Ushbu papkada komyuteringizda o'rnatilgan .NET ning hamma versiyalarini ko'rishingiz mumkin. Misol uchun mening kompyuterimda 4 ta versiyasi o'rnatilgan ekan: 51 | 52 | ![My laptop settings](../Images/Diagram13.png "") 53 | 54 | 55 | `6.0.200` deb nomlangan papkani ichida .NET ning siz uchun yozib qoyilgan hamma kodlarini ko'rishingiz mumkin. 56 | 57 | 58 | .NET ni o'rnatib bo'lgan ekansiz. Endilikda siz bilan .NET dan va C# tilidan foydalanib, o'zimizning komyuterda kod yoza olishimiz uchun `Visual Studio Code` dasturini o'rnatib olishimiz kerak. 59 | 60 | Buning uchun quyidagi linkni ustiga bosing: 61 | [Download VS Code](https://code.visualstudio.com/Download) 62 | 63 | Operatsion Sistamangizga mos o'rnatuvchini tanlaysiz va ustiga bosasiz. Manda Windows 10 bo'lgani uchun 1-chi tugma ustiga bosaman. 64 | 65 | ![My laptop settings](../Images/Diagram14.png "") 66 | 67 | Bundan keyin sizda ham ushbu dastur o'rnatuvchisini yuklab olish jarayoni boshlanadi. 68 | 69 | 70 | ![My laptop settings](../Images/Diagram15.png "") 71 | 72 | `VSCodeUserSetup.exe` faylini ustiga bosib dasturni o'rnatib olasiz. 73 | 74 | Bu dasturni `Visual Studio Code` yoki `VS Code` deb ataymiz. Bu dastur bizlarga C# kod yozishimizga imkon beradi. Dasturni ochganingizda sizda ham quyidagicha oyna ochilishi kerak: 75 | 76 | ![Vs code](../Images/Diagram16.png "") 77 | 78 | Chap tomondan tepadan birinchi tugmaga e'tiboringizni qarating. Bu 2 ta bet belgisi bilan ajratib qoyilgan. Ustiga bossangiz sizda mana bunday bo'lim ochiladi. 79 | 80 | ![Vs code](../Images/Diagram17.png "") 81 | 82 | Bu bo'lim biz ishlaydigan asosiy bo'lim hisoblanadi va bu orqali biz papka va kod yozadigan fayllarimiz bilan ishlaymiz. 83 | 84 | Keyingi bo'lim bu chap tomonda tepadan eng pastgi tugma. bu bo'lim orqali biz `VS Code` dasturimizni C# tilini tushuna olishi uchun qo'shimchalarni yuklab olamiz. Bu qo'shimchalar __plugin__ deyiladi. Telefoningizdagi `Play Market` yoki `App Store`ga o'xshaydigan bir bo'lim 85 | 86 | ![Vs code](../Images/Diagram18.png "") 87 | 88 | Ko'rib turganingizdek, menda 2 ta plugin. Siz ham qidirish bo'limida `C#` deb qidiring va sizda ham quyidagicha natija chiqishi kerak: 89 | 90 | ![Vs code](../Images/Diagram19.png "") 91 | 92 | Bu yerdan 1-pluginni yuklab oling 93 | 94 | ![Vs code](../Images/Diagram20.png "") 95 | 96 | Va bundan keyin 2-pluggini ham yuklab oling 97 | 98 | ![Vs code](../Images/Diagram21.png "") 99 | 100 | 101 | Sizning komyuteringiz kod yozishga tayyor! -------------------------------------------------------------------------------- /1. Basics/1.2 File Types.md: -------------------------------------------------------------------------------- 1 | ## Fayl Turlari (.cs, .exe, .dll) 2 | 3 | ![File Types](../Images/Diagram28.png "") 4 | 5 | 6 | `.cs` - bu fayl turi hisoblanadi. Misol uchun, siz agar Notepad dasturini ochib faylni saqlasangiz bu - file-name`.txt` ko'rinishida bo'ladi. Word fayl file-name`.docx` turida saqlanadi. Xuddi shundek, siz-u biz yozgan C# kod saqlanganda file-name`.cs` fayli turida saqlanadi. 7 | 8 | Keyinchalik aynan shu `.cs` formatida saqlangan kod 2 xil faylga ko'chirilishi mumkin. Bu bizning dastur yaratish boshida tanlagan loyiha turimizga bog'liq. 9 | 10 | `.exe` - bu turdagi faylni kompyuterimiz yoki telefonimiz tushunadi va shu fayl turi orqali kodni ishga tushiradi. 11 | 12 | `.dll` - bu faqatgina yozilgan kodni keyinchalik boshqa bir `.exe` fayl foydalanishi uchun yig'ib qoyilgan fayl turi. Oldin ham aytib o'tganimdek .NET bu kutubxona va tillarning yig'indisi. Aynan shu kutubxonalar `.dll` formatida saqlangan. Marhamat o'zimning kompyuterimda rasmga tushirilgan fayllarni ko'rishingiz mumkin: 13 | 14 | ![File Types](../Images/Diagram29.png "") 15 | 16 | Tepadagi fayllar jamlanga papkaga borish uchun quyidagi yo'ldan foydalanishingiz mumkin: 17 | 18 | ``` terminal 19 | C:\Program Files\dotnet\sdk 20 | ``` 21 | -------------------------------------------------------------------------------- /1. Basics/1.3 C# under the hood.md: -------------------------------------------------------------------------------- 1 | ## C# aslida qanday ishlaydi? 2 | 3 | O'tgan mavzuda shu narsa aniq bo'ldiki, biz yozgan C# kod yoki `.exe` yoki `.dll` ko'rinishda bo'lishi mumkin ekan. Endi keling birgalikda o'sha fayllardan birini ichini ochib ko'ramiz. 4 | 5 | ![File Types](../Images/Diagram30.png "") 6 | 7 | Aynan o'sha papkada mavjud dotnet.dll faylini ochganimda bizga tushunarsiz belgilar ko'rinib qoldi. Bu bizning kompyuterimiz tushunadigan tilgan ko'chirilgan kod hisoblanadi. 8 | 9 | ![File Types](../Images/Diagram31.png "") 10 | 11 | 12 | Hozir biz yozadigan C# kod qanday qilib kompyuter tushunadigan kodga ko'chirilish jarayonini tushuntirib o'taman. 13 | 14 | ![File Types](../Images/Diagram32.png "") 15 | 16 | Biz o'zim tushunadigan dasturlash tilida kodni yozamiz. Keyinchalik esa Microsoft jamoasi biz uchun tuzib bergan dastur (nomi __Compiler__) bizning C# dasturni __O'rta Til__ ga ko'chiradi. Buni ingliz tilida __Intermediate Language__ deb yuritiladi. Misol uchun, Program.cs C# fayli Program.il fayliga o'girilidi. Keling, sharplab.io dagi buning yaqqol misolini ko'rsataman: 17 | 18 | 19 | ``` csharp 20 | using System; 21 | 22 | Console.WriteLine("Hello, World!"); 23 | ``` 24 | 25 | Tepadagi qisqagina kod quyidagicha IL kodga ko'chiriladi: 26 | 27 | ``` csharp 28 | .assembly _ 29 | { 30 | .custom instance void [System.Private.CoreLib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 31 | 01 00 08 00 00 00 00 00 32 | ) 33 | .custom instance void [System.Private.CoreLib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 34 | 01 00 01 00 54 02 16 57 72 61 70 4e 6f 6e 45 78 35 | 63 65 70 74 69 6f 6e 54 68 72 6f 77 73 01 36 | ) 37 | .custom instance void [System.Private.CoreLib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [System.Private.CoreLib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 38 | 01 00 07 01 00 00 00 00 39 | ) 40 | .permissionset reqmin = ( 41 | 2e 01 80 92 53 79 73 74 65 6d 2e 53 65 63 75 72 42 | 69 74 79 2e 50 65 72 6d 69 73 73 69 6f 6e 73 2e 43 | 53 65 63 75 72 69 74 79 50 65 72 6d 69 73 73 69 44 | 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 79 73 45 | 74 65 6d 2e 50 72 69 76 61 74 65 2e 43 6f 72 65 46 | 4c 69 62 2c 20 56 65 72 73 69 6f 6e 3d 36 2e 30 47 | 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65 48 | 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79 49 | 54 6f 6b 65 6e 3d 37 63 65 63 38 35 64 37 62 65 50 | 61 37 37 39 38 65 15 01 54 02 10 53 6b 69 70 56 51 | 65 72 69 66 69 63 61 74 69 6f 6e 01 52 | ) 53 | .hash algorithm 0x00008004 // SHA1 54 | .ver 0:0:0:0 55 | } 56 | 57 | .class private auto ansi '' 58 | { 59 | } // end of class 60 | 61 | .class private auto ansi abstract sealed beforefieldinit '$' 62 | extends [System.Private.CoreLib]System.Object 63 | { 64 | .custom instance void [System.Private.CoreLib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 65 | 01 00 00 00 66 | ) 67 | // Methods 68 | .method private hidebysig static 69 | void '
$' ( 70 | string[] args 71 | ) cil managed 72 | { 73 | // Method begins at RVA 0x2050 74 | // Code size 12 (0xc) 75 | .maxstack 8 76 | .entrypoint 77 | 78 | IL_0000: ldstr "Hello, World!" 79 | IL_0005: call void [System.Console]System.Console::WriteLine(string) 80 | IL_000a: nop 81 | IL_000b: ret 82 | } // end of method '$'::'
$' 83 | 84 | } // end of class $ 85 | ``` 86 | 87 | Bizning birinchi __Compiler__ (_kompayler_ deb o'qiladi) C# tilini IL tiliga ko'chirishnigina biladi, xolos. Bu kompiler o'z ishini bajarib bo'lgach, sahnaga uning o'rtog'i chiqadi. Uning nomi __JIT Compiler__ (_jit kompayler_ o'qiladi). Bu faqatgina IL kodni kompyuter kodga ko'chirishnigina biladi. 88 | 89 | Kompyuter kod - bu bizning kompyuterimiz tushunib bajara oladigan instruksiyalar ketma-ketligi. 90 | 91 | ### Nega unda birdaniga kompyuter kodga ko'chira qolmaymiz? 92 | 93 | Buni tushunish uchun birinchi navbatda nima uchun 2 ga bo'lib C# kodi __kopmyuter kod__ ko'chirilayotganini bilishimiz kerak. 94 | 95 | Kodni ko'chirish, ya'ni biz tushunadigan tildan kompyuter tushunadigan tilga o'girish texnik terminda _kompilatsiya qilish_ deb ataladi. Inglizchasi - Compilation 96 | 97 | Birinchi (C# dan IL ga) kompilatsiya qilish jarayoni bizga, .NET qo'llab quvvatlaydigan barcha tillarni umumlashtirish va vaqti kelganda, bir necha tilni kuchli tomonlarini jam qilgan holda murakkab va tez dasturlar tuzishga imkon beradi. Bizda umumiy til bor ekan, endilikda __jit kompayler__ shu kodni olib qanaqa kompyuterda kodni ishga tushirayotgan bo'lsak, aynan shu kompyuterning texnik imkoniyatlariga qarab kodni ko'chirib beradi. Bu xuddi kara jadvalini 1-sinf va 4-sinf o'quvchilariga tushintirishdek gap. 1-sinf o'quvchisiga soddaroq va sekinroq ma'lumotlar yetkazilganidek, protsessorini hajmi kichik kompyuterga instruksiyalar shunga mos ravishda ko'chiriladi. Bu instruksiyalarni samarali tarzda texnikaga yetkazish imkoniyatini beradi. 98 | 99 | E'tibor bergan bo'lsangiz, IL umumiy bo'lgani bilan _jit kompayler_ ishlab turgan kompyuterga mos kodga ko'chirib beradi. Ya'ni, IL kodi __ishga tushirilgan paytda__ to'g'ridan to'g'ri kompyuter kodga ko'chiriladi. Shuning uchun ham uning nomi _Ayni Paytdagi Kompilatsiya_ (Just-In-Time Compilation => JIT Compilation) deb nomlanadi. -------------------------------------------------------------------------------- /1. Basics/1.4 Namespace.md: -------------------------------------------------------------------------------- 1 | ## Namespace nima? 2 | 3 | Namespace so'zi 'name' va 'space' so'zlarini birlashtirish orqali hosil qilingan so'z bo'lib. To'g'ridan to'gri tarjima qilganda 'nom' va 'joy' ma'nolarini beradi. Biz kod yozayotganimizda, har bir kod parchasi qilayotgan ishi bo'yicha alohida fayllarga ajratishimiz mumkin. Bu fayllarni bir guruhga jamlab, o'ziga mos papkada saqlashimiz mumkin. 4 | 5 | Kodimizni yuritadigan asosiy fayl esa bu ajratilgan faylarni chaqirishi kerak. Buning uchun bu fayl turgan 'joy'ga biz 'nom' berishimiz kerak. Sodda tilda aytadigan bo'lsak, fayl yaratganimizda, unga 'Sani adresing shu bo'ladi. Chaqirishsa, labbay deb borgin' - deb o'rgatib qoyamiz. 6 | 7 | Bu bo'limda faqatgina bitta fayl bilan ishlaganimiz uchun, o'zimiz birorta _namespace_ yaratmaymiz. Faqatgina, .NET kutubxonalaridagi kodni chaqirish uchun _namespace_ lardan 'foydalanamiz'. 8 | 9 | Foydalanish - inglizchada 'using' deb tarjima qilinadi. Shunday qilib faylimizni tepasida, biz uchun oldindan yozib qoyilgan fayllardagi kodlardan foydalanish uchun `using` kalit so'zidan foydalangan holda `namespace` ni nomini yozamiz. Misol uchun, "Hello, World!" darsimizda, quyidagi qator bor edi: 10 | 11 | ```csharp 12 | using System; 13 | ``` 14 | 15 | Endilikda _namespace_ tushunchasi bilan tanish ekansiz, bu yerda `System` deb nomlangan mo'ljalda bir fayl borligini va uning ichida konsol bilan ishlash uchun tayyor kod yozib qoyilganligini bilib oldingiz. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /1. Basics/1.5 New Project.md: -------------------------------------------------------------------------------- 1 | ## Yangi loyiha yaratamiz. 2 | 3 | Endilikda siz bilan birinchi loyihamizni VS Code dasturi orqali yaratamiz. Buning uchun keling, ushbu kurs darslarini saqlab borish uchun kompyuterimizda bir papka yaratamiz. Men 'Mohirdev` deb nomladim: 4 | 5 | ![File Types](../Images/Diagram34.png "") 6 | 7 | Uning ichida birinchi loyihamizni saqlash uchun KESCHA deb nomlangan papka ham ochdim. 8 | 9 | ![File Types](../Images/Diagram36.png "") 10 | 11 | 12 | VS Code ga o'tamizda, chap tomondan birinchi belgi ustiga bosamiz: 13 | 14 | ![File Types](../Images/Diagram33.png "") 15 | 16 | Sizda quyidagicha oyna ochilishi kerak: 17 | 18 | ![File Types](../Images/Diagram35.png "") 19 | 20 | _Open Folder_ tugmasini ustiga bosib, oldinroq yaratgan faylimizni ochib olamiz. 21 | 22 | Natija mana bunday bo'lishi kerak: 23 | ![Terminal](../Images/Diagram37.png "") 24 | 25 | Tepadagi menu dan `Terminal` bo'limi topib, `New Terminal` ni tanlang: 26 | ![Terminal](../Images/Diagram38.png "") 27 | 28 | Pastda yangi oyna ochiladi: 29 | ![Terminal](../Images/Diagram39.png "") 30 | 31 | Bu oyna orqali yangi loyiha yaratish buyrug'ini birgalikda yozamiz: 32 | 33 | ```terminal 34 | dotnet new console 35 | ``` 36 | 37 | Tepadagi kod xatosiz ko'chiring yoki kompyuterda o'qiyotgan bo'lsangiz, sehrli tugmalarni bosish orqali ko'chirib o'zingizni terminalingizga qoying. Sehrli tugmalar bular `ctrl + C` (ko'chirish) va `ctrl + V` (qoyish) 38 | 39 | Natija: 40 | 41 | ![Natija](../Images/Diagram40.png "") 42 | 43 | 44 | 45 | Chap tomoningizda 3 ta fayl yaratilgan bo'lishi kerak. Biz bugun asosan _Program.cs_ fayli bilan ishlaymiz. Birinchi terminalni yopib, _Program.cs_ ni ustiga 2 martta bosganingizda, taxminan, 1-2 sekund ichida sizda ham quyidagicha oyna chiqadi undan "Yes" tugmasini bosing: 46 | 47 | ![Natija](../Images/Diagram41.png "") 48 | 49 | Bu orqali VS Code dasturni yuritish uchun barcha bog'liq bo'lgan fayllarni olib keladi va `.vscode` faylida saqlaydi: 50 | 51 | ![Natija](../Images/Diagram42.png "") 52 | 53 | Tepadagi menu dan `Terminal` bo'limi topib, `New Terminal` ni tanlang. Hozir ushbu dasturni siz bilan yuritamiz. 54 | 55 | ```terminal 56 | dotnet run 57 | ``` 58 | 59 | Natija: 60 | ![Natija](../Images/Diagram43.png "") 61 | -------------------------------------------------------------------------------- /4. Advanced/4.0 Generics.md: -------------------------------------------------------------------------------- 1 | # Generics -------------------------------------------------------------------------------- /4. Advanced/4.1 Delegate.md: -------------------------------------------------------------------------------- 1 | # Delegate 2 | 3 | ## Action<> 4 | 5 | ## Func<> -------------------------------------------------------------------------------- /4. Advanced/4.2 Thread Basics.md: -------------------------------------------------------------------------------- 1 | # Thread 2 | 3 | `Thread` ma'lum kod parchasini olib alohida _yo'lakchada_ uni bajarib kelish xususiyatida ega. Misol uchun, agar ekranga sonlarni yig'indisini hisoblash natijasini chiqarayotgan bo'lsak va xuddi shu paytning o'zida `enter` tugmasini bosilishini kutib turishni xohlasak buning uchun bizga _2 ta yo'lakcha_ kerak bo'ladi. Aynan shunday paytda `thread` yaratib ikkita funksiyani alohida alohida ishlatishimiz mumkin. 4 | 5 | Keling odatiy hayotimizdagi 2 ishni funksiyaga yozib ularni chaqirib ko'ramiz. Tasovvur qilamiz, kechki ovqatga tayyorgarlik ko'ryapmiz. Bu jarayon _suv qaynatish_ va _sabzavotlarni yuvish_ ishlarini o'z ichiga oladi. Odatda suvni qaynashga qoyib, `bir paytning o'zida` sabzavotlarni yuvishga tushib ketamiz. Keling birgalikda dasturimizda buni tekshirib ko'ramiz. 6 | ```` csharp 7 | BoilWater(); 8 | WashVegetables(); 9 | 10 | static void BoilWater(){ 11 | for (int i = 0; i < 10; i++) 12 | { 13 | Console.WriteLine("Boiling water..." + i + "seconds passed"); 14 | } 15 | } 16 | 17 | static void WashVegetables(){ 18 | for (int i = 0; i < 10; i++) 19 | { 20 | Console.WriteLine("Washing vegetables..." + i + "seconds passed"); 21 | } 22 | } 23 | ```` 24 | 25 | Tepadagi kod parchasini ishga tushirganimizda, quyidagi natija chiqdi: 26 | 27 | ![.net](../Images/Diagram26.png ".net") 28 | 29 | Ideal holatda ikkalasi bir vaqtning o'zida ishlashini xohlaymiz. Demak, buning uchun ikki metod uchun 2 ta thread yaratamiz. 30 | 31 | 32 | ``` csharp 33 | Thread gasThread = new Thread(BoilWater); 34 | Thread sinkThread = new Thread(WashVegetables); 35 | ``` 36 | 37 | Yangi thread obyektini yaratayotganimizda metodning `delegate` ni parametr sifatida yuborishimiz kerak bo'ladi. 38 | 39 | 40 | thread o'z ishini boshlashi uchun uni _Start()_ metodini chaqirishimiz kerak bo'ladi. 41 | 42 | ``` csharp 43 | gasThread.Start(); 44 | sinkThread.Start(); 45 | ``` 46 | 47 | Kodni ishga tushirishdan oldin, metodlarga ozgina o'zgartirish kiritishimiz kerak. Metodning ichida agar `Thread` klasini statik klass sifatida chaqirsak, aynan, shu metod ishlab turgan _thread_ da ma'lum bir amallar bajarishimiz mumkin. Bulardan biri uni ma'lum muddatga 'uxlatib' turish. Kompyuter 10 ta iteratsiyani bajarishda juda tez bo'lgani uchun thread ni 'uxlatmasdan' kodni ishga tushirsak avvalgidek natija ko'rsatishi mumkin va bu bizga thread lar alohida ishlayotganini tushinishimizga to'sqinlik qiladi. Shuning uchun for siklini ichida ekranga yozuvni chiqarganimizdan keyin 1 sekundga thread ni uxlatib turamiz. 48 | 49 | Thread statik klasinining Sleep metodi argument sifatida sonni qabul qiladi va bu son millisekundda hisoblanadi. 50 | 51 | 52 | ``` csharp 53 | static void BoilWater(){ 54 | for (int i = 0; i < 10; i++) 55 | { 56 | Console.WriteLine("Boiling water..." + i + "seconds passed"); 57 | Thread.Sleep(1000); 58 | } 59 | } 60 | 61 | static void WashVegetables(){ 62 | for (int i = 0; i < 10; i++) 63 | { 64 | Console.WriteLine("Washing vegetables..." + i + "seconds passed"); 65 | Thread.Sleep(1000); 66 | } 67 | } 68 | ``` 69 | 70 | Natija: 71 | 72 | ![.net](../Images/Diagram27.png ".net") 73 | 74 | -------------------------------------------------------------------------------- /Images/Diagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram1.png -------------------------------------------------------------------------------- /Images/Diagram10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram10.png -------------------------------------------------------------------------------- /Images/Diagram11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram11.png -------------------------------------------------------------------------------- /Images/Diagram12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram12.png -------------------------------------------------------------------------------- /Images/Diagram13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram13.png -------------------------------------------------------------------------------- /Images/Diagram14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram14.png -------------------------------------------------------------------------------- /Images/Diagram15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram15.png -------------------------------------------------------------------------------- /Images/Diagram16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram16.png -------------------------------------------------------------------------------- /Images/Diagram17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram17.png -------------------------------------------------------------------------------- /Images/Diagram18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram18.png -------------------------------------------------------------------------------- /Images/Diagram19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram19.png -------------------------------------------------------------------------------- /Images/Diagram2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram2.png -------------------------------------------------------------------------------- /Images/Diagram20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram20.png -------------------------------------------------------------------------------- /Images/Diagram21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram21.png -------------------------------------------------------------------------------- /Images/Diagram22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram22.png -------------------------------------------------------------------------------- /Images/Diagram23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram23.png -------------------------------------------------------------------------------- /Images/Diagram24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram24.png -------------------------------------------------------------------------------- /Images/Diagram25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram25.png -------------------------------------------------------------------------------- /Images/Diagram26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram26.png -------------------------------------------------------------------------------- /Images/Diagram27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram27.png -------------------------------------------------------------------------------- /Images/Diagram28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram28.png -------------------------------------------------------------------------------- /Images/Diagram29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram29.png -------------------------------------------------------------------------------- /Images/Diagram3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram3.png -------------------------------------------------------------------------------- /Images/Diagram30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram30.png -------------------------------------------------------------------------------- /Images/Diagram31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram31.png -------------------------------------------------------------------------------- /Images/Diagram32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram32.png -------------------------------------------------------------------------------- /Images/Diagram33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram33.png -------------------------------------------------------------------------------- /Images/Diagram34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram34.png -------------------------------------------------------------------------------- /Images/Diagram35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram35.png -------------------------------------------------------------------------------- /Images/Diagram36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram36.png -------------------------------------------------------------------------------- /Images/Diagram37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram37.png -------------------------------------------------------------------------------- /Images/Diagram38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram38.png -------------------------------------------------------------------------------- /Images/Diagram39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram39.png -------------------------------------------------------------------------------- /Images/Diagram4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram4.png -------------------------------------------------------------------------------- /Images/Diagram40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram40.png -------------------------------------------------------------------------------- /Images/Diagram41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram41.png -------------------------------------------------------------------------------- /Images/Diagram42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram42.png -------------------------------------------------------------------------------- /Images/Diagram43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram43.png -------------------------------------------------------------------------------- /Images/Diagram5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram5.png -------------------------------------------------------------------------------- /Images/Diagram6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram6.png -------------------------------------------------------------------------------- /Images/Diagram7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram7.png -------------------------------------------------------------------------------- /Images/Diagram8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram8.png -------------------------------------------------------------------------------- /Images/Diagram9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/Diagram9.png -------------------------------------------------------------------------------- /Images/MegaPlanet.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElbekDeveloper/The-Roadmap/72395e2391abff0f5f537e7c4047b19b8c97c953/Images/MegaPlanet.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [DRAFT] The Roadmap (v0.0.1) 2 | 3 | - [Hello, World!](https://github.com/ElbekDeveloper/The-Roadmap/blob/master/0.%20Hello%20World!/0.%20Introduction.md) 4 | 5 | 6 | - [Basics](https://github.com/ElbekDeveloper/The-Roadmap/tree/master/1.%20Basics) 7 | 8 | - [About .NET and C#](https://github.com/ElbekDeveloper/The-Roadmap/blob/master/1.%20Basics/1.0%20About%20.NET%20and%20C%23.md) 9 | - [Tooling](https://github.com/ElbekDeveloper/The-Roadmap/blob/master/1.%20Basics/1.1%20Tooling.md) 10 | - [File Types](https://github.com/ElbekDeveloper/The-Roadmap/blob/master/1.%20Basics/1.2%20File%20Types.md) 11 | - [C# under the hood](https://github.com/ElbekDeveloper/The-Roadmap/blob/master/1.%20Basics/1.3%20C%23%20under%20the%20hood.md) 12 | - [Namespace](https://github.com/ElbekDeveloper/The-Roadmap/blob/master/1.%20Basics/1.4%20Namespace.md) 13 | - [New Project](https://github.com/ElbekDeveloper/The-Roadmap/blob/master/1.%20Basics/1.5%20New%20Project.md) 14 | 15 | 16 | - [OOP](https://github.com/ElbekDeveloper/The-Roadmap) 17 | 18 | - [Advanced](https://github.com/ElbekDeveloper/The-Roadmap/tree/master/4.%20Advanced) 19 | 20 | - [Generics]() 21 | - [Delegate]() 22 | - [Thread Basics]() 23 | 24 | 3.4 Namespaces 25 | 26 | 3.4.1 What are they? 27 | 3.4.2 Naming convention 28 | 3.5 Strings (explain type, memory allocation, etc.) 29 | 30 | 3.5.1 Console I/O 31 | 3.5.2 PROJECT 1: KESCHA: teach him how to grUeet 32 | 3.5.2.1 HOMEWORK: Teach KESCHA greet you in Uzbek! 33 | 3.6 Numbers (explain type, memory allocation, etc.) 34 | 35 | 3.6.1 Console I/O of numbers and conversion between strings and numbers 36 | 3.7 Arithmetic Operations with numbers and strings 37 | 38 | 3.7.1 PROJECT 2: CalculatR: teach arithmetics 39 | 3.7.2 PROFESSIONAL JARGON: What is feature? 40 | 3.7.3 PROJECT 1: KESCHA: Add a new feature that calculates how much you are older than him. He is 1 years old. 41 | 3.7.4 Explain that now we have added a new feature to KESCHA the older version of the app is lost and we didn't track the developement process. This should be enough to understand the importance of source control 42 | 3.8 GitHub and Visual Studio Integration 43 | 44 | 3.8.1 Register to GitHub 45 | 3.8.2 Connect Visual Studio 2022 to GitHub account 46 | 3.8.3 Deploy KESCHA (CalculatR is homework) 47 | 3.8.4 Deploy CalculatR 48 | 3.9 Char (explain type, memory allocation, etc.) 49 | 50 | 3.9.1 What is ASCII? 51 | 3.9.2 Project 2: KESCHA: Add a new feature that tranlates chars into ASCII equivalent. Let the student know how KESCHA's 'brain' operates. Make the student feel that he started to understand technology. 52 | 3.9.3 PROFESSIONAL JARGON: What is commit? 53 | 3.10 Bool (explain type, memory allocation, etc.) 54 | 3.11 DateTime (explain type, memory allocation, etc.) 55 | 3.12 Logical Operators 56 | 57 | 3.11.1 PROJECT 2: CalculatR: teach comparison (commit changes to GitHub) 58 | 3.13 If 59 | 60 | 3.13.1 PROJECT 1: KESCHA: teach military age calculation (commit changes to GitHub) 61 | 3.14 Switch (make simple menu) 62 | 63 | 3.14.1 PROFESSIONAL JARGON: what is refactor? 64 | 3.14.2 PROJECT 1: KESCHA: At this stage, the main method of KESCHA is pretty messy. At this stage of refactoring, we will divide responsibilites using "switch" clause. "Switch" should enable basic menu for the user to choose from 65 | 3.14.3 HOMEWORK: Make the same changes with CalculatR 66 | 3.15 WHILE loop (simple program to demonstrate what is it) 67 | 68 | 3.15.1 Infinite loop 69 | 3.15.2 PROJECT 1: KESCHA: Add a new feature to ask whether the user wants to close or restart the application. 70 | 3.16 FOR LOOP (simple program to demonstrate what is it) 71 | 72 | 3.16.1 PROJECT 2: CalculatR: At this stage, the main method of CalculatR is pretty messy. At this stage of refactoring, we will divide responsibilites using "switch" clause. "Switch" should enable basic menu for the user to choose from 73 | 3.16.2 PROJECT 2: CalculatR: teach arithmetic and geometric progression. 74 | 3.16.3 Break/Continue 75 | 3.17 Arrays 76 | 4. C# OOP 77 | 78 | 4.1 What is class? 79 | 80 | 4.1.1 PROJECT 1: KESCHA: Create separate class for KESCHA. 81 | 4.1.2 HOMEWORK: PROJECT 2: CalculatR: Create separate class for CalculatR 82 | 4.2 What is method and method params? 83 | 84 | 4.2.1 PROJECT 2: CalculatR: Create methods for each feature of CalculatR 85 | 4.2.2 HOMEWORK: PROJECT 1 : KESCHA: Create methods for each feature of KESCHA 86 | 4.2.3 What is parameter overloading? 87 | 4.2.4 PROJECT 1: KESCHA: Overload 'Greet' method to include custom greeting in users own language (latin alphabets) 88 | 4.2.5 HOMEWORK: PROJECT 2: CalculatR: Overload 'Sum' method to add 3 numbers instead of 2 89 | 4.2.6 HOMEWORK: PROJECT 2: CalculatR: Overload 'Sum' method to add 2 numbers (as before) but with different number type (before: int, now: decimal) 90 | 4.3 What is object? 91 | 92 | 4.3.1 PROJECT 1: KESCHA: Create object of KESCHA class 93 | 4.3.2 HOMEWORK: PROJECT 2: CalculatR: Create object of CalculatR class 94 | 4.4 What is field? 95 | 96 | 4.4.0 What are access modifiers? 97 | 4.4.1 PROJECT 2: CalculatR: Get rid of params and start assigning using fields 98 | 4.4.2 HOMEWORK: PROJECT 1: KESCHA: Get rid of params and start assigning using fields 99 | 4.5 What is property? Explain the essense of fields and when to use them. 100 | 101 | 4.5.1 PROJECT 2: CalculatR: Get rid of fields and start assigning using properties 102 | 4.5.2 HOMEWORK: PROJECT 1: KESCHA: Get rid of fields and start assigning using properties 103 | 4.6 Single-Responsibility-Prinsiple in Action (explain that Program class was running the project and holding logic. Now, logic is in its own classes.) 104 | 105 | 4.7 PROJECT 1: KESCHA: Introduce Kasee with the same methods and properties as KESCHA. (Kasee is cat and KESCHA is parrot) 106 | 107 | 4.7.1 Show the code is repeated. Explain Don't Repeat Yourself (DRY) 108 | 4.7.2 Implement inheritance that helps us follow DRY 109 | 4.8 Explain that KESCHA (parrot) and KASEE (cat) greet differently. 110 | 111 | 4.8.1 What is virtual method? Implement virtual methods in parent class. (This is called POLIMORPHISM) 112 | 4.8.2 What is abstract/sealed class? 113 | 4.8.3 What is abstract method? 114 | 4.8.4 PROJECT 2: CalculatR: Use Math class to implement the logic some of the methods 115 | 4.9 What are interfaces? 116 | 117 | 4.9.1 PROJECT 2: CalculatR: Any class that implement ICalculatable interface can be our CalculatR 118 | 4.9.2 Inheritance VS Interface 119 | 4.10 What is enum? 120 | 4.11 What is struct? (explain value types and the reference types) 121 | 4.11.1 When to use? 122 | ■ The type acts as a primitive type. Specifically, this means that it is a fairly simple type that has 123 | no members that modify any of its instance fields. When a type offers no members that alter 124 | its fields, we say that the type is immutable. In fact, it is recommended that many value types 125 | mark all their fields as readonly (discussed in Chapter 7, "Constants and Fields"). 126 | ■ The type doesn’t need to inherit from any other type. 127 | ■ The type won’t have any other types derived from it. 128 | 129 | 5. Simple Algorithmic Problems from CodeWars.com 130 | 131 | 6. C# Advanced (each topic will have its own demo project) 132 | 133 | 5.1 Random numbers in C# (some of the popular classes) 134 | 5.2 Generics 135 | 5.3 Lists 136 | 5.4 CRUD 137 | 5.5 LINQ 138 | 5.6 Dependency Injection/Dependency Inversion 139 | 5.7 ASYNC/AWAIT 140 | 5.8 Exception (Xeptions library) 141 | 5.9 Unit testing. 142 | 143 | 7. Sorting and Searching Algorithms 144 | 145 | 8. Web API (what is api, when and how to use it?) 146 | 147 | 8.1 Project Structure 148 | 8.2 appsettings.json file 149 | 8.3 Middlewares 150 | 8.4 Request Lifecycle in Web API Project 151 | 8.5 What is controller? 152 | 8.6 What is endpoint? 153 | 8.7 What is Swashbackle? 154 | 8.8 What is Model Class? 155 | 8.9 PROJECT SOFEE: DATA: Create data model for available issue. 156 | 157 | 9. Entity Framework (what is it, when and how to use it? Give some idea of relational/non-relational databases?) 158 | 159 | 9.1 How to configure EF 160 | 9.2 How to view tables from Visual Studio (Visual Studio Data Tools) 161 | 9.3 What is CRUD operations? Implement them using EF. 162 | 9.4 What is broker? (HH) 163 | 9.4 PROJECT SOFEE: BROKER: Implement storage broker for available model 164 | 165 | 166 | 10. Introduction to Services? 167 | 10.1 What is TDD? 168 | 10.1 What are foundation services? 169 | 170 | 171 | Link to [The-Standard by Hassan Habib](https://github.com/hassanhabib/The-Standard) 172 | 173 | Link to [C# Coding Standard by Hassan Habib](https://github.com/hassanhabib/CSharpCodingStandard) 174 | 175 | 176 | 177 | 178 | --------------------------------------------------------------------------------