c,c++ - 90,95 procent programów których używasz jest napisane w tych językach,C# jest modyfikacją,jeśli już załapiesz programowanie obiektowe,które jest podstawą w C++,nie będziesz miał problemów ani z C#,ani z Javą - obydwa języki rozszerzają właśnie obiektowość o nowe klasy - pakiety funkcji przeznaczonych do określonego celu,np. gdy chcesz obliczyć sinus jakiejś liczby wywołujesz metodę klasy Math()
int a;
a=Math.Sin(90);
C++ wprowadza obiektowość,a C# i Java już są na niej zbudowane.
Zawsze opłaca się uczyć nowych rzeczy. A czego, to już zależy co chcesz programować.
To, ile kodu powstało w danym języku, nie ma kompletnie znaczenia, chyba że chcesz się zajmować serwisowaniem starych projektów, a nie pracą przy zupełnie nowych (w tym sensie można też się nauczyć COBOLu lub FORTRANa). Jeśli jednak kładziesz nacisk na nowe rzeczy, to zdecydowanie ObjectiveC, C# i Java. Preferuję Javę, bo jest w pełni FOSS i się nie ogranicza do “jednej słusznej platformy jednej słusznej firmy”. ObjectiveC nie należy lekceważyć, bo Apple stworzył jednak całkiem ładny rynek na to (i paradoksalnie MS ze swoim dziadowskim Windows Mobile na tym rynku praktycznie się nie liczy).
osobiście nie polecam stawiania pierwszych kroków w wyżej wymienionych językach, poleciłbym Ci zacząć od C a póżniej C++, taka standardowa ścieżka naukowa, wiele osób potwierdzi ze bardzo słuszna, już Pascala Ci oszczędzę
W C nauczysz sie o co biega, a póżniej ucząc sie C++ dołożysz do tego nowe rzeczy (o czym mówi sama nazwa plusplus), po takich podstawach droga wolna do wszystkich wynalazków. polecam Pythona
Na dzień dzisiejszy, nie polecam nauki języka C. Programowanie proceduralne jest odmienne koncepcyjnie od programowania obiektowego. Ucząc się programowanie proceduralnego nabędziesz nawyków, które utrudni Ci przestawienie się na model programowania obiektowego.
Zalecam pogłębiać wiedzę na temat języka C++, oraz zapoznać się z innymi językami obiektowymi, takimi jak C# czy Java.
Wieloplatformowość języka C++ jest złudna, bo o ile sam język jest przenośny, to już biblioteki przeznaczone dla tego języka w większości przenośne nie są.
Tak, ale sterowniki to jest inna bajka (i bynajmniej nie pisze się ich w C++ tylko właśnie w C - wiec kolejny powód by się nauczyć dobrze C).
A co do zwykłego dostępu do sprzętu poprzez API systemu, to w C# i w Javie też da się. Większość rzeczy, które potrzebujesz jest w bibliotece standardowej tych języków - i w przypadku Javy, jest do tego przenośna. Czyli np. z pliki czy multimedia obsługujesz tak samo pod Windows, Linux i Mac. Pozostałe rzeczy zależne od systemu też są dostępne, choć z pewnym trudem.
No, zmartwię Cię, od malloc do sprzętu to jest całkiem długa droga.
O ile nie piszesz kodu, który jest częścią sterownika / kernela, lub jest jakoś szczególnie uprzywilejowany, to fizycznego dostępu do sprzętu nie masz. Do pamięci również. Od malloc dostajesz coś w rodzaju HANDLE’a, obsługiwanego przez… OS.