Är det värt att lära sig C i dagsläget?

Permalänk
Medlem

Är det värt att lära sig C i dagsläget?

I dagsläget besitter jag generell kunskap med C och klarar av att jobba med språket begränsat. Dessutom växer IT branschen snabbt och därför undrar jag om det fortfarande är värt att investera tid och fördjupa sig inom C.

Jag har en OK kunskap i hur och vart C tillämpas och varför det används.

Frågor som skulle vara intressanta att bli besvarade.
1. Hur ser dagsläget ut för C kompetens? (Kontrasterat mot andra programmeringsspråk)
2. Hur ser framtiden ut för C kompetens? (Support av legacy system kommer hålla sig i liv länge, men det intressanta är R&D. Vilka potentiella framtidsmarknader kommer C vara intressanta för)
3. Om jag investerar tid i C, vad för grunder inom programmering kommer ökas?

Tacksam för svar!

Permalänk

Bra fråga! Denna tråd får man ta och följa

Visa signatur

AMD Ryzen 5 3600 | Sapphire R9 280

Permalänk
Datavetare

Bara om du vill tjäna löjligt mycket pengar

Även om det var med glimten i ögat så har C blivit lite som Cobol i att det är väldigt få som riktigt behärskar detta, ändå finns den en absolut massiv mängd system i drift som använder C och där man fortfarande måste lägga till funktioner och rätta buggar. Konsekvensen av detta är att C-programmera är rätt välbetalda idag, men det är i.o.f.s också en effekt av att nästa alla C-programmera är seniora.

Nu har jag aldrig programmerat Cobol, men det användes (väl?) främst i finansiella system och har svårt att tänka mig att det finns speciellt många datalogiskt intressanta problem att lösa där... Det som är kul med C är att saker som fortfarande använder detta språk inkluderar OS-kärnor och inbyggda system, båda innehåller väldigt intressanta och ofta fundamentalt svåra problem!

Edit: för att göra ett försök till svar av dina frågor

  1. det finns definitivt jobb som C-programmerare, i alla fall i Stockholmsområdet. Men generellt sett verkar Sverige ha en långt mindre marknad inom t.ex. inbyggda system än många andra länder, vi är väldigt MS tunga och verkar också vara väldigt fokuserade på "webben"

  2. Internet-of-things kommer betyda en explosion av mängden system som kör program utvecklade i C, vad ska du annars använda i små mikrokontrollers? Bantade versionen av C++ finns naturligtvis, men sättet man programmerar t.ex. Arduino är mer C än det är modern C++. Men generellt sett lär C knappast växa, i större system så är modern C++ ett bättre val i de absolut mest prestandakritiska delarna så fort man kliver utanför OS-kärnorna

  3. En stor fördel med C jämfört med många "moderna" språk är att inget är implicit i C så när du behärskar att programmera C så fattar du verkligen vad du gör. Är övertygad om att just denna egenskap att C inte "gör något smart bakom din rygg" är huvudanledningen till att språket fortfarande är dominerade i projekt med väldigt mycket folk och där antal rader kod räknas i miljontals

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

Ser man till konsultbranschen har åtminstone jag fått intrycket av att det är Java och .NET (C#) som eftersöks. På kontoret på mitt företag finns det nog ett gäng som är kunniga i C och C++ men vad jag vet kommer det inte in särskilt många uppdrag där det efterfrågas.

Visa signatur

Stationär: Fractal Design Meshify 2 Compact, Ryzen 7 5700x, MSI MAG B550 Tomahawk, Kingston HyperX Fury 32GB 3600Mhz CL18, Sapphire Radeon RX 5700 Pulse, Kingston A2000 1TB (x2), Seasonic Focus GX 650W, Noctua NH-U14S

NAS: Fractal Design Define R5, Ryzen 3 1200AF, Asus Prime B450M-A, 32GB ECC DDR4 @ 2133Mhz, 5x WD Red 4TB (Raidz2), WD Red 2TB (stripe), TrueNAS 12.0

Permalänk
Medlem

Definitivt, man lär sig mycket bakom logiken för programmering i moderna språk även om det skiljer lite här och där.

Köp en bok t.ex. " C Programming, A modern Approach" av K. N. King. Och läs den i din egen takt, att ha en bok i övrigt kan skjuta på motiveringen och det är skönt att innehållet följer en röd tråd. Visst kan du lära dig allt på internet idag, men det krävs tid och ork att samla all information i rätt progression.

Det krävs inte mycket, kanske 15-30m per dag plus någon övning när du känner för det.
Och när du är färdig med boken så så släpper du tankesättet "är det värt att lära xxx"gör det bara. Det kostar inget mer än ditt intresse! (och givetvis pengar för böcker) ^^

Permalänk
Medlem

Även om marknaden inte har extrem efterfrågan på C så väger det mycket i ett CV.
En programmerare som "bemästrar" C/C++ väger mycket i mina ögon.
Inte ovanligt att det förkommer val mellan x och y och personen som har C eller liknande språk i bakgrunden får komma på intervju.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Jobb möjligheter vet jag inte riktigt, men att behärska pekare och förstå hur saker funkar (på lägre nivå) känns som en bra sak för alla programmerare. Om du vill jobba med C kommer det framför allt inkludera legacy/inbyggda/operativ system.

Permalänk
Medlem
Skrivet av Peking:

Ser man till konsultbranschen har åtminstone jag fått intrycket av att det är Java och .NET (C#) som eftersöks. På kontoret på mitt företag finns det nog ett gäng som är kunniga i C och C++ men vad jag vet kommer det inte in särskilt många uppdrag där det efterfrågas.

Beror väl på vilken bransch man konsultar i? För egen del jobbar vi främst mot offentliga sektorn och då blir det inte mycket C-programmering. Har däremot kompisar som konsultar mer mot teknisk industri och där är det gott om C och hårdvarunära programmering.

Permalänk
Medlem
Skrivet av Sebbepojken:

Beror väl på vilken bransch man konsultar i? För egen del jobbar vi främst mot offentliga sektorn och då blir det inte mycket C-programmering. Har däremot kompisar som konsultar mer mot teknisk industri och där är det gott om C och hårdvarunära programmering.

Absolut, visst är det så. Talade väl mer utifrån vilka uppdrag jag sett trilla in. Sundsvall är förvisso en myndighetstung stad

Visa signatur

Stationär: Fractal Design Meshify 2 Compact, Ryzen 7 5700x, MSI MAG B550 Tomahawk, Kingston HyperX Fury 32GB 3600Mhz CL18, Sapphire Radeon RX 5700 Pulse, Kingston A2000 1TB (x2), Seasonic Focus GX 650W, Noctua NH-U14S

NAS: Fractal Design Define R5, Ryzen 3 1200AF, Asus Prime B450M-A, 32GB ECC DDR4 @ 2133Mhz, 5x WD Red 4TB (Raidz2), WD Red 2TB (stripe), TrueNAS 12.0

Permalänk
Medlem

Tack för alla svar, jag ska definitivt kolla på "C Programming, A modern approach", då jag såg att den hade fått bra recension. Jag var otydlig i min frågeställning. Tanken var inte "Antingen lär jag mig C eller inte.". Utan mer "Antingen lär jag mig C djupare, eller så fokuserar jag på annat programmeringsspråk som har större potential.".

Fördelar med att lära sig C.
1.a Roligt att komma närmare maskinen. Potentiellt jobba hårdvarunära med assembler och skriva subrutiner i C.
1.b Kolla på spelmotorer, OS, Nätverk, eventuellt VR.
2. Back to basic.
3. Ökar på förståelsen och grunden.
4. Bygg upp sitt egna bibliotek.
5. Vackert språk och kod (Konst).
(Går att addera fler fördelar)

Nackdelar
1. Bra för hobby. Försvinner från R&D.
2. Underhåll av legacy system.
3. Potentiell omodern kunskap i framtiden.
(Går att addera fler nackdelar)

Permalänk
Medlem
Skrivet av Razki:

Tack för alla svar, jag ska definitivt kolla på "C Programming, A modern approach", då jag såg att den hade fått bra recension. Jag var otydlig i min frågeställning. Tanken var inte "Antingen lär jag mig C eller inte.". Utan mer "Antingen lär jag mig C djupare, eller så fokuserar jag på annat programmeringsspråk som har större potential.".

Fördelar med att lära sig C.
1.a Roligt att komma närmare maskinen. Potentiellt jobba hårdvarunära med assembler och skriva subrutiner i C.
1.b Kolla på spelmotorer, OS, Nätverk, eventuellt VR.
2. Back to basic.
3. Ökar på förståelsen och grunden.
4. Bygg upp sitt egna bibliotek.
5. Vackert språk och kod (Konst).
(Går att addera fler fördelar)

Nackdelar
1. Bra för hobby. Försvinner från R&D.
2. Underhåll av legacy system.
3. Potentiell omodern kunskap i framtiden.
(Går att addera fler nackdelar)

Om du har lärt dig en del C redan så tycker jag att du ska lära dig något mer programspråk. Jag tycker du ska fortsätta fördjupa dig i C samtidigt som du lär dig något mer. När man är nybörjare så kan det vara lite förvirrande att köra flera språk på en gång men nu när du kommit en bit är det nog ingen fara. Det är en merit att kunna mer än ett språk. Java och C# är ju vanliga inom mera affärsapplikationer etc nuförtiden och vill man satsa på webben så är det ofta en kombination av JavaScript, html5 och CSS som används.

Om jag hade varit din personliga programmeringscoach hade jag nog föreslagit att börja nosa på Java lite. Då kommer du mer in i objektorienterat och garbage collection osv. Så får du känna på den världen. Mer eller mindre objektorienterade språk är ju väldigt vanliga nuförtiden. Efter de kan man undersöka något språk i en annan paradigm.

Visa signatur

/M

Permalänk
Medlem
Skrivet av Marowak:

Om du har lärt dig en del C redan så tycker jag att du ska lära dig något mer programspråk. Jag tycker du ska fortsätta fördjupa dig i C samtidigt som du lär dig något mer. När man är nybörjare så kan det vara lite förvirrande att köra flera språk på en gång men nu när du kommit en bit är det nog ingen fara. Det är en merit att kunna mer än ett språk. Java och C# är ju vanliga inom mera affärsapplikationer etc nuförtiden och vill man satsa på webben så är det ofta en kombination av JavaScript, html5 och CSS som används.

Om jag hade varit din personliga programmeringscoach hade jag nog föreslagit att börja nosa på Java lite. Då kommer du mer in i objektorienterat och garbage collection osv. Så får du känna på den världen. Mer eller mindre objektorienterade språk är ju väldigt vanliga nuförtiden. Efter de kan man undersöka något språk i en annan paradigm.

I dagsläget hanterar jag: C, C++, C#, Java, Python, Ruby, Assembler~, SQL~, och under sommaren ska jag jobba med: Ruby (on rails), HTML, CSS & Javascript. Personligen är jag backend, men kan vara svårt att komma bort från fullstack.

Anledningen till att jag undrar om C är värt att investera tid i, är för att jag måste börja göra en prioritetslista som jag reviderar varje år och uppdaterar.

För övrigt har jag jobbat med Java i runt 4~ års tid. Språket har minimalt att erbjuda mig nu för tiden. Självklart kan jag bli en evangelist och fördjupa mig ännu mer i Javas (stora) bibliotek samt olika ramverk som erbjud, men den kunskapen jag får från det är inte proportionerlig mot vad nya territorium kan erbjuda. Jag föredrar att lära mig koncept som går att generalisera och utnyttja när situationen kräver det, än att specifikt lära mig att jag bara kan utnyttja instance.method() i ett specifikt ändamål.

Kort sagt kan man sammanfatta att jag har goda kunskaper med språk från det imperativa och objekt-orienterade paradigmen. Min funktionella är starkare än logisk, men ingen av dem är att skryta med. Lisp hade kanske varit nästa steg att lära sig, och den ska upp på min lista.

Permalänk
Medlem

Nu kommer jag med en aning off topic fråga, men jag ställer den ändå.

Jag har programmerat frekvent i ungefär ett och ett halvt år, uteslutande i Java. Kan även en del SQL och XML. Tycker jag har förstått grundprinciperna inom programmering men har mycket kvar att lära.

Det jag undrar är om det hade varit "värt" för mig att fortsätta fördjupa mig inom java och bli riktigt bra på det, eller om man nu skulle testat på ett annat språk, kanske C eller C++ och ge mig en bredare kunskap?

Vad skulle ni anse vara viktigast, expert på något eller amatör på mycket? Vad har man mest nytta av och vad är viktigast för arbetsgivare?

Permalänk
Inaktiv

Olika programmeringsspråk är för olika områden och olika områden passar olika utvecklare.
T.ex. kräver områden vissa väldigt mycket kundkontakt på alla sätt och viss, medans andra områden passar en utvecklare som kan sitta inlåst i källaren på ett stort företag och aldrig vara i kontakt med omvärlden.

Om vi tar C så är det hårdvarunära och då bör såklart användaren kunna mer hårdvara och elektronik, så kunskapsmässigt kanske man bör lägga 75% av tiden på allt elektronisk och 25% på C som C-kodare inom vissa områden.

Angående arbetsmarknaden så är det brist på nästan precis allt idag inom programmering, så kan man välja något av de stora eller fokusera på något litet. Så länge få fokuserar på det lilla så kommer det finnas jobb där.

Min upplevelse med inbyggda system är att de håller på och försvinna i sverige, man köper en färdig pryl som gör allt och har ett eget utvecklingsverktyg och språk. Ta KNX, ZigBe , dali, Z-wave inom fastighetsautomation som exempel. Detsamma gäller gäller många områden där plc och ducar blir billigare.
Inbyggda system har dock sin nisch inom elektroniska apparater, men har inte dessa jobb flyttat utomlands? Och inbyggda system idag handlar väl mycket om att man redan använder en linuxkärna och utgår ifrån, vilket är betydligt mer avancerat än det jag gjorde i skolan. -Kanske man kodar C då?

Så mitt svar på frågan ska jag satsa på C är först vem är du? Vad har du för bakgrund och vad kan du om elektronik etc. Sedan tycker jag C är ett väldigt smalt språk och enbart satsa på C känns lite som att enbart satsa på html, visst html är bra, men man kommer ej långt enbart med detta.

*edit*
Orsaken till varför "inbyggda system" försvinner handlar om pengar, även om man kan koda ihop en rumstyrning som är lika bra som KNX, så får man lite problem när någon kommer med en apparat från ett helt annat system som ska prata med systemet.
Det är lite som med persondatorer, köper man en färdig x86 som kör windows, linux, macos etc så får man drös med färdiga applikationer etc och allt blir så mycket billigare och enklare. Även om en skräddarsydd persondator för ens behov kunde ha varit bättre.

Permalänk
Medlem
Skrivet av Razki:

I dagsläget hanterar jag: C, C++, C#, Java, Python, Ruby, Assembler~, SQL~, och under sommaren ska jag jobba med: Ruby (on rails), HTML, CSS & Javascript. Personligen är jag backend, men kan vara svårt att komma bort från fullstack.

Anledningen till att jag undrar om C är värt att investera tid i, är för att jag måste börja göra en prioritetslista som jag reviderar varje år och uppdaterar.

För övrigt har jag jobbat med Java i runt 4~ års tid. Språket har minimalt att erbjuda mig nu för tiden. Självklart kan jag bli en evangelist och fördjupa mig ännu mer i Javas (stora) bibliotek samt olika ramverk som erbjud, men den kunskapen jag får från det är inte proportionerlig mot vad nya territorium kan erbjuda. Jag föredrar att lära mig koncept som går att generalisera och utnyttja när situationen kräver det, än att specifikt lära mig att jag bara kan utnyttja instance.method() i ett specifikt ändamål.

Kort sagt kan man sammanfatta att jag har goda kunskaper med språk från det imperativa och objekt-orienterade paradigmen. Min funktionella är starkare än logisk, men ingen av dem är att skryta med. Lisp hade kanske varit nästa steg att lära sig, och den ska upp på min lista.

Då låter det ju som att du kanske skulle känna att det som ger mest är att sätta dig in ordentligt i ett funktionellt språk och eventuellt satsa på något visst område i ett av de språk du behärskar. Något som är på gång just nu. Jag tänker att IoT, Maskininlärning, AI och virtuellt är det ju mycket hype om nu. Iofs snackas det kanske inte lika mycket om IoT som de andra. Vore det inte lite kul att köra något sådant? Fast då vet jag inte om det är i rent praktiskt eller arbetsmässigt syfte utan det kan ju vara roligt med.

Visa signatur

/M

Permalänk
Medlem
Skrivet av Baxtex:

Det jag undrar är om det hade varit "värt" för mig att fortsätta fördjupa mig inom java och bli riktigt bra på det, eller om man nu skulle testat på ett annat språk, kanske C eller C++ och ge mig en bredare kunskap?

Vad skulle ni anse vara viktigast, expert på något eller amatör på mycket? Vad har man mest nytta av och vad är viktigast för arbetsgivare?

Blir bra på ett språk, då är det inte så svårt att gå över till ett annat. Är du riktigt duktig på Java så kan du gå över till C# .NET ganska så lätt. Grejen med Java/C# är att du har garbage collection, alltså en form av automatisk minnes hantering, vilket inte C/C++ har.

Angående C skulle jag nog säga att det primära används området är typ inbyggda system, att programmera kretsar, vilket kanske inte är det mest spännande jobbet direkt.

Den stora grejen idag är kanske inte så mycket språket du kan, men vilka framworks du kan och har erfarenhet inom. Som exempel så har python blivit mer populärt pga Django web framework och python brukar användas inom data hantering och sökmotorer. Men självfallet så är Javascript fortfarande störst inom front-end utveckling.

Permalänk
Medlem

Hm. Aldrig onödigt ialf.. De flesta språken liknar varandra. Kan du ett språk bra, så kan du enkelt lära dig ett annat.

På det företag jag jobbar så kodas det mesta i PHP, Java. D.v.s vårat intranät. Som består av miljoner funktioner för alla de olika avdelningar vi har på företaget.

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070