Är en rackare på Java och har svårt att välja mellan C och C++

Permalänk
Medlem

Är en rackare på Java och har svårt att välja mellan C och C++

Så jag har använt Java dagligen i ungefär 1.5 år nu och känner mig väldigt bekväm med språket, även om det såklart alltid finns nya saker att lära. Dock ville jag vidga mina vyer nu några veckor när jag har tid till det och jag började kolla på Python i helgen. Tyckte det var väldigt lätt och känner att jag vill ha en större utmaning istället, ett där man får hantera minnet själv t ex. Har sökt runt och jämfört C, C++ och även Objective-C men jag vet inte vilket jag ska börja med. Så som jag har förstått det har jag antagligen mest nytta utav C++ och det borde också vara enklast för mig att lära mig då jag har en Java bakgrund. Men jag får ändå bra kunskap om t ex minneshantering, så att jag skulle kunna byta till ett annat C språk relativt enkelt. Det jag vill uppnå är att förstå mig på ett språk som är närmare hårdvaran, inte nödvändigtvis ett jobb. Så C kanske är bäst.

Vilket C språk bör jag lära mig först? Finns det några bok rekommendationer? (Föredrar böcker framför interaktiva hemsidor)

Permalänk
Medlem

Vågar inte uttrycka mig ang vilket som är bäst att lära sig för dig, Jag skulle personligen kört lite mer på c++.

Bok:
C++ Primer - gillar den personligen.

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk
Datavetare

Tja är lite som att fråga: ska jag skaffa motorcykel eller bil? Vill du känna fartvinden är det förra att fördra, fast finns i.o.f.s. cabriolet...

Skriver du "modern" C++ behöver du i nära nog 100 % av fallen inte bry dig i saker som minneshantering och liknande. Faktum är att när du lär dig behärska RAII så kan du automagiskt hantera i princip alla typer av resurser, inte bara minne. Så då blir det ju mindre att tänka på än Java till och med.

C har sina platser än idag, men tänker du inte skriva din egen OS-kärna eller programmera minimala mikrokontrollers så vet jag inte riktigt hur stor värdet av C är idag. Skriver själv C till vardags, men det är ju OS-kernel utveckling, skulle välja C++, Go, eller liknande för saker utanför kärnan (skriver också alla unit-tester i C++11, vilket underlättar rejält mot att göra motsvarande i ren C).

Fördelen med C++ är att likt analogin i början så kan då "cabba" ner språket och välja att hantera allt explicit om det är målet med övningen.

Om du gå C++ vägen, se till att den bok du väljer är uppdaterad för C++11 alt. C++14. C++11 (ISO standarden för språket som kom 2011) är ett krav för att kunna skriva "modern" C++.

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 asdfgh:

Vågar inte uttrycka mig ang vilket som är bäst att lära sig för dig, Jag skulle personligen kört lite mer på c++.

Bok:
C++ Primer - gillar den personligen.

Får kolla på den. Skaffade Head first C idag och har kört igenom första kapitlet, än så länge känns det identiskt med Java rent kodmässigt.

Skrivet av Yoshman:

Tja är lite som att fråga: ska jag skaffa motorcykel eller bil? Vill du känna fartvinden är det förra att fördra, fast finns i.o.f.s. cabriolet...

Skriver du "modern" C++ behöver du i nära nog 100 % av fallen inte bry dig i saker som minneshantering och liknande. Faktum är att när du lär dig behärska RAII så kan du automagiskt hantera i princip alla typer av resurser, inte bara minne. Så då blir det ju mindre att tänka på än Java till och med.

C har sina platser än idag, men tänker du inte skriva din egen OS-kärna eller programmera minimala mikrokontrollers så vet jag inte riktigt hur stor värdet av C är idag. Skriver själv C till vardags, men det är ju OS-kernel utveckling, skulle välja C++, Go, eller liknande för saker utanför kärnan (skriver också alla unit-tester i C++11, vilket underlättar rejält mot att göra motsvarande i ren C).

Fördelen med C++ är att likt analogin i början så kan då "cabba" ner språket och välja att hantera allt explicit om det är målet med övningen.

Om du gå C++ vägen, se till att den bok du väljer är uppdaterad för C++11 alt. C++14. C++11 (ISO standarden för språket som kom 2011) är ett krav för att kunna skriva "modern" C++.

Kan inte C bli mer aktuellt nu när IoT är på gång? I vilket fall som helst är mitt mål här att lära mig mer lite om hur det går till bakom kulisserna. Men om det du skriver stämmer, att man kan hantera det mesta själv i C++, då kan jag egentligen köra på det då jag antagligen har mer nytta av det än ren C.

Permalänk
Medlem
Skrivet av Baxtex:

Får kolla på den. Skaffade Head first C idag och har kört igenom första kapitlet, än så länge känns det identiskt med Java rent kodmässigt.

Den finns "grattis" som PDF via google på vissa universitets hemsidor.

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk
Medlem

Jag tycker det är svårt att svara generellt. Det beror på vad för programmering du är ute efter.
De flesta väljer nog inte C för objekt orienterad programmering medan C++ går utmärkt.

Jag tycker också Python är kul och det är väldigt bra att börja med faktiskt :).

C# är rätt likt Java så den övergången bör vara rätt smärtfri. Jag tycker du ska köra på C++ men man lär sig mycket av det fundamentala av programmering med C, man får mer insikt i hur minneshanteringen fungerar och lite annat nyttigt.

Visa signatur

|AMD Ryzen 9 5900X| |ASUS ROG Strix B550-F| |Crucial Ballistix 32GB CL16@3600MHz| |PNY RTX 4090 XLR8 Gaming| |Samsung 990 Pro 2TB| |Samsung 970 Evo Plus 1TB| |Samsung 860 Evo 1TB| |Corsair RM1000| |Fractal Design Define R5| |LG OLED 48" C2 Evo|

Permalänk
Datavetare
Skrivet av Baxtex:

Får kolla på den. Skaffade Head first C idag och har kört igenom första kapitlet, än så länge känns det identiskt med Java rent kodmässigt.

Kan inte C bli mer aktuellt nu när IoT är på gång? I vilket fall som helst är mitt mål här att lära mig mer lite om hur det går till bakom kulisserna. Men om det du skriver stämmer, att man kan hantera det mesta själv i C++, då kan jag egentligen köra på det då jag antagligen har mer nytta av det än ren C.

IoT betyder snart allt och inget... Finns absolut fall där man är begränsad till C, t.ex. de enklaste mätnoderna. Å andra sidan gör dessa inget speciellt intressant, kliver man bara upp lite i kapacitet är det ju fullt möjligt att köra Linux och t.ex. Python.

Har jobbat en del med IoT i Amazon cloud och Microsoft Azure och SDK:erna till dessa stödjer allt från C till Java och Csharp. Har tittat på Googles lösning, där har man ännu inget (officiellt) C-stöd i sin IoT SDK. Gissar att det säger en del om trycket från den berömda "marknaden".

Och eftersom att Python har nämnts som ett annan alternativ att titta på får jag slå ett slag för Ruby. Har i mitt yrkesliv jobbat långt mer med Python än med Ruby, men efter att ha satt mig in i Ruby så har jag faktiskt svårt att förstå att Python är det populärare av det två.

Python är absolut inte dåligt, men känns ofta som finesser mer bara hänt än att någon verkligen tagit ett steg tillbaka och funderat exakt på vad man vill göra och hur det passar in i det stora hela. Ruby känns långt mer koherent i sin design och verkar vila på en betydligt stabilare teoretisk datorvetenskaplig grund. Ruby har också en av de absolut bästa designerna för objekt-orientering jag testat på, just OOP stödet i Python lämnar en hel del övrigt att önska (alla fall i 2.x har inte använt 3.x speciellt mycket).

Vill du hålla på med små system kan jag varmt rekommendera Arduino. Där kör man en bantad variant av C++ (skulle säga att det är C med nyckelordet "class" tillagt), är väldigt lätt att komma igång med och räcker med rejält basala kunskaper i elektronik för att göra roliga prylar. För en tusenlapp kan du köpa ett utvecklingskort ihop med en låda med lite givare och andra komponenter. Utvecklingsmiljön är gratis och snurrar på Windows, macOS och Linux.

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 Yoshman:

IoT betyder snart allt och inget... Finns absolut fall där man är begränsad till C, t.ex. de enklaste mätnoderna. Å andra sidan gör dessa inget speciellt intressant, kliver man bara upp lite i kapacitet är det ju fullt möjligt att köra Linux och t.ex. Python.

Har jobbat en del med IoT i Amazon cloud och Microsoft Azure och SDK:erna till dessa stödjer allt från C till Java och Csharp. Har tittat på Googles lösning, där har man ännu inget (officiellt) C-stöd i sin IoT SDK. Gissar att det säger en del om trycket från den berömda "marknaden".

Och eftersom att Python har nämnts som ett annan alternativ att titta på får jag slå ett slag för Ruby. Har i mitt yrkesliv jobbat långt mer med Python än med Ruby, men efter att ha satt mig in i Ruby så har jag faktiskt svårt att förstå att Python är det populärare av det två.

Python är absolut inte dåligt, men känns ofta som finesser mer bara hänt än att någon verkligen tagit ett steg tillbaka och funderat exakt på vad man vill göra och hur det passar in i det stora hela. Ruby känns långt mer koherent i sin design och verkar vila på en betydligt stabilare teoretisk datorvetenskaplig grund. Ruby har också en av de absolut bästa designerna för objekt-orientering jag testat på, just OOP stödet i Python lämnar en hel del övrigt att önska (alla fall i 2.x har inte använt 3.x speciellt mycket).

Vill du hålla på med små system kan jag varmt rekommendera Arduino. Där kör man en bantad variant av C++ (skulle säga att det är C med nyckelordet "class" tillagt), är väldigt lätt att komma igång med och räcker med rejält basala kunskaper i elektronik för att göra roliga prylar. För en tusenlapp kan du köpa ett utvecklingskort ihop med en låda med lite givare och andra komponenter. Utvecklingsmiljön är gratis och snurrar på Windows, macOS och Linux.

Oj, ja hårdvara blir ju bara kraftfullare och billigare dag för dag. Men då så, då är nog inte C särskilt aktuellt längre. Hade varit kul att kolla på Ruby också, men som du skrev, Python är ju mer populärt. Jag har en Raspberry Pi med allehanda sensorer, breadboard med mera som jag lekt lite med python och gjort lite små saker med, men Arduino verkar roligare och enklare att göra grejjer med, är inte jätteintresserad utav räkna ut vilka resistorer jag behöver och allt sådant, vill helst bara kunna koppla på sensorer och köra direkt :D.

Men som sagt, det blir nog att spana in C++ istället för C.

Permalänk
Medlem

Detta blir ett kort svar, men om jag vore du skulle jag kolla upp: C, Rust och Go.

Nu generaliserar jag, och förenklar jättemycket, men: C är typ så mycket lågnivåprogrammering du behöver kunna om du inte ska göra väldigt roliga saker med assembly. Rust är vad C++ borde ha varit och är gött! Go är ganska lågnivå, men har garbage collection och asnice nätverksinterface.

Visa signatur

:(){ :|:& };:

🏊🏻‍♂️   🚴🏻‍♂️   🏃🏻‍♂️   ☕

Permalänk
Medlem

Nu kanske jag har fel men C är väl mest om man kodar för inbyggda system eller liknande där det helt enkelt inte finns någon c++ kompilator, eller om man endast kommer arbeta på lågnivå. Annars förstår jag inte riktigt varför man inte skulle välja c++ om valen stod mellan dom två.

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |