Ik wil code bijdragen aan een van deze projecten – hoe kan ik aan de slag?
Is er een taal die specifiek voor blockchains wordt gebruikt??
Ik weet niet hoe ik moet programmeren – kan ik meteen beginnen met blockchain-programmeren?
Een paar maanden geleden had ik het genoegen om een panel van vier actieve NEO-programmeurs te modereren op de San Francisco NEO Dev Conference. Het onderwerp van het panel was algemene blockchain-programmering, maar een bijkomend voorbehoud maakte dit specifieke panel van deelnemers erg interessant: alle vier de programmeurs hanteerden een andere taal naar keuze om aan het NEO-project te werken.
De een was voorstander van de old-school C # -taal, een ander produceerde Python-scripts, een derde predikte de immer populaire Javascript-implementatie & de vierde deelnemer besprak opgewonden een aankomende domeinspecifieke NEO-taal.
Twee gedachten bleven bij me na het panel:
- De NEO-compiler heeft serieuze ondersteuning voor meertalige ontwikkeling
- De leercurve voor blockchain-programmering is brutaal en zwaar geïrriteerd door een gebrek aan georganiseerde middelen, vooral voor nieuwe ontwikkelaars
Dit artikel is bedoeld om punt 2 aan te pakken. Om de effectiviteit van deze gids te maximaliseren, moet het verwachte publiek worden beperkt tot een kleine niche: nieuw & junior programmeurs die specifiek in de blockchain-ruimte willen breken. Voor ervaren ontwikkelaars, programmeurs, & software-ingenieurs doornemen – het volgende gedeelte kan enig voordeel bieden, maar u zult ze waarschijnlijk elementair vinden. Senior ingenieurs kunnen hun tijd maximaliseren door naar een vertrouwde taal naar keuze te scrollen, & beginnen de bijgevoegde leermiddelen uit elkaar te scheuren & documentatie.
Dus je denkt dat je wilt inbreken in blockchain-programmering, hè? Laten we beginnen met het verder precies definiëren van wat blockchain-programmering inhoudt.
Nieuwe industrie
Over het algemeen onderwerpen die u persoonlijk interesseren & afstemmen op uw waarden zijn gemakkelijker te leren dan uit het hoofd iets uit het hoofd leren zonder een duidelijke buy-in; Ik benadruk ten zeerste dat dit principe van toepassing is steeds meer in een aangeboren complex, snel evoluerend veld zoals blockchain-programmering. Laten we, voordat we beginnen, eens kijken naar enkele van de uitdagingen waarmee een blockchain-ontwikkelaar wordt geconfronteerd in de snelgroeiende industrie.
Eerste & Het belangrijkste is de voortdurende, publieke discrepantie tussen wat een “blockchain” precies doet en wat niet inhoudt. Besteed wat tijd aan crypto-twitter & het zal duidelijk worden hoe tribale crypto-gemeenschappen, & geleidelijk zijn hun ontwikkelingsgemeenschappen geworden. Ongecontroleerd tribalisme leidt natuurlijk tot bevooroordeelde gesprekken over wat objectieve inhoud zou moeten zijn, wat een nieuwe laag van verduistering toevoegt voor inkomende ontwikkelaars.
Vervolgens met de meeste projecten in hun testnetfase & met live projecten die continu worden bijgewerkt, forking, & slachtoffer worden van hacks, is het niet verrassend om onvolledige documentatie te zien & onafgemaakte tutorials. De lay-out van het land evolueert snel, wat een consistente iteratie vereist – geen gemakkelijke taak voor elk team.
Het laatste is het echte stigma dat het programmeren van blockchain ronduit ingewikkeld is & samengesteld uit meerdere elkaar kruisende velden die ten minste een rudimentair begrip van het volgende vereisen: economie, cryptografie, valuta, gegevensstructuren, financieel beleid & fysica. Om zelfs maar de delen van deze velden te leren die relevant zijn voor blockchain-programmering, kost het voldoende tijd om het te begrijpen – hier zijn geen snelkoppelingen.
Tribalisme, lukrake documentatie & ingewikkelde grondbeginselen. Allemaal waarschuwingssignalen van een steile klim vooruit. Om zichzelf adequaat door deze toetredingsdrempels heen te motiveren, helpt het om wat duidelijkheid te scheppen over wat precies blockchain programmeren betekent in de eerste plaats. Bovendien kan het helpen om te ontdekken …
Waarom wil je blockchain-programmeren leren? Aan welk project wil je specifiek werken? Welk (e) probleem (en) probeert u op te lossen?
Blockchain-programmering deconstrueren
Als je al weet aan welk project je koortsachtig wilt werken, complimenten – ik stel voor om naar de GitHub-repository van de organisatie of ctrl-Fing de taal van keuze hier te gaan om verder te lezen. Het volgende gedeelte zal het meest profiteren van degenen die niet precies kunnen aangeven welk project & vereiste vaardigheid / taal past het beste bij hen als startpunt voor de mogelijke leerplannen die voor hen liggen.
Over het algemeen kan blockchain-programmering drie verschillende dingen betekenen:
- Een eerste muntenaanbieding (ICO) inzetten
- Een slim contract of gedecentraliseerde app (DAPP) bouwen
- Bijdragen aan een bestaande of een nieuwe blockchain inzetten
Overweeg de drie hierboven beschreven opties ten zeerste, aangezien ze elk een reeks verschillende talen bieden & leercurves. Bovendien zouden ze u moeten helpen een stap dichter bij het verduidelijken van uw exacte gegevens te komen voorkeur. Verdere segmentering voor taalcriteria staat voor de deur; Vergeet echter niet dat persoonlijke voorkeur het belangrijkst is om jezelf te motiveren door een nieuwe vaardigheid te leren.
Ervan uitgaande dat een software-engineer op de eerste dag even geïnteresseerd is in het leren over alle drie de typen blockchain-programmering – op welke andere criteria kunnen ze dan terugvallen om een licht te werpen op de vriendelijkste weg vooruit??
- Algemeen doel versus domeinspecifieke talen
- Syntaxis leesbaarheid & Leercurve
Door een overzicht van deze drie criteria te geven, hebben we eindelijk een solide contextkader van waaruit we zullen toepassen op onze lijst met talen.
Algemeen doel versus domeinspecifiek
Het categoriseren van tools over kwalitatieve kwaliteiten is zelden eenduidig - programmeertalen zijn niet anders. Hier splitsen we alle mogelijke blockchain-programmeertalen op in twee verschillende categorieën: domeinspecifieke talen & algemene talen.
Doorgaans is een domeinspecifieke taal (DSL) een computertaal die is ontworpen & specifiek geschikt voor een bepaalde toepassing. Een algemene taal (GPL), zoals de naam treffend beschrijft, is een taal die breed toepasbaar is in veel programmeerdomeinen.
Algemene taal
Talen voor algemeen gebruik zijn de talen waarvan u waarschijnlijk heeft gehoord, zoals Java, Javascript, Ruby, C++, & Python. Onder de algemene talen zijn oneindig veel manieren te vinden om ze verder kwalitatief te categoriseren & kwantitatieve verschillen & overeenkomsten zoals leesbaarheid, compileren, strikt getypt, frontend / backend, enz … Een goede vuistregel voor de eerste keer vriendelijkheid is als volgt:
Javascript, Python, & Ruby is over het algemeen gemakkelijker voor nieuwkomers omdat ze minder leercurve hebben terwijl C++ & Java heeft meestal meer tijd nodig om uit de doos te leren.
Let op, de redacteur onthoudt zich van commentaar op de tweede & gevolgen op het derde niveau van een nieuwkomer die begint met de ene of de andere taalgroep. Er zijn meerdere debatten over andere functies van deze talen, zoals nieuwkomers dwingen om variabeletypen eerst te begrijpen door middel van een strikt getypeerde taal die we omzeilen om het gebruik hier te maximaliseren voor een nieuwe ontwikkelaar die strikt de blockchain-ruimte benadert.
Het grootste voordeel voor nieuwkomers die een algemeen doel oppikken, is de onmiddellijke mogelijkheid om die taal toe te passen in een groot aantal velden buiten blockchain-programmering. Helaas zorgt de keerzijde van diezelfde munt voor een nadeel voor die nieuwkomers die willen toetreden tot de arbeidsmarkt, aangezien u waarschijnlijk rechtstreeks zult concurreren met senior & ervaren software-ingenieurs uit andere domeinen met jarenlange ervaring in het hanteren van genoemde algemene taal.
Domeinspecifieke taal
Laten we om context te bieden een stap terug doen van blockchain-programmering. Hoewel het een vrij nieuw programmeerveld is, is het concept van een nieuw programmeerveld zelf niet zo nieuw – je hoeft niet te ver voorbij het tweeling-recent-buzzword te kijken machine learning om dit te zien. Een paar extra programmeervelden die ook getuige zijn geweest van een natuurlijke evolutie van een of meer domeinspecifieke talen zijn: statistieken (R, MatLab), database-querying (SQL), Web UI (HTML, CSS).
Er is een zeer grote vraag naar domeinspecifieke taal blockchain-programmeurs met zeer weinig aanbod: deze jonge talen, waarvan het enige doel een of meer van de drie hierboven genoemde blockchain-programmeeropties is, bieden ongetwijfeld de duidelijkste weg om carrière te maken in de industrie..
Omdat deze talen vanaf de grond af zijn ontworpen met blockchain & smart contract engineering in gedachten, ervaren ontwikkelaars kunnen moeite hebben om eerdere referentiekaders uit andere talen aan te passen.
Terwijl nieuwkomers, met een frisse lei programmeergewoonten, alles uit de kast halen wat nodig is om code in huidige of toekomstige projecten te implementeren.
Nogmaals, door de zeer reële programmeerfundamentals die in algemene taal worden gevonden te omzeilen, kan iemand zichzelf in het nadeel vinden als de domeinspecifieke taal van zijn of haar keuze op de een of andere manier verouderd is..
In het volgende diagram wordt de pool van mogelijke ingangspunten voor blockchain-programmering uit een DSL / GDL-segmentatie opgesplitst; transparante / verre talen zijn talen niet uitvoerig bedekt:
Syntaxis leesbaarheid & Leercurve
Verschillende programmeertalen bieden verschillende leesbaarheidsniveaus op basis van hoe eenvoudig of complex ze zijn syntaxis is. Syntaxis verwijst naar de aangewezen spelling & grammaticaregels van een programmeertaal. Gewoonlijk correleert de leesbaarheid van de syntaxis met de steilheid van de leercurve; moeilijk te lezen code zorgt voor moeilijk te leren code. Nogmaals, er zijn zeker uitzonderingen op deze regel, voor ons doel geldt deze lineaire relatie.
We zullen twee belangrijke, maar gemeenschappelijke syntaxisfuncties van de programmeertaal gebruiken om een beter begrip van de leesbaarheid te creëren, specifiek voor nieuwe ontwikkelaars & blockchain-programmeertalen. De meest voorkomende van deze concepten is losse versus strikte variabele typen.
Los versus strikt typen
Alle programmering maakt uitgebreid gebruik van variabelen; Er is echter niet één enkel type variabel, er zijn er veel, elk met unieke eigenschappen. Je hebt waarschijnlijk een paar van deze variabeletypen gehoord, zoals strings, gehele getallen, & booleans. Elke programmeertaal maakt gebruik van deze natuurlijke typen in hun syntaxis; elke taal legt deze variabeletypes echter in lagen met hun eigen logica voor variabeleverwijzingen. Sommige talen, zoals Python & Javascript, laat ontwikkelaars toe om gewoon een enkele “var” variabele te gebruiken: var voorbeeld = “Coincentral.” Deze flexibiliteit stelt ontwikkelaars in staat om het vervelende proces te omzeilen om ervoor te zorgen dat elk variabeletype op de juiste manier in elke regel is ingesteld. Talen die de toewijzing van variabelen op laag niveau verbergen, staan bekend als los getypte talen.
De laatste categorie, strikt getypeerde talen, bestaat uit een meer uitgebreide, zij het meer beschrijvende syntaxis. Het declareren van variabelen in strikt getypeerde talen bestaat uit het specifiek declareren van het oorspronkelijke type variabele dat de ontwikkelaar van plan is te gebruiken: draad voorbeeld = “Coincentral.” Als je dit vergelijkt met de vorige variabeledeclaratie, let dan goed op de vetgedrukte ‘string’. Deze strikte typering van een variabele is het belangrijkste verschil in syntaxis tussen los getypte taal & strikt getypte taal. Het verschil in syntaxis wordt helemaal niet beperkt tot het declareren van variabelen, het is een belangrijke taalontwerpfunctie die alomtegenwoordig is in elke taal.
Beiden losjes getypt & strikt getypeerde talen bieden enorm veel voordelen & nadelen afwegingen. Een van de belangrijkste afwegingen voor nieuwkomers is de leercurve die bij beide typen hoort. Over het algemeen bieden los getypte talen een vriendelijkere syntaxis voor nieuwkomers & dus een lagere toetredingsdrempel; Het grootste directe nadeel dat moet worden overwogen, is echter een ernstig gebrek aan fundamentele kennis van software-engineering als het gaat om interactie met typen variabelen.
Maak gebruik van deze informatie zoals u wilt, we scheiden visueel onze pool van blockchain-programmeertalen door losjes te typen & strikt getypte syntaxis hieronder:
Het taallandschap
We zijn eindelijk bij de kern van dit artikel, een catalogus op hoog niveau & overzicht van beschikbare blockchain programmeertalen. Voor elke sectie zullen we de taal kort introduceren, het beoogde doel binnen de blockchain-omgeving samenvatten, een overzicht geven van projecten of frameworks die momenteel in productie zijn, & Maak een lijst van leermiddelen voor meer informatie.
C++
Laten we beginnen met de oudste taal in de lijst: C ++. C ++ werd voor het eerst geïntroduceerd door ene meneer Bjarne Stroustrup in 1985 en werd gemaakt als een uitbreiding van de oorspronkelijke C-taal. Het idee was om de flexibiliteit en veiligheid te behouden & efficiëntie van C, maar om de taal te stroomlijnen voor meer objectgeoriënteerde processen. Dit leidt er dus toe dat C ++ een objectgeoriënteerde taal is, terwijl C procesgericht blijft.
C ++ is een bijzonder krachtige, ouderwetse, domein-algemene taal die behoorlijk populair is voor core blockchain-programmering.
Wees echter gewaarschuwd voor de nieuwe ontwikkelaar. Als een strikt getypeerde taal met een relatief verouderde syntaxis ten opzichte van zijn leeftijdsgenoten, is de leercurve dat wel heel steil. Het is waarschijnlijk het moeilijkst te verwoorden voor een nieuwe ontwikkelaar om in te springen; toch moet worden gesteld dat de fundamentele kennis die wordt verkregen door het pushen van de C ++ -leercurve ongeëvenaard is. Zoals eerder vermeld, leunt de blockchain-wereld zwaar op C ++, dus je zult geen tekort aan leermiddelen vinden:
Bitcoin Core: https://github.com/bitcoin/bitcoin
Ripple Daemon: https://github.com/ripple/rippled
C ++ zelfstudie: https://www.cplusplus.com/doc/tutorial/
Javascript
JavaScript is een losjes getypte programmeertaal met scripts voor het web die door alle grote browsers wordt ondersteund; het is de primaire taal die wordt gebruikt om statische HTML te verbeteren & CSS-pagina’s naar volwaardige UI’s. Enkele van deze veelgebruikte web-UI’s zijn animaties, verfrissende pagina’s, gebruikersmenu’s & dialoogvensters, interactieve kaarten, enz …
Deze taal die alle webpagina-gedragingen in moderne browsers aandrijft, Javascript, zou nooit de presentatielaag op het hoogste niveau van een web-app verlaten. Toch valt niet te ontkennen dat Javascript op een ongekende manier een hoge vlucht heeft genomen, vooral voor nieuwkomers. Met Node.JS eerst Javascript server-side plaatsen, dan Angular / React / Vue in feite herschrijven van de HTML / CSS stack client-side, full-stack Javascript is een ware rage geworden. Zonder al te diep te graven, is het veilig om te zeggen dat ten minste een handvol ervaren ontwikkelaars zal kreunen bij deze aanbeveling. Hoewel deze klachten enige verdienste kunnen hebben, betekent dit niet dat de volgende zin onwaar is:
Javascript is erg nieuwkomersvriendelijk, volwassen, & nu verankerd in alle delen van de moderne webstack.
Voor Javascript is de voorloper in blockchain-ondersteuning het Lisk blockchain-project. Hun bestemmingspagina spreekt boekdelen in termen van hun geloof in het bouwen van een volledig blockchain-ecosysteem in Javascript: “Lisk maakt het gemakkelijk voor ontwikkelaars om blockchain-applicaties in JavaScript te bouwen en te implementeren.”
Leermiddelen
Lisk: https://lisk.io/
Python
Python, een relatief moderne programmeertaal, is vaak de favoriet van nieuwkomers – en met goede reden! Python is ontworpen door Guido van Rossum met syntaxis eenvoud & leesbaarheid bovenal. Sinds de release is Python geëxplodeerd als een eenvoudige maar krachtige taal met enorme community-ondersteuning die letterlijk overal tot Python-integratie heeft geleid – van web-UI-bibliotheken zoals Flask tot essentiële functies voor machine learning zoals NumPy.
Hoewel men met native Python technisch niet kan bijdragen aan een bestaande blockchain, gedecentraliseerde apps kan schrijven of een eerste muntaanbieding kan houden, zou het een vergissing zijn om Python uit deze lijst te laten, aangezien bijna elk blockchain-ecosysteem een of meer openbare tools geschreven in & voor Python.
Leermiddelen
IBM Blockchain Foundations-zelfstudie – https://developer.ibm.com/ourses/all/ibm-blockchain-foundation-developer/
Ethereum Web Wrapper – https://web3py.readthedocs.io/
GAAN
De programmeertaal GO (afkorting van GOLang) is een relatief moderne domein-algemene taal die in 2007 bij Google is ontwikkeld & onthuld voor openbaar gebruik in 2012. GO is ontworpen als een robuuste, multifunctionele taal en was een poging om de syntaxis te combineren & gebruiksvriendelijkheid van moderne talen zoals Python & Javascript, met de uitvoering & beveiligingsvoordelen van oudere, gecompileerde talen zoals C.
GO is een gecompileerde taal – wat betekent dat het rechtstreeks binnen een besturingssysteem draait. Deze functie biedt maximale flexibiliteit als het gaat om het gebruik van GO voor meerdere delen van een blockchain-project. Direct bijdragen aan een bestaande blockchain? Ethereum heeft een protocol-SDK geschreven in GO. Wil je een slim contract schrijven? De Linux-Foundation Hyperledger Fabric-blockchain heeft dat gedekt.
Leermiddelen
Go Documentatie – https://golang.org/doc/
Ga Ethereum – https://github.com/ethereum/go-ethereum
Hyperledger-stof – https://github.com/hyperledger/fabric-sdk-go
Stevigheid
Solidity is een javascript-achtig domeinspecifieke taal gemaakt door het Ethereum-team (Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai & anderen) voor het maken van gedecentraliseerde apps op het Ethereum-platform. Het is verreweg het meest aangepast & mainstream DSL die ruimschoots is toegepast binnen de Ethereum-gemeenschap & blockchain-industrie.
Voor iedereen die een dApp wil bouwen of een ICO wil houden, is Solidity zonder meer een van de meest eenvoudige manieren om direct in het hart van dit alles te duiken. Omdat de ontwikkeling van Solidity begon vóór de Ethereum-hard-fork, kon het gelukkig alle technische effecten van een deel van de civiele onenigheid voorkomen, zoals blijkt uit zowel Ethereum Classic & Ethereum voortdurende Solidity-ondersteuning. Bovendien heeft het Cardano-team onlangs ook Solidity-ondersteuning aangekondigd – waardoor Solidity de enkele blockchain-programmering is die DSL ondersteunt in meerdere blockchains.
De taal zelf is gemaakt met prioriteit voor acceptatie door de ontwikkelaar, wat leidde tot een syntaxis die doelbewust vergelijkbaar is met het immer populaire Javascript, met natuurlijk een paar wendingen.
Leermiddelen
Consensys Academy – https://consensys.net/academy/
Solidity-documentatie – https://solidity.readthedocs.io/en/v0.4.24/
Tot slot
Bitcoin & blockchain-technologie zal de manier waarop data wordt gerevolutioneerd blijven veranderen & activa worden overgedragen – het is duidelijk dat de impact wereldwijd zal zijn & industrie-agnostisch. Waar u ook begint, de eerste stap zetten bij het leren van een van deze talen is al een substantiële eerste stap. De mismatch in vraag en aanbod voor deze skillset kan niet genoeg worden benadrukt.
De beste schattingen plaatsen het aantal actieve ontwikkelaars wereldwijd, rond ~ 20 miljoen. Toch stellen schattingen van de industrie dat minder dan 1 op maar liefst 1000 actieve ontwikkelaars hebben vertrouwen in hun vaardigheden om zichzelf als blockchain-programmeurs te beschouwen & solliciteren actief op openstaande posities. Voor degenen die minder rekenkundig geneigd zijn, betekent dat dat er is ongeveer 20 duizend blockchain-programmeurs.
Als dat veel lijkt, laten we eens kijken naar Microsoft – met een personeelsbestand van ongeveer 100.000 – laten we aannemen dat ze ten minste één ondersteunend personeel per software-engineer hebben, wat ons met ongeveer 50.000 programmeurs overhoudt. Aan de andere kant, bankgigant Goldman Sachs heeft momenteel ~ 9.000 programmeurs in dienst & ingenieurs.
Het punt is: dit tekort aan blockchain-programmeurs is heel reëel & het antwoord op je innerlijke dialoog maar het is te laat voor mij om helemaal opnieuw te leren? is NEE. Voor ontwikkelaars, investeerders, & toezichthouders en alle andere betrokkenen, het is nog erg vroeg.
De enige vraag is aan welk project je wilt gaan werken & welk probleem wil je oplossen?