@Funlo: flera anledningar till varför C fortfarande är relevant har redan nämns i tråden.
En sak till som gör C högst relevant än idag är att det i praktiken definierar standarden för hur man kan utöka de flesta högnivåspråk med moduler som kräver väldigt högprestanda och/eller lågnivåtillgång till underliggande system.
Du har ju erfarenhet av Python redan, det är ett exempel på en miljö där man kan skriva utökningar och där dessa utökningar använder sig av ett C-gränssnitt.
Rent tekniskt kan man skriva utökningar i vilket språk som helst, är bara gränssnittet som behöver vara i C. Två välkända exempel som använder denna modell är Tensorflow och PyTorch. Båda dessa är skrivna i C++, exporterar ett C-gränssnitt och används i praktiken nästan uteslutande från Python på applikationsnivå. Fördelen är enkelheten i Python för applikationer och prestandan hos C/C++. Denna modell fungerar väldigt bra när applikationen egentligen inte är mer än ett klister, alla tunga lyft förs i biblioteket.
Frågan du nog bör ställa dig först är vad målet med att lära sig ett till språk är. Handlar det primärt att lära sig ett systemspråk för att skiva krävande applikationer skulle jag säga att C++ (tyvärr, hoppas C++ fort kommer ersättas av Rust) är det självklara valet idag. I princip alla större applikationer, som Chrome/Firefox/Edge, MS Office, Photoshop, spel, eventuella databaser, etc är primärt skrivna i C++.
För C++ är det väldigt viktigt att välja ett material som specifikt beskriver "modern C++", d.v.s. C++11/14/17. C++ var på väg att dö sotdöden, väldigt lite hände där från millennieskiftet fram till att C++11 släpptes. Var bl.a. Microsoft som insåg att deras tunnelseende på .Net var inte helt vettig då majoriteten av deras kassakor är extremt beroende på C++.
Den som leder C++ ISO-kommittén, Herb Sutter, jobbar för Microsoft, men Google och Facebook är också stora C++ användare och har flera personer inom C++ ISO-kommittén.
C är idag det enda realistiska valet för OS-utveckling i de stora populära systemen, men ett allt större fokus på säkerhetsproblem i våra IT-system har fått OS-människorna att allt mer snegla på Rust som framtida språk för OS-utveckling. Är man intresserad att följa den utvecklingen finns t.ex. Microsoft Security Response Center bloggen.
Det som gör Rust så spännande är att det har potential att få lika eller till och med bättre prestanda jämfört med C/C++, det samtidigt som det är ett "säkert" språk som förhindrar typiska C-buggar (minnesläckor, buffertöverskrivningar, etc). Rust är en av extremt få (kan komma på Erlang utöve Rust) språk som också garanterar att program inte har s.k. data-race buggar (bland de värsta buggar man kan ha i mulitrådade program).
Sista språk som kan nämnas i kategorin "systemspråk" är Go. Likt C/C++/Rust är Go riktat specifikt mot extremt prestandakrävande applikationer, Go är primärt optimerat för applikationer där I/O-prestanda är den primära flaskhalsen men det är i nivå med de andra även för beräkningar (men skulle säga att Go i praktiken är något långsammare än C/C++ för just detta). Är extremt lätt att använda C-bibliotek från Go, så även här är det vettigt att också kunna C.
Men Go, likt de flesta moderna språk som Java, C#, JS, etc, inte lämpligt för OS-utveckling då det kräver en runtime (blir ju cirkelberoende att använda en plattform för att utveckla ett OS som är basen för alla runtimes när plattformen själv behöver en runtime...). Så om målet just är att jobba med saker på OS-nivå är det C/C++/Rust som är de relevanta alternativen. Ja, finns OS skrivna i andra språk (bl.a. Java, Go och C#) men då är det nedskalade varianter som skiljer sig på flera fundamentala punkter från vad man normal förväntar sig från dessa.
Om du likt mig vill börja med att läsa om ett nytt språk för att få lite känsla för hur det typiskt används är väl The C-programming language vettig än idag. C har är praktiken ett fryst språk idag. Har släppts en C11 standard, men väldigt få har ens brytt sig om att implementera detta (Windows, Linux och MacOS saknar alla en fullständig C11 implementation, finns en del RTOS som implementerar C11).
Så standarden som gäller för C är C99 eller om ger sig på någon riktigt nischad mikrokontroller kan det vara så illa att man får nöja sig med C89. Men sättet man programmerar C skiljer sig inte vare sig det handlar om C89, C99 eller C11. Det är i stark kontrast till C++11 som på flera sätt fundamental ändrar hur man bäst jobbar med C++.
För C++ beror det än mer hur man bäst lär sig. Många skulle nog rekommendera Bjarnes Stroustrup The C++ programming language. Personligen tycker jag den är en utmärkt referens, även om det är ännu enklare att använda C++-referense och cplusplus.com. Båda dessa innehåller och en rad exempel och tips på hur man bäst använder C++ och dess standardbibliotek.
För Rust är den officiella bästa stället, man har skrivit både en referensmanual och en "by-example" just för att olika personer lär sig på olika sätt.
Go har ett liknande upplägg som Rust, en referensmanual, en "by-examples" och en "best-practices".
Har använt C++ sedan 1992, även undervisning. Använt C i närmare 20 år. Men hoppas att framöver kunna lämna dessa för Rust (OS-utveckling) och Go (allt utom OS-utveckling). C och C++ (som idag är två väldigt olika språk, så gillar inte när man klumpar ihop dessa som C/C++) kommer vara relevanta en lång tid framöver just p.g.a. att de i praktiken är basen för egentligen alla datorsystem idag, så helt vettigt att lära sig dessa även 2019. Men båda börjar visa sin ålder och brister (primärt inom säkerhet, eng. "safety", inte "security", C++11 är en klart fall framåt med många brister kvarstår) och nu finns faktiskt realistiska alternativ!