Chcę zagłębić się w C i zwykle, gdy chcę nauczyć się nowego języka, myślę o prostym / osiągalnym celu projektu, który ma jakiś praktyczny cel (skorzystaj z interfejsu API, zautomatyzuj zadanie itp.)
Trudno mi wymyślić jeden dla C, głównie dlatego, że wszystko, co czytam, wskazuje na to, że główne użycie C obecnie jest w systemach wbudowanych i bardziej złożonych projektach oprogramowania, takich jak systemy operacyjne.
Czy to wskazuje mi na to, że nie muszę się tego uczyć lub że muszę być nieco bardziej zagmatwany w mojej strategii uczenia się?
Odniesienia do praktycznych zasobów edukacyjnych? (samouczek / jak to daje wynik końcowy, który ma jakiś cel / benifit)
Odpowiedzi:
Po prostu polecam zabranie kopii Kernighana i Ritchie's The C Programming Language (2nd Edition) . Na końcu każdego rozdziału znajduje się kilka ćwiczeń, które można wykonać, a także bardzo dobre wprowadzenie do języka C. Nie uczyni cię mistrzem języka, ale powinieneś mieć wystarczającą wiedzę na końcu książki i ćwiczeń, aby być może znaleźć projekt open source napisany w C , do którego możesz przeczytać źródło i być może przyczynić się do.
Jeśli chcesz zobaczyć rzeczywiste projekty z kodem C. Robi się coraz trudniej - wiele projektów używa języka „wyższego poziomu”, ale C wciąż żyje i ma się dobrze. Jeśli chcesz nauczyć się C, nie bój się odkrywać koła, aby osiągnąć naukę. Nie jest dobrym pomysłem wymyślanie na nowo rozwiązań na czas, ale jest to całkiem w porządku, jeśli robisz to jako ćwiczenie akademickie.
źródło
Musisz naprawdę zrozumieć alokację pamięci. Brzmisz, jakbyś używał wcześniej innych języków, ale są szanse, że te inne języki ukryły przed tobą krwawe szczegóły zarządzania pamięcią. W C zarządzanie pamięcią jest zawsze jawne. Ma to kilka zalet, ale oznacza to, że musisz uważać, aby to zrobić dobrze, inaczej całe piekło się rozpuści.
Używaj wszelkich dostępnych narzędzi do debugowania pamięci dla używanej platformy. W systemie Linux dostępny jest Electric Fence, w Mac OS X Guard Guardoc. Istnieje również Valgrind, który obsługuje wiele systemów operacyjnych.
Jeśli nie zwolnisz pamięci, którą należy zwolnić, nastąpi wyciek pamięci. Rób to dalej, a zabraknie ci pamięci. Nawet w sklepie z kopiami zapasowymi (co większość ludzi nazywa pamięcią wirtualną) możesz spowodować, że system będzie nadmiernie stronicowany lub nawet zabraknie miejsca na wymianę.
Jeśli zwolnisz pamięć, która została już zwolniona, zniszczysz stertę i ulegniesz awarii, ale prawdopodobnie nie od razu. Zniszczysz też stertę, jeśli przekroczysz bufor. Narzędzia do debugowania pamięci pomogą w tym wszystkim.
Pomaga również testowanie jednostkowe.
źródło
Zgadzam się z większością ludzi, że dzisiejsze języki zależą od zadania. Był czas, kiedy miałeś ograniczony wybór w tym zakresie. Obecnie C jest używany głównie w domenie programistycznej Embedded / System, gdzie istnieje potrzeba optymalizacji kodu. Musisz napisać precyzyjne kody, aby uzyskać maksimum, ponieważ jeśli zaczniesz używać tej abstrakcji, to podstawowe elementy muszą być bardzo solidne. Powiedziałbym, że próbujesz obejść niektóre projekty GNU typu open source, takie jak sam Linux lub coś, co wymaga programistów C. Spróbuj swoich sił w tych projektach zamiast pisać coś od zera w C. Jest to prawdopodobnie lepszy sposób na pisanie kodów i naukę języka.
źródło
Będziesz chciał zrobić coś, co może działać z wiersza poleceń. Programowanie GUI w C jest poważnym problemem w dupie, nawet przy dobrym frameworku GUI.
Moją zwykłą propozycją praktycznego uczenia się języka C była lista kontaktów lub inna prosta aplikacja do zarządzania danymi. To obejmie większość ważnych bitów (I / O, zarządzanie pamięcią, przetwarzanie tekstu itp.) I do tego nie będziesz musiał używać niczego poza standardową biblioteką C. C nie ma żadnej wbudowanej obsługi grafiki, sieci, dźwięku ani wielu innych elementów 1 , więc na pierwszy rzut oka na programowanie w C najlepiej jest unikać wszystkiego, co opiera się na tego rodzaju rzeczach.
C można wykorzystać do programowania ogólnego; musisz nieco sprecyzować swoje oczekiwania (wyobraź sobie, że jest 1983 rok i siedzisz przed VT52 podłączonym do VAX 11/750, i będziesz miał właściwy sposób myślenia).
Pamiętaj tylko, że C nie ma strażników ostrzy i nie powstrzyma cię przed zrobieniem czegoś głupiego. Definicja języka jest nieco luźna, a niektóre operacje nie są jako takie nielegalne , ale też nie są dobrze zdefiniowane.
1 - W najnowszej (2011) wersji standardu językowego dodano obsługę wątków
źródło
Polecam Project Euler . Użyłem go do ulepszenia mojego C ++ i jest niesamowity. Jest świetny, ponieważ każdy problem jest niewielkim zadaniem, którego ukończenie może zająć mniej niż godzinę (przynajmniej te pierwsze).
Potrzebujesz profilera i książki o optymalizacji kodu pod kątem szybkości. Przestrzegaj zasady 1 minuty: musisz uzyskać odpowiedź w ciągu 1 minuty.
źródło
Jeśli JUŻ JESTEŚ programistą, a TYLKO musisz nauczyć się języka C i nie przeszkadza ci w nauce starszej wersji języka (rdzeń jest nadal prawie taki sam), to Leendert Ammeraal w „C dla programistów” nie można pokonać . Pracuj przez to, od początku do końca.
źródło