Przez lata rozważałem zagłębianie się w języki, które uważam za „niskiego poziomu”. Dla mnie oznacza to C i montaż. Jednak nie miałem jeszcze na to czasu i NIGDY nie było to konieczne.
Teraz, ponieważ nie widzę żadnej konieczności, czuję, że powinienem albo zaplanować jakiś moment w czasie, kiedy będę studiował ten temat, albo porzucić plan na zawsze.
Moja pozycja
Przez ostatnie 4 lata koncentrowałem się na „technologiach internetowych”, które mogą ulec zmianie, i jestem programistą aplikacji, który raczej się nie zmieni.
Przy opracowywaniu aplikacji najważniejsza jest użyteczność. Piszesz aplikacje, które mają być „konsumowane” przez użytkowników. Im bardziej użyteczne są te aplikacje, tym większa jest twoja wartość.
Aby osiągnąć dobrą użyteczność, uważam, że następujące rzeczy są wykonalne
- Dobry projekt : Przemyślane funkcje dostępne poprzez przemyślany interfejs użytkownika.
- Prawidłowość : najlepszy projekt nie jest nic wart, jeśli nie zostanie poprawnie zaimplementowany.
- Elastyczność : aplikacja A powinna stale ewoluować, aby jej użytkownicy nie musieli przełączać się na inną aplikację B, która ma nowe funkcje, które A mogłaby wdrożyć. Aplikacje rozwiązujące ten sam problem nie powinny różnić się funkcjami, ale filozofią.
- Wydajność : Wydajność przyczynia się do poprawy komfortu użytkowania. Aplikacja idealnie zawsze reaguje i wykonuje swoje zadania dość szybko (na podstawie ich częstotliwości). Wartość optymalizacji wydajności wykraczająca poza punkt, w którym jest zauważalna przez użytkownika, jest wątpliwa.
Myślę, że programowanie niskiego poziomu nie pomoże mi w tym, oprócz wydajności. Ale napisanie całej aplikacji w języku niskiego poziomu ze względu na wydajność jest dla mnie przedwczesną optymalizacją.
Moje pytanie
Czego może nauczyć mnie programowanie na niskim poziomie, czego inne języki by mnie nie nauczyły? Czy coś mi brakuje, czy to tylko umiejętność, która jest bardzo mało przydatna w tworzeniu aplikacji? Proszę zrozumieć, że nie kwestionuję wartości C i montażu. Po prostu w moim codziennym życiu cieszę się, że wszystkie zawiłości tego świata są dla mnie abstrakcyjne i zarządzane (głównie przez warstwy napisane w C / C ++ i same asemblery). Po prostu nie widzę żadnych pomysłów, które mogłyby być dla mnie nowe, tylko szczegóły, którymi musiałbym się napchać. Co w tym jest dla mnie?
Mój wniosek
Dziękujemy wszystkim za odpowiedzi. Muszę powiedzieć, że nikt mnie tak naprawdę nie zaskoczył, ale przynajmniej teraz jestem całkiem pewien, że porzucę ten obszar zainteresowania, dopóki nie zajdzie taka potrzeba.
O ile mi wiadomo, pisanie asemblera w dzisiejszych procesorach, ponieważ są one używane w dzisiejszych procesorach, jest nie tylko niepotrzebnie skomplikowane, ale wiąże się z ryzykiem pogorszenia wydajności środowiska wykonawczego w porównaniu z odpowiednikiem w języku C. Ręczna optymalizacja jest prawie niemożliwa ze względu na OOE, podczas gdy nie otrzymujesz różnego rodzaju optymalizacji, które kompilator może wykonać automatycznie. Ponadto kod jest przenośny, ponieważ wykorzystuje niewielki podzbiór dostępnych poleceń lub jest zoptymalizowany, ale prawdopodobnie działa tylko na jednej architekturze.
Pisanie C nie jest już tak potrzebne, jak kiedyś. Gdybym miał napisać aplikację w C, równie dobrze wykorzystałbym przetestowane i ustanowione biblioteki i frameworki, które oszczędzałyby mi wdrażania procedur kopiowania ciągów, algorytmów sortowania i innych rzeczy służących jako ćwiczenia na uniwersytecie. Mój własny kod działałby szybciej kosztem bezpieczeństwa typu. Nie chcę ponownie odkrywać koła w trakcie normalnego tworzenia aplikacji, ani próbować debugować, przeglądając podstawowe zrzuty: D
Obecnie eksperymentuję z językami i tłumaczami, więc jeśli jest coś, co chciałbym opublikować, przypuszczam, że przeniesie działającą koncepcję do C, chociaż C ++ równie dobrze może załatwić sprawę.
Jeszcze raz dziękuję wszystkim za odpowiedzi i wgląd.