Door Tweakers Events

Tweakers Developers Summit: welke programmeertaal is dominant?

15-08-2023 • 08:00

75

De Tweakers Developers Summit 2023 nadert met rasse schreden. Op 12 september komen in DeFabrique in Utrecht programmeurs en developers bijeen om tal van workshops en talks te volgen. Daarnaast zijn onze partners aanwezig; denk aan bedrijven als NS, Logius, ASR, HR2day, KPN, Chipsoft, de nationale politie en DPG Media. Het event is dé plek om met elkaar van gedachten te wisselen, nieuwe inzichten te verzamelen en tips & tricks uit te wisselen.
Wil je zeker zijn dat je erbij bent, dan kun je hier kaarten kopen.

Elk jaar reizen tal van developers af naar Utrecht, stuk voor stuk met een specifieke achtergrond en skillset. Welke programmeertaal gebruiken ze, waarom is dat hun ‘weapon of choice’ en is het gras misschien groener aan de overkant? In dit artikel proberen we er antwoord op te geven.

Geschiedenis van programmeertalen, in vogelvlucht

De eerste generatie programmeertalen, zoals Assembly, werd geboren uit de noodzaak om machinetaal te abstraheren. Dit gebeurde met het doel ervoor te zorgen dat programmeurs in een iets menselijkere taal konden werken. Fortran (1957) was een van de eerste talen van hoger niveau en werd gevolgd door LISP (1958) en Cobol (1959). Deze talen waren respectievelijk bedoeld om te voldoen aan de eisen van wetenschappelijke berekeningen, symbolische redenering en zakelijke logica. In de jaren '70 en '80 kwam er een verschuiving naar gestructureerd programmeren, ook wel bekend als de Structured Programming Revolution, met de introductie van C, Pascal en Ada. Die talen stelden programmeurs in staat om efficiëntere, beter onderhoudbare code te schrijven door een sterkere controle op structuren zoals lussen en functies. In de jaren '90 kwam het zogenaamde objectgeoriënteerde paradigma op. Java en C++ werden populair, samen met talen zoals Python, die een hoge mate van flexibiliteit en gebruiksgemak boden.

Populaire programmeertalen van dit moment

Momenteel zijn vijf programmeertalen het populairst: Java, C#, PHP, Python en C++. Uiteraard doen we hier direct een aantal talen te kort; denk bijvoorbeeld aan JavaScript als meestgebruikte taal op het web, en ook serverside met behulp van Node.js is als platform een veelgebruikte taal. Toch houden we ons voor nu even aan deze vijfdeling. Verderop in het artikel komen nog meer talen aan bod.

Java

Van mainframedatacenters tot het gebruik van smartphones: Java's bereik is gigantisch. Dankzij de objectgeoriënteerde structuur is Java voor velen de gouden standaard geworden voor platformonafhankelijke applicaties. Deze veelzijdige taal wordt gebruikt voor het beheren van databases en het creëren van Android-apps, en als backendtaal voor web- en desktopapplicaties. Met de Java Virtual Machine als kerncomponent biedt hij een veilige en efficiënte manier om code op verschillende platforms te draaien. Java staat voor stabiliteit en betrouwbaarheid, en is en blijft enorm relevant.

Python

Python raast als een meteoor door de wereld van de programmeertalen en groeit sneller dan welke scripttaal dan ook. Deze gratis opensourcetaal blinkt uit in gebruiksvriendelijkheid, met leesbare syntax en uitgebreide moduleondersteuning. Bezig met machinelearning en data-analyse? Dan is Python je vriend. Met bibliotheken zoals TensorFlow en SciPy wordt de taal ook gebruikt in 2d-imaging, 3d-animaties, games en wetenschappelijke softwaretoepassingen.

PHP

Vóór de opkomst van talen zoals JavaScript en Ruby was PHP de motor achter bijna elke dynamische, interactieve website. Met de lamp-stack (Linux, Apache, MySQL, PHP) als ruggengraat was er weinig concurrentie. Hoewel het misschien zijn toppositie heeft verloren, blijft PHP een van de meestgebruikte programmeertalen ter wereld en is het nog steeds een krachtig instrument voor serverside-webdesign.

C#

C# is een van de krachtigste talen in het .NET-framework en een essentieel instrument voor het bouwen van toepassingen voor Windows, Android en iOS. Deze taal, die door Microsoft werd ontwikkeld, wordt gebruikt in de backend van grote websites zoals Bing, Dell en Visual Studio, en speelt ook een rol in de ontwikkeling van Unity-games.

C++

C++ kun je zien als de lijm voor het bij elkaar houden van uiteenlopende complexe systemen, van besturingssystemen tot de gebruikersinterface van browsers en games. Met zijn efficiënte geheugenbeheer en de mogelijkheid om rechtstreeks toegang te krijgen tot systeemhardware is C++ voor veel toepassingen onmisbaar. Met de toenemende populariteit van iot-apparaten en smartwatches met embedded systemen blijft deze taal essentieel, ook in de toekomst.

Indeling in categorieën

Uiteraard zijn er veel meer talen dan de vijf die we hierboven hebben benoemd. Een belangrijk gegeven is dat het handiger is om programmeertalen in te delen in categorieën dan op basis van populariteit. De volgende classificatie biedt een overzichtelijke indeling; sommige talen kunnen daarbij in meer dan één categorie vallen.

In algemene zin zijn er vijf hoofdcategorieën waarin talen kunnen worden ingedeeld:

  1. Procedurele programmeertalen werken met sequenties van commando's om uitvoer te creëren. Voorbeelden zijn C, C++, Java, Pascal en Basic.
  2. Functionele programmeertalen zijn gericht op het uitvoeren van wiskundige functies en evaluaties, waarbij elke functie een specifieke taak uitvoert. Populaire talen in deze categorie zijn Scala, Erlang, Haskell, Elixir, en F#.
  3. Objectgeoriënteerde programmeertalen behandelen programma's als groepen objecten, waardoor codehergebruik en schaalbaarheid worden vergemakkelijkt. Hier komen Java, Python, PHP, C# en Ruby van pas.
  4. Scripttalen worden gebruikt om repetitieve taken te automatiseren en dynamische webcontent te beheren. Veelvoorkomende scripttalen zijn PHP, Ruby, Python, bash, Perl en Node.js.
  5. Logische programmeertalen nemen beslissingen op basis van feiten en regels, in plaats van dat ze commando's uitvoeren. Voorbeelden zijn Prolog, Absys, Datalog en Alma-0.

Indeling op doeleinden en specifieke eisen

Een andere manier om programmeertalen te benaderen, krijg je wanneer ontwikkelaars en IT-professionals hun specifieke behoeften en projecteisen voorop stellen. Daarbij kom je al snel tot de volgende driedeling, met steeds twee onderscheidende karakteristieken.

  1. Frontend- versus backendtalen
    Frontendtalen (zoals JavaScript) zijn verantwoordelijk voor de gebruikersinterface en alles wat de gebruiker ziet of waar hij of zij mee interacteert op een website of in een applicatie. Backendtalen (JavaScript, PHP, Java, Python, Ruby, C#) beheren op hun beurt de serverkant, inclusief dataopslag en
    -manipulatie, en werken als het ware achter de schermen.
  2. Highlevel- versus lowleveltalen
    Highleveltalen zijn gebruiksvriendelijk maar minder geheugenefficiënt. Ze zijn gemakkelijker te schrijven en te onderhouden. Lowleveltalen zijn efficiënt in geheugengebruik maar moeilijk te begrijpen zonder speciale tools zoals een assembler.
  3. Geïnterpreteerde versus gecompileerde talen
    Geïnterpreteerde talen (Python, JavaScript, PHP, Ruby) worden regel voor regel uitgevoerd door een interpreter, wat ze flexibel en platformonafhankelijk maakt. Gecompileerde talen (C, C++, C#, Rust, Erlang) worden in hun geheel omgezet in machinetaal. Hoewel dit de uitvoering versnelt, moet bij elke wijziging het hele programma opnieuw worden gecompileerd.

Welke taal of talen beheers jij zelf? Wil je meer te weten komen over programmeertalen en in contact komen met Tweakers-bezoekers die dezelfde vakkennis hebben als jij? Kom dan naar de Tweakers Developers Summit 2023.

Kaarten winnen?

De komende tijd publiceren we in de aanloop naar de Tweakers Developers Summit meer van dit soort artikelen. Daarbij delen we steeds een aantal gratis kaarten voor het event uit. Bij dit artikel maak je via onderstaande poll kans op een van de vijf kaarten die we dit keer weggeven. Let ook bij de komende artikelen goed op de poll.

Wil jij kans maken op één van de vijf kaarten voor de Tweakers Developers Summit?

Poll

De opties zijn uitgeschakeld omdat de deelname gesloten is


Algemene voorwaarden actie

  • Je Tweakers-account moet voor 15 augustus 2023 geactiveerd zijn.
  • Meedoen kan tot en met 21 augustus 2023, alleen via de poll. Je kunt één keer aan de poll deelnemen.
  • Winnaars krijgen uiterlijk 25 augustus 2023 bericht via e-mail. Niet-winnaars ontvangen geen bericht.
  • Winnaars worden at random geselecteerd. Over de uitslag wordt niet gecorrespondeerd.
  • Minderjarigen mogen pas meedoen na voorafgaande toestemming van hun ouders of verzorgers.
  • De kaarten zijn niet inwisselbaar voor geld of andere goederen.
  • Medewerkers van Tweakers zijn uitgesloten van deelname.
  • Deelnemers die niet voldoen aan bovengenoemde voorwaarden, kunnen worden uitgesloten van deelname.
  • Klachten kunnen via klachten@tweakers.net worden ingediend.

Kaartverkoop, factuur, ‘3 halen 2 betalen’

Nog geen kaartjes voor hét developersevenement van het jaar? Regel dan nu razendsnel je kaarten. Reguliere tickets (299 euro) zijn nog beperkt beschikbaar. Goed om te weten: studenten betalen 75 euro voor een kaartje en overige bezoekers kunnen gebruikmaken van ‘3 halen 2 betalen’ (je betaalt dan 598 euro voor drie kaarten). Mocht je werkgever de tickets betalen, dan wordt uiteraard een factuur voor de administratie bijgevoegd. Persoonlijke gegevens worden niet gedeeld met partners.

Partnerblock_DevelopersSummit_2023

Wil je meer informatie over de Developers Summit 2023? Klik dan op onderstaande button.

Meer info button

Lees meer

Reacties (75)

75
73
32
7
0
37
Wijzig sortering
Ik ben niet heel erg thuis in alle andere talen, maar wat betreft C#:

- Naast Windows, IOS en Android kan een C# programma ook op Linux draaien, native!
- C# wordt door jullie gepositioneerd als een back-end taal. Maar met C# kan je ook front-ends (zowel Windows als web) bouwen. Voor het web is Blazor het framework binnen .NET om dit mee te doen.
- C# wordt, net als Java, omgezet in bytecode. Daarna wordt er doormiddel van Just In Time compilation machinecode gegenereerd. Dit gebeurt bij het opstarten van de applicatie. Al is men ook bezig om direct naar native code te compileren. Maar het is wat gek om C# in het rijtje met C/C++ te plaatsen.
- C# en het .NET framework. Er is .NET en er is het .NET framework. Het .NET framework is het 'oude originele' .NET wat alleen op Windows draait. .NET is het recente .NET wat op Windows, IOS, Android en Linux draait.

[Reactie gewijzigd door beany op 23 juli 2024 14:06]

.NET Framework draait ook op Linux, Mac, iOS en Android door middel van Mono ;) Verder klopt het wel.
Er is inmiddels .NET Core, een first-party implementatie van .NET voor Linux, Windows, en macOS. In principe heb je Mono dus niet meer nodig, maar het mag wel natuurlijk (voor legacy spul ofzo).

Verder kan ik aan @beany nog toevoegen dat "bytecode" eigenlijk IL (intermediate language) heet, en dat .NET ook een ahead-of-time compilatie kent. Dat wordt soms door installers van .NET-gebaseerde software (zoals Keepass) gepresenteerd als "optimise performance" of iets dergelijks, waarbij de installer een ahead-of-time compilatiestap triggert.
.NET core is toch ook depricated? Samengevoegd met .NET frame work onder .NET
Het is sinds 'core' 5.0 gerenamed naar .NET om de versie gelijk te trekken met .NET (.NET was nog in 4.8.x meen ik). De laatste stable is nu bijv .NET 7, die is ontstaan uit core, niet vanuit .NET 4.x
Helemaal niet verwarrend ofzo :)
.Net core draait tegenwoordig native hoor, sinds versie 6 meen ik me te herinneren
Het is mogelijk om bepaalde c# code te compilen naar native machinecode.
Dit is niet voor alle libraries/programma's mogelijk, dus het gros van de .net/c# applicaties wordt nog naar de hierboven genoemde IL gecompileerd en geïnterpreteerd door de runtime.
Strict genomen draait C# nooit native, ook niet op Windows ;) Het draait in de VM.

Ja ik ben leuk op feestjes!
Ja en nee! Ja, er zit een VM tussen (CoreCLR), maar je C# code wordt eerst gecompileerd naar CIL, en dan gaat de CoreCLR ermee aan de slag om daar vervolgens al dan niet just-in-time native instructies van te maken! Zie https://en.wikipedia.org/wiki/Common_Intermediate_Language. Dus die intermediate language wordt wel degelijk nog een keer vertaald naar daadwerkelijke machine instructies.

Kleine edit - dat gaat dus als volgt
C# -> Roslyn compiler -> CIL -> CoreCLR (RyuJIT compiler) -> machine code

[Reactie gewijzigd door Unplayable op 23 juli 2024 14:06]

Natuurlijk, want een CPU werkt natuurlijk alleen op CPU instructies. Maar dus dat CIL programmaatje (wat oorspronkelijk C# was) wordt vertaald naar x86 (of ARM64 etc etc etc), en dát is native ;-) Dus niet de C#. Maarja, ik snap dat dat misschien een beetje flauw om zo te zeggen (maar ik ben graag technisch correct ;) ).
.oisyn Moderator Devschuur® @Travelan15 augustus 2023 14:15
Maar als je die redenatie aanhoudt dan zijn C++ en Rust ook niet native, want die gaan (vaak) ook eerst door een IR (LLVM IR bijvoorbeeld).
Je hebt de optie om AOT (Ahead Of Time) compilatie te doen. Hiermee is er geen VM meer en wordt er direct native code gegenereerd. Het is dus afhankelijk van de compile opties die je selecteerd.

Meer info: https://learn.microsoft.c...-aot/?tabs=net7%2Cwindows
Weet niet if het nog steeds zo is, maar de laatste keer dat ik keek draaide .NET niet 100% op Linux. Na de release van .NET CORE kon ik mijn C# lessen compleet op Linux doen (hoewel ik al grotendeels in mono werkte), maar een jaar later waren de lessen aangepast met wat nieuw spul en zaten er niet-Linux compatible onderdelen in. Gelukkig had ik hem toen net gehaald. Problemen kwamen vooral zodra je bijv. schermen/interfaces ging bouwen.

Maar dat kan outdated zijn, ik heb er niet meer in gekeken sinds dat ik studeerde en gebruik het nu enkel als onderdeel om Proton/Wine mijn games op Linux te laten draaien. Daarbij ben ik sowieso minder bezig met development tegenwoordig. Maar vermoed ergens dat er nog steeds wel wat haken en ogen zitten aan .NET op Linux.

[Reactie gewijzigd door Cambionn op 23 juli 2024 14:06]

Het is nu juist erg makkelijk om c# op linux te gebruiken.
Er is een erg goede front end framework beschikbaar die zelfs cross platform is.
Avalonia is wat ik tegenwoordig bijna altijd gebruik als ik een UI wil tonen.

In principe kun je nu redelijk makkelijk een single code base maken voor je software welke op windows, mac en linux werkt.
Ah oke. Tja, wij kregen het op de Microsoft manier zonder secundaire frameworks of wat dan ook. Idee was ook dat als je de basis kan je makkelijker frameworks aanleert, maar als je enkel frameworks kent de basis opeens heel lastig kan zijn.

Dat 100% the MS-way was soms wel best jammer. Bij C# snapte ik hem nog wel (zeker in die tijd gezien .NET Core voor Linux toen net uitkwam dus de lessen daar niet op gebouwd waren nog), maar op andere vlakken was het best vervelend. De C++ lessen gingen bijvoorbeeld ook van Microsoft uit waardoor we nooit iets over makefiles kregen (in Visual Studio klik je hier en daar dan build het), en was er zelfs Windows specefieke code in opdrachten die dus crashte bij mensen met een Mac of Linux (ging om het cmd scherm onderdrukken, andere systemen opende niet standaard een terminal). Dat soort dingen moest je als Linux gebruiker zelf dus oplossen, niet Windows gevruiken was "eigen risico" 🥲. Is overigens geen probleem geweest voor mij, vind het gewoon jammer in algemene zin.

Maar zoals ik zeg is het ook al paar jaar terug, en kan het nu prima anders zijn. Opleiding stond trouwens als 1 van de beste aangeschreven voor IT op HBO niveau elk jaar, en was op het groote plaatje echt dikke prima. Dus niet om die nu zwart te maken ofzo. Heb het hun ook meegegeven toen ze feedback vroegen, en er werd daar met feedback ook wel echt wat mee gedaan, dus kan zijn dat het uberhaupt ook niet relevant meer is.
- C# wordt, net als Java, omgezet in bytecode. Daarna wordt er doormiddel van Just In Time compilation machinecode gegenereerd. Dit gebeurt bij het opstarten van de applicatie. Al is men ook bezig om direct naar native code te compileren. Maar het is wat gek om C# in het rijtje met C/C++ te plaatsen.
Ik dacht dat IL2CPP wel wat populairder was dan "men is ook bezig".
IL2CPP is een Unity-specifiek product en niet .NET-generiek.
C# is for the most part relatief ok. Van .NET framework kan ik echter niet hetzelfde zeggen. Heb echter wel vernomen dat er relatief recent een soort "rewrite" is gedaan die veel verbeterd heeft?
Node.js is geen taal, maar een framework. Het is gebouwd op Javascript, wat weer wél een taal is (vergelijkbaar met C# en .NET dus). Javascript is trouwens niet écht een geinterpreteerde taal. Het wordt niet naar machinetaal gecompileerd, maar wel naar iets er tussenin. Dat effect bestaat nog sterker bij het gebruik van een transpiler.

Verder vind ik het opmerkelijk dat er geen woord gerept wordt over Typescript en Flow. Vooral Typescript is immens populair.

[Reactie gewijzigd door _Thanatos_ op 23 juli 2024 14:06]

Ik kwam er dankzij r/place achter dat Python door een Nederlander bedacht is. Mag er ook wel bij denk ik.

En in plaats van een vrij basic artikel over programmeertalen, had het wellicht leuker geweest om er gewoon 1 uit te pakken en daar wat interessants over te vertellen. Nu leest het meer als een spreekbeurt.
Hier is al meerdere malen over gesproken in andere artikelen. Voor de liefhebber die deze gemist heeft. video: Polderpioniers - Guido van Rossum: Ontwerper van de programmeertaal Py...
Python is een high level, object georiënteerde programmeertaal. Geen scripttaal.
Python is zeker wel een scripting taal, want het werkt met een interpreter.

Edit: duidelijker: een interpreter is iets anders dan bvb de JVM of een andere runtime environment. De interpreter kan broncode at runtime uitvoeren. In Java of C# kan dat doorgaans niet zomaar, en moet je de broncode eerst compileren voordat je ze kan uitvoeren.

Zoals mphilipp zegt is de scheiding tussen script- en progammeertalen niet heel hard, maar het kenmerk "kan je broncode zonder compilatie at runtime uitvoeren?" is wel een van de kenmerken die je taal heel hard naar de categorie scriptingtaal duwt.

[Reactie gewijzigd door kiang op 23 juli 2024 14:06]

Ik denk dat het verschil tussen scripting taal en programmeertaal niet zo keihard is. Basic is ook geïnterpreteerd (hoewel er ook basic compilers zijn/waren). Het is zo dat scripting talen doorgaans interpretertalen zijn, maar er zijn meer kenmerken voor scriptingtalen. Zo zijn scripts meestal (daar heb je dat woord weer) korte programma's voor één specifieke taak. Er wordt voor scripting best veel gebruik gemaakt van Python, maar er zijn ook complete programma's in geschreven. Ik denk dat Python in dit geval een typisch voorbeeld is van beide.
Is Python a scripting or programming language?
Yes, python is a programming as well as a scripting language. According to Linux Journal readers, Python is one of the greatest programming and scripting languages available. Python as a scripting language is general-purpose, high-level, and interpreted. It also includes the object-oriented programming approach.
Uiteindelijk beslist degene dit het programma maakt met een bepaalde taal wat het moet worden. Sommige scripts in BASH of zelfs de DOS scripttaal (die écht héél erg beperkt is) zijn bijna complete softwarepakketten. Ik heb zelfs ooit een verhaal gehoord van een bibliotheek die de uitleenadministratie had geschreven in de WordPerfect scripttaal :X Dat is dan wel een beetje de limiet denk ik...
.oisyn Moderator Devschuur® @mphilipp15 augustus 2023 14:22
Wat ik persoonlijk altijd aanhoud als verschil tussen een scripttaal een een gecompileerde taal is letterlijk dat: of je het script "opstart", of een gecompileerde binary file. Ook bij standaard Python is de input van de executor gewoon een bronbestand. Dat ie dat ondertussen gaat compileren en eventueel de binary wegschrijft als cache is daar ondergeschikt aan. En dus classificeer ik Python als een scripttaal. Verder betekent het natuurlijk weinig, en met transpilers kun je er vaak alsnog een binary van maken die direct op te starten is.

Let wel dat ik hier expliciet niet het onderscheid maak tussen scripttaal en programmeertaal. Een scripttaal is (vaak) ook een programmeertaal.

[Reactie gewijzigd door .oisyn op 23 juli 2024 14:06]

JAVA ook dus. En alle nieuwe programmeertalen met een LLVM eronder zoals Rust, C#, Objective-C en Swift?

Of ben je gewoon aan het trollen?
Het is niet zo zwart wit zoals jij stelt. Java wordt gecompileerd naar bytecode en daarna pas heb je de interpreter voor de bytecode. Het is dus niet trollen maar een verschil in de classificatie van talen in compiled vs interpreted. Python zit in de interpreted hoek, Java (en bijvoorbeeld ook c#) in de compiled hoek.

Het doet verder weinig af aan de kracht van python hoor. De een is niet beter dan de andere, elke taal heeft wel een toepassingsgebied waar het in excelleert en dat is toch prima?
Java gebruikt een JVM, een machine waar bytecode tegen draait. Je meot je broncode compileren voordat je die kan uitvoeren.

Dat is echt heel wat anders dan niet-gecompileerde broncode die at-runtime geïnterpreteerd wordt.

Of ben jij aan het trollen? ;)

[Reactie gewijzigd door kiang op 23 juli 2024 14:06]

Ik kan mijn Qt-app in Python schrijven en dan naar C laten compileren. Python is gewoon een taal. Hoe die verder gebruikt wordt, compilatie of interpretatie is toch niet relevant?
Python is zeker wel een scripting taal, want het werkt met een interpreter.

Edit: duidelijker: een interpreter is iets anders dan bvb de JVM of een andere runtime environment. De interpreter kan broncode at runtime uitvoeren. In Java of C# kan dat doorgaans niet zomaar, en moet je de broncode eerst compileren voordat je ze kan uitvoeren.
Python wordt gecompileerd naar bytecode (wat kan worden gecached in .pyc files), en deze bytecode wordt gerund in een VM. Exact zoals Java en C# dus.

Althans, dat is hoe de standaard implementatie van Python (genaamd CPython) werkt. Andere bekende implementaties zijn PyPy, welke een tracing JIT-compiler gebruikt, Jython, welke Python compiled naar Java bytecode, en IronPython, welke compiled naar MSIL (C# bytecode).

Ik weet niet waar je conclusie dat Python geïnterpreteerd is vandaan komt, maar het klopt niet in ieder geval ;)
Python is zeker wel een scripting taal, want het werkt met een interpreter.
Ben ouwe knar en ben Basic gewend.
Heb een beetje naar Python gekeken, dat het een interpreter is komt zeer vertrouwd over.
Ik moet wat meer over moderne concepten leren, maar verder lijkt het voor mij de ideale opvolger
Wel verkeek ik me op al die python soorten, dat zijn speciale toepassingen geschreven in python, en dat wil dus niet zeggen dat je die met python basiskennis zo maar even kan begrijpen. Je moet ze maar domweg 'even' toepassen, c.q. aanvullende studies doen die niet zo zeer met programmeren van doen hebben.
En de eerste discussie is al losgebarsten :)

Een scripttaal is een taal die runtime wordt geïnterpreteerd en niet eerst moet worden gecompileerd. Python is in die zin een scriptaal, maar wel een high level taal met object georiënteerde principes.
Zo zwartwit is het ook niet. Scripttalen worden tegenwoordig vaak just-in-time gecompileerd naar een tussentaal (noem het bytecode als je wil). Je hoeft niet als developer een compiler te gebruiken maar het kan wel, denk maar aan transpilers die iets naar Javascript omzetten.

Het concept van geinterpreteerd tot aan gecompileerd is geen tweekamp, maar een spectrum. C++ is bijvoorbeeld volledig gecompileerd, terwijl Basic volledig geinterpreteerd is. Maar er zijn genoeg talen en frameworks er ergens ertussenin liggen.

C# bijvoorbeeld is gecompileerd, maar het compileert niet helemaal naar machinetaal. Het compileert naar IL, wat weer just-in-time compiled wordt naar machinetaal. Dus heel strict genomen zou dat een geinterpreteerde taal moeten zijn, maar dat is het niet. Het ligt gewoon dichterbij compiled op het spectrum, maar kent elementen van interpretatie.

[Reactie gewijzigd door _Thanatos_ op 23 juli 2024 14:06]

Zo zwartwit is het ook niet
ik heb precies hetzelfde gezegd hierboven bij een andere reactie ;) . Je hebt volkomen gelijk en dat probeerde ik ook over te brengen in mijn latere post als reactie op Jochem.
Python is wel degelijk een scripttaal. Doet overigens niets af aan de kracht van Python.
Nee, het is een programmeer taal met scripting functionaliteiten:

"Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together." - https://www.python.org/doc/essays/blurb/
.oisyn Moderator Devschuur® @DdeM15 augustus 2023 14:27
Er is niets in die quote dat zegt dat het geen scripttaal is :) (scripttaal en programmeertaal zijn niet wederzijds exclusief)

[Reactie gewijzigd door .oisyn op 23 juli 2024 14:06]

Python is a programming language that lets you work quickly
and integrate systems more effectively.
Serieus?
Hoezo, want Youtube? Python wordt echt heel veel gebruikt - bijv in de academische wereld en machine-learning achtige omgevingen, en terecht. Het heeft zijn functie.
Er zijn zo enorm veel libraries voor Python en zoveel open source. Het enige slechte aan python dat ik weet is dependancy hell. Maar dat is niet echt de schuld van de taal maar van de community denk ik. Als lapmiddel zijn er environments oplossingen.


edit: Italic text toegevoegd

[Reactie gewijzigd door MrMonkE op 23 juli 2024 14:06]

print (-1 // 2)

Het antwoord (-1) zal u verbazen. Zeer vreemde keuze en incompatible met 99% van alle talen.
inderdaad.
Ik heb mijn post aangepast.

(Geen operator overloads in Python neem ik aan?)

[Reactie gewijzigd door MrMonkE op 23 juli 2024 14:06]

vertel is 2 dan geen comment (// wordt vaak gebruikt voor comments) wat zou het antwoord volgens u moeten zijn ?
Dubbele slash (//) staat voor integer division, enkele slash (/) voor floating point division.

In vrijwel elke programmeertaal is -1 gedeeld door 2 afgerond 0, en niet -1. Wiskundige algoritmes die hiervan afhankelijk zijn (dithering is een goed voorbeeld) geven hierdoor een ander resultaat.
ah dat wist ik niet (ik programmeer in php en die heeft dat volgens mij niet), maar een functie (intdiv) of een cast (int)

bij php heb je nog een instelling bij round(), $mode = PHP_ROUND_HALF_UP (default) terwijl jij ROUND_HALF_DOWN verwacht ?
Round to zero om precies te zijn, de zogeheten truncate mode.
Volgens de documentatie slaat // niet op integer division, maar op "floor division", en floor(-0.5) is wel degelijk -1, ook in andere programmeertalen. Maar als je echte integer division nodig hebt is daar in Python inderdaad geen operator voor.

Bij modulo/rest doet Python het wat mij betreft weer beter dan andere programmeertalen. Voor mij geldt dat -1 % 3 = 2, maar de enige programmeertaal die ik ken die het met me eens is, is Python. De rest beweert dat het -1 is.

Die twee hebben natuurlijk met elkaar te maken, want in alle programmeertalen is dan y * (x // y) + (x % y) = x.

[Reactie gewijzigd door Hoopje op 23 juli 2024 14:06]

Natuurlijk heb je gelijk, maar het punt is dat 99% van de programmeertalen het resultaat van een integer deling afrondt richting 0 i.p.v. richting negatief oneindig. Dit is beter (en intuïtiever) omdat het symmetrisch is, i.e. -x / y = -(x / y).
Ik vind de identatie juist wel fijn, maar verder vind ik het een lelijke taal, zoveel inconsistenties. Het voelt voor mij ook heel 'stug', ik kan geen mooie 'zinsbouw' maken zeg maar. Maar wat je zegt, het is ook persoonlijke voorkeur, voor mij voelt het totaal niet intuitief maar de meeste mensen zeggen dat dan juist weer van c++, wat voor mij heel natuurlijk voelt. Ah well..
Na 30 jaar programmeren en 20+ talen langs gekomen te zien hebben, gebruik ik tegenwoordig heel vaak Typescript. (zeker niet te verwarren met javascript)
Dit heeft 1 belangerijke reden: DX - Developer Experience.
De snelheid waarmee je dingen kunt bouwen, de kwaliteit van co-pilot, het feit dat de runtime veel sneller is dan python. De syntax van de taal. Geavanceerde typing.
Frontend en backend in dezelfde taal, wat developers breder inzetbaar maakt.
Een gigantisch plugin ecosystem in VSCode.
Native VSCode ondersteuning.
Voordeel na voordeel stapelt zich op en ik kan zo nog wel even doorgaan, maar het grootste voordeel van alles; het programmeert zo prettig dat ik bijna niet anders wil.
Ik heb laatst een complexe zware computation die ik in node wel multithreaded deed omgeschreven in Rust, dit gaf me "maar" een teleurstellende 1.9x snelheidswinst. Dit is wel significant genoeg om voor die taak in een microservice Rust te gebruiken.
Rust kent ook hele grote unieke voordelen op het gebied van security, ik hoop dat hier een OS "from the ground up" in gebouwd gaat worden.
Ondanks dat ik zelf maar 1 taal gebruik (C#) denk ik wel dat men goed moet kijken naar wat men wil doen. Gebruik de juiste tool voor de klus. Een OS schrijf je niet in TypeScript of C#, maar in C/C++. Een high performance super duper game engine schrijf je ook in C++. Maar een web API schrijf je in C# of Java of iets vergelijkbaars. En als je op de supercomputer allerlei berekeningen gaat doen dan pak je Python.

Kortom: beschouw een taal, hoe geweldig de DX ook moge zijn, niet als DE tool voor alles. Als ik een schroef heb gebruik ik een schroevendraaier, niet een hamer... Ondanks dat ik de hamer een geweldige briljante tool vind.
Alle grote OS-en (desktop en mobiel) zijn tot op heden in C/C++ geschreven, echter dit is precies de reden waarom er zoveel problemen met security exploits zijn, C heeft last van buffer overflows...
Rust lost dit grotendeels op, daarom zou ik graag zien dat er een OS in Rust gebouwd zou worden.

Python wordt veel gebruikt voor die taken maar is eigenlijk erg slecht voor berekeningen op een supercomputer. Ze hebben het nu iets geoptimised, maar een "for loop" was iets van ~1000x trager dan in C. (en java vroeger ~40x maar nu nog maar ~1.3x trager omdat de JVM super optimised is even als voorbeeld)
Je moet eigenlijk C libs gebruiken om Python bruikbaar te krijgen, dit wordt dan ook wel veelvuldig gedaan maar ik kan het dan niet echt meer Python noemen. Het enige grote voordeel dat ik zie is dat het heel toegangkelijk is voor kinderen om te leren, uit onderzoek is zelfs gebleven dat de syntax zelfs het meest makkelijke is onder alle programmeer talen om aan kinderen te leren. Dat er zoveel AI libraries in python geschreven worden is eigenlijk een enorme vertragende factor op AI innovatie imho. (maar als we Elon mogen geloven is dat eigenlijk goed, want we zijn nog niet klaar voor superintelligence... </jk>) al is het wel goed voor adoptie omdat door de makkelijke taal veel meer mensen er toegang toe zullen hebben.

Ik ken C# vrij goed, heb ik heel wat jaar geprogrammeerd, en Java ook, en daarvoor veel C++, geen van die talen kan ik iets bij bedenken waar ik geen Typescript of Rust voor zou pakken.
Ze beginnen zoveel cognitieve overhead te krijgen om hetzelfde voor elkaar te krijgen versus de alternatieven dat het simpelweg niet aantrekkelijk is.
BTW: je geeft aan dat je alleen C# gebruikt, maar naar mijn ervaring als je eenmaal heel goed bent in 1 taal, kun je andere talen heel snel leren, omdat de concepten vrijwel hetzelfde zijn en je dus alleen moet wennen aan de syntax en specifieke eigenschappen zoals package managers en building (Assembly of OpenGL/Shader languages daargelaten)

De tool voor de job, helemaal mee eens, maar veel coders kijken met een gekleurde bril en vooroordelen naar talen, er is heel veel tribalisme.
Ik had vroeger iedereen voor gek uitgemaakt als ze me hadden verteld dat ik in de toekomst het liefst een scripttaal zou gebruiken ipv een "echte" taal. En toch is dit zo uitgepakt voor het merendeel van de dingen die ik of de mensen in mijn bedrijf moeten doen.

[Reactie gewijzigd door Artimunor op 23 juli 2024 14:06]

Alle grote OS-en (desktop en mobiel) zijn tot op heden in C/C++ geschreven, echter dit is precies de reden waarom er zoveel problemen met security exploits zijn, C/C++ heeft last van buffer overflows...
C heeft volgens mij geen last van buffer overflows. Het is alleen vrij eenvoudig om buffer overflows in je code te laten sluipen.
Met alle talen kun je onveilige situaties bouwen. Het het voor C++ ook vrij eenvoudig om je code hierop te checken door bijv Coverity, ASan of Valgrind eens laten draaien.
Geen fatsoenlijk native string type en null termination zijn een recept voor geheugenproblemen. Beiden ooit gekozen voor de gebruikte hardware in de jaren 70. Nooit aangepast. Absurd. C++ is een verzameling van alle software paradigma's en zodoende een puinhoop. Web dev is een aaneenschakeling van libraries van welke in jaar x hip zijn zonder een sprankeltje WYSIWYG. We zijn er niet bepaald op vooruit gegaan.
Er is een reden dat het nooit aangepast is. C is namelijk een high-level assembler met een 1 op 1 relatie tussen statement en machinecode. Omdat je exact weet wat er onderwater gebeurt geeft je dat maximale controle (wat nodig is in een OS).
Er is ook veel: "Huh dat is helemaal anders dan ik ken.. WAT EEN TROEP!"
Maar het is vrijwel altijd hetzelfde trucje dat je al kent met andere syntax.

Als je een beetje ervaring hebt kun je overal wel mee uit de voeten tenzij het van die cryptische talen zijn voor hogere-wiskunde studenten. Als ik die zie .. kill it with fire :) (Ken ik niet, dus.. :)

Gewapend met het internet, een refactor tool, code completion en code analysis kun je gewoon aan de slag gaan in een nieuwe taal en de tools tikken je vanzelf op de vingers. Vooral voor managed talen.

Je zal natuurlijk af en toe een 'bad practice' gebruiken omdat je de theorie hebt over geslagen :)
Maar om even wat te wijzigen in een of ander open source project dat je gebruikt is dat meer dan genoeg.

[Reactie gewijzigd door MrMonkE op 23 juli 2024 14:06]

.oisyn Moderator Devschuur® @Artimunor15 augustus 2023 14:34
Rust lost dit grotendeels op, daarom zou ik graag zien dat er een OS in Rust gebouwd zou worden.
Goed nieuws dan: New Windows 11 build ships with more Rust-based Kernel features ;)

Wat betreft je opmerking dat je andere talen makkelijk aanleert als je er 1 goed kent, ik ben het daar op zich rmee eens maar Rust is wel een geval apart. Het duurde bij mij (een verstokte C++'er met 20 jaar ervaring) iig even voor het klikte, terwijl ik weinig moeite heb met willekeurige andere procedurele talen :)

[Reactie gewijzigd door .oisyn op 23 juli 2024 14:06]

De makkelijkste manier om buffer overflows tegen te gaan in C is het gebruik van strlcpy en strlcat (beiden komen van BSD). Stack guard om het geheel af te maken.
Waar zegt hij dat het "DE" tool is voor alles? Heb je ook argumenten waarom je een web API in C# of Java schrijft en niet in Typescript, Javascript of PHP?
Hoi,

Weet iemand toevallig hoe ik aan een studenten ticket kom? Zie de optie niet staan. Alvast bedankt
ITT: zinloze discussies over scripttalen versus programmeertalen en "mijn taal is de beste, want"-redeneringen.

Deze discussies zijn minstens zestig jaar oud en al even lang oninteressant.
Ik zou juist zeggen, waar de programmeurs/developers het meeste mee overweg kunnen dat is wel makkelijker.

Ik doe bijvoorbeeld Java, zeker niet de beste taal. Maar werken vinden is een eitje. Kotlin daarintegen wordt nog niet super veel gebruikt. Waar ik werk was ook de vraag voor Kotlin developers. De developers die er waren kosten ook veel meer dan de Java developers waarna ze na 1 project weer zijn overgestapt op Java.

Ofwel waarom is mijn taal het beste? -> Geld. Daar komt meestal alles wel op neer vanuit bovenaf.
Interessant artikel en de daaruit voortvloeiende discussie. Zelf ben ik van plan om mij om te laten scholen tot software ontwikkelaar.

Lastig om te bepalen waar en hoe te beginnen, zelf van plan om met Python aan de slag te gaan daar waar het klaarblijkelijk een eenvoudige syntax heeft tov andere talen en ik daar in zeer beperkte mate al kennis mee gemaakt heb. Wellicht moet ik me juist niet op de taal focussen maar eerder op een werkplek waar ik in dit werkveld kan groeien.
Hoe is de lijst van de 5 meest populaire programmeertalen tot stand gekomen?

Als je kijkt naar de volgende bronnen:
https://stackoverflow.blo...er-survey-results-are-in/
https://www.devjobsscanne...ed-programming-languages/
https://www.tiobe.com/tiobe-index/

Komt die namelijk niet echt overeen.
Heb een project geschreven in Rust, die nu pak hem beet 20.000 connections per seconden behandeld.
Mutexes en Read/Write Locks zijn extreem traag, maar wordt wel veel gebruikt in multi-threaded applicaties. Ik raad tegenwoordig iedereen aan, in deze talen, om "atomics" te gebruiken voor threaded applicaties, omdat deze veelvuldig sneller en geen deadlocks veroorzaakt.

Zelf programmeer ik in PHP, Python, GoLang en Rust op dit moment, dus ik kan enkel reageren op basis van deze talen.

Op dit item kan niet meer gereageerd worden.