Moim zdaniem to, co ludzie potocznie uważają za „języki programowania”, to tak naprawdę trzy osobne rzeczy:
- Typ języka i składnia
- IDE języka
- Dostępne biblioteki dla języka
Na przykład, gdy ktoś porusza C # w dyskusji, możesz myśleć, że mówi on o składni języka (1), ale jest 95% pewności, że dyskusja będzie dotyczyła frameworka .Net (3). Jeśli nie projektujesz nowego języka, trudno jest izolować (1) i ignorować (2) i (3). Wynika to z faktu, że IDE i standardowa biblioteka to „czynniki komfortu”, które bezpośrednio wpływają na korzystanie z określonego narzędzia.
W ostatnich latach również uczestniczyłem w Google Code Jam. Po raz pierwszy zdecydowałem się na C ++, ponieważ ma ładne wsparcie dla odczytu danych wejściowych. Na przykład odczyt trzech liczb całkowitych ze standardowego wejścia w C ++ wygląda następująco:
int n, h, w;
cin >> n >> h >> w;
Podczas gdy w C # to samo wyglądałoby tak:
int n, h, w;
string[] tokens = Console.ReadLine().Split(' ');
n = int.Parse(tokens[0]);
h = int.Parse(tokens[1]);
w = int.Parse(tokens[2]);
To o wiele więcej kosztów ogólnych dla prostej funkcjonalności. Sprawa staje się jeszcze bardziej skomplikowana w języku C # przy wprowadzaniu multilinii. Może po prostu wtedy nie wymyśliłem lepszego sposobu. W każdym razie nie udało mi się zaliczyć pierwszej rundy, ponieważ miałem błąd, którego nie mogłem naprawić przed końcem rundy. Jak na ironię metoda odczytu danych wejściowych zaciemniła błąd. Problem był prosty, wejście zawierało liczbę, która była zbyt duża dla 32-bitowej liczby całkowitej. W C # int.Parse(string)
zgłasza wyjątek, ale w C ++ strumień wejściowy do pliku ustawia pewną flagę błędu i nie powiedzie się po cichu, powodując, że niczego nie podejrzewający programista nie będzie wiedział o problemie.
Oba przykłady pokazują, w jaki sposób biblioteka była używana, a nie składnia języka. Pierwszy pokazuje gadatliwość, a drugi wiarygodność. Wiele bibliotek jest przeniesionych do wielu języków, a niektóre języki mogą korzystać z bibliotek, które nie zostały specjalnie dla nich zbudowane (patrz odpowiedź @ vartec na temat Pythona z bibliotekami C).
Podsumowując, znajomość właściwego algorytmu pomaga. W konkursach kodowania ma to kluczowe znaczenie, szczególnie gdy zasoby takie jak czas wykonania i pamięć są celowo ograniczone. Przy tworzeniu aplikacji jest to mile widziane, ale generalnie nie jest kluczowe. Utrzymanie jest tam ważniejsze. Można to osiągnąć poprzez zastosowanie prawidłowych wzorców projektowych, dobrą architekturę, czytelny kod i odpowiednią dokumentację, a wszystkie te metody w dużym stopniu zależą od bibliotek wewnętrznych i zewnętrznych. Dlatego uważam, że ważniejsze jest, aby wiedzieć, jakie koła są już wynalezione i jak pasują, a następnie jak zrobić własne.