C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?

Permalänk
Medlem
Skrivet av klk:

Vet om att de flesta här inte håller med men python är inte programmering.

Rent skitsnack. Programmering i Python är lika mycket programmering som programmering i C++.
Om du inbillar dig annorlunda, så har du en väldigt unik syn på vad programmering är. Vilket du kanske har. Skulle inte vara första gången du använder ord på ett som skiljer sig från hur resten av världen använder dem.

En person som är en "C++ programmerare" eller en "Python programmerare" är inte en bra programmerare.
Är ens identitet som programmerare så hårt knuten till ett språk att man tänker på sig själv som "C++ programmerare" snarare än som en programmerare som kanske mest jobbar i C++, då har man mycket kvar att lära.

Permalänk
Medlem
Skrivet av Erik_T:

En person som är en "C++ programmerare" eller en "Python programmerare" är inte en bra programmerare.

Enligt dig, varför väljer en del C++ och andra Python. Varför väljs inte ett av dem?
Slår de en tärning om vilket språk som passar (alltså slumpen), kan annat spela roll

Permalänk
Medlem
Skrivet av orp:

Ser du konstanter som hårdkodning?

Beror helt på. Representerar konstanter värden i domänen så är det hårdkodat. Handlar det om storlek på buffrar, kanske typer internt i kod så är det troligen inte hårdkodning.

Edit: Inte svårt att veta vad som är hårdkodat och vad som inte är det. Datorer används för att de är snabba på att processa data. Vad programmerare gör är att omvandla data från en

Skrivet av orp:

Enl. generationerna så har C++ och Python tillräckligt lika abstraktionsnivåer för att placeras i samma generation.

Finns massor av exmpel, exempelvis brukar CRUD vara hårdkodat om vi pratar webservrar vilket jag tror de flesta känner igen. Byts databas (annan design) fungerar inte koden.
Görs logiken däremot runt SQL och information_schema kan kod köra mot olika databaser.

Separera domänen från kod är viktigt om man vill få upp utvecklingshastighet

Permalänk
Skrivet av klk:

Python är att beskriva vad man önskar och försöka lära sig bibliotek som har funktionaliteten man önskar. Ett verktyg.

Skrivet av klk:

Python väljs normalt för att man måste få något gjort av datorn men inte vill grotta ner sig i detaljer eller tänka återanvändbar kod...

Talar du inte emot dig själv här? Vad är bibliotek om inte just återanvändbar kod? Eller blir det bara återanvändbar kod om man skrivit den själv?

Jag skriver hellre Python än C++. Det finns ett väldigt uttrycksfullt standardbibliotek och man slipper skriva en massa kod själv. Man kan återanvända koden som redan finns i biblioteken Jag kan ofta lösa saker med en handfull rader Python-kod när jag hade fått skriva långt mer kod för att göra kompilatorn glad om jag löst samma sak i C++.

Det finns en poäng med att ha lite kod. Jag säger inte så få rader som möjligt, men ju mindre kod som krävs för att lösa problemet, desto mindre behöver man sätta sig in i för att kunna underhålla koden och göra ändringar.

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Talar du inte emot dig själv här? Vad är bibliotek om inte just återanvändbar kod? Eller blir det bara återanvändbar kod om man skrivit den själv?

Biblioteken är återanvändbar kod eller funktionalitet kanske man skall säga. Det stämmer men inte pythonkoden, phyton är sista delen där den återanvändbara koden anpassas efter specifik domän och dessa komponenter som används i python är ofta skrivna i C eller C++.

Skrivet av Ingetledigtnamn:

Jag skriver hellre Python än C++. Det finns ett väldigt uttrycksfullt standardbibliotek och man slipper skriva en massa kod själv. Man kan återanvända koden som redan finns i biblioteken Jag kan ofta lösa saker med en handfull rader Python-kod när jag hade fått skriva långt mer kod för att göra kompilatorn glad om jag löst samma sak i C++.

Och det tror jag är vanligt, samma här om jag vill lösa något snabbt. Då man har ett specifikt domänproblem och inte vill spendera en vecka (eller mer).
C/C++ är inte språk för den typen av lösningar python är gjord för.

Att göra även småsaker i C eller C++ tar tid. Det är först efter ett tag C/C++ får upp farten och går om

Permalänk
Medlem
Skrivet av klk:

Enligt dig, varför väljer en del C++ och andra Python. Varför väljs inte ett av dem?
Slår de en tärning om vilket språk som passar (alltså slumpen), kan annat spela roll

Språk är bra på olika saker. Individuell smak är också olika. Och jobbar man så är det ofta någon annan som väljer vilket språk som skall användas.
Men väldigt få programmerare använder bara ett språk genom hela sin karriär.
Ingen programmerare kan bara ett programmeringsspråk. Kan man bara ett språk är man fortfarande bara nybörjare, inte programmerare.

Jag är ganska säker på att alla deltagare i den här tråden (utom möjligen du själv) kan mer än ett språk, och använder olika språk beroende på behov.
De flesta har antagligen använt både C++ och Python.

Permalänk
Medlem
Skrivet av klk:

Det är först efter ett tag C/C++ får upp farten och går om

Är det efter att man återuppfunnit hjulet och själv skrivit alla de komponenter man skulle fått gratis i standardbiblioteket om man använt Python?
Fast nej, det går nog fortfarande långsammare att utveckla i C++ även då.

Permalänk
Medlem
Skrivet av Erik_T:

Är det efter att man återuppfunnit hjulet och själv skrivit alla de komponenter man skulle fått gratis i standardbiblioteket om man använt Python?
Fast nej, det går nog fortfarande långsammare att utveckla i C++ även då.

Och där visar du varför det är lönlöst för programmerare i C++ och diskutera.
Programmerare som inte sett bra C++ kod eller C++ i rätt händer förstår inte

Permalänk
Medlem
Skrivet av Erik_T:

De flesta har antagligen använt både C++ och Python.

Kan du C++ så kan du "allt", det andra är bara olika syntax och mer hinder

Till helgen kanske jag postar upp lite kod igen, ett nytt (eget) språk. Hittade inte någon bra lösning på en expression parser så gjort en själv

Permalänk
Medlem
Skrivet av klk:

Kan du C++ så kan du "allt", det andra är bara olika syntax och mer hinder

Om du inbillar dig det, så har du mycket kvar att lära.
Du vet inte ens om att det finns saker du inte kan.

Permalänk
Medlem
Skrivet av klk:

Och där visar du varför det är lönlöst för programmerare i C++ och diskutera.

Det har nog inte med C++-programmerare att göra utan just ditt sätt att diskutera. Det är faktasnålt och packat med fördomar och egna definitioner, du har ju hittat på egna betydelser för det mesta.

Dina argument är också motsägelsefulla, exempelvis grundade du dina argument kring varför Python- och C++-utvecklare inte kan prata med varandra på språkgenerationer och sedan visar det sig att C++ och Python är i samma generation med samma nivå abstraktionsnivåer...

Permalänk
Medlem
Skrivet av orp:

Det har nog inte med C++-programmerare att göra utan just ditt sätt att diskutera. Det är faktasnålt och packat med fördomar och egna definitioner, du har ju hittat på egna betydelser för det mesta.

Finns ju en del statistik att hänvisa till
Såg den här nyligen och tycker det är en bra illustration om hur mycket som spelar roll varför något blir poppulärt (går inte igenom vad som sägs där utan det är upp till var och en att titta på)
https://www.youtube.com/watch?v=vEQ07-p8ZDE

Kodning är svårdiskuterat med eftersom det blir så utslagsgivande. Menar inte i diskussioner som den vi har här men i andra sammanhang och där det kodas. Det tar inte lång tid innan de flesta vet ganska exakt vad var och en går för. De som inte vet men tror de vet kommer få äta upp om de försöker driva igenom dumheter

Permalänk
Medlem

Efter att ha följt 32 sidor av denna tråd, så är jag övertygad om att @klk hade kunnat argumentera runt i cirklar för evigt om denne hade svarat sig själv. Men det är rätt kul läsning måste jag erkänna, många kloka individer som ändå lyckats hålla tråden vid liv och sprider kunskap genom sina "svar"!

Jag hade gärna sett någon försöka skapa upp en definitionslista av något slag och sammanfattat de definitioner som hittills dykt upp. Det är nämligen bli rätt svårt att hänga med i svängarna när det flyger termer höger och vänster som helt saknar någon grund annat än det som finns i huvudet på en person

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz

Permalänk
Medlem
Skrivet av Erik_T:

Om du inbillar dig det, så har du mycket kvar att lära.
Du vet inte ens om att det finns saker du inte kan.

Vet jag inte så får jag ju reda på det här

Permalänk
Medlem
Skrivet av Pamudas:

Efter att ha följt 32 sidor av denna tråd, så är jag övertygad om att @klk hade kunnat argumentera runt i cirklar för evigt om denne hade svarat sig själv.

Det har du fel i, det är lätt och tysta mig

Permalänk
Medlem
Skrivet av klk:

Till helgen kanske jag postar upp lite kod igen, ett nytt (eget) språk. Hittade inte någon bra lösning på en expression parser så gjort en själv

Jag tror att dom flesta är ganska ointresserade faktiskt.
Det är är möjligtvis intressant på den nivån att man diskuterar med vad man får anta är en vuxen (du), om än med uppenbara kognitiva störningar, men som likt en 5åring visar upp en teckning man har ritat (kod man har skapat) för att få någon slags bekräftelse på det.

Skrivet av klk:

Kan du C++ så kan du "allt", det andra är bara olika syntax och mer hinder

Dunning-Kruger in full effect...

Permalänk
Medlem
Skrivet av Xeonist:

Jag tror att dom flesta är ganska ointresserade faktiskt.

Ok, skippar det då

Skrivet av Xeonist:

Dunning-Kruger in full effect...

Vad är det man inte lär sig (missar) om man skall bemästra C++
Edit: Vad som framförallt är fördelaktigt med att lära sig C++ om man skall lära sig andra språk är att förståelsen för hur språken fungerar när koden körs ökar. Beror självklart på språk men ta javascript, "förr" var det ganska lätt att räkna ut vad som var snabbt i javascript eftersom språket var skrivet i C ? (eller möjligen C++). Exempelvis hur prototypes fungerar eller varför variabler deklarerade med var stannar kvar.
Python är ett annat exempel, läser man python koden får man större insikt om hur språket fungerar och då det är skrivet i C (så var det när jag kollade för flera år sedan) kunde också läsa hur de löst saker. Det förenklar när man lär sig.

Permalänk
Datavetare
Skrivet av klk:

Och där visar du varför det är lönlöst för programmerare i C++ och diskutera.
Programmerare som inte sett bra C++ kod eller C++ i rätt händer förstår inte

Om "marknaden" får bestämma är det inte precis C++-knackarna som är kungarna, det är de som sett ljuset med Clojure. C++ är på en "hedrande" 31:a plats, efter bl.a. Python

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Datavetare
Skrivet av Yoshman:

En annan sak som hänt i dagarna är inte direkt relaterat till C++ och minnessäkerhet, men definitivt relaterat till flera saker som diskuterats i denna tråd runt vad som eventuellt gör C++ unikt.

Nvidia har precis lanserat stöd för att skriva CUDA-kernels i Python!
https://thenewstack.io/nvidia-finally-adds-native-python-supp...
https://developer.nvidia.com/cuda-python

En viktig orsak är att de ser stora begränsningar i hur pass populärt något kan bli idag om det bara finns till C och C++. Totala antalet programmerare växer fortfarande mycket snabbt, på senare tid är det Afrika, Sydamerika och Asien tillväxten är störst.

C och C++ är inte speciellt populärt i dessa grupper. Samtidigt växer Pythons popularitet väldigt snabbt, det har nu även passerat JS som mest använda språk på github (d.v.s. det är #1 där).

Så hur är det relevant här? Att skriva CUDA-kernels gör man primärt för att få upp prestanda rejält, något "vanliga" Python inte direkt är känt för att vara jätte bra på. Vidare kräver effektiv användning av GPU förståelse för "host memory", "global device memory", "shared memory" och "local memory". Det är något man behöver hantera explicit i CUDA och det är exponerat även i Python.

I just detta fall tror jag faktiskt det kan bli riktigt bra med Python. Vissa användningar av Python list-comprehension är en väldigt bra match i hur man vill jobba med GPGPU för att det ska bli effektiv. Och om det blir bra kan rätt mycket exakt samma teknik användas för att då kraftigt SIMD-optimera Python kod (GPUer är rätt mycket väldigt breda SIMD maskiner).

För att ta ett enkelt konkret exempel på hur en CUDA-kernel kan se ut
https://nyu-cds.github.io/python-numba/05-cuda/

from __future__ import division from numba import cuda import numpy import math # CUDA kernel @cuda.jit def add_one_kernel(io_array): pos = cuda.grid(1) if pos < io_array.size: io_array[pos] += 1 # Host code data = numpy.ones(256) threadsperblock = 256 blockspergrid = math.ceil(data.shape[0] / threadsperblock) # Launch kernel add_one_kernel[blockspergrid, threadsperblock](data) print(data)

Och detta är motsvarande "vanliga" CUDA, misstänker att det inte finns någon prestandaskillnad i GPGPU-kernel (PyTorch gör liknande saker "under huven" och ger extremt effektiva GPU-kernels trots att man skriver logiken i Python)

#include <stdio.h> #include <cuda_runtime.h> // CUDA kernel in C __global__ void add_one_kernel(float *io_array, int size) { int pos = blockIdx.x * blockDim.x + threadIdx.x; if (pos < size) { io_array[pos] += 1.0f; } } int main() { const int N = 256; // Allocate host memory size_t size = N * sizeof(float); float *h_data = (float*)malloc(size); for (int i = 0; i < N; ++i) { h_data[i] = 1.0f; } // Allocate device memory and move from host to device float *d_data; cudaMalloc((void**)&d_data, size); cudaMemcpy(d_data, h_data, size, cudaMemcpyHostToDevice); int threadsPerBlock = 256; int blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock; // Launch kernel add_one_kernel<<<blocksPerGrid, threadsPerBlock>>>(d_data, N); cudaMemcpy(h_data, d_data, size, cudaMemcpyDeviceToHost); // Print result for (int i = 0; i < N; ++i) { printf("%.1f ", h_data[i]); } printf("\n"); // Cleanup cudaFree(d_data); free(h_data); return 0; }

Liten uppdatering kring detta: tror detta kommer bli en succé, och om så är fallet tyvärr då också betyder att Nvidia än mer stärker sitt grepp kring GPGPU-marknaden.

Var hur smidigt som helst att komma igång, "pip install numba-cuda" var allt som krävs om man redan har CUDA installerat.

Prestandamässigt verkar det vara inom ~10-15 % av C/C++ om man skriver på det sätt man skulle skriva i dessa språk.

Men man har även lagt in en del stöd för högre-nivå abstraktioner. Har bara skrapat på utan än, men går t.ex. att processa Mantelbrot-mängden så här

@cuda.jit def mandelbrot_kernel(output, width, height, xmin, xmax, ymin, ymax, max_iters): x, y = cuda.grid(2) if x < width and y < height: # Map pixel position to complex plane real = xmin + x * (xmax - xmin) / width imag = ymin + y * (ymax - ymin) / height c = complex(real, imag) z = 0j iters = 0 while abs(z) <= 2.0 and iters < max_iters: z = z * z + c iters += 1 output[y, x] = iters

istället för

@cuda.jit def mandelbrot_no_complex_kernel(output, width, height, xmin, xmax, ymin, ymax, max_iters): x, y = cuda.grid(2) if x < width and y < height: # Map pixel position to complex plane real = xmin + x * (xmax - xmin) / width imag = ymin + y * (ymax - ymin) / height (zr, zi) = (0.0, 0.0) iters = 0 while zr*zr + zi*zi <= 4.0 and iters < max_iters: temp = zr*zr - zi*zi + real zi = 2.0 * zr * zi + imag zr = temp iters += 1 output[y, x] = iters

och

__global__ void mandelbrot_kernel(unsigned short *output, int width, int height, double xmin, double xmax, double ymin, double ymax, int max_iters) { int x = blockIdx.x * blockDim.x + threadIdx.x; int y = blockIdx.y * blockDim.y + threadIdx.y; if (x >= width || y >= height) return; double real = xmin + x * (xmax - xmin) / width; double imag = ymin + y * (ymax - ymin) / height; double zr = 0.0, zi = 0.0; int iter = 0; while (zr * zr + zi * zi <= 4.0 && iter < max_iters) { double temp = zr * zr - zi * zi + real; zi = 2.0 * zr * zi + imag; zr = temp; iter++; } output[y * width + x] = iter; }

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av klk:

Vad är det man inte lär sig (missar) om man skall bemästra C++

Du lär dig inte aspekter från funktionella språk (typ Ocaml, Haskell, Erlang osv) och inte heller aspekter av dynamiskt typade språk som Python.

Skrivet av klk:

Edit: Vad som framförallt är fördelaktigt med att lära sig C++ om man skall lära sig andra språk är att förståelsen för hur språken fungerar när koden körs ökar. Beror självklart på språk men ta javascript, "förr" var det ganska lätt att räkna ut vad som var snabbt i javascript eftersom språket var skrivet i C ? (eller möjligen C++). Exempelvis hur prototypes fungerar eller varför variabler deklarerade med var stannar kvar.
Python är ett annat exempel, läser man python koden får man större insikt om hur språket fungerar och då det är skrivet i C (så var det när jag kollade för flera år sedan) kunde också läsa hur de löst saker. Det förenklar när man lär sig.

Detta är ett argument för att lära sig C och inte C++...

Jag tror att man är kapabel till att läsa C-kod om man kan andra programmeringsspråk.

Permalänk
Medlem
Skrivet av orp:

Du lär dig inte aspekter från funktionella språk (typ Ocaml, Haskell, Erlang osv) och inte heller aspekter av dynamiskt typade språk som Python.

Eller så är det tvärtom, du har säkert jobbat med std::variant och liknande objekt, kan du dem så vet du hur dynamiskt typade språk fungerar.

Precis lekt lite med sådant här och i ett litet skriptspråk som är dynamiskt typat gjorde jag följande typ
"std::variant<int64_t, double, std::string, bool>"

Permalänk
Skrivet av klk:

Edit: Vad som framförallt är fördelaktigt med att lära sig C++ om man skall lära sig andra språk är att förståelsen för hur språken fungerar när koden körs ökar.

Vi har ett otal imperativa språk med visst stöd för objektorientering. Jag brukar skämtsamt säga något i stil med att om man a) vet vad språkets associativa array heter och b) man klurar ut hur "else if" stavas så kan man programmera i vilket som helst av dem. De har olika syntax men i grunden likvärdig funktionalitet och man kan tänka likadant när man bryter ner problemet i behändiga delproblem.

Ponera att någon skriver i idiomatisk modern C++ och låter STL sköta minneshanteringen, så som Bjarne vill att vi skall göra På vilket sätt ökar det "förståelsen för hur språken fungerar när koden körs"? C++ är ingen Silver Bullet (TM) som automatiskt ger insikt i andra språks exekveringsmodell.

Skrivet av klk:

Python är ett annat exempel, läser man python koden får man större insikt om hur språket fungerar och då det är skrivet i C (så var det när jag kollade för flera år sedan) kunde också läsa hur de löst saker. Det förenklar när man lär sig.

Du menar att om man kollar på hur ett programspråk (P) är implementerat (kompilator, runtime-miljö etc) så får man en bättre förståelse för hur det fungerar? Och om man kan implementationsspråket (I) så hjälper det? Jo, visst, det får jag hålla med om. Men detta beror ju rimligen inte på att C eller C++ är ett så fantastiskt programmeringsspråk, utan på att P är implementerat i I.

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Ponera att någon skriver i idiomatisk modern C++ och låter STL sköta minneshanteringen, så som Bjarne vill att vi skall göra På vilket sätt ökar det "förståelsen för hur språken fungerar när koden körs"? C++ är ingen Silver Bullet (TM) som automatiskt ger insikt i andra språks exekveringsmodell.

Beror på hur man ser på vad programmering är, varför måste man programmera en dator? Varför räcker det inte med att bara berätta för den vad den skall göra

Datorer är supersnabba om de matas med information på rätt sätt och med rätt sätt så menar jag att datorn får bearbeta information på det sätt den bäst gör det. För att mänsklig information skall kunna bearbetas så som datorn vill ha den krävs programmerare, och med programmerare menar jag då en person som har kunskap att omvandla mänsklig information till något som fungerar i datorn.
Det är vad programmering handlar om, varken mer eller mindre

Man kan självklart blanda in massa teori och annat i det här, språk som "hokus pokus" trollar fram maskinkod men i grunden handlar det om samma sak. Det är inte så konstigt som en del vill få det till.
Programmerare skriver kod för att skyffla data fram och tillbaka och när de skyfflar görs den om så att den fungerar för processorn

Skrivet av Ingetledigtnamn:

Du menar att om man kollar på hur ett programspråk (P) är implementerat (kompilator, runtime-miljö etc) så får man en bättre förståelse för hur det fungerar? Och om man kan implementationsspråket (I) så hjälper det? Jo, visst, det får jag hålla med om. Men detta beror ju rimligen inte på att C eller C++ är ett så fantastiskt programmeringsspråk, utan på att P är implementerat i I.

Har inte något att göra med att C++/C är fantastiska programmeringspråk utan det har och göra med att de är de enda(?) språken som används som i praktiken är assemblerkodning utan att skriva assembler. Andra språk i samma kategori är utkonkurrerade eller har i vart fall inte många användare.
Samtliga andra språk som används eller växer, där handlar det i varierande grad att inte behöva tänka på hårdvara.

Permalänk
Skrivet av klk:

Datorer är supersnabba om de matas med information på rätt sätt och med rätt sätt så menar jag att datorn får bearbeta information på det sätt den bäst gör det. För att mänsklig information skall kunna bearbetas så som datorn vill ha den krävs programmerare, och med programmerare menar jag då en person som har kunskap att omvandla mänsklig information till något som fungerar i datorn.
Det är vad programmering handlar om, varken mer eller mindre

Sorry, men när du skriver "så som datorn vill ha den" tappar du all teknisk trovärdighet och jag har svårt att ta något du skriver på allvar. Processorn/datorn är helt utan vilja. Den kan tänkas hantera olika format mer eller mindre effektivt, men inte fasen "vill" den något.

Jag håller med om att programmering handlar om att agera på input, men låt oss gå tillbaka till ditt ursprungliga påstående där du hävdade att om man lär sig C++ får man ökad förståelse för andra programspråks exekveringsmodell. Kan du vara snäll och utveckla hur du tänkte där?

Skrivet av klk:

Har inte något att göra med att C++/C är fantastiska programmeringspråk utan det har och göra med att de är de enda(?) språken som används som i praktiken är assemblerkodning utan att skriva assembler. Andra språk i samma kategori är utkonkurrerade eller har i vart fall inte många användare.
Samtliga andra språk som används eller växer, där handlar det i varierande grad att inte behöva tänka på hårdvara.

Tidigare i tråden har vi diskuterat Rust och Zig som båda konkurrerar med C som effektiva lågnivåspråk. Att de inte används i samma utsträckning som C (än) handlar kanske mer om att C historiskt har varit det enda tillgängliga alternativet. Vi får se vad som händer i framtiden, Rust är definitivt på gång... Om vi pratar om språk som skall vara "nära assembler" skall definitivt Fortran (77 och 90) vara med i diskussionen. Modern Fortran kan vara ganska långt ifrån assembler, men å andra sidan är modern C++-kod, där allting är templates i templates, inte heller något jag skulle kalla "nära assembler".

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Sorry, men när du skriver "så som datorn vill ha den" tappar du all teknisk trovärdighet och jag har svårt att ta något du skriver på allvar. Processorn/datorn är helt utan vilja. Den kan tänkas hantera olika format mer eller mindre effektivt, men inte fasen "vill" den något.

Och det är därför som C/C++ utvecklare har svårt att diskutera med "andra" programmerare. Egentligen handlar det om utvecklare som är vana och jobba "close to the metal" medan de allra flesta utvecklare idag inte har en aning om hur en processor fungerar.

I de allra flesta fall använder programmerare som inte vet hur en processor jobbar en massa bibliotek och det är också något jag placerar i facket "deklarativ programmering" vilket enligt mig inte handlar om programmering utan att pussla ihop färdiga lösningar.
När man beskriver det så hoppas det högt och en del känner sig kränkta när det egentligen handlar om olika kunskap. Man kan självklart bli jättedkuktig på olika verktyg. Jag brukar undvika det för det ändrar sig hela tiden och kommer nytt, tycker därför det är onödigt och lägga tid på sådant och idag finns LLM vilka är fantastiskt duktiga på att hjälpa till i det området.

Skrivet av Ingetledigtnamn:

Jag håller med om att programmering handlar om att agera på input, men låt oss gå tillbaka till ditt ursprungliga påstående där du hävdade att om man lär sig C++ får man ökad förståelse för andra programspråks exekveringsmodell. Kan du vara snäll och utveckla hur du tänkte där?

Du måste i princip lära dig det för att kunna åstadkomma något i språken. C/C++ tvingar utvecklare att lära sig saker som är viktiga att kunna. Det kommer inte "gratis" och det blir ofta naturligt att jobba med exempelvis minne.

Om jag själv skriver kod tror jag min stil ibland kallas för "defensive programming". Osäker men sett det nämnas om man skriver kod på det jag själv brukar göra. Samtidigt undviker jag unit tester (skriver tester men det är andra typer av tester).
Tror inte det är allt för ovanligt att C/C++ skriver kod på det viset men kanske 90% av andra programmerare hoppar högt om man säger det. De vet inte vad defensive programming är (om det är rätt ord). Koden jag skriver när nerlusad med kontroller och sköter sig själv. Designval på hur koden hänger samman handlar ofta om hur den också kan säkras och det är bra att kunna det.
Andra språk som bygger in säkerhet, där lär sig inte programmera och koden får sämre kvalitet.

Skrivet av Ingetledigtnamn:

Tidigare i tråden har vi diskuterat Rust och Zig som båda konkurrerar med C som effektiva lågnivåspråk. Att de inte används i samma utsträckning som C (än) handlar kanske mer om att C historiskt har varit det enda tillgängliga alternativet. Vi får se vad som händer i framtiden, Rust är definitivt på gång... Om vi pratar om språk som skall vara "nära assembler" skall definitivt Fortran (77 och 90) vara med i diskussionen. Modern Fortran kan vara ganska långt ifrån assembler, men å andra sidan är modern C++-kod, där allting är templates i templates, inte heller något jag skulle kalla "nära assembler".

Tror det kommer dyka upp fler språk och jag tror språk som fungerar bra för LLM snabbt kan bli populära. Kanske till och med XML.
Testade nyligen att jobba i ett äldre projekt som hade gigantiskt mycket XML och XSLT transformeringar. Bara för att testa hur LLM hanterade det då det borde vara något som passar dem. Lösningen hade över 300 tusen rader XML, otroligt mycket klipp och klistra med någon justering. Detta klarade LLM galant. De utvecklare som satt och slet med den koden för några år sedan hade älskat LLM där.

Annars så min spaning är att mängden utvecklare kommer minska och det ser man ordentligt. Riktigt tufft att för utvecklare att hitta jobb.

Permalänk
Medlem
Skrivet av klk:

Och det är därför som C/C++ utvecklare har svårt att diskutera med "andra" programmerare. Egentligen handlar det om utvecklare som är vana och jobba "close to the metal" medan de allra flesta utvecklare idag inte har en aning om hur en processor fungerar.

I de allra flesta fall använder programmerare som inte vet hur en processor jobbar en massa bibliotek och det är också något jag placerar i facket "deklarativ programmering" vilket enligt mig inte handlar om programmering utan att pussla ihop färdiga lösningar.
När man beskriver det så hoppas det högt och en del känner sig kränkta när det egentligen handlar om olika kunskap. Man kan självklart bli jättedkuktig på olika verktyg. Jag brukar undvika det för det ändrar sig hela tiden och kommer nytt, tycker därför det är onödigt och lägga tid på sådant och idag finns LLM vilka är fantastiskt duktiga på att hjälpa till i det området.

Du måste i princip lära dig det för att kunna åstadkomma något i språken. C/C++ tvingar utvecklare att lära sig saker som är viktiga att kunna. Det kommer inte "gratis" och det blir ofta naturligt att jobba med exempelvis minne.

Om jag själv skriver kod tror jag min stil ibland kallas för "defensive programming". Osäker men sett det nämnas om man skriver kod på det jag själv brukar göra. Samtidigt undviker jag unit tester (skriver tester men det är andra typer av tester).
Tror inte det är allt för ovanligt att C/C++ skriver kod på det viset men kanske 90% av andra programmerare hoppar högt om man säger det. De vet inte vad defensive programming är (om det är rätt ord). Koden jag skriver när nerlusad med kontroller och sköter sig själv. Designval på hur koden hänger samman handlar ofta om hur den också kan säkras och det är bra att kunna det.
Andra språk som bygger in säkerhet, där lär sig inte programmera och koden får sämre kvalitet.

Tror det kommer dyka upp fler språk och jag tror språk som fungerar bra för LLM snabbt kan bli populära. Kanske till och med XML.
Testade nyligen att jobba i ett äldre projekt som hade gigantiskt mycket XML och XSLT transformeringar. Bara för att testa hur LLM hanterade det då det borde vara något som passar dem. Lösningen hade över 300 tusen rader XML, otroligt mycket klipp och klistra med någon justering. Detta klarade LLM galant. De utvecklare som satt och slet med den koden för några år sedan hade älskat LLM där.

Annars så min spaning är att mängden utvecklare kommer minska och det ser man ordentligt. Riktigt tufft att för utvecklare att hitta jobb.

Snacka om att inte svara på fråga. Du förstod uppenbarligen inte frågan från @Ingetledigtnamn och bara yrade ihop något helt orelaterat ...

@Ingetledigtnamn: "... du hävdade att om man lär sig C++ får man ökad förståelse för andra programspråks exekveringsmodell. Kan du vara snäll och utveckla hur du tänkte där?"

@klk: "Du måste i princip lära dig det för att kunna åstadkomma något i språken."

Varför? Om någon har löst problemet varför måste man sitta och läsa lösningen istället för att bygga vidare på den, dvs använda språket? Använder du en mobiltelefon, har du läst GSM-spec:en, 3G-spec:en, 4G-spec:en osv eller du nöjer dig med att använda näten? Har du läst din BGP-, DNS-implementation osv eller du kan använda din browser utan den vetskapen?

Jag kan åstadkomma något i Python utan att ha läst implementationen. Jag kan åstadkomma något i C utan att ha läst glibc...

Om jag behöver veta något specifikt så kan jag läsa källkoden för just dom bitarna. Utvecklare som inte kodar C klara att förstå den koden också att hävda att man måste vara en "C/C++-utvecklare" för att läsa koden är korkat, det är en språkimplementation inte raketforskning...

Permalänk
Medlem
Skrivet av orp:

Jag kan åstadkomma något i Python utan att ha läst implementationen. Jag kan åstadkomma något i C utan att ha läst glibc...

Det kan du men det blir inte mycket innan du trasslat in dig om du inte tränat på att skriva kod

Låt säga att du skriver ett program där projektet består av 250 000 rader. Hur hittar du i 250 000 rader kod? Har du teknik för det

Frågar du "normal" python utvecklare så är det inget man tänker när sådan kod skrivs, där slängs det och skrivs nytt

Permalänk
Medlem
Skrivet av klk:

Det kan du men det blir inte mycket innan du trasslat in dig om du inte tränat på att skriva kod

Låt säga att du skriver ett program där projektet består av 250 000 rader. Hur hittar du i 250 000 rader kod? Har du teknik för det

Frågar du "normal" python utvecklare så är det inget man tänker när sådan kod skrivs, där slängs det och skrivs nytt

Vilket skitsnack... Om man är Python-utvecklare så är man tränad i att skriva kod och varför skulle man inte förstå hur grep, indexering och sökning fungerar för att man kodar Python? Varför skulle man förstå hur grep, indexering och sökning fungerar bättre för att man kodar C++?

Du har verkligen ingen aning om hur en "Python-utvecklare" jobbar men du har en jäkla massa fördomar om det iaf...

Detta var nog något i särklass mest korkade påståendena jag har hört...

Permalänk
Medlem
Skrivet av klk:

Beror på hur man ser på vad programmering är, varför måste man programmera en dator? Varför räcker det inte med att bara berätta för den vad den skall göra

Det är ju det som är programmering - att berätta för datorn vad den skall göra, på ett sätt som den "begriper".

Permalänk
Skrivet av klk:

Och det är därför som C/C++ utvecklare har svårt att diskutera med "andra" programmerare. Egentligen handlar det om utvecklare som är vana och jobba "close to the metal" medan de allra flesta utvecklare idag inte har en aning om hur en processor fungerar.

Du kan inte skylla på språkbarriären här. Jag har programmerat C och C++ större delen av mitt liv. Jag skulle uppskatta om vi kunde föra en teknisk diskussion där du kan backa upp dina åsikter med fakta. När du lägger alternativa betydelser till vedertagen terminologi och allt som oftast undviker att svara på ställda frågor utan klämmer in något helt orelaterat, då blir det omöjligt att föra en vettig diskussion.

Skrivet av klk:

Du måste i princip lära dig det för att kunna åstadkomma något i språken. C/C++ tvingar utvecklare att lära sig saker som är viktiga att kunna. Det kommer inte "gratis" och det blir ofta naturligt att jobba med exempelvis minne.

Vad menar du när du skriver "saker"? Konkreta exempel, tack! Om du lär dig den C++ som Bjarne vill att vi skriver i dagsläget, med smart pointers och allt minne hanterat av STL, blir du inte utsatt för manuell minneshantering. Det är som vilket annat programmeringsspråk som helst! Det räcker inte att lära sig C++ för att man skall nå insikt om vad som händer under huven.