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

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Ä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)

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Registrerad
Sep 2009

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.

Смерть -это решение всех проблем. Нет человека - нет проблемы
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

Trädvy Permalänk
Datavetare
Plats
Stockholm
Registrerad
Jun 2011

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++.

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

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
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.

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Registrerad
Sep 2009
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.

Смерть -это решение всех проблем. Нет человека - нет проблемы
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

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Feb 2005

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.

|Intel i5 4670K@4.4GHz| |Asus Z97-A| |A-Data 16GB CL9 1600MHz| |ASUS GeForce GTX 1080 Ti ROG Strix Gaming OC| |Samsung 850 Evo 500GB| |Samsung 840 Evo 250GB| |WD Green 3TB| |Corsair RM1000| |Fractal Design Define R5| |LG IPS Display@74Hz|

Trädvy Permalänk
Datavetare
Plats
Stockholm
Registrerad
Jun 2011
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.

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

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
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.

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2011

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.

Linux: the operating system with a CLUE; Command Line User Environment.

GNU/Linux

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Mar 2004

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å.

| i5 6500 | asus z170-k | asus 970 strix | 16gb ddr4 | asus mg279Q | FD Define r4