Noriu prisidėti prie vieno iš šių projektų kodo – kaip man pradėti?
Ar yra viena kalba, specialiai naudojama blokų grandinėms?
Aš nežinau, kaip programuoti – ar galiu pereiti tiesiai į „blockchain“ programavimą?
Prieš keletą mėnesių man patiko moderuoti keturių aktyvių NEO programuotojų grupę San Francisko NEO Dev konferencijoje. Skydo tema buvo bendras „blockchain“ programavimas, tačiau papildomas įspėjimas padarė šį konkretų dalyvių skydą labai įdomų: visi keturi programuotojai pasirinko skirtingą kalbą dirbdami su NEO projektu.
Vienas pirmenybę teikė senosios mokyklos C # kalbai, kitas kūrė „Python“ scenarijus, trečiasis evangelizavo vis populiarėjantį „Javascript“ diegimą & ketvirtasis dalyvis sujaudintas aptarė būsimą domenui būdingą NEO kalbą.
Po diskusijos man įstrigo dvi mintys:
- NEO kompiliatorius turi rimtą daugiakalbės plėtros palaikymą
- „Blockchain“ programavimo mokymosi kreivė yra žiauri ir labai apsunkinta organizuotų išteklių trūkumu, ypač naujiems kūrėjams
Šiuo straipsniu siekiama atkreipti dėmesį į 2 punktą. Norint maksimaliai padidinti šio vadovo efektyvumą, reikia susiaurinti laukiamą auditoriją iki siauros nišos: nauja & jaunesnieji programuotojai, norintys įsilaužti į „blockchain“ erdvę. Kūrėjams veteranams, programuotojams, & programinės įrangos inžinieriai, skaitydami – šis skyrius gali suteikti tam tikros naudos, tačiau greičiausiai juos rasite elementarius. Vyresnieji inžinieriai gali maksimaliai padidinti savo laiką, pereidami prie žinomos pasirinktos kalbos, & pradeda skaldyti pridedamus mokymosi išteklius & dokumentacija.
Taigi manote, kad norėtumėte įsilaužti į „blockchain“ programavimą? Pradėkime nuo tolesnio tiksliai apibrėžimo, ką reiškia „blockchain“ programavimas.
Nauja pramonė
Apskritai asmeniškai jus dominančios temos & suderinti su savo vertybėmis lengviau išmokti, nei ką nors įsiminti be aiškios įpirkos; Aš labai pabrėžiu, kad šis principas galioja vis daugiau įgimtoje sudėtingoje, greitai besivystančioje srityje, tokioje kaip „blockchain“ programavimas. Prieš pradėdami, patikrinkime keletą iššūkių, su kuriais „blockchain“ kūrėjas susiduria augančioje pramonėje.
Pirmas & Svarbiausia yra nuolatinis, viešas nesutapimas tarp to, ką daro ar ko nesudaro „blockchain“. Praleiskite šiek tiek laiko kriptografiniame „twitter“ & paaiškės, kaip genčių kripto bendruomenės, & ruožtu jų vystymosi bendruomenės tapo. Nekontroliuojamas tribalizmas natūraliai veda į šališkus pokalbius apie tai, koks turėtų būti objektyvus turinys, pridedant dar vieną klaidinimo sluoksnį atvykstantiems kūrėjams.
Tada dauguma projektų yra testnet etape & su tiesioginiais projektais, kurie nuolat atnaujinami, išsišakojami, & tapus įsilaužimų aukomis, nenuostabu matyti neišsamius dokumentus & nebaigtos pamokos. Žemės klojimas sparčiai vystosi, todėl reikia nuolat kartoti – tai nėra lengva užduotis bet kuriai komandai.
Paskutinis yra tikroji stigma, kad „blockchain“ programavimas yra sudėtingas & susideda iš kelių susikertančių laukų, kuriems reikalingas bent elementarus supratimas apie šiuos dalykus: ekonomika, kriptografija, valiuta, duomenų struktūros, finansų politika & fizika. Kad išmoktumėte tik šių „blockchain“ programavimui svarbių sričių dalių, suprasti reikia pakankamai laiko – čia nėra jokių nuorodų.
Tribalizmas, atsitiktinė dokumentacija & sudėtingi pagrindai. Visi įspėjamieji ženklai apie stačią kopimą į viršų. Norint tinkamai motyvuoti save per šias įėjimo kliūtis, tai padeda išsiaiškinti, kas tiksliai yra „blockchain“ programavimas reiškia visų pirma. Be to, tai gali padėti atskleisti …
Kodėl norite išmokti programuoti „blockchain“? Kokį projektą norite konkrečiai dirbti? Kokią problemą (-as) bandote išspręsti?
„Blockchain“ programavimo dekonstravimas
Jei jau žinote, kurį projektą karštligiškai norite dirbti, pagarba – aš siūlau pereiti prie organizacijų „GitHub“ saugyklos arba „ctrl-Fing“ pasirinktos kalbos čia, kad galėtumėte perskaityti. Šis skyrius bus naudingiausias tiems, kurie negali tiksliai nustatyti, koks projektas & reikalingas įgūdžių rinkinys / kalba jiems labiausiai tinka kaip atskaitos taškas galimiems būsimiems mokymosi planams.
Paprastai „blockchain“ programavimas gali reikšti tris skirtingus dalykus:
- Pradinis monetų aukojimas (ICO)
- Išmaniosios sutarties ar decentralizuotos programos (DAPP) kūrimas
- Prisidedate prie esamo arba diegiate naują „blockchain“
Gerai apsvarstykite tris aukščiau aprašytas galimybes, nes kiekviena iš jų siūlo daugybę skirtingų kalbų & mokymosi kreivės. Be to, jie turėtų padėti vienu žingsniu priartėti prie tikslaus paaiškinimo pirmenybė. Tolesnis kalbos kriterijų segmentavimas yra prie pat kampo; tačiau nepamirškite, kad asmeniniai pageidavimai lemia visišką motyvaciją mokantis naujų įgūdžių.
Darant prielaidą, kad vienos dienos programinės įrangos inžinierius yra vienodai suinteresuotas sužinoti apie visus tris „blockchain“ programavimo tipus – kokius kitus kriterijus jie gali kreiptis, kad sužibėtų šviesa draugiškiausiu keliu į priekį?
- Bendrosios paskirties ir konkretaus domeno kalbos
- Sintaksės skaitomumas & Mokymosi kreivė
Apžvelgdami šiuos tris kriterijus, mes pagaliau turėsime tvirtą konteksto pagrindą, kurį pritaikysime savo kalbų sąraše.
Bendrosios paskirties ir konkretaus domeno
Priemonių skirstymas pagal kokybines savybes retai kada būna aiškus – programavimo kalbos nesiskiria. Čia visas galimas „blockchain“ programavimo kalbas suskirstysime į dvi skirtingas kategorijas: domenui būdingos kalbos & bendros paskirties kalbos.
Paprastai domenui būdinga kalba (DSL) yra sukurta kompiuterio kalba & specialiai pritaikytas konkrečiai programai. Bendrojo naudojimo kalba (GPL), kaip tinkamai apibūdina pavadinimas, yra kalba, plačiai taikoma daugelyje programavimo sričių.
Bendrosios paskirties kalba
Bendrosios kalbos yra kalbos, apie kurias tikriausiai girdėjote, pvz., „Java“, „Javascript“, „Ruby“, C.++, & „Python“. Tarp bendros paskirties kalbų galima rasti begalę būdų, kaip jas toliau skirstyti pagal kokybines & kiekybiniai skirtumai & panašumai, tokie kaip įskaitomumas, kompiliavimas, griežtai rinktinis rinkinys, priekinė / vidinė aplinka ir kt. … Gera taisyklė apie draugiškumą pirmą kartą yra tokia:
„Javascript“, „Python“, & Ruby naujokams paprastai yra lengviau, nes jie turi mažiau mokymosi kreivės, o C++ & Paprastai „Java“ mokytis iš laiko reikia daugiau laiko.
Atkreipkite dėmesį, kad redaktorius atsisako komentuoti antrą & trečiojo lygio naujoko pasekmės pradedant viena ar kita kalbų grupe. Yra kelios diskusijos dėl kitų šių kalbų savybių, pavyzdžiui, priversti naujokus pirmiausia suprasti kintamuosius tipus per griežtai įvestą kalbą, kurią apeiname, kad maksimaliai padidintume naudojimą čia naujam kūrėjui, griežtai artėjančiam prie „blockchain“ vietos.
Didžiausias naujokų, renkančių bendrosios paskirties, profesionalas yra betarpiškas sugebėjimas pritaikyti šią kalbą daugelyje sričių, išskyrus „blockchain“ programavimą. Deja, tos pačios monetos flipas sukuria sunkumų tiems naujokams, kurie nori įstoti į darbo rinką, nes greičiausiai tiesiogiai konkuruosite su vyresniaisiais & veteranai programinės įrangos inžinieriai iš kitų sričių, turintys ilgametę patirtį valdydami minėtą bendrosios kalbos kalbą.
Domenui būdinga kalba
Norėdami pateikti kontekstą, grįžkime nuo „blockchain“ programavimo. Nors tai yra gana nauja programavimo sritis, pati naujos programavimo srities koncepcija nėra tokia nauja – nereikia žvalgytis per toli nuo dvynių-neseniai skambėjusio žodžio mašininis mokymasis kad tai pamatytum. Keli papildomi programavimo laukai, kurie natūraliai vystėsi vienoje ar daugiau domenui būdingų kalbų, yra: statistika (R, MatLab), duomenų bazės užklausa (SQL), žiniatinklio vartotojo sąsaja (HTML, CSS).
Konkrečios srities kalbos „blockchain“ programuotojai turi labai didelę paklausą ir turi labai mažai pasiūlos: šios jaunos kalbos, kurių vienintelis tikslas yra viena ar daugiau iš trijų aukščiau išvardytų „blockchain“ programavimo variantų, neabejotinai siūlo aiškiausią kelią į karjeros pramonės vietą.
Kadangi šios kalbos buvo sukurtos nuo pat pradžių su „blockchain“ & Turint omenyje protingą sutarčių sudarymą, patyrę kūrėjai gali stengtis pakoreguoti ankstesnius kitų kalbų nuorodų rėmus.
Nors naujokai, turėdami naujus skalūno programavimo įpročius, nurodo viską, ko reikia norint pradėti diegti kodą dabartiniuose ar būsimuose projektuose.
Vėlgi, apeinant labai tikrus programavimo pagrindus, esančius bendrosios kalbos kalboje, gali būti, kad jis ar ji yra labai nepalankioje padėtyje, jei jo pasirinkta domeno kalba kažkaip nebenaudojama..
Ši schema suskirsto galimų „blockchain“ programavimo pradinių taškų grupę iš DSL / GDL segmentavimo; skaidrios / tolimos kalbos yra kalbos ne padengtas ilgai:
Sintaksės skaitomumas & Mokymosi kreivė
Skirtingos programavimo kalbos siūlo skirtingą skaitymo lygį, atsižvelgiant į tai, kaip paprastos ar sudėtingos sintaksė yra. Sintaksė reiškia nurodytą rašybą & programavimo kalbos gramatikos taisyklės. Paprastai sintaksės skaitomumas koreliuoja su mokymosi kreivės statumu; sunku perskaityti kodą, todėl sunku išmokti kodą. Vėlgi, tikrai yra šios taisyklės išimčių, tačiau mūsų tikslams šis tiesinis ryšys galioja.
Norėdami sukurti suprantamumo supratimą specialiai naujiems kūrėjams, naudosime dvi pagrindines, tačiau įprastas programavimo kalbos sintaksės funkcijas & „blockchain“ programavimo kalbos. Dažniausia iš šių sąvokų yra laisvasis, o ne griežtas kintamasis.
Laisvas ir griežtas rašymas
Visame programavime plačiai naudojami kintamieji; tačiau nėra vien tik vieno, įprasto kintamojo tipo – jų yra daug, kiekvienas turi unikalių savybių. Jūs tikriausiai girdėjote keletą šių kintamųjų tipų, pvz., Eilutės, sveiki skaičiai, & booleanai. Kiekviena programavimo kalba savo sintaksėje naudoja šiuos natūralius tipus; tačiau kiekviena kalba sluoksniuoja šiuos kintamųjų tipus su savo kintamųjų nuorodų logika. Kai kurios kalbos, pavyzdžiui, „Python“ & „Javascript“, leiskite kūrėjams paprasčiausiai naudoti vieną „var“ kintamąjį: var pavyzdys = „Sutapimas“. Šis lankstumas leidžia kūrėjams apeiti nuobodų procesą užtikrinant, kad kiekvienas kintamojo tipas būtų tinkamai nustatytas kiekvienoje eilutėje. Kalbos, kurios slepia žemo lygio kintamųjų priskyrimą, yra žinomos kaip laisvai įvestos kalbos.
Pastaroji kategorija, griežtai įvardijamos kalbos, susideda iš verbališkesnės, nors ir labiau aprašomosios sintaksės. Kintamųjų deklaravimas griežtai rinktomis kalbomis susideda iš konkretaus pirminio kintamojo tipo, kurį kūrėjas ketina naudoti, deklaravimo: stygos pavyzdys = „Sutapimas“. Jei palyginsite tai su ankstesne kintamojo deklaracija, atkreipkite dėmesį į paryškintą „eilutę“. Šis griežtas kintamojo rinkimas yra pagrindinis laisvai įvestos kalbos sintaksės skirtumas & griežtai įvesta kalba. Sintaksės skirtumas visiškai nesusiaurinamas iki vien kintamųjų deklaravimo, tai yra pagrindinė kalbos dizaino ypatybė, paplitusi visose kalbose.
Abu laisvai spausdinti & griežtai rinktomis kalbomis galima rasti daugybę privalumų & minusų kompromisai. Vienas iš svarbiausių kompromisų, į kurį reikia atsižvelgti naujokams, yra abiejų tipų mokymosi kreivė. Paprastai laisvai įvestos kalbos naujokams siūlo draugiškesnę sintaksę & todėl žemesnė kliūtis patekti; tačiau didžiausias neatidėliotinas trūkumas, kurį reikia apsvarstyti, yra rimta pagrindinių programinės įrangos inžinerijos žinių spraga, kai reikia bendrauti su kintamais tipais.
Pasinaudokite šia informacija, kad ir kaip jums atrodo tinkama, mes vizualiai atskiriame „blockchain“ programavimo kalbų grupę laisvai & griežtai įvesta sintaksė žemiau:
Kalbos peizažas
Pagaliau esame pagrindiniame šio straipsnio skyriuje, kuris yra aukšto lygio katalogas & galimų „blockchain“ programavimo kalbų apžvalga. Kiekvienam skyriui trumpai pristatysime kalbą, apibendrinsime jos numatytą paskirtį „blockchain“ aplinkoje, apžvelgsime visus šiuo metu gaminamus projektus ar sistemas, & galiausiai išvardykite mokymosi išteklius, kad gautumėte daugiau informacijos.
C++
Pirmiausia pradėkime nuo seniausios sąraše esančios kalbos: C ++. Pirmą kartą 1985 m. Pristatytas p. Bjarne Stroustrup, C ++ buvo sukurtas kaip originalios C kalbos pratęsimas. Idėja buvo išlaikyti lankstumą, saugumą & C efektyvumą, bet supaprastinti kalbą labiau į objektą orientuotiems procesams. Taigi, kai C ++ yra objektinė kalba, o C lieka orientuota į procesą.
„C ++“ yra ypač galinga „oldschool“ domeno kalba, kuri yra gana populiari programuojant pagrindinius „blockchain“.
Tačiau naująjį kūrėją reikia įspėti. Mokymosi kreivė yra griežtai įvesta kalba, kurios sintaksė palyginti su bendraamžiais yra palyginti pasenusi labai stačios. Tikėtina, kad sunkiausia kalbėti naujam kūrėjui; vis dėlto reikia konstatuoti, kad pagrindinės žinios, įgytos stumiant C ++ mokymosi kreivę, yra niekuo dėtos. Kaip minėta anksčiau, „blockchain“ pasaulis labai remiasi C ++, todėl netrūks mokymosi išteklių:
„Bitcoin Core“: https://github.com/bitcoin/bitcoin
„Ripple Daemon“: https://github.com/ripple/rippled
„C ++“ mokymo programa: https://www.cplusplus.com/doc/tutorial/
„Javascript“
„JavaScript“ yra laisvai įvesta, scenarijų programavimo kalba, skirta žiniatinkliui, palaikoma visų pagrindinių naršyklių; tai yra pagrindinė kalba, naudojama statiniam HTML patobulinti & CSS puslapiai į visavertes vartotojo sąsajas. Keletas šių įprastų žiniatinklio vartotojo sąsajų apima animacijas, gaivinančius puslapius, vartotojo meniu & dialogo langai, interaktyvūs žemėlapiai ir kt.
Ši kalba, kuria valdomas visas šiuolaikinių naršyklių tinklalapių elgesys, „Javascript“, niekada neturėjo palikti aukščiausio lygio žiniatinklio programos pateikimo sluoksnio. Vis dėlto neginčytina, kad „Javascript“, be abejo, pakilo, ypač naujokams. Pirmiausia „Node.JS“ pateikdamas „Javascript“ serverio pusę, tada „Angular / React / Vue“ iš esmės perrašydamas HTML / CSS kamino kliento pusę, visas „stack“ „Javascript“ tapo labai įniršęs. Per daug neįsigilinus, galima sakyti, kad bent keli kūrėjai veteranai dejuos dėl šios rekomendacijos. Nors šie skundai gali būti tam tikri, jie nepadaro šio sakinio klaidingu:
„Javascript“ yra labai pritaikytas naujokams, bręsta, & dabar įsitvirtinęs visose šiuolaikinio interneto kamino dalyse.
„Javascript“, pagrindinis „blockchain“ palaikymo bėgikas yra „Lisk blockchain“ projektas. Jų nukreipimo puslapyje kalbama apie jų įsitikinimą, kad reikia sukurti visą „blockchain“ ekosistemą „Javascript“: „Liskas leidžia kūrėjams lengvai kurti ir diegti„ blockchain “programas„ JavaScript “.
Mokymosi ištekliai
Sąrašas: https://lisk.io/
„Python“
Palyginti šiuolaikinė programavimo kalba, „Python“ dažnai yra mėgstamiausia naujokams – ir dėl geros priežasties! „Python“ sukūrė Guido van Rossumas su sintaksės paprastumas & įskaitomumas Virš viso kito. Nuo pat išleidimo „Python“ tapo paprasta, tačiau galinga kalba su didžiuliu bendruomenės palaikymu, leidžiančia integruoti „Python“ pažodžiui visur – pradedant žiniatinklio vartotojo sąsajų bibliotekomis, tokiomis kaip „Flask“, ir baigiant mašininio mokymosi pagrindais, pvz., „NumPy“.
Nors naudojant gimtąjį „Python“ negalima techniškai prisidėti prie esamo „blockchain“, rašyti decentralizuotas programas ar laikyti pradinį monetų pasiūlymą, būtų klaida palikti „Python“ iš šio sąrašo, nes beveik kiekvienoje „blockchain“ ekosistemoje yra viena ar daugiau viešų parašyti įrankiai & už „Python“.
Mokymosi ištekliai
„IBM Blockchain Foundations“ pamoka – https://developer.ibm.com/courses/all/ibm-blockchain-foundation-developer/
„Ethereum Web Wrapper“ – https://web3py.readthedocs.io/
EITI
Programavimo kalba GO (sutrumpintai nuo GOLang) yra gana moderni domeno bendroji kalba, sukurta „Google“ 2007 m & sukurta kaip tvirta, daugiafunkcinė kalba, GO buvo bandymas sujungti sintaksę & patogumas šiuolaikinėms kalboms, tokioms kaip „Python“ & „Javascript“ su spektakliu & senesnių, sukompiliuotų kalbų, tokių kaip C, saugumo pranašumai.
GO yra sukompiliuota kalba – tai reiškia, kad ji veikia tiesiogiai operacinėje sistemoje. Ši funkcija suteikia maksimalų lankstumą, kai reikia naudoti GO kelioms „blockchain“ projekto dalims. Norite tiesiogiai prisidėti prie esamo „blockchain“? „Ethereum“ turi protokolą SDK, parašytą GO. Norite parašyti protingą sutartį? Tai apima „Linux-Foundation Hyperledger Fabric“ blokų grandinė.
Mokymosi ištekliai
„Go Documentation“ – https://golang.org/doc/
Eiti Ethereum – https://github.com/ethereum/go-ethereum
„Hyperledger“ audinys – https://github.com/hyperledger/fabric-sdk-go
Solidumas
Solidumas yra panašus į „JavaScript“ domenui būdinga kalba pagamino „Ethereum“ komanda (Gavinas Woodas, Christianas Reitwiessneris, Alexas Beregszaszi, Yoichi Hirai & kiti) už decentralizuotų programų kūrimą „Ethereum“ platformoje. Tai neabejotinai labiausiai pritaikyta & „DSL“, kurią „Ethereum“ bendruomenė perėmė daug & „blockchain“ pramonė.
Tiems, kurie nori sukurti „dApp“ ar laikyti ICO, „Solidity“ yra rankos žemyn vienas iš paprasčiausių būdų nerti tiesiai į viso to esmę. Kadangi „Solidity“ plėtra prasidėjo anksčiau nei „Ethereum“ šakutė, ji, laimei, išvengė bet kokio inžinerinio poveikio daliai pilietinių nesutarimų, ką įrodo ir „Ethereum Classic“. & „Ethereum“ tęsia solidumo palaikymą. Be to, „Cardano“ komanda taip pat neseniai paskelbė „Solidity“ palaikymą – „Solidity“ paverčiant vieną „blockchain“ programavimo DSL, palaikomą keliuose „blockchain“.
Pati kalba buvo sukurta prioritetizuojant kūrėjų pritaikymą, todėl sintaksė buvo tikslingai panaši į vis populiaresnį „Javascript“, be abejo, keliais posūkiais.
Mokymosi ištekliai
„Consensys“ akademija – https://consensys.net/academy/
Tvirtumo dokumentacija – https://solidity.readthedocs.io/en/v0.4.24/
„Uždaryme“
Bitcoin & „blockchain“ technologija ir toliau keis duomenų būdą & turtas yra perduodamas – akivaizdu, kad poveikis bus pasaulinis & pramonė-agnostika. Nesvarbu, kur pradėsite, žengti pirmą žingsnį mokantis vienos iš šių kalbų jau yra reikšmingas pirmasis žingsnis. Šios įgūdžių pasiūlos ir paklausos neatitikimas negali būti pervertintas.
Pagal geriausius įvertinimus pateikiamas aktyvių kūrėjų skaičius visame pasaulyje, maždaug ~ 20M. Vis dėlto pramonės vertinimu teigiama, kad mažiau nei 1 milžinišką 1000 aktyvūs kūrėjai jaučiasi tikri dėl savo įgūdžių ir laiko save „blockchain“ programuotojais & aktyviai kreipiasi į atviras pozicijas. Mažiau aritmetiškai linkusiems tai reiškia apytiksliai apie 20 tūkstančių „blockchain“ programuotojų.
Jei tai atrodo daug, pažvelkime į „Microsoft“ – su maždaug 100 tūkst. darbuotojų Tarkime, kad kiekvienam programinės įrangos inžinieriui priklauso bent vienas pagalbinis personalas, todėl mums lieka apie 50 tūkstančių programuotojų. Iš kitos pusės, bankininkystės milžinė „Goldman Sachs“ šiuo metu dirba ~ 9 tūkstančiai programuotojų & inžinierių.
Esmė ta, kad šis „blockchain“ programuotojų trūkumas yra labai realus & atsakymas į jūsų vidinį dialogą bet ar man jau per vėlu pradėti mokytis nuo nulio? yra NE. Kūrėjams, investuotojams, & reguliuotojai ir visi kiti dalyvaujantys žmonės dar labai ankstyvi.
Klausimas tik, kokį projektą norite pradėti dirbti & kokią problemą norite pradėti spręsti?