Dasturlash tili qanday ishlaydi. Qanday dasturlash tillari nima uchun kerak? Bilish kerak bo'lgan boshqa texnologiyalar

Zalina 2016 yil 13 yanvar, soat 15:42

Turli xil dasturlash tillari va ularni qo'llash sohalari. Yandex-da ma'ruza

  • Yandex kompaniyasining blogi,
  • Veb-sayt ishlab chiqish,
  • dasturlash,
  • Sanoat dasturlash

Biz bu yilgi birinchi postimizni juda oddiy mavzuga bag'ishlashga qaror qildik, bu haqda Kichik ShADda ma'ruza o'qildi. Unda texnologiyaga qiziquvchi o'rta maktab o'quvchilari ishtirok etadilar, shuning uchun taqdimotning o'ziga xosligi - ma'ruza ayniqsa dasturlashni endi boshlayotgan va qaysi yo'nalishni rivojlantirish haqida o'ylayotganlar uchun qiziqarli bo'ladi. Ular uchun Yandex-da Stepic.org platformasida o'qish mumkin bo'lgan "Dasturlashga kirish (C++)" kursi mavjud.

O'qituvchi Mixail Gustokashin - Yandex akademik dasturlari kuratori, HSE Informatika fakulteti talabalar olimpiadalari markazi direktori. Mixail Butunrossiya dasturlash olimpiadalarining o'nlab g'oliblari va sovrindorlarini tayyorladi.

Ma'ruza dasturlash tillari nima ekanligi, ular qanday farq qilishi, qanday paydo bo'lganligi va qaysi biri yaxshiroq va qaysi biri yomonroq ekanligi haqida gapirib beradi. Boshida biz tillar tarixi haqida bir oz gaplashamiz - ular qanday paydo bo'lgan, odamlar dasturlashni qanday boshlagan, hamma narsa qanday rivojlangan va hozir nima bo'layotgani. Ikkinchi bo'limda qaysi til qaysi vazifalarga mos kelishi, qanday qilib "sevimli tilingizni tanlash va hayotdan zavqlanish" haqida so'z boradi. Ma'ruzachi, shuningdek, uning fikricha, bularning barchasini qanday o'rganish va keyin ishga kirish haqida bir oz gapiradi.

Har doimgidek, kesma ostida - batafsil transkript ma'ruzalar o'qing, shunda siz uning mazmuniga yo'naltirilasiz.

Dasturlash tillari tarixi

Eng boshidan boshlaylik. Boshida kompyuterlarda hatto klaviatura ham bo‘lmagan! Ya'ni, hamma narsa juda yomon edi - ularda na klaviatura, na ekran bor edi, ularda perfokartalar bor edi (bular teshikli yoki teshiksiz mayda narsalar). Shunga ko'ra, yoki pinlar u erga surilgan yoki ular u erda yorug'lik bilan porlagan. Agar teshik bo'lsa (yoki aksincha bo'lmasa) - bu nol yoki bitta degan ma'noni anglatadi. Va o'sha paytdagi dasturlar mashina kodlari yordamida yozilar edi - kompyuterdagi har bir operatsiya (qo'shish, ayirish, ba'zi murakkab operatsiyalar) qandaydir mashina kodiga ega edi. Odamlarning o'zlari ushbu kodni plastinadan tanladilar, xotiradagi har xil manzillar, ular hammasini qo'llari bilan taqillatib, o'quvchiga tiqishdi - va barchasi ko'rib chiqildi. Albatta, o'sha paytda dasturchining ishi unchalik qiziq emas edi - teshik ochish - va fan va texnologiyaning rivojlanishi bilan ular har xil "qiziqarli" narsalarni o'ylab topishni boshladilar. Misol uchun, assembler (Assembler), bu allaqachon hayotni biroz osonlashtirgan.

Xo'sh, u qanday qilib hayotni osonlashtirdi? Jamoa uchun qandaydir "sehrli" kod borligini eslash o'rniga, "inson" ga o'xshash har xil so'zlar ishlatilgan. ingliz tili- ba'zi qo'shish yoki mov - yaxshi, keyin registrlar yoki xotira sohalari, bu operatsiyalarni bajarish kerak bo'lgan o'zgaruvchilar ro'yxatga olingan. Ammo bu, umuman olganda, qaysi registrda nima borligini, o'zgaruvchilar qayerda va umuman nima sodir bo'layotganini yodda tutish uchun etarlicha katta aqliy kuch talab qilishi aniq. Nima uchun bu sodir bo'ldi? Chunki kompyuterlar "ahmoq" edi va undan "aqlli" narsani tushuna olmas edi. Aslida, assemblerdan mashina kodini yig'ish uchun ham vaqt va xotira kerak bo'ladi (o'sha paytda, albatta, bu etarli emas edi).

Asta-sekin, bunday yirik kompleks dasturlarni ishlab chiqish juda qiyin ekanligi ayon bo'ldi. Ushbu buyruqlarda dasturchining unumdorligi nihoyatda past edi - ya'ni u kuniga bir necha satr yozdi (ma'noli) va har bir satr alohida hech narsa qilmadi - bir necha oddiy arifmetik amallar. Va odamlar dasturlarni yozish osonroq va qulayroq bo'lishi uchun tillarni inson tiliga, xususan, ingliz tiliga o'xshash qilishni xohlashdi. Va ketamiz!

Eski va o'lik tillar

Birinchi tillardan biri Fortran edi. Aytgancha, u perfokartalarda ham kaltaklangan - Fortran dasturlarini nokaut qilish uchun maxsus perfokartalar mavjud edi. Ammo agar siz hozir bu Fortranni olsangiz - menimcha, bu hatto 50-60 yil orasida. paydo bo'ldi - va unga biror narsa yozishga harakat qiling, bu siz uchun juda yoqimsiz bo'ladi, sizga kafolat beraman! Zamonaviy Fortran hali ham tirik, lekin u avvalgisidan ancha farq qiladi.

Boshqa tillar - endi men siz eshitgan bo'lgan bir narsani yozaman, lekin faqat dasturlash tarixi haqida gapiradigan barcha tadbirlarda - bu COBOL. Bu biznes ilovalarini yozish uchun til edi. Biznes ilovalari nima? Banklardagi ba'zi operatsiyalar, boshqa narsa, bularning barchasi Cobolda yozilgan. Biz, albatta, unchalik mashhur emasmiz. O'ylaymanki, siz Moskvada Kobol dasturchisini juda qiyinchilik bilan topasiz. Va Moskvada bo'lmagan joyda - bundan ham qiyinroq. Ammo, ajablanarlisi, hatto 10 yil oldin ham, insoniyat tomonidan yozilgan barcha kodlarning yarmidan ko'pi Kobolda yozilgan. Va hozirgacha barcha bank operatsiyalarining muhim qismi unga yozilgan dasturlar (COBOL) yordamida amalga oshiriladi va odamlar hali ham unga nimadir yozadilar.

Bundan tashqari, "kulgili" til ham bor, u Algol deb nomlangan (68-chi versiya, u yaratilgan yilni tavsiflaydi). Bu algoritmik til. Umuman olganda, ular u erda nimanidir bilishgan, ammo hozir bizni ular nima qilishlari mumkinligi qiziqtirmaydi. Va shu bilan antik va nisbatan ishlatilmaydigan tillarga ekskursiyamiz yakunlanishi mumkin va biz hali ham tirik (va faol yashayotgan) narsaga o'tishimiz mumkin.

Qadimgi, ammo tirik tillar

Algol Evropada ixtiro qilingan va Fortran asosan shtatlarda ishlatilgan - katta farqlar yo'q. Qanday tendentsiya ko'rinadi? Avvaliga hamma narsa qiyin edi va yozish uchun siz deyarli muhandis, elektrotexnika muhandisi bo'lishingiz kerak, qaysi kontaktlar yopilganligini va dasturlash uchun boshqa narsalarni tushunishingiz kerak edi. Keyin ham barglar bilan o'tirish va xotirani sanash, unga qarash kerak edi. Va asta-sekin hamma narsa sodda, sodda, sodda va dasturchi uchun yanada osonroq bo'ldi - odam uchun imkon qadar kamroq fikr yuritish, imkon qadar avtomatik ravishda qilish. Taxminan bu davr oxirida (ma'ruzachi Algol va Kobolga ishora qiladi), ma'lum ma'noda bugungi kungacha "omon qolgan" tillar paydo bo'la boshlaydi.

ASOSIY. Ehtimol, ba'zi odamlar hali ham unga ko'ra nimadir yozadilar kamida Men ba'zi muassasalarda QBasic tilida dars berishlarini ko'rdim - "1989" deb yozilgan ko'k oyna. Umuman olganda, "qudrat va asosiy" hayot bilan! U dasturchi bo'lmaganlar uchun til sifatida yaratilgan. O'sha paytda dasturchi juda ixtisoslashgan kasb edi. Va bu erda ular sizga aytadilar: "Bu erda bizda ajoyib asosiy til bor va har qanday aqlli odam unga dasturni olib yozadi - bu oson." Shunga qaramay, bu BASIC va zamonaviy BASIC juda katta farq. Bu satrlarning barchasi 10 ga qadar raqamlangan, har xil GOTO va boshqa dahshatlar - ular endi zamonaviy BASIC bilan hech qanday aloqasi yo'q va hatto 89-yildagi BASIC bilan aloqasi yo'q.

Yana bir kulgili voqea - bu Paskal tili bo'lib, u universitet doiralarida, asosan Rossiyada va sobiq Sovet Ittifoqi mamlakatlarida keng tarqalgan. U hayratlanarli darajada ishlatilgan va ishlatilishda davom etmoqda til o'rgatish. Dunyoning qolgan qismida u kamroq tarqalgan, lekin ayni paytda tirik va yaxshi. Wirth shunday odam bor - bu erda u olim, nazariyotchi. U Algolning muhokamasida qatnashdi, unga nima bo'lganini yoqtirmadi va u o'z tilini - Paskalni o'ylab topdi. Va keyin Borland kompaniyasi (va undan oldin, ko'plab boshqa kompaniyalar - Apple, xususan, ishtirok etgan) uni olib, hamma narsani buzdi. Uning go'zal, nozik nazariyasi bor edi - "hamma narsa yaxshi bo'ladi" - va ular uni olib, odamlarga ish uchun zarur bo'lgan narsalar bilan to'ldirishdi. Xo'sh, u xohlaganchalik chiroyli bo'lmadi.

Va nihoyat, . C muhandislar tomonidan ixtiro qilingan. Agar Paskal olim tomonidan ixtiro qilingan bo'lsa, u holda C Kernighan va Ritchie tomonidan ixtiro qilingan, ular Bellda muhandis bo'lib ishlaganlar. Bu qanday sodir bo'ldi? O'sha paytda, bu tillarda (ma'ruzachi Fortran, COBOL, Algolga ishora qiladi) tizimli biror narsa yozish mumkin emas edi. "Tizimli" nima? Masalan, operatsion tizim, ba'zi drayverlar, boshqa narsa. Bu tillar matematik hisob-kitoblar, biznes hisob-kitoblari, hamma narsa uchun mo'ljallangan edi. Va qolgan hamma narsa assemblerda yozilgan. Ba'zi tillar bor edi, ular hozir o'lik, ya'ni S tili Assemblerdan darhol paydo bo'lmagan, balki ba'zi bir oraliq narsalar orqali paydo bo'lgan.

Gap nimada? Kernigan va Ritchi Asteroidlar o'yinchog'i - chivinlarni o'ynashni yaxshi ko'rishardi kosmik kema, va asteroidlar bor, u ularga o'q uzadi va ular parchalanadi. Ular o'ynagan serverga ega edi, lekin u erda juda ko'p odamlar bor edi va o'yinchoq sekinlashdi. Va ular o'zlarining ofislarida biron bir joyda hech kim ishlatmaydigan kompyuterlari borligini topdilar. Ammo muammo bor edi - u boshqa arxitekturaga ega edi va o'yin assemblerda yozilgan.

Ular uni qayta yozishdi, albatta, hatto unga o'ynash uchun ba'zi xususiyatlarni qo'shdilar. Ammo bu ularni har safar yangi arxitektura uchun qayta yozish unchalik aqlli emas degan fikrga olib keldi. Va ular mos keladigan yuqori darajadagi tilni yozishga qaror qilishdi tizim dasturlash, ya'ni unda xotirani boshqarish mumkin bo'ladi, unda biror narsa qaerda yotganini va ushbu xotira qismlariga qanday kirishni tushunish mumkin bo'ladi. Shunday qilib, keyingi barcha narsalarga katta ta'sir ko'rsatadigan C tili paydo bo'ldi. Ularning barchasi (ma'ruzachi Algol, Fortran va boshqa tillarga ishora qiladi) katta ta'sir, lekin bu erda C - to'g'ri ha ...

Shunga ko'ra, bu Unix-da asosiy til edi - operatsion tizim o'sha paytda hozirgidan ham mashhurroq edi. Va 80-yillarda vaziyat shunga o'xshash edi (ma'ruzachi Basic, C va boshqa tillarda ko'rsatadi). Aytaylik, bularning barchasi biz bilan asta-sekin o'lib ketdi (ma'ruzachi Assembler, Fortran va Algol haqidagi eslatmalarni o'chiradi) ... Va 80-yillarda kompyuterlar kichikroq, aqlliroq, arzonlashdi va odamlar har xil g'alati narsalarni xohlashdi. yanada yaxshi yashash, yanada qiziqarli yashash.

80-yillardagi tillar

Birinchi g'alati narsalardan biri C++ tili edi. C tilida juda ko'p kamchiliklar mavjud (yaxshi, juda katta) - siz unda hamma narsani qilishingiz mumkin, shu jumladan oyog'ingizga otish, o'zingizni oyog'ingizga fantastika bilan otish, ikkinchi oyog'ingizga, bir oyog'ingiz bilan otish. boshqa oyoq, umuman olganda - nima qilishni xohlasangiz. Ammo shu bilan birga, u erda ba'zi arxitektura ishlari ancha qiyinlashadi - yana Assemblerda bo'lgani kabi, biz qaerda ekanligimizni, qanday va qanday xotira ajratganimizni kuzatib borishimiz kerak; bu xotira har doim bir joyda "oqadi" - ya'ni biz ajratdik, o'chirishni unutdik, noto'g'ri narsani o'chirib tashladik, xotiradan chiqib ketdik, umuman olganda - juda ko'p muammolarni keltirib chiqardik.

C++ dastlab C tiliga rivojlanishni osonlashtiradigan kengaytmalar to'plami sifatida yaratilgan. O'sha paytda ob'ektga yo'naltirilgan dasturlash modaga aylandi va odamlar hamma narsani ierarxiya deb ta'riflash mumkin, ya'ni sizda to'p bor (mavhum), siz undan futbol to'pi, voleybol, boshqa mavhum to'pni meros qilib olasiz deb qaror qildilar. O'shanda "biz endi hamma narsani qandaydir ierarxiya shaklida yozamiz va hamma narsa yaxshi bo'ladi, hayot yaxshilanadi, hamma narsa yaxshi bo'ladi va tamom" degan moda edi. C++ ma'lum ma'noda ushbu ob'ektli yondashuvni amalga oshirdi - bu birinchi ob'ektga yo'naltirilgan dasturlash tili emas edi, lekin u juda mashhur bo'ldi va unda barcha turdagi xususiyatlar paydo bo'la boshladi. Shu bilan birga, C ++ C tili bilan deyarli to'liq moslikni saqlab qoldi (o'sha paytda), C tilida yozilgan dastur 99% hollarda C ++ sifatida muvaffaqiyatli tuzilgan va hatto xuddi shunday ishlagan. Bu C dan C++ ga o'tishni osonlashtirish uchun mo'ljallangan edi.

Ob'ektga yondashuvdan tashqari (C ++ da) u tezda paydo bo'ldi standart kutubxona andozalar (STL). O'ylaymanki, maktabda Paskal tilini hali ham o'rganganlar, sizda, birinchi navbatda, o'rnatilgan tartiblash yo'qligini bilishgan (qadimgi, ko'k Borland Paskalda, hozir u zamonaviy versiyalarda) - saralashning namunasi (manbai) mavjud. , uni nusxalash va joylashtirish mumkin. Lekin bu yerda siz butun sonlarni saralashni istasangiz, bu yerda haqiqiy sonlarni va bu yerda siz bir-biri bilan taqqoslanadigan satrlarni xohlaysiz, aynan bir xil ishlarni bajaradigan uchta turli xil yozishingiz kerak edi, ular faqat turli xil ma'lumotlar turlariga ega. Bu unchalik yaxshi emas va C++ da darhol paydo bo'lmagan andozalar bu muammoni sezilarli darajada osonlashtirdi. Ya'ni, sizda bir-biri bilan solishtirish mumkin bo'lgan narsani muvaffaqiyatli saralaydigan mavhum dastur mavjud edi.

90-yillardagi skript tillari

Ammo vaqt to'xtamadi, 80-yillarda juda ko'p qiziqarli narsalar sodir bo'ldi. Ammo 80-90-yillarning boshlarida kompyuterlar shunchalik yaxshi bo'ldiki, juda g'alati va juda samarasiz narsalarni qilish mumkin edi. Xususan, bu skript tillari bo'lib, ular mashina kodiga tuzilmagan, ammo talqin qilingan. BASIC ham bir muncha vaqt talqin qilingan, ammo bu skript tillari asosan so'zlarni qayta ishlash uchun mo'ljallangan edi - masalan, Perl, Python (u o'sha paytda unchalik mashhur emas edi), PHP, Ruby - bu skript tillari ma'lum darajada ular hali ham yashashadi (ularning barchasi 2000 yilgacha, hatto undan ham oldin paydo bo'lishga muvaffaq bo'lgan).

Keling, ularni bir oz ko'rib chiqaylik, chunki bular o'ziga xos narsalar va hozir ko'p joylarda qo'llaniladi. Fikr nima? Agar biz kompilyatsiya qilmasak, biz ko'proq narsaga ruxsat berishimiz mumkin. Masalan, dastur o'z kodiga qarashi va qandaydir tarzda undan foydalanishi mumkin; u ichida nima sodir bo'layotganini biladi va shuning uchun siz juda ko'p qiziqarli narsalarni qilishingiz mumkin.

Perl so'zlarni qayta ishlash uchun mo'ljallangan - o'sha kunlarda kompyuterlarda xotira shunchalik ko'p ediki, siz u erga biron bir matn qo'yishingiz va bu matn bilan foydali narsalarni qilishingiz mumkin edi (masalan, so'zlarni sanash, ba'zilarini qidirish). Ammo, mening fikrimcha, bu biroz aqldan ozgan odamlar tomonidan ishlab chiqilgan, chunki u haqida shunday hazil bor: “Yozilgan har qanday belgilar to'plami to'g'ri dastur Pearl ustida. Menimcha, siz faqat unga yozishingiz mumkin, uni o'qiy olmaysiz. Men Perl kodiga qaraganimda va biror narsani tushunishga harakat qilsam, men hech narsani tushunmayapman. Balki uni yaxshi bilganimda bir narsani tushunardim, lekin hali ham biladigan odamlardan eshitganimdek, qayta yozish osonroq, deyishadi. Ya'ni, dasturlar qisqa va u erda nima borligini aniqlash va uni tuzatishdan ko'ra ularni qayta yozish osonroq.

Taxminan o'sha paytda, 90-yillarning o'rtalarida Internet paydo bo'ldi. Avvaliga bu pochta, statik HTML-ga ega saytlar edi, lekin odamlar u erga qandaydir dinamikani qo'shishni xohlashdi, shunda hamma narsa dinamik tarzda sodir bo'lishi, ba'zi shakllar to'ldirilishi, mehmonlar kitoblari va boshqa narsalar bo'lishi mumkin edi. Shunga ko'ra, bu qandaydir o'zaro ta'sirni talab qildi, ular uning o'zaro ta'siri bo'yicha protokolni ishlab chiqdilar va eng muhimi, foydalanuvchi so'roviga javoban "tupuradigan" ushbu statik (shartli) sahifalarni yaratishdi.

Umuman olganda, o'sha paytda Pearldan boshqa hech narsa mos kelmadi. Sof C yoki C++ ishlov beruvchisida yozish yomon fikr edi. Va o'sha paytda yaxshiroq (va etarlicha uzoq) bo'lmaganligi uchun Pearl veb-ishlab chiqish uchun asosiy til edi. Albatta, miqyosni hozir sodir bo'layotgan voqealar bilan taqqoslab bo'lmaydi.

PHP tasodifan ... sifatida paydo bo'ldi. Bir kishi buni tezda to'xtatdi - u o'zining qandaydir sahifasini yaratdi, uning qandaydir mehmonlar kitobi, boshqa narsa, nimadir bor edi. Va u Perl uchun C ga o'xshash ba'zi makrolar to'plamini yozdi, chunki u C dan qanday foydalanishni bilardi, chunki bu unga juda qulay edi. Va uni Shaxsiy Bosh sahifa deb nomladi. U buni baham ko'rdi va dedi: "Odamlar, men nima yozganimni qarang, bu erda hamma narsa Perl-ga qaraganda ancha aniq va siz uni tahrirlashingiz mumkin." Va odamlarga yoqdi.

Keyin u masalani tashladi. Umuman olganda, bu PHP yashay boshladi va vaqt o'tishi bilan Perlga qaraganda ancha mashhur bo'ldi. Ammo uning bu "tug'ilish jarohati" (Pearl uchun makrolar to'plami sifatidagi g'oya) u bilan juda shafqatsiz hazil o'ynadi. Tili g'alati. Ya'ni, u o'z-o'zidan rivojlandi, uni hech kim loyihalashtirmadi, rivojlanish jarayonini hech kim boshqarmadi (na kompaniya, na biron bir shaxs), lekin ko'plab guruhlar bor edi, ularning har biri o'zlariga yoqqan narsalarni arraladi. Natijada, u erda funktsiyalar boshqacha chaqiriladi, hatto uslub ham yo'q, hamma narsa tagiga chizish orqali amalga oshiriladi, umuman olganda, sozlamalar bu erda va u erda va bularning barchasi qanday ishlashi juda aniq emas. Lekin ikki soat ichida PHPda o‘tirib yozishingiz mumkin, chunki u shunday deb o‘ylagan.

Python va Ruby: Ruby hozir kamroq mashhur, Python qandaydir tarzda yaxshiroq "rejalashtirilgan", bu haqda keyinroq gaplashamiz. Ko'rinib turibdiki, o'sha kunlarda bular (o'qituvchi Perl, Python, Ruby, PHPga ishora qiladi) juda ixtisoslashgan maqsadlar uchun juda ixtisoslashgan tillar edi. Umuman olganda, o'sha paytda hech kim ularga tizimli dasturlash, biznes mantig'ini yozmagan va hozir ular buni juda ko'p qilishmaydi.

90-yillardan tuzilgan tillar

Biz taxminan bir xil vaqtlarda boramiz, lekin boshqa yo'nalishda. O'sha paytda C++ bizning mamlakatimizda veb uchun emas, matnni qayta ishlash uchun emas, balki shunchaki ilovalar, operatsion tizimlar, o'yinchoqlar uchun - umuman, hamma narsa uchun yozilishi kerak bo'lgan deyarli hamma narsa uchun ishlatilgan. Lekin C++ juda dahshatli til. Nega? Chunki birinchi navbatda, u tufayli meros orqaga qarab muvofiqlik barcha C muammolari. Hali ham million kishi halok bo'lishi mumkin turli yo'llar bilan, C da bo'lganlar (albatta, C ++ da yangi usullar qo'shilgan). Shu bilan birga, agar siz C++ mualliflari nazarda tutganidek, hamma narsani yaxshi va to'g'ri yozsangiz, unda, albatta, eski C-ish usullarida o'zingizni o'ldirishning iloji yo'q edi va xuddi shunday ko'rinadi. ulardan kamroq edi. Biroq, uning o'ziga xos juda g'alati ob'ekt modeli bor edi. Dasturni modullarga, bo'laklarga bo'lish qandaydir tarzda C dan kelgan (agar siz C yoki C ++ da qanday yozishni bilsangiz - aslida bu kutubxona matnini dasturingizga kiritish sifatida o'ylab topilgan, natijada, Agar siz bir nechta o'z ichiga olgan narsalarni yozsangiz, sizda hamma narsa bor - agar u boshida bo'lgani kabi "ibtidoiy" bo'lsa - hamma narsa bitta faylga kiritiladi va keyin hammasini kompilyatsiya qilish juda uzoq vaqt talab etadi, chunki u bir necha marta ketadi. O'sha Paskal, Virtovskiy bu borada ancha o'ylangan, keyingi versiyalari bundan ham yaxshiroq.

Umuman olganda, C++ ning kamchiliklari juda ko'p. C++ da yozish uchun dasturchining malakasi yuqori bo'lishi kerak edi va bunday dasturchilar qimmat edi (ta'lim ham, boshqa narsa ham, ya'ni bozorda dasturchilarni topish qiyin, ular juda ko'p pul to'lashlari kerak, yaxshi, umuman olganda, bu narsa emas ... ). Bizning kompyuterlarimiz esa tezroq va tezroq hisoblanmoqda, ular arzonlashmoqda, odamlar o'zlari uchun yangi kompyuterlar sotib olishmoqda va ko'proq ilovalar, telefon uchun ko'proq o'yinchoqlar, umuman olganda - ko'proq quvonch.

Java shunday tug'ilgan. Bu tilning nomini qanday olganligi haqida juda kulgili hikoya ham bor. Dasturchilar bor, ular doimo kofe ichishadi va o'sha paytda Java orolida o'sadigan kofe ichish moda edi. Til o'rnatilgan qurilmalar uchun, xususan, qahva mashinasi uchun til sifatida yaratilgan. Bu nom paydo bo'ldi ...
Umuman olganda, u bilan nima boshlandi, unda nima yaxshi edi va nega u katta shuhrat qozondi? Birinchidan, ular Sishnoy merosidan butunlay qutulishdi. Ko'rsatkichlar yo'q, tananing bir qismini o'qqa tutish va hamma narsani buzishning kamroq usullari. Ikkinchidan, ular nuqtai nazaridan ancha yangi g'oyalarni kiritdilar ob'ekt modeli- ya'ni C ++ Java'dan ancha oldin paydo bo'lgan va ko'proq arxaik, "yovvoyi" ob'ekt modelidan foydalangan. Xo'sh, bu erda (ma'ruzachi Java-ga ishora qiladi) o'sha paytda u ko'proq o'ylangan va nazariy jihatdan odamlar o'ylashgan va amalda qo'llagan va hamma narsani ancha salqinlashtirgan.

Va nihoyat, uchinchisi. Java tilidagi dasturlarimiz mashina kodiga emas, balki virtual mashina uchun kodga yig'ilgan. Ya'ni, sizda virtual mashina (VM) JVM - Java bor edi. Sizning dasturlaringiz qandaydir oraliq vakillikka yig'ilgan va keyin ushbu mashina yordamida ular allaqachon bajarilgan. Nima berdi? Birinchidan, u sekinlashdi, ikkinchidan, xotirani dahshatli kuch bilan iste'mol qildi, uchinchidan, u har qanday joyda (nazariy jihatdan) portativ edi - hatto qahva qaynatgichga, hatto qahva maydalagichga, hatto kompyuterga, hatto mobil telefonga ham. Bir tomondan, bu yaxshi, ya'ni siz virtual mashinani amalga oshirishni yozgansiz, keyin hamma joyda Java dasturlaringizni ishga tushirasiz. Ammo, boshqa tomondan, o'sha paytda bir xil telefonda xotira kam bo'lganligi yomon, unumdorligi past edi va bularning barchasi qo'shimcha ravishda to'xtab, sekinlasha boshladi.

Ammo bu umuman til ixtiro qilingan asosiy narsa emas. Java tili dasturchilarning malakasiga qo'yiladigan talablarni kamaytirish uchun ixtiro qilingan. Ya'ni, yomonroq dasturchilar yozishi mumkin yaxshi dasturlar Java-da, chunki u yomon dasturlarni yozishga ruxsat bermaydi - yomon dasturlarni yozish uchun hech qanday vosita yo'q. U erda siz faqat yaxshi dasturlar yozishingiz mumkin. Xo'sh, tilni yaratuvchilarning tushunishida.

Ya'ni, agar C da, C ++ da, Pythonda bo'lsa, biz loyihamizdan qandaydir dahshatli axlatxonani ko'paytirishimiz mumkin, u erda hamma narsa aralashib ketadi, soatlab ketadi va boshqa narsa bor. Java-da axlat qutisini ko'paytirish ham mumkin, ammo buning uchun siz allaqachon biroz harakat qilishingiz kerak. Ya'ni, sukut bo'yicha, bu "axlatxona" bo'lib chiqmaydi, boshqa muammolar paydo bo'ladi, biror narsa meros bo'lib o'tgan, u erda meros bo'lib qolgan - umuman olganda, o'nta unchalik ahamiyatli bo'lmagan bitta mazmunli chiziq bo'lib chiqadi. Ammo, ehtimol, bunday o'rta malakali dasturchi juda yuqori sifatli kod yozishi mumkin.
Biz deyarli oxiriga yetdik. Biz uchun paydo bo'lgan navbatdagi narsa .Net (dotnet) va xususan, bizni C# qiziqtiradi (deyarli bir xil [ma'ruzachi Java-ga ishora qiladi], ya'ni tafsilotlarda farqlar mavjud, agar siz ular orasidan tanlasangiz. - qaerda ko'proq pul to'lashini ko'ring).

Va yana bir narsa - JavaScript. Java tiliga hech qanday aloqasi yo'q, o'sha yili paydo bo'lgan - bu so'z moda edi, ular foydalanish uchun savdo belgisini litsenziyalashdi.

Eng muhim narsa nimaga e'tibor berish kerak? (O'qituvchi C++ dan Java, .Net, C#, JavaScript va PHP ga o'qlarni chizadi). Ushbu tillarning birida va boshqa ko'plab tillarda oddiy dastur yozish uchun - agar siz C ++ tilini bilsangiz, odatda boshqa hech narsani bilishingiz shart emas - siz C ++ tilida olib, yozasiz, so'ngra boshida dollar qo'shasiz. , boshqa biror narsa kichik ishlarni bajaradi va u siz uchun har qanday narsada ishlay boshlaydi (ma'ruzachi C ++ dan o'qlar tayinlangan tillarga ishora qiladi). Ya'ni, ular ba'zilarida juda o'xshash oddiy narsalar. Agar siz ba'zi maktab muammolarini, o'quv muammolarini yoki boshqa narsalarni hal qilsangiz (loyiha yaratmang katta loyiha- sizda raqamlarni o'qiydigan, konsolda raqamlarni ko'rsatadigan va boshqa narsalarni qiladigan bitta fayl mavjud bo'lsa), unda bu tillar o'rtasida deyarli farq yo'q. JavaScript va PHP ixtisoslashganligi aniq, ularda hamma narsa biroz boshqacha. Va bu erda (ma'ruzachi Java va C # ga ishora qiladi) juda kam farq bor.

O'shandan beri har xil qiziqarli narsalar paydo bo'ldi, ammo ular muvaffaqiyatli yashaydimi yoki o'ladimi, aniq emas. Endi nima, ular qanday vazifalar uchun foydalanadilar?

Vazifaga qarab til tanlash

Aytaylik, siz video karta uchun drayverni yozish vazifasiga duch keldingiz. Bugun qaysi tildan foydalanasiz? (Tomoshabinlardan hayqiriq: Java!) Nima uchun… Java ajoyib, lekin nega Ruby yoki PHP-da emas? (O'qituvchi kinoya bilan gapiradi.)

past darajadagi dasturlash

Agar siz past darajadagi biror narsa yozayotgan bo'lsangiz, unda eng yaxshi tanlov- bu C, lekin aslida men C ++ buning uchun ishlatilganini eshitdim (lekin ko'rmadim). Lekin men bunga unchalik ishonmayman, chunki Cda siz aniq nazorat qilishingiz mumkin - siz juda ko'p bayt xotira berganingiz uchun, bu juda ko'p bo'lishini anglatadi. Va C++ (STL) da satr qanday amalga oshiriladi? Xo'sh, qandaydir tarzda amalga oshirildi. Va oxir-oqibat, biz u erda qanday va nima sodir bo'lishini bilmaymiz, ehtimol video kartamizda xotira tugaydi yoki boshqa narsa sodir bo'ladi. Shuning uchun, C hali ham yashaydi va o'lmaydi, tizim dasturlashning bunday vazifalari hali ham mavjud - operatsion tizimni yozing, drayverlarni yozing, boshqa narsalarni yozing - C buning uchun juda yaxshi. Bundan tashqari, hozirda batareyalarda ishlaydigan har xil qurilmalar paydo bo'ladi (narsalar Interneti yaqinda paydo bo'lishini va'da qiladi) (va, albatta, ular millionlab bo'ladi, hamma narsa ushbu Internet narsalarga osib qo'yiladi) , ular juda arzon bo'lishi va elektr energiyasini juda kam iste'mol qilishi kerak. Shunga ko'ra, 2 KB xotira, 5 kHz protsessor bo'ladi va, albatta, yaqin kelajakda biron bir virtual mashina yoki skript tilini burish mumkin bo'lmaydi - bu siz yozishingiz kerak degan ma'noni anglatadi. C da biror narsa. Va hozir ham, masalan, video kartada hisob-kitoblar (OpenCL yoki boshqa texnologiya) - ular o'ylab topmaydilar. yangi til ular uchun dasturlar yozish - ular ba'zi katta cheklovlar bilan C qiladi. Odamlar qanday qilib bilganlari uchun, nega yangi narsalarni o'rganish kerak? Rasmiy ravishda, bu, ehtimol, qaysidir ma'noda C.

Veb dasturlash

Aytaylik, siz yozmoqchisiz yangi facebook(ijtimoiy tarmoq). Uni nimaga yozasiz? (Tomoshabinlardan ular HTML va CSS haqida gapirishadi.) HTML, CSS - bu dizayn va biz u yerda fotosuratlar qo'shish, do'stlar orttirish, sharhlar qoldirish mumkin bo'lishini istaymiz.

Skript qismi uchun - ya'ni mijoz tomonida nima sodir bo'ladi - bu JavaScript. Bundan tashqari, ba'zida JavaScript boshqa tilda yaratiladi va yuboriladi (bu skript yaratiladi ... chunki mantiqdagi ba'zi o'zgarishlarni qayta ishlash ba'zan osonroq bo'ladi).

Ajablanarlisi shundaki, u PHP da yozilgan - va Facebook va boshqa ko'plab yirik loyihalar. Albatta, men o'z narsalarimni yozishga majbur bo'ldim, shunda u hali ham yaxshi ishlaydi va u bajarilgandek emas, lekin ular buni qilishdi. Asosan, nima yozishingiz muhim emas, lekin men Perlni tavsiya qilmayman. Bu erda va hozir, albatta, hech kim internet uchun noldan hech narsa yozmaydi. Har bir inson qandaydir ramka yoki boshqa narsalarni yozadi. Onlayn do'kon? Biz onlayn-do'kon uchun ramka yuklab oldik - bu hammasi, biz onlayn-do'kon yozdik.

Biznes dasturlash

Keyinchalik, siz zerikarli bank arizasini yozmoqchisiz. Yoki, masalan, sizda sim karta sotadigan odam bormi? Ehtimol, siz biror marta telefon yoki biror narsa sotib olgandirsiz va ular sizga: "Mana, tizim osilgan, biz hech narsa qila olmaymiz", deyishgan. Bunday arizani nimaga yozasiz? (Tomoshabinlarning Python haqida qichqirig'i) Siz Pythonda bunday narsalarni yozolmaysiz, siz nimasiz ?! Pythonda biznes uchun hech narsa yozilmasligi kerak. Nega? Chunki Python-da biror narsa yozganingizda, yozish jarayonida sezilarli miqdordagi xatolarni topa olmaysiz. Python har tomonlama dinamik ravishda terilgan va umuman olganda, siz u erda xatoni yashirishingiz mumkin, shunda u shunday vaziyatda paydo bo'ladiki, siz bu egri foydalanuvchilar u erda nima qilganini, siz uchun hamma narsa buzilganligini hatto tushunolmaysiz. Ya'ni, o'zingiz uchun Python-da, kichik skriptlarni yozish yaxshiroqdir - u erda nima sodir bo'layotganini va nima qilinayotganini tushunasiz. Xo'sh, yoki siz tashlab yuborishga qarshi bo'lmagan narsa: siz raqobatchilaringizdan oldin biror narsa chiqarmoqchisiz, agar u har safar buzilsa nima bo'ladi. Siz Pythonda yozdingiz va tamom - siz bozorni qo'lga kiritdingiz. Va agar siz, masalan, uzoq vaqt davomida biror narsa yozsangiz bank ilovasi ba'zilari (shuning uchun u kreditlarni tasdiqlaydi, boshqa narsa) - siz uni Java-da yozasiz. Chunki u yerda jiddiy masala, qog‘ozlar, pullar, hujjatlar, boshqa narsa, lekin shunchalik aralashtirib bo‘lmaydiki, hamma narsa buziladi, aks holda odamlar xafa bo‘lishadi – pullari ketib, hech qayerga yetib bormadi, chunki sizda bor. bir lahzada satr raqamga aylandi yoki aksincha. Demak, siz Java-da metodik ravishda olib, yozasiz, yozasiz ... Xo'sh, yoki .Net-da bunday holatlar, qoida tariqasida, ham sodir bo'ladi. U erda, albatta, siz ham muammolarga duch kelishingiz mumkin, ammo buning ehtimoli biroz pastroq.

Armiya, aerokosmik sanoati uchun dasturlash

Endi tasavvur qiling-a, ular sizni Oyga raketada yuborishga qaror qilishdi. Raketa dvigatellarini boshqaradigan kodni qanday yozishni afzal ko'rasiz? Ko'raylikchi. Bu, ehtimol (ma'ruzachi Perl, Python, PHP, Rubyga ishora qiladi), bunga loyiq emas - u sekinlashadi, boshqa narsa sodir bo'lmoqda, umuman olganda, men bunday raketada uchishga rozi bo'lmagan bo'lardim. C++ da? Rostini aytsam, men ham bunday qilmayman, chunki C++ da o'zingizni o'ldirishning ko'plab usullari mavjud. Kosmosda biror joyda bo'lganingizda, bu unchalik yaxshi emas.

Ehtimol, Java-da? U erda hamma narsa juda ishonchli ko'rinadi va arxitektura yaxshi, yovvoyi turlar yo'q, qo'shimcha xotira ortiqcha bo'lmaydi. Aytaylik, eng muhim daqiqa keldi va bizning Java biz uchun axlat yig'ishga qaror qildi. Biz qo'nishimiz kerak, sekinlashtiramiz va u: "Yo'q, axlat ketmoqda". Umuman olganda, unchalik ham emas.

Rostini aytsam, bu dastur Paskalda yozilishini afzal ko'raman. Albatta, men Paskalni yoqtirmayman, lekin qandaydir tarzda bunday masalalarda juda zo'r bo'lardi.

Bir vaqtning o'zida dasturiy ta'minotni ishlab chiqish uchun bir nechta tillardan foydalanish

Xo'sh, nima haqida gapirish kerak zamonaviy tillar. Endi ko'plab loyihalar birorta tilda yashamaydi, ya'ni ularning ba'zilari bir tilda, ba'zilari boshqa tilda, yana kimdir uchinchi tilda yashaydi. Misol uchun, agar sizda juda katta hajmdagi ma'lumotlarni qayta ishlaydigan veb-ilovangiz bo'lsa, disklarga kirish (hatto ma'lumotlar bazalariga ham emas, ular shunchalik kattaki, hatto u erda yozilgan ma'lumotlar bazasi ham tortib ololmaydi) ba'zilarida yozilgan bo'lishi mumkin. past darajadagi C, diskka juda tez yozish uchun va bularning barchasi. Tabiiyki, butun loyihani C tilida yozishning hojati yo'q. Ehtimol, Java-da tez qo'ng'iroqlar uchun C funktsiyalarini chaqiradigan oraliq mantiq bor. Xo'sh, frontend (foydalanuvchi nima ko'rmoqda), albatta, allaqachon biror narsaga, ba'zi skriptlarga, brauzer tomonidan to'g'ridan-to'g'ri bajariladigan narsaga (JavaScript) yozilgan. Va bularning barchasi birgalikda yashaydi va muvaffaqiyatli o'zaro ta'sir qiladi.

Ba'zi ilovalarni ishlab chiqishda, hatto katta, ba'zida odamlar nima qilishadi? Ular uni olib, Python-da prototip yozadilar (hammasi qanday ishlaydi), uning eskizini chizadilar, qandaydir arxitektura haqida o'ylashadi. Unga yozish haqiqatan ham juda tez - ular prototipni tashladilar, u bilan tajriba o'tkazdilar va dedilar: "Voy! Bu juda zo'r! Va butunlay qayta yozilgan. Ko'rinishidan, ular ishni ikki marta bajardilar, bu ikki baravar ko'proq vaqtni oldi (yaxshi, bir yarim). Lekin yoq! Ko'pincha bu yo'l yomon emasligi ma'lum bo'ladi, chunki agar siz darhol biror narsada, masalan, Java-da yozsangiz va keyin: "Yo'q, keling, arxitekturani butunlay o'zgartiramiz va hamma narsani o'zgartiramiz" deb qaror qilsangiz, unda siz 10 marta sarflaysiz. ko'proq vaqt. Bunday narsalar ham mavjud va yashaydi.

Har qanday dasturlash tilining muvaffaqiyati uchun shartlar

Keling, nima uchun ba'zi chiroyli tillar omon qolmagani yoki juda cheklangan makonda yashamaganligi haqida gapiraylik. Wirth Apple, Borland va Paskal bilan qilgan yomon kompaniyalarini ko'rib, undan ham yaxshiroq tilni - Oberonni o'ylab topdi. Bu shunchaki vahshiyona minimalist edi - ya'ni juda kam buyruqlar bor edi (Stringlar? Bizga strings nima uchun kerak? Biz belgilar massivini yaratamiz!). Xo'sh, u bilan nimadir yaxshi bo'lmadi, shuning uchun u ketishi mumkin edi.

Yana bir narsa. AQSh harbiylari ulardan hamma narsa ishlaydigan va hamma narsa yozilishi mumkin bo'lgan ajoyib tilni ishlab chiqishni so'radi. Natijada juda dahshatli Ada tili paydo bo'ldi, ammo unda hali ham biror narsa yozilgan, lekin yana - faqat harbiylar uchun.

Muammo nimada? Nima uchun Python kabi ba'zi tillar bozorni egallab oldi, uni boshida hech bir kompaniya qo'llab-quvvatlamadi. PHP ham yomon ishlab chiqilgan bo'lib, bozorni (ko'p qismini) o'z-o'zidan egallab oldi. Va har xil milliardlab dollar sarmoya kiritildi (ma'ruzachi Adaga ishora qiladi) va hech qaerga ketmadi, hech narsa sodir bo'lmadi. Bu nima bilan bog'liq? Buning sababi, bu tillar atrofida hech qanday infratuzilma mavjud emas. Ya'ni, til zo'r bo'lishi mumkin, lekin hali hech qanday hujjat yo'q, savollarga javob beradigan (Stack Overflow-da) hali hamjamiyat yo'q va nihoyat, eng muhimi, yo'q. katta raqam kutubxonalar, til otmaydi. Ya'ni, siz, masalan, Oberon-da veb-sayt yozmoqchi edingiz. Va bu nima, nega emas? Va muammo boshlanadi ... Siz Oberon-da veb-serveringizni engil sinovdan o'tkazish uchun sozlay olmaysiz, hech qanday kutubxonalarni ulay olmaysiz, chunki ular Oberon-da emas. Va bularning barchasi qandaydir tayoqchalar orqali amalga oshiriladi, kuchlar ketadi va umuman, siz tupurasiz va saytingizni Oberon o'rniga sof C-da yozasiz. Va boshqa tillardagi kutubxonalardan foydalanishga qodir bo'lgan tillar yaxshi yashaydi. Xuddi shu Python sekinlashadigan joylarda. Umuman olganda, saralash va boshqa narsalar kabi barcha turdagi standart narsalar C tilida yozilgan va u (Python) ular bilan qanday munosabatda bo'lishni biladi.

Java-da Java Native interfeysi ham mavjud. Bu asosan C, ya'ni u erda (mening fikrimcha, ular har doim taqiqlashni xohlashadi, lekin ular hali taqiqlanmaganga o'xshaydi) bu tillar mavjud kutubxonalar (asosan Cs) bilan o'zaro aloqada bo'lishi mumkin. Va shuning uchun ular olishadi va ishlaydilar. Men sizga aytmoqchi bo'lgan fikrni tushunasiz, to'g'rimi? C-kutubxonani qanday ulashni bilmagan tillarda yozmang. Xo'sh, agar siz ajoyib narsadan foydalanmoqchi bo'lsangiz. Va asta-sekin ular (tillar) qandaydir infratuzilmaga ega bo'lishadi. Va ular yaxshi yashashadi.

Dasturlash tili va kasbga yo'naltirish

Keling, hayotdan nimani xohlayotganingizni qanday tushunish haqida gapiraylik. Ajoyib narsalardan nima bo'ladi? Siz ba'zi tizim dasturlarini qila olasiz, to'g'rimi? U erda bu baytlarni hisoblash juda yaxshi, siz quadrokopterlarni, qandaydir kameralarni ishga tushirishni xohlaysiz, boshqa biror narsa qilishni xohlaysiz. Keyin C sizning tanlovingiz bo'lishi mumkin.

Agar siz yozmoqchi bo'lsangiz, ehtimol hayotdagi eng qiziqarli ilovalar emas, lekin ularni loyihalash, bularning barchasini o'ylab ko'rish va ko'pincha o'tirib, zerikish uchun ko'p pul ishlang (buning uchun pul to'lashingiz kerak) Agar siz yaxshi bo'lsangiz, sizni sog'indim), mana ular - Java, .Net. Siz qandaydir bankka ishlashga borasiz, yozasiz, to'qqizda oq ko'ylakda ishga borasiz, yaxshi maosh olasiz va eng yaxshi Java dasturchilarining tavsiyalariga ko'ra yozasiz, .Net qo'y va boshqalar ...

Agar siz ba'zi ilovalar, ba'zi brauzerlar, ba'zi o'yinchoqlar, boshqa narsalarni yozmoqchi bo'lsangiz, unda C ++ juda yaxshi. Agar siz veb-saytlar yozmoqchi bo'lsangiz, unda ular siz tanlagan tillar (ma'ruzachi Perl, Python, PHP, Ruby tillarini ko'rsatadi), unchalik katta farq yo'q. Bitta narsa shundaki, PHP Python-dan oldin o'ladi, shuning uchun agar siz yangi narsalarni o'rganishga dangasa bo'lsangiz, Python-ni o'rganing. katta farq sezmang, lekin uzoqroq cho'zing.

Ruby bilan nima sodir bo'lishi ham noma'lum. Xo'sh, siz PHP-ni ham o'rganishingiz mumkin, agar siz uni allaqachon o'rgangan bo'lsangiz, chunki ular juda oddiy va u erda qayta o'rganish juda ko'p vaqt talab qilmaydi.

Va nihoyat, dasturlash tillarini qo'llashning yana bir sohasi bor - bu dasturchi bo'lmagan kishi ulardan foydalanadi. Aytaylik, siz matematik, fizik, kimyogar, tahlilchi yoki har qanday odamsiz va siz tezda biror narsani hisoblashingiz, ba'zi ma'lumotlarni tahlil qilishingiz kerak (biologlarga, masalan, Qo'mondon orollarida qancha tulki yashaydi). Bularning barchasini Excel jadvaliga kiritishingiz yoki biror narsa bilan tahlil qilishingiz mumkin. Python ham buning uchun juda mos keladi, u matn bilan ishlay oladi va kutubxonalar har xil, statistik va shunga o'xshash narsalar bilan to'la. Agar siz Mashinani o'rganish turini qilishni, ba'zi ma'lumotlarni qayta ishlashni, bashorat qilishni istasangiz, Python ham buni hozir eng tez bajaradi. To'g'ri, vazifalar juda boshqacha ekanligini ta'kidlash kerak. Misol uchun, agar siz kotirovkalar doimo o'zgarib turadigan sharoitda bir zumda birjada savdo qilmoqchi bo'lsangiz, Python-da Machine Learning qanchalik ajoyib yozmasin, uni tezroq biror narsada yozgan odamlar hamma narsani ertaroq sotib olishga ulguradilar, Agar ularning algoritmlari yomonroq bo'lsa ham, siz hisoblanasiz. Shuning uchun, hatto bu vazifalar mashinani o'rganish(ularning ba'zilari) yuqori unumdorlikni (va nihoyatda yuqori) va shunga mos ravishda boshqa tillarni talab qiladi.

O'zingiz xohlagan narsani tushunishning yagona yo'li - hamma narsani sinab ko'rish. Endi men hamma narsani qanday qilib sinab ko'rishingiz mumkinligi haqidagi tasavvurlardan biri sifatida aytaman. Qanday qilib dasturchi va baxtli bo'lish mumkin? Shunday qilib. FROM toza shifer boshlanishi. Bu yerda siz maktabda matematika, rus tili va boshqa majburiy va ixtiyoriy fanlarni o'qiysiz va dasturlash sohasidagi bilimlaringiz doskada aks ettiriladi (o'qituvchi bo'sh doskani ko'rsatadi) bu daqiqa. Va siz baxtli inson bo'lishni, o'zingiz yoqtirgan narsa bilan shug'ullanishni, ko'p pul ishlashni va o'zingizni hech narsadan bosh tortmaslikni va baxtli bo'lishni xohlaysiz.

Bunga erishish yo'llaridan biri. Universitetlarga umuman o‘qishga kirmagan yoki o‘qishni tashlab milliarderga aylangan, kompaniya egalariga aylangan va hokazolar haqida har xil ilhomlantiruvchi hikoyalar bor, albatta. Ammo shuni ta'kidlash kerakki, milliarder bo'lmagan, ammo yaxshi yashaydigan odamlarning aksariyati bir vaqtning o'zida universitetni tugatgan.

Universitetga kirishda ahvolimiz qanday (hozir maktabda o'qiysiz)? Maktabda o'qiyotganingizda, buni tushunishingiz kerak keyingi qadam- harakat qiling va unga g'amxo'rlik qiling. Imtihondan o'ting yoki olimpiadada g'olib bo'ling. Imtihonda siz Paskal, C ++ (shu jumladan sof C), Python tillaridan foydalanishingiz mumkin (bularni keyinroq eslatmayman). Olimpiadada - o'sha Paskal, o'sha C ++, o'sha Python (uning muammolari haqida hozir gaplashamiz) va ko'pincha Java mavjud. Olimpiadaga qarab boshqa hamma narsa sodir bo'ladi, ammo gap bu emas.

Tillarni tarqatish jadvali qanday ko'rinishga ega? Butunrossiya olimpiadasi informatikada? Butunrossiya, eng zo'r olimpiadada qatnashadigan odamlar nima haqida yozadilar? Bu shunday ko'rinadi (bu erda Paskal degan ma'noni anglatadi va bu erda taxminan 2000 va bu erda taxminan nolga teng, bu erda C ++ va bu erda 2015).

2000 yilda deyarli hech kim C++ yozmagan. 15 yil o'tdi va Paskal zamonaviy bo'lishiga qaramay, deyarli hech kim Paskalda yozmaydi. Bu deyarli bir xil narsani qila oladigan til. Shunchaki, hamma buni o'rganishga juda dangasa bo'lib qolgan, har xil yangi tendentsiyalar va hamma Borland Paskalda yozishda davom etmoqda, bu, albatta, hech narsa qila olmaydi. C++ da odamlar tartiblash uchun ba'zi algoritmlarni (STL) yozadilar - ajoyib, ular sort () ni yozishgan va tamom. Paskalda, odatdagida, eskida - bu muammo. Ular bir nechta to'plamni (kerakli) yozishdi - juda zo'r, uni C ++ da, Paskalda yana qattiq azob bilan yozishdi. Yangi Paskallarda, albatta, buni qilishingiz mumkin, lekin ular umuman pul talab qiladi. Siz buni sezmagandirsiz, lekin shunday.

Java ham bor, lekin Javada juda ko'p harflar mavjud. Bu yirik loyihalar uchun, lekin kichik bir martalik dasturlar uchun bu juda yomon bo'lib chiqadi, chunki qo'shimcha harflar juda ko'p. Ammo ba'zi odamlar ham yozadilar, siz unga yozishni o'rganishingiz mumkin. Ammo u USEda mavjud emas va USE hali ham ko'p qismini olish kerak bo'ladi.

Imtihon uchun eng yaxshisi nima? Imtihon uchun (agar siz hech narsa bilmasangiz va ular sizga maktabda hech narsa o'rgatmasalar) Python tilini o'rganish yaxshidir. Unda ba'zi imtihon savollari yaxshi echilgan. Olimpiadada, umuman olganda, C ++ dan foydalanilganligi ma'lum bo'ldi, chunki Python juda sekin, unda hamma narsa hal etilmaydi.

Shunday qilib, siz olimpiadadan diplom olish va oliy ma'lumot olish uchun universitetga borish uchun tilning kichik bir qismini va ba'zi algoritmlarni (ehtimol) o'rgandingiz va ko'plab muammolarni hal qildingiz.

Endi men HSEda kursni qanday qurishimiz, tillar qanday tartibda o'qitilishi, ular amaliy fanlar fakultetining amaliy matematika va informatika fanlarida qanday o'rganilishi haqida gapiraman, biz buni Yandex bilan olib boramiz. Birinchi semestrda - Python (to'liq emas, maktabda qanday o'rgatish kerakligi haqida) va C ++ (allaqachon kengroq, odatda maktablarda o'qitiladiganidan ancha kengroq). Darhol aytaylik, qo'rqmaslik uchun, agar siz to'satdan buni qilmoqchi bo'lsangiz, siz: "Nima, men bularning barchasini allaqachon bilaman, nega men bir joyga o'qishim kerak? Men boshqa joyga borishni afzal ko'raman." Qanday qilib dasturlashni yaxshi biladiganlar uchun darhol algoritmlarni o'rganishga va ancha nazariy tayyorgarlikka borish imkoniyati mavjud. Biz hozir ularga qaramaymiz, bu (doskaga ishora qiladi) o‘rtacha yoki umuman dasturlashmaganlar uchun.

Birinchi semestr sizga Python asoslarini o'rgatadi, shuning uchun odamlar qanday dasturlashni o'rganishlari mumkin va shuning uchun hech kim juda xafa bo'lmaydi. Python kamdan-kam hollarda maktablarda o'qitiladi, asosan odamlar Paskal yoki C ++ tilini bilishadi. Asosan hatto Paskal, agar u ommaviy maktab bo'lsa. Xo'sh, hech kim xafa bo'lmasligi uchun hamma yangi tilni o'rganmoqda (go'yo ular teng darajada). Va C++, chunki C++ dan keyin istalgan joyga borishingiz mumkin.

Keyin "Algoritmlar" kursi va alohida kurs loyihasi keladi. Amalga oshirish bilan klassik algoritmlar. Nazariy jihatdan biz biror narsani oldik, murakkablikni hisobladik. Ma'ruzada biz oldik, murakkablikni hisobladik, seminarda - algoritmni oldik, amalga oshirdik. Loyiha - bu talabalar tugatgan narsani qilishdir. Misol uchun, loyihalardan biri: hisoblash uchun ... Aytaylik, sizning Moskvada juda ko'p kvartirangiz bor va siz tushunasiz: "Oh, menda juda ko'p ortiqcha narsalar bor, bittasini ijaraga olaman. Va ular qandaydir narxni belgilashadi va hech kim sizdan kvartirani ijaraga olishni xohlamaydi - ehtimol juda qimmat. Yoki ular biron bir narx qo'yishdi, ular darhol uni sizdan olib qo'yishdi va siz: "Oh, men uni arzonga topshirganman" deb o'ylaysiz - va siz ham xafa bo'lasiz. Ya'ni, kvartirani ijaraga olish qancha turadi, hisoblash kerak edi? Siz ma'lumotlarni kiritasiz - bu siz uchun baho yaratadi. Bir nechta narsalardan iborat bo'lgan bunday sayt: jumlalar tuzing, tahlil qiling, mashinani o'rganishning qandaydir algoritmini qo'llang (ehtimol) oddiy va siz biror narsani tanlashingiz, biror narsani, bir necha metr, xonalarning bir nechtasini haydashingiz mumkin bo'lgan chiroyli veb-yuzini yarating. Saunalar soni, kvartirangizdagi jakuzilar soni va narxini taxminiy baholang. Ya'ni, qandaydir tugagan, unchalik emas murakkab narsa. Bu erda u (ma'ruzachi algoritmlar bo'yicha kursga ishora qiladi) konsol I / U bilan shunday kuchli C ++ ni anglatadi. Xo'sh, va bu erda (ma'ruzachi "loyiha" yozuviga ishora qiladi) ustoz rahbarligida biror narsa, ehtimol ma'lumotlar bazalari, ehtimol matnni tahlil qilish va boshqa narsalar.
Keyin uchinchi semestr - "Kompyuter tizimlari" deb nomlangan kurs keladi. Tushunish uchun juda ko'p assembler bor (juda oz) va keyin, sof C va operatsion tizimlar bilan o'zaro aloqaga o'xshash narsa, mohiyatan tizim dasturlash. Seminar uchun loyiha ham har xil mavzudagi narsadir tarmoq shovqinlari, juda past darajali: ba'zi yordamchi dasturlarni ishlab chiqing, masalan, rsync (sinxronizatsiya, siz bilishingiz mumkin. Sof Cda, ko'proq yoki kamroq rsync analogini yozing, bu sizning otalaringizni tarmoq orqali barcha fayllarga kirish bilan sinxronlashtiradi va hokazo. ).

Va nihoyat, to'rtinchisi. Men buni nima deb atashni ham bilmayman, bu juda zarur texnologiya vinaigreti haqiqiy rivojlanish, masalan, veb-ishlab chiqish uchun. Ya'ni, bu ma'lumotlar bazalarining amaliy qo'llanilishi, yana loyihada amalga oshirilgan ishlarga o'xshash narsa (ma'ruzachi loyiha bo'yicha 2 ta kursni ko'rsatadi), lekin allaqachon chuqurroqdir. Ya'ni, ko'proq yoki kamroq aniq narsalar, amaliy dasturlash. Bunga parallel ravishda har qanday nazariya mavjud, ular hali ham fan bilan shug'ullanmoqdalar.

Va ikki kursdan so'ng, odamlar o'zlari qiziqqan narsa bilan shug'ullanish uchun tarqalib ketishadi, chunki bu narsa dasturlashning bunday asoslarini juda keng qamrab oladi va shu paytgacha odamlar buni qilishni xohlamasliklarini tushunishadi. kompyuter tizimlari hech qanday holatda (masalan, ular tizim dasturlashni yoqtirmasdi), lekin ular ba'zi nazariy algoritmlar, hisoblash qiyinligi, yangi narsalarni ixtiro qilish, tarqatish yoki boshqa narsa bilan shug'ullanishni xohlashadi. Yoki, aksincha, ular bu erda ko'p narsa yo'q deb o'ylashadi ( o'qituvchi Python va C ++ bilan birinchi kursning chizig'iga ishora qiladi) ketdi, keyin ( o'qituvchi tizimli dasturlash bilan uchinchi kurs chizig'iga ishora qiladi) - qanday qilib sizga yoqmaydi, baytlarni hisoblang va har xil o'qish-yozish cheklovlarini o'rnating, oqimlar, mavzular va boshqa narsalarni yarating. Va shunga ko'ra, odamlar qaysidir yo'nalishni tanlaydilar va o'qiydilar. Ya'ni, printsipial ravishda, sizda "o'rdak sindromi" paydo bo'lmasligi uchun - siz birinchi bo'lib Paskalingizni ko'rgansiz va endi "Paskal - bu kuch" deysiz; yoki undan ham ilg'or - siz C ++ ni ko'rdingiz va hamma haqida C ++ kuch ekanligini va u erda hamma narsa unchalik yaxshi emasligini gapira boshladingiz.

Bu erda siz unga kengroq qarashingiz kerak (o'qituvchi doskadagi kurslar ro'yxatiga ishora qiladi) - bu, xususan, HSEda tanlangan usullardan biri (u yaqinda paydo bo'lgan, shuning uchun u juda zamonaviy) . Uchrashuvning boshqa usullari mavjud. Boshqa yaxshi universitetlarda bir oz boshqacha tartib va ​​boshqa urg'u bor. Ammo ular odamlarni o'zlarida bo'lgan hamma narsa bilan tanishtirishga harakat qilishadi.

Qanday qilib dasturchi sifatida ish topish mumkin

Siz ( o'qituvchi kurslar ro'yxatiga ishora qiladi) hamma narsani qildim, universitetda o'rgandim, yana ikki yil davomida samaraliroq ish qildim va siz ishga borishingiz kerak. Ishlash uchun biror narsani qanday tanlash mumkin? Birinchidan, siz hamma narsani bilib olishingiz kerak, bir joyga chuqur kirib, nimani sevishingizni allaqachon bilasiz. Siz o'zingiz yoqtirgan narsani tabiiy ravishda tanlashingiz kerak. Chunki sevsangiz, kuchingizni sarflaysiz, motivatsiyaga ega bo'lasiz va umuman hammasi yaxshi bo'ladi. Chunki gap nafaqat pulda, balki uni siz uchun qiziqarli va yoqimli qilishdir. Xo'sh, va siz ajoyib kompaniyaga kirishni xohlaysiz, ish toping. Shaxsan men qanday odamni ko'rishni xohlardim? Aytaylik, mening oldimga yuzta talaba keldi - ikkita yoki bitta ishga olib borishim kerak. Nega kelishadi, men ularning kimligini, nimaligini, qandayligini umuman tushunmayapman? Eng yaxshi holatda, ular menga universitetda olgan diplomlarini ko'rsatishadi va men: “Voy! Bu ajoyib diplom, lekin unchalik zo'r emas! Aytgancha, men noto'g'ri bo'lishim mumkin. Ehtimol, odamning bo'sh vaqti ko'p bo'lgan va u ancha yaxshi o'rgangan.

Nima ajoyib bo'lardi? Birinchidan, siz boshidan oxirigacha yozgan ochiq manbali loyiha. Ma'lumotlar tezda o'qilishi yoki boshqa biror narsa uchun qandaydir infratuzilmani amalga oshirayotgan bo'lsam, unda, albatta, men uchun ochiq manbali biror narsa yozishga qiziqaman. Ular qandaydir veb-sayt yaratmadilar, lekin mavzu bo'yicha biror narsa. Nega bu menga qiziq? Men sizning kodingizni ko'ra olaman, qanchalik tez-tez bajarganingizni ko'raman, foydalanuvchilarning xatolariga, undan foydalanadigan ishlab chiquvchilarning xatolariga qanday munosabatda bo'lganingizni ko'raman - hamma narsa yozib olinadi, men hamma narsani ko'rib chiqaman va o'ylayman: “Voy, bu xatolik bor. Ikki yil davomida yo'q bo'lib ketdingiz, keyin siz foydalanuvchiga qo'pol ravishda javob berdingiz, yana bir narsa bor - men buni qabul qilmayman. Demak, bu sizning shaxsiy loyihangiz.

Keyin yana nima ajoyib bo'lar edi? Qanday qilganingizni ko'rmoqchiman jamoaviy ish. Ya'ni, siz mening oldimga suhbatga kelasiz va shunday deysiz: "Universitet yigitlari va men yaxshi arizalarni yuvib oldik. Men u erda ma'lumotlar bazasini yaratdim, ular qandaydir ishlarni qilishdi mobil ilova, va bizda ham u erda ishlaydigan bir yigit bor edi, dizayner qiz, texnik yordam ko'rsatuvchi bola. Biz besh kishi edik va biz ajoyib loyiha qildik. Xo'sh, men sizning loyihangiz nima ekanligini ko'rib turibman: "Sizniki nima?" Men yana kodga qarayman va siz odamlar bilan jamoada qanday ishlashni bilishingizni tushunaman.

Garajda, qayerdadir chiroq o‘chirilgan holda yolg‘iz o‘tiradigan, hech kim bilan gaplashmaydigan, soqol qo‘yib yozadigan odam dasturchi emas. Shunga qaramay, odamlar bilan qandaydir o'zaro munosabat mavjud. Masalan, ba'zida sizni so'kishi mumkin bo'lgan xo'jayin bilan (boshliqlar, ular shunday, har doim ham mehribon emas). Va men siz odamlar bilan qanday ishlashni bilasiz va agar sizda qandaydir yaxshi jamoa bo'lsa, bu meni xursand qiladi. Yaxshi bo'lmasa ham, u yo'qdan yaxshiroqdir.

Shaxsan menga yana nima yoqadi? Agar siz o'zingizni katta loyihalarda ko'rsatgan bo'lsangiz. Misol uchun, siz Linux yadrosiga biror narsa topshirdingiz, agar siz tizimni dasturlash bilan shug'ullansangiz, ba'zi xatoliklarni tuzatdingiz. Ya'ni, ular birovning kodini o'qish va unga qandaydir o'zgartirishlar kiritish mumkinligini ko'rsatishdi. Men qarayman: "Oh, haqiqatan ham, siz murakkab narsani topdingiz va ba'zi xatolarni tuzatdingiz!" Va men bundan juda zavqlana boshladim. Chunki menda... yaxshi, bilmayman... shuning uchun mening dasturchim ishdan ketdi, chunki uning raqobatchilari unga yuqori maosh taklif qilishdi va menga zudlik bilan uning o'rnini ulash uchun kimdir kerak - siz. Menimcha, siz faqat noldan yozgansiz va siz boshqa birovning kodini o'qish va tahrirlashni bilmaysiz va men xafa bo'laman.

Va nihoyat, o'ziga xos pozitsiyaga qarab, boshqa narsalar ham bor. Agar siz tahlilchi sifatida ishga joylashmoqchi bo'lsangiz, men Kaggle-da ma'lumotlarni tahlil qilish muammolarini hal qilishingizni xohlayman. Agar siz biron bir algoritmik narsada ish topsangiz, sport dasturlash bo'yicha ba'zi algoritmlarni bajarishingizni xohlayman. Va nihoyat, agar siz kasb haqida o'ylab ko'rsangiz, intervyular qanday o'tishini o'qing, u erda ba'zi odamlar katta norozilik bildirishlarini ko'rgansiz: “Men keldim va ular mendan sevimli mashg'ulotim nima ekanligini so'rashadi. Men boyo'g'li kabi o'tiraman va javob bermayman, chunki mening sevimli mashg'ulotim yo'q " va ular buni HRlar qiladi deb o'ylashadi. Aslida, ular sizning qanchalik do'stona va adekvat ekanligingizni tushunishga harakat qilmoqdalar. Agar siz do'stona va noadekvat bo'lsangiz, siz qanchalik daho va mehnatkash bo'lishingizdan qat'i nazar, ajoyib bilimga ega bo'lgan ajoyib mutaxassis bo'lsangiz ham, jamoa siz bilan ishlash qiyin bo'ladi va siz loyihani yolg'iz o'zingiz chiqara olmaysiz. Bundan tashqari, agar siz uni tortib olsangiz ham, kompaniya qanday yuk bilan duch kelayotganini tasavvur qilishingiz mumkin. Ertaga nima deysiz: “Maoshimni 10 baravar oshiring, aks holda men sizni tashlab ketaman”. Albatta, kompaniyalar bunday vaziyatga tushib qolishni xohlamaydilar. Shu sababli, o'z-o'zida adekvatlik va xayrixohlikni rivojlantirish (hech bo'lmaganda) ba'zi kasbiy ko'nikmalarni rivojlantirish kabi muhimdir.

Xulosa qilib aytganda, nima deyish mumkin? Qaysi tillar yaxshi va qaysi tillar yomon? Xo'sh, ba'zi tillar guruhida, masalan, Ruby, Python va PHP orasida nimani tanlash kerak? Albatta, to'g'ri javob Python, lekin aslida ularning orasidagi farq ruxsat etilgan xatolar sonida, boshqa narsa miqdorida - 5%, yaxshi, ehtimol 10%. Ya'ni, agar siz allaqachon tugallangan loyiha PHP-da yozilgan bo'lsa, aqli joyida hech kim: "Keling, hamma narsani Python-da qayta yozaylik" demaydi. Ular: "Keling, ko'proq PHP dasturchilarini yollaymiz va PHPda yozishni davom ettiramiz" deyishadi. OK, bu yaxshi tanlov. Albatta, agar siz to'satdan biron bir loyiha yozishni boshlasangiz, Python-ni hozir tanlash oqilona bo'lishi mumkin. Garchi, bu ham bog'liq. Balki sizda bozorda arzon PHP dasturchilari juda ko‘p, Python esa qimmat va siz: “Ha, texnologiya yanada zo‘r, lekin men tayyor dasturchilarga pul tejayman”, deb o‘ylaysiz. Va hamma narsa yaxshi, siz allaqachon kelib, u erda ishlaysiz.
Java va C++ o'rtasida qanday tanlash mumkin? Ha, xuddi shu narsa sodir bo'ladi. O'ylaymanki, siz qaysi tilda yangi yirik loyihani boshlashga qaror qilsangiz, siz o'z kasbiy sohangiz bo'yicha bilimga ega bo'lasiz va buni amalga oshirishga qodir bo'lasiz. to'g'ri tanlov. Hozircha bu tanlovni qilish shart emas, shuning uchun men sizga o'zingiz yoqtirgan narsani qilishni maslahat beraman.

Asoslarni, aytganimdek, dasturlash asoslarini (funksiya nima, if, for, massivlar va boshqa narsalar) istalgan tilda ozmi-koʻpmi oʻrganish mumkin. Misol uchun, C ++ da, chunki ko'p narsalar unga o'xshash va undagi o'ziga xosliklar (bu darajada) eng kam va yozish uchun keraksiz harflardir. Xo'sh, ba'zi bir murakkab me'moriy narsalarni o'rganganingizda, siz o'rganasiz va bu haqda ko'p tashvishlanishingiz shart emas. Ya'ni, asosiysi, sinab ko'ring, o'zingizga yoqqan narsani qidiring va ertalab soat 4 bo'lganini tushunganingizda va siz o'yin-kulgi uchun o'tiring va yozing, chunki sizga yoqadi - ehtimol, hozir siz o'zingiznikini topganingiz aniq.

Dasturlash tilining mashhurligini o'lchashning ko'plab usullari mavjud. Ammo biz mutaxassislarga bo'lgan talabni tahlil qilish eng to'g'ri deb hisoblaymiz. Bu ishlab chiquvchilarga o'zlarining martaba istiqbollarini yaxshilash uchun zarur bo'lgan ko'nikmalarni aniq ko'rsatib beradi.

Biz 2018-yilda eng koʻp talab qilinadigan yettita dasturlash tilini aniqlash uchun Indeed.com saytida eʼlon qilingan ish eʼlonlarini tahlil qildik. Swift va Ruby kabi ba'zi tillar ish beruvchilar orasida unchalik mashhur emasligi sababli kuchli yettilikka kira olmadi.

2018-yilda Java-ga bo‘lgan talab 2017-yilga nisbatan 6000 ga yaqin ish o‘rinlariga kamaydi. Lekin bu dasturlash tili hali ham mashhur. Java-dan 20 yildan ortiq vaqt davomida butun dunyo bo'ylab millionlab ishlab chiquvchilar va milliardlab qurilmalar foydalanmoqda. U Java Virtual Machine orqali har qanday apparat va operatsion tizimda ishlashi mumkin.

Hammasi Android ilovalari Java asosida. Fortune 500 kompaniyalarining 90% server tomonidagi dasturlash tili sifatida Javadan foydalanadi.

2. Python

Python 5000 ga yaqin ish o'rinlari e'lonlari bilan mashhur bo'ldi. Bu dasturlash tili umumiy maqsad Veb-ishlab chiqish uchun foydalaniladi. Bundan tashqari, ilmiy hisoblash va ma'lumotlarni qazib olishda keng qo'llaniladi. Mashinani o'rganishni ishlab chiquvchilarga doimiy talab Pythonga bo'lgan talabni kuchaytirmoqda.

3.JavaScript

JavaScript bugungi kunda 2017 yilda bo'lgani kabi mashhur. Ushbu dasturlash tilidan dasturchilarning 80% dan ortigʻi va barcha saytlarning 95% i veb-sahifalarda dinamik elementlar yaratish uchun foydalanadi. React va AngularJS kabi bir qator front-end JavaScript ramkalari katta salohiyatga ega. IoT va mobil qurilmalar tobora ommalashib bormoqda, shuning uchun biz tez orada JavaScript dasturchilariga bo'lgan talabning pasayishini ko'rishimizga shubha qilamiz.

4. C++

2017 yildan beri C++ tiliga talab deyarli o‘zgarmadi. Ushbu dasturlash tili tizim / amaliy dasturlarni yaratish, o'yinlar, drayverlar, mijoz-server ilovalarini ishlab chiqish uchun ishlatiladi. Ko'pgina dasturchilar C++ tilini Python yoki JavaScript kabi dasturlash tillariga qaraganda murakkabroq deb bilishadi. Ammo u hali ham yirik korxonalarda ko'plab eski tizimlarda qo'llaniladi.

5.C#

Bu yil C# tilining mashhurligi (“C sharp” deb talaffuz qilinadi) biroz pasaydi. C# - bu Microsoft .NET platformasida ishlab chiqish uchun mo'ljallangan ob'ektga yo'naltirilgan dasturlash tili.

C#, C++ kabi, video o'yinlarni ishlab chiqishda qo'llaniladi, shuning uchun yangi boshlanuvchi dasturchilar bir vaqtning o'zida ikkala tilni ham o'rganishlari kerak.

6 PHP

Ushbu server tomonidagi dasturlash tili bizning reytingimizda oltinchi o'ringa ko'tarildi (o'tgan yilga nisbatan). Ko'pgina ishlab chiquvchilar HTML qo'llab-quvvatlamaydigan xususiyatlarni amalga oshirish uchun PHP dan foydalanadilar. Shuningdek, MySQL ma'lumotlar bazalari bilan ishlash uchun.

7. Marvarid

Perlga talab 3000 ga yaqin ish o'rinlariga kamaydi va u bizning reytingimizda ettinchi o'rinda qoldi. Perl tizim va tarmoq ma'murlari orasida mashhur bo'lib qolmoqda.

Kelajakka nazar

Bular bizning reytingimizga hali kiritilmagan dasturlash tillari. Ammo 2018 yilda ular yanada mashhur bo'ldi. Kelajakda ularni kuzatib boring!

  • Swift: 2014 yilda Apple tomonidan chiqarilgan iOS va macOS uchun dasturlash tili, bizning reytingimizda 14-o'rinda. Buning sababi shundaki, ko'plab ishlab chiquvchilar ishlari ma'lum bir tilni ko'rsatmasdan talablarni "iOS" deb belgilaydi. Swift tobora ommalashib bormoqda.
  • R: Bizning reytingda 11-o'rinni egalladi. Ammo biz ushbu dasturlash tilini bir necha yil ichida osmonga ko'tarishini kutamiz. U xalqaro reytinglarda ham, AQShda ham mashhurlikka erishmoqda. R-ishlab chiquvchilarga talabning o'sishi tobora ko'proq tushuntirilmoqda faol foydalanish ma'lumotlarni tahlil qilishda til.
  • Rust : Garchi Rust bizning reytingimizda yuqori o'rinni egallamasa ham Google ma'lumotlari Trendlar u barqaror rivojlanmoqda.

Bilish kerak bo'lgan boshqa texnologiyalar

Quyida sanab o'tilgan texnologiyalar rasmiy dasturlash tillari emas. Ammo ular ish beruvchilar ishlab chiquvchilarga qo'yadigan talablar ro'yxatiga kiritilgan.

  • SQL: standart til ma'lumotlar bazalarida ma'lumotlarni saqlash va qayta ishlash uchun mo'ljallangan so'rovlar. SQL bilimi ish beruvchilar orasida katta talabga ega. U 30 mingdan ortiq bo'sh ish o'rinlarida tilga olingan.
  • .NET: uchun dasturlarni ishlab chiqish uchun Microsoft platformasi ish stoli kompyuterlari, mobil qurilmalar va veb-ilovalar. U C# kabi dasturlash tillari tomonidan qo'llaniladi, Visual Basic va F#. Va texnologiyaning o'zaro faoliyat platformasi iOS, Linux va Android uchun .NET-ni kengaytiradi.
  • Tugun: JavaScript kodini server tomonida ishlatish imkonini beruvchi ochiq manba muhiti. Bu butun veb-ilova uchun bitta dasturlash tilidan foydalanish imkoniyatini beradi. Node.js-ni o'rganish uchun biroz vaqt ajratishni tavsiya qilamiz.
  • MEAN : MEAN stek (MongoDB, ExpressJS, AngularJS va Node.js) bizning reytingimizda 18-o‘rinni egalladi. Stackdan foydalanish JavaScript-da yaratish imkonini beradi to'liq ilovalar. MEANni o'rganish dunyodagi eng mashhur dasturlash tillaridan birida rivojlanish uchun asos bo'ladi.

Maqola tarjimasi "2018-yilda eng ko'p talab qilinadigan 7 ta dasturlash tili" do'stona loyiha jamoasi tomonidan tayyorlangan.

Yaxshi yomon

Dasturlash tillari 2 sinfga bo'linadi:

  1. Mashina yoki mashinaga yo'naltirilgan ( past daraja)
  2. Algoritmik (yuqori daraja)

Past darajadagi til ma'lum turdagi protsessorga xos bo'lib, mashina kodlarida (0 yoki 1) yoziladi. Bu til kompyuter uchun tushunarli, lekin odamlar uchun tushunarsiz. Masalan, assembly tili

Yuqori darajadagi dasturlash tillari- inglizcha so‘z va iboralar yordamida yoziladi. Ya'ni, bunday til odamga tushunarli, lekin

kompyuter tomonidan tushunilmaydi. Ushbu tillarni mashina kodlariga tarjima qilish kerak. Buning uchun tarjimonlardan foydalaniladi. Ular quyidagilarga bo'linadi:

  1. Kompilyatorlar - dasturning dastlabki kodini darhol mashina kodlari tiliga tarjima qiladilar. Shundan so'ng, ommaviy ish fayli (.exe yoki .com) hosil bo'ladi va manba dasturi endi kerak emas.
  2. Tarjimonlar - ular dasturning dastlabki kodini bosqichlarga aylantiradilar. Va har safar boshlang'ich matnga manzil. Dasturlarni disk raskadrovka qilishda juda qulay.

Dasturlarni "bog'lash" tushunchasi ham mavjud, ya'ni kompilyatsiya qilingan elementlarni bitta dastur moduliga to'plash.

Bosqichlar kompyuter simulyatsiyasi:

  1. Muammoning bayoni va modellashtirish ob'ektining ta'rifi
  2. Rivojlanish kontseptual model, asosiy elementlarni va ularning munosabatlarini aniqlash
  3. Formallashtirish va modelga o'tish
  4. Algoritm yaratish va dastur yozish
  5. Rejalashtirish va o'tkazish kompyuter tajribalari
  6. Natijalarni tahlil qilish va talqin qilish

massiv tegishli kompozit turlari ma'lumotlar. Massiv elementiga massiv nomi va element raqami orqali kirish mumkin. Kompyuter xotirasidagi massiv elementlari indekslarning ortib borish tartibida tartiblangan.

O'zgaruvchan atributlar dasturlash tillarida: nomi, manzili, qiymati va turi

Sifat mezonlari dasturiy ta'minot tizimlari: ishonchlilik, to'g'rilik, tushunarlilik, moslashuvchanlik, samaradorlik

Dasturlash tillari :

Perl - skript tili

Protsessual dasturlash tillarida murakkab ma'lumotlar turi mavjud emas

Java virtual mashinasi - tarjimon

Prolog - til mantiqiy dasturlash, tarjimon hisoblanadi

JavaSCRIPT - skript tili

SQL - bu ma'lumotlarni olish, kiritish va o'chirish uchun ishlatiladigan ma'lumotlarni manipulyatsiya qilish tili relyatsion ma'lumotlar bazalari ma'lumotlar.

Deklarativ dasturlash tillari mantiqiy tillarni o'z ichiga oladi

HTML va XML - ma'lumotlarni belgilash tillari

C - tizimli dasturlash uchun ishlatiladigan til

Ob'ektga yo'naltirilganlikning asosiy elementlari dasturlash quyidagilardir:

  1. Sinf
  2. Ob'ekt - sinfning namunasi
  3. Ob'ekt bilan sodir bo'ladigan hodisa
  4. Ob'ektda bajariladigan usul
  5. Mulk

Ob'ektga yo'naltirilgan dasturlashning asosiy tushunchalari:

  1. Polimorfizm - sinf uchun umumiy bo'lgan harakatlarni belgilash uchun bitta nomdan foydalanish, bu ob'ektlarning tanlash qobiliyatini anglatadi. ichki usul ma'lumotlar turiga asoslanadi
  2. Meros - bu taksonomik tasnif sxemasi (ierarxiya) yordamida modellashtirilishi mumkin bo'lgan OOP xususiyati.
  3. Inkapsulyatsiya - ob'ekt bilan ishlash protseduralarini alohida modulda inkapsulyatsiya qilish qobiliyatini anglatadi

Usulning asosi tuzilgan dasturlash quyidagilar: (yuqoridan pastga dasturlash)

Boshqacha qilib aytganda, bu “GoTo”siz dasturlashdir.

  1. Uchta asosiy elementning tarkibidan foydalanish: dallanish, chiziqli tuzilish va tsikl
  2. Subprogrammalardan foydalanish

Foydalanish pastki dasturlar harakat qilish kerak emas minimal miqdor operatorlar. Subprogrammani chaqirishda kirish ma'lumotlarini uzatish parametrlar yordamida amalga oshiriladi. Subprogramma chaqirilgan paytda ko'rsatilgan parametrlar asosiy dastur chaqirdi haqiqiy.

Tizim dasturlash uchun eng mos tillar C, C++ va Assembler hisoblanadi.

Tarjima jarayonida iboralardagi turlarni tekshirish uchun semantik tahlil bosqichidan foydalaniladi.

Sahnada tahlil qilish tarjima paytida "yo'qolgan nuqta-vergul" kabi xatolar aniqlanadi

Inson faoliyatining barcha sohalarida kompyuterlarning joriy etilishi turli profilli mutaxassislardan foydalanish ko'nikmalarini egallashni talab qiladi. Kompyuter fanlari. Universitet talabalarining tayyorgarlik darajasi oshib bormoqda, ular birinchi kurslardan boshlab kompyuterlardan foydalanish va eng oddiy raqamli usullar bilan tanishadilar, kurs va bitiruv loyihalarida kompyuter texnologiyalaridan foydalanish odatiy holga aylanib borayotganini hisobga olmaganda. universitetlarning aksariyatida.

Kompyuter texnologiyalari endilikda nafaqat muhandislik hisob-kitoblari va iqtisodida, balki tibbiyot, tilshunoslik va psixologiya kabi an'anaviy matematik bo'lmagan mutaxassisliklarda ham qo'llaniladi. Shu munosabat bilan shuni aytish mumkinki, kompyuterlardan foydalanish keng tarqaldi. Mutaxassislarning katta toifasi paydo bo'ldi - o'z sanoatida kompyuterlardan foydalanish bo'yicha bilimga muhtoj bo'lgan kompyuter foydalanuvchilari - mavjud bo'lganlar bilan ishlash ko'nikmalari. dasturiy ta'minot, shuningdek, hal qilish uchun moslashtirilgan o'z dasturiy ta'minotini yaratish aniq vazifa. Va bu erda dasturlash tillarining tavsiflari foydalanuvchiga yordam beradi.

2. Dasturlash tili nima

Dasturlash tili- algoritmlarni ijrochi uchun qulay shaklda tasvirlash uchun mo'ljallangan rasmiy belgilar tizimi (masalan, kompyuter). Dasturlash tili kompyuter dasturini tuzishda foydalaniladigan leksik, sintaktik va semantik qoidalar majmuini belgilaydi. Bu dasturchiga kompyuterning qanday hodisalarga javob berishini, ma'lumotlar qanday saqlanishi va uzatilishini va turli vaziyatlarda ular bo'yicha qanday harakatlarni bajarish kerakligini aniq aniqlash imkonini beradi.

Birinchi dasturlashtiriladigan mashinalar yaratilgandan beri insoniyat ikki yarim mingdan ortiq dasturlash tillarini o'ylab topdi. Har yili ularning soni yangilari bilan to'ldiriladi. Ba'zi tillar faqat oz sonli o'z ishlab chiquvchilari tomonidan qo'llaniladi, boshqalari millionlab odamlarga ma'lum bo'ladi. Professional dasturchilar ba'zan ular o'z ishlarida o'ndan ortiq turli xil dasturlash tillaridan foydalanadilar.

Tillarning yaratuvchilari kontseptsiyani boshqacha talqin qilishadi. dasturlash tili. Ko'pchilik ishlab chiquvchilar tomonidan tan olingan umumiy joylar orasida quyidagilar mavjud:

· Funktsiya: dasturlash tili yozish uchun mo'ljallangan kompyuter dasturlari, ular ma'lum bir vazifani bajarish uchun kompyuterga ko'rsatmalar yuborish uchun ishlatiladi. hisoblash jarayoni va alohida qurilmalarni boshqarishni tashkil etish.

· Vazifa: Dasturlash tilining tabiiy tillardan farqi shundaki, u buyruqlar va ma'lumotlarni odamdan kompyuterga o'tkazish uchun mo'ljallangan, tabiiy tillar esa faqat odamlar o'rtasidagi muloqot uchun ishlatiladi. Asosan, "dasturlash tillari" ta'rifini umumlashtirish mumkin - bu buyruqlar, buyruqlarni uzatish usuli, harakatlar uchun aniq qo'llanma; inson tillari ham axborot almashish uchun xizmat qiladi.

· Amalga oshirish: Dasturlash tili ma'lumotlar tuzilmalarini aniqlash va manipulyatsiya qilish va hisoblash jarayonini boshqarish uchun maxsus konstruktsiyalardan foydalanishi mumkin.

3. Muammoni kompyuterda hal qilish bosqichlari.

VTning eng samarali qo'llanilishi ilmiy tadqiqot va muhandislik hisoblarida ko'p mehnat talab qiladigan hisob-kitoblarni amalga oshirishda topildi. Kompyuterda muammoni hal qilishda asosiy rol hali ham insonga tegishli. Mashina faqat ishlab chiqilgan dasturga muvofiq o'z vazifalarini bajaradi. muammoni hal qilish jarayoni quyida sanab o'tilgan bosqichlarga bo'lingan bo'lsa, inson va mashinaning rolini tushunish oson.

Muammoni shakllantirish. Bu bosqich muammoni mazmunli (jismoniy) shakllantirish va yakuniy yechimlarni aniqlashdan iborat.

Matematik modelni qurish. Model asosiy qonunlarni to'g'ri (adekvat) tasvirlashi kerak jismoniy jarayon. Mavjud modellardan matematik modelni qurish yoki tanlash muammoni chuqur tushunishni va matematikaning tegishli bo'limlarini bilishni talab qiladi.

Jahon chempionatining rivojlanishi. Kompyuter faqat eng oddiy amallarni bajarishi mumkinligi sababli, u hatto matematik formulada ham masalaning qo'yilishini "tushunmaydi". Uni hal qilish uchun muammoni qandaydir hisoblash algoritmiga qisqartirish imkonini beradigan raqamli usulni topish kerak. Har bir holatda siz tanlashingiz kerak mos yechim allaqachon ishlab chiqilgan standartlardan.

Algoritm ishlab chiqish. Muammoni yechish jarayoni (hisoblash jarayoni) yakuniy natijaga olib keladigan elementar arifmetik va mantiqiy amallar ketma-ketligi sifatida yoziladi va masalani yechish algoritmi deb ataladi.

Dasturlash. Masalani yechish algoritmi mashinaga tushunarli tilda aniq belgilangan amallar ketma-ketligi - dastur shaklida yoziladi. Jarayon odatda qandaydir oraliq til yordamida amalga oshiriladi va uning tarjimasi mashinaning o'zi va uning tizimi tomonidan amalga oshiriladi.

Dasturni nosozliklarni tuzatish. Kompilyatsiya qilingan dasturda turli xil xatolar, noaniqliklar va kamchiliklar mavjud. Nosozliklarni tuzatish dasturlarni boshqarish, xatolar diagnostikasi (izlash va mazmunini aniqlash) va ularni bartaraf etishni o'z ichiga oladi. Natijalarning ishonchliligiga ishonch hosil qilish uchun dastur nazorat (test) topshiriqlarini yechishda sinovdan o'tkaziladi.

Hisob-kitoblarni amalga oshirish. Ushbu bosqichda hisob-kitoblar uchun dastlabki ma'lumotlar tayyorlanadi va hisob-kitoblar tuzatilgan dasturga muvofiq amalga oshiriladi. Shu bilan birga, natijalarni qayta ishlashda qo'l mehnatini kamaytirish uchun keng foydalanish mumkin qulay shakllar natijalarni matn shaklida chiqarish va grafik ma'lumotlar, odam o'qiy oladigan shaklda.

Natijalarni tahlil qilish. Hisoblash natijalari sinchkovlik bilan tahlil qilinadi, ilmiy-texnik hujjatlar tuziladi.

4. Dasturlash tillari nima uchun?

Kompyuterning ishlash jarayoni dasturni bajarishdan iborat, ya'ni to'liq aniqlangan buyruqlar to'plami. ma'lum tartib. Nol va birlardan iborat buyruqning mashina shakli qanday harakatni bajarish kerakligini ko'rsatadi Markaziy protsessor. Bu shuni anglatadiki, kompyuterga bajarishi kerak bo'lgan harakatlar ketma-ketligini aytish uchun tegishli buyruqlar uchun ikkilik kodlar ketma-ketligini o'rnatish kerak. Mashina kodli dasturlar minglab ko'rsatmalardan iborat. Bunday dasturlarni yozish qiyin va zerikarli ishdir. Dasturchi har bir dasturning ikkilik kodining bir va nol kombinatsiyasini, shuningdek, eslab qolishi kerak ikkilik kodlar uni amalga oshirishda foydalaniladigan ma'lumotlar manzillari. Tabiiy inson tiliga yaqinroq biror tilda dastur yozish va bu dasturni mashina kodlariga tarjima qilish vazifasini kompyuterga topshirish ancha oson. Shunday qilib, dasturlarni yozish uchun maxsus mo'ljallangan tillar paydo bo'ldi - dasturlash tillari.

Ko'p turli xil dasturlash tillari mavjud. Aslida, ko'p muammolarni hal qilish uchun ularning har qandayidan foydalanishingiz mumkin. Tajribali dasturchilar Ular har bir aniq muammoni hal qilish uchun qaysi tildan foydalanish yaxshiroq ekanligini bilishadi, chunki har bir til o'z imkoniyatlariga, muayyan turdagi vazifalarga yo'naltirilganligiga, muammolarni hal qilishda ishlatiladigan tushunchalar va ob'ektlarni tavsiflashning o'ziga xos usuliga ega.

Dasturlash tillarining barcha to'plamini ikki guruhga bo'lish mumkin: past darajadagi tillar va yuqori darajadagi tillar.

Past darajadagi tillarga assembly tillari kiradi (ingliz tilidan toassemble - yig'ish, yig'ish). Assembly tili tushunarli va eslab qolish oson bo'lgan ko'rsatmalar uchun belgilardan foydalanadi. Ikkilik buyruq kodlari ketma-ketligi o'rniga ularning ramziy belgilari yoziladi va buyruqni bajarishda foydalaniladigan ma'lumotlarning ikkilik manzillari o'rniga dasturchi tomonidan tanlangan ushbu ma'lumotlarning ramziy nomlari yoziladi. Assembly tili ba'zan mnemokod yoki avtokod deb ataladi.

Ko'pgina dasturchilar dasturlarni yozish uchun yuqori darajadagi tillardan foydalanadilar. Oddiy inson tili kabi, bunday tilning ham o'z alifbosi - tilda qo'llaniladigan belgilar to'plami mavjud. Bu belgilar tilning kalit so'zlarini tashkil qiladi. Kalit so'zlarning har biri o'z vazifasini bajaradi, xuddi biz o'rganib qolgan tilda alifbo harflaridan tuzilgan so'zlar mavjud. berilgan til, funksiyalarini bajara oladi turli qismlar nutq. Tayanch so‘zlar gaplarda tilning ma’lum sintaktik qoidalariga ko‘ra bir-biri bilan bog‘lanadi. Har bir jumla kompyuter bajarishi kerak bo'lgan harakatlar ketma-ketligini belgilaydi.

Yuqori darajadagi til inson va kompyuter o'rtasida vositachi bo'lib, odamga kompyuter bilan odamga tanishroq tarzda muloqot qilish imkonini beradi. Ko'pincha bu til tanlashga yordam beradi to'g'ri usul muammoni hal qilish.

Dasturni yuqori darajadagi tilda yozishdan oldin dasturchi yozishi kerak algoritm muammoni hal qilish, ya'ni bu muammoni hal qilish uchun bajarilishi kerak bo'lgan bosqichma-bosqich harakatlar rejasi. Shuning uchun algoritmni oldindan kompilyatsiya qilishni talab qiladigan tillar ko'pincha deyiladi algoritmik tillar.

Dasturchi Uilyam V. Vold aytadi

Oxirgi olti oy davomida men Pinecone nomli dasturlash tili (PL) ustida ishlayapman. Men uni to'liq deb atashga xavf tug'dirmayman, lekin u allaqachon foydalanishga yaroqli - buning uchun o'zgaruvchilar, funktsiyalar va foydalanuvchi tomonidan belgilangan ma'lumotlar tuzilmalari kabi etarli elementlarni o'z ichiga oladi. Agar siz uni o'qishdan oldin tekshirmoqchi bo'lsangiz, men GitHub-dagi rasmiy sahifa va omborga tashrif buyurishni taklif qilaman.

Kirish

Men mutaxassis emasman. Men bu loyihani boshlaganimda nima qilayotganimni bilmasdim va hozir ham bilmayman. Men hech qachon tilni yaratish tamoyillarini maqsadli ravishda o'rganmaganman - men Internetdagi ba'zi materiallarni o'qib chiqdim va hatto ularda o'zim uchun foydali deyarli hech narsa topolmadim.

Biroq, men butunlay yangi tilni yozdim. Va u ishlaydi. Men nimadir to'g'ri qilayotgan bo'lsam kerak.

Ushbu maqolada men Pinecone (va boshqa dasturlash tillari) qanday qilib manba kodini ko'pchilik sehr deb hisoblaydigan narsaga aylantirishini ko'rsatishga harakat qilaman. Shuningdek, men murosa qilishim kerak bo'lgan vaziyatlarga e'tibor qarataman va nima uchun qaror qabul qilganimni tushuntiraman.

Matn dasturlash tilini yaratish bo'yicha to'liq qo'llanma deb da'vo qilmaydi, ammo qiziquvchilar uchun bu yaxshi boshlanish nuqtasi bo'ladi.

Birinchi qadamlar

"Qaerdan boshlaysiz?" Bu savolni boshqa ishlab chiquvchilar oʻz tilimni yozayotganimni bilganlarida tez-tez soʻrashadi. Ushbu qismda men unga batafsil javob berishga harakat qilaman.

Kompilyatsiya qilinganmi yoki talqin qilinganmi?

Kompilyator dasturni bir butun sifatida tahlil qiladi, uni mashina kodiga aylantiradi va keyinroq bajarish uchun saqlaydi. Tarjimon real vaqt rejimida dasturni satr satr tahlil qiladi va bajaradi.

Texnik jihatdan har qanday tilni ham kompilyatsiya qilish, ham talqin qilish mumkin. Ammo har bir til uchun usullardan biri boshqasidan ko'ra ko'proq mos keladi va erta bosqichda paradigmani tanlash keyingi dizaynni belgilaydi. DA umumiy ma'no izohlash moslashuvchan va kompilyatsiya beradi yuqori ishlash, lekin bu juda murakkab mavzuning faqat uchi.

Men kamdan-kam uchraydigan oddiy, ammo samarali tilni yaratmoqchi edim, shuning uchun boshidanoq Pinecone-ni kompilyatsiya qilish uchun qaror qildim. Shunga qaramay, Pinecone ham tarjimonga ega - dastlab ishga tushirish faqat uning yordami bilan mumkin edi, keyinroq sababini tushuntiraman.

Eslatma. tarjima. Aytgancha, bizda bor qisqa sharh Python o'rganayotganlar uchun ajoyib mashqdir.

Til tanlash

Meta-bosqichning bir turi: dasturlash tilining o'zi biron bir tilda yozilishi kerak bo'lgan dasturdir. Men ishlash tufayli C++ ni tanladim, katta to'plam funksionallik va shunchaki menga yoqqanligi uchun.

Ammo umuman olganda, quyidagi maslahatlar berilishi mumkin:

  • talqin qilingan PL juda tavsiya etiladiyozish kompilyatsiya qilingan PL (C, C++, Swift) da. Aks holda, meta-tarjimon tarjimoningizni tarjima qilganda, ishlash jazosi qor bo'ladi;
  • tuzilgan PL yozishingiz mumkin talqin qilingan PLda (Python, JS). Kompilyatsiya vaqti ortadi, lekin dasturni bajarish vaqti emas.

arxitektura dizayni

Dasturlash tilining tuzilishi dastlabki koddan tortib to bir necha bosqichlardan iborat bajariladigan fayl, ularning har biri bo'yicha ma'lumotlar ma'lum bir tarzda formatlanadi, shuningdek, ushbu bosqichlar orasidagi o'tish uchun funktsiyalar. Keling, bu haqda batafsilroq gaplashaylik.

Leksik analizator / lekser

Manba kodlari qatori lekser orqali o'tkaziladi va tokenlar ro'yxatiga aylanadi.

Ko'pgina PLda birinchi qadam leksik tahlildir. Oddiy qilib aytganda, bu matnning tokenlarga, ya’ni til birliklariga bo‘linishi: o‘zgaruvchilar, funksiya nomlari (identifikatorlar), operatorlar, raqamlar. Shunday qilib, lekserga manba kodi bo'lgan satrni etkazib berish orqali biz uning chiqish sifatidagi barcha tokenlar ro'yxatini olamiz.

ga murojaat qiladi manba kodi keyingi bosqichlarda endi sodir bo'lmaydi, shuning uchun lekser ular uchun zarur bo'lgan barcha ma'lumotlarni qaytarishi kerak.

Flex

Til yaratishda men birinchi qilgan ishim lekser yozish edi. Keyinchalik leksik tahlilni osonlashtiradigan va xatolar sonini kamaytiradigan vositalarni o'rganib chiqdim.

Bunday asosiy vositalardan biri Flex leksik analizator generatoridir. U kirish sifatida til grammatikasi tavsifi bilan faylni oladi, so'ngra C dasturini yaratadi, bu esa o'z navbatida satrni tahlil qiladi va kerakli natijani beradi.

Mening qarorim

Men yozgan analizatorni saqlashga qaror qildim. Oxir-oqibat, men Flex uchun hech qanday maxsus afzalliklarni ko'rmadim va undan foydalanish faqat qurish jarayonini murakkablashtiradigan qo'shimcha bog'liqliklar yaratadi. Bundan tashqari, mening tanlovim ko'proq moslashuvchanlikni ta'minlaydi - masalan, bir nechta fayllarni tahrirlamasdan tilga operator qo'shishingiz mumkin.

Tahlil qiluvchi / tahlil qiluvchi

Tokenlar ro'yxati parser orqali o'tadi va daraxtga aylanadi.

Keyingi bosqich - bu tahlil qilish. U asl matnni, ya'ni tokenlar ro'yxatini (qavslar va amallar tartibini hisobga olgan holda) qoidalarni tizimli ravishda ifodalash imkonini beruvchi mavhum sintaksis daraxtiga aylantiradi. yaratilgan til. Jarayonning o'zini oddiy deb atash mumkin, ammo sonning ko'payishi bilan til konstruktsiyalari juda murakkablashadi.

Bizon

Ushbu bosqichda men uchinchi tomon kutubxonasidan foydalanishni o'yladim, tahlilchini yaratish uchun Bisonni ko'rib chiqdim. U ko'p jihatdan Flexga o'xshaydi - sintaksis qoidalariga ega foydalanuvchi fayli C dasturi yordamida tuzilgan.Ammo yana men avtomatlashtirish vositalaridan voz kechdim.

Maxsus dasturlarning afzalliklari

Lexer bilan mening o'z kodimni yozish va ishlatish haqidagi qarorim (taxminan 200 satr) juda aniq edi: men jumboqlarni yaxshi ko'raman va bu ham nisbatan ahamiyatsiz. Tahlil qiluvchining hikoyasi boshqacha: endi u uchun kod uzunligi 750 qatorni tashkil etadi va bu uchinchi urinish (birinchi ikkitasi shunchaki dahshatli edi).

Biroq, men tahlilchini o'zim qilishga qaror qildim. Mana asosiy sabablar:

  • kontekstni almashtirishni minimallashtirish;
  • yig'ishni soddalashtirish;
  • o'z-o'zidan ishlarni qilishga tayyorlik.

Yechimning maqsadga muvofiqligiga men Valter Braytning (D tilini yaratuvchisi) maqolalaridan birida aytgan so'zlari bilan amin bo'ldim:

Men lexer va parser generatorlaridan, shuningdek, boshqa "kompilyator kompilyatorlari" dan foydalanishni tavsiya etmayman. Lexer va parser yozish ko'p vaqtni talab qilmaydi va generatordan foydalanish sizni unga mahkam bog'laydi. keyingi ish(bu kompilyatorni yangi platformaga o'tkazishda muhim ahamiyatga ega). Bundan tashqari, generatorlar ahamiyatsiz xato xabarlarini chiqarish bilan ajralib turadi.

Abstrakt semantik grafik

Sintaksis daraxtidan semantik grafikga o'tish

Ushbu qismda men LLVMdagi "oraliq vakillik" ga (oraliq vakillik) eng yaqin bo'lgan tuzilmani amalga oshirdim. Abstrakt sintaksis daraxti (AST) va mavhum semantik grafik (ASG) o'rtasida kichik, ammo muhim farq bor.

ASG va ASD

Taxminan aytganda, semantik grafik kontekstli sintaksis daraxtidir. Ya'ni, u qaysi turdagi funktsiya qaytarilishi yoki bir xil o'zgaruvchining qayerda ishlatilishi kabi ma'lumotlarni o'z ichiga oladi. Grafik ushbu kontekstni tanib olishi va eslab qolishi kerakligi sababli, uni yaratadigan kod turli xil tushuntirish jadvallari ko'rinishida yordamga muhtoj.

ishga tushirish

Grafik o'rnatilgandan so'ng, dasturni ishga tushirish juda oddiy vazifaga aylanadi. Har bir tugun ma'lum ma'lumotni qabul qiladigan, dasturlashtirilgan narsani bajaradigan (shu jumladan yordamchi funktsiyalarni chaqirish) va natijani qaytaradigan funktsiyani o'z ichiga oladi. Bu harakatdagi tarjimon.

Kompilyatsiya imkoniyatlari

Agar men dastlab Pinecone tilini kompilyatsiya qilingan til sifatida belgilagan bo'lsam, tarjimon qayerdan kelganini so'rashingiz mumkin. Gap shundaki, kompilyatsiya talqin qilishdan ko'ra ancha murakkab - men bu bosqichda ba'zi muammolarga duch kelganimni aytib o'tdim.

O'zingizning kompilyatoringizni yozing

Avvaliga bu fikr menga yoqdi - men o'zim ishlarni qilishni yaxshi ko'raman, bundan tashqari, men uzoq vaqtdan beri assembler tilini o'rganishni xohlardim. Lekin noldan kross-platforma kompilyatorini yaratish tilning har bir elementi uchun mashina kodini yozishdan ko'ra qiyinroq. Men bu fikrni mutlaqo amaliy emas va sarflangan resurslarga arzimaydi deb topdim.

  • Sergey Savenkov

    qandaydir "oz" sharh ... go'yo qayergadir shoshayotgandek