Wielu przyszłych maturzystów zadaje sobie pytanie: Python czy C++. W ciągu ostatnich lat Python znacznie nabrał na popularności i coraz więcej uczniów zaczyna wybierać właśnie jego. Ten artykuł jest napisany specjalnie dla tych z Was, którzy jeszcze nie mogą się zdecydować. Zaprezentuję główne różnice miedzy C++ i Pythonem, a przynajmniej takie, które dotykają tematów stricte maturalnych.
Zacznijmy od najbardziej podstawowej różnicy między tymi językami. C++ w przeciwieństwie do Pythona jest językiem kompilowanym. Co to oznacza? W dużym uogólnieniu kod napisany w C++ musi zostać wpierw skompilowany do postaci kodu maszynowego, który zostanie odpowiednio wykonany przez maszynę. Z kolei Python jest językiem interpretowanym, kod za pomocą interpretera jest interpretowany linia po linii, bez etapu tłumaczenia na język maszynowy. Jednak jaki ma wpływ widoczny dla nas, prostych użytkowników?
Po pierwsze przez brak kompilacji kody napisane w Pythonie są wolniejsze od ich wersji z C++, choć warto nadmienić, że na dzisiejszych komputerach jest to kwestia raczej pomijalna, zwłaszcza na maturze. Ponadto, dzięki kompilacji jesteśmy w stanie wykryć więcej błędów, których Python może nie wykryć, zanim będzie za późno. W przypadku programów na poziomie maturalnym nie ma to większego znaczenia, jednak już przy tworzeniu bardziej zaawansowanych aplikacji trzeba mieć to na uwadze. Oznacza to, że programy w Pythonie mogą uruchomić się w stanie, w którym kompilator C++ wyłapał by błąd i kazał go naprawić. Na poziomie licealnym jednak nie jest to większy problem - ewentualne problemy są znane od razu po uruchomieniu programu, a uruchomienie programu to często kwestia mniej niż jednej sekundy.
Jakie są w takim układzie mocniejsze strony Pythona od C++? Otóż przez brak kompilatora język pozwala nam na bardziej elastyczne pisanie kodów. Jest więcej możliwości, a ponadto nie trzeba się martwić o wiele rzeczy i można kod pisać znacznie szybciej, bez potrzeby używania rozwlekłego, powtarzalnego i praktycznie niezmiennego boilerplate code. Dla przykładu w C++ gdy tworzymy tablicę, musimy zadeklarować odgórnie jej rozmiar:
const int rozmiar = 1000;
int tab[rozmiar];
Ponadto tablica tab może (w zależności od sytuacji) może być zainicjowana "śmieciami", znajdują się w niej różne wartości, na które nie mamy pierwotnie wpływu, więc musimy dodatkowo wyzerować ją przed rozpoczęciem jakiegoś zadania.
Z kolei w Pythonie możemy dowolnie dodawać nowe elementy do listy, nie martwiąc się o pamięć, a nawet dodawać elementy różnych typów, na przykład:
list = [0, 7, True, "aaa"]
list.append(1)
list.append("abcd")
Tak jak już wspomnieliśmy wyżej, tablice w C++ i Python znacznie się od siebie różnią. Jednak nie jest to tylko kwestia typów elementów i rozmiaru tablicy. Dodatkową rzeczą udostępnioną przez twórców Pythona, której w C++ nie spotkamy to indeksowanie ujemne. Dokładniej -1 odpowiada ostatniemu znakowi, -2 przedostatniemu itd. Może być to bardzo przydatne w zadaniach, w których musimy sprawdzić parzystość liczb:
number = '321'
if int(number[-1]) % 2:
print('Odd')
else:
print('Even')
gdzie w C++ musielibyśmy skorzystać z:
number[number.size()-1]
co jest oczywiście nieco mniej wygodne. Ponadto dzięki mechanizmowi slicingu, w Pythonie możemy partycjować tablice i brać tylko jego część, na przykład kod:
text = 'abcdef'
print(text[1:3])
wypisze na ekranie znaki od indeksu 1 włącznie do 3, czyli: ’bc’. Na domiar, możemy wyświetlać cały tekst co daną liczbę znaków:
text = 'abcdef'
print(text[::2])
W ten sposób wyświetli się zawartość zmiennej text co drugi znak: ’ace’. Na pierwszy rzut oka może się to wydawać całkiem niepotrzebne, jednak diametralnie skraca nam kod sprawdzający, czy np. tekst jest palindromem. A jak wiadomo, palindromy bardzo często lubią pojawiać się na maturze. Poniżej prezentuję funkcje w Python a C++:
def isPalindrome(text):
return text==text[::-1]
bool isPalindrome(string text)
{
int n = text.size();
for(int i=0; i<n/2; i++)
if(text[i] != text[n-i-1])
return false;
return true;
}
Jak widać, różnica jest ogromna. W C++ musimy wykonać pętlę, która porównuje nam kolejne pary znaków, zaś w Pythonie operator [::-1] odwraca nam tablicę (w tym wypadku tekst) jednym wywołaniem funkcji.
Do innych zalet należy dostępna w Pythonie szeroka biblioteka narzędzi umożliwiających programowanie funkcjonalne, co często pozwala zapisać nawet skomplikowane, wieloetapowe operacje w jednej-dwóch linijkach. C++ również pozwala na takie konstrukcje, jednak często są one znacznie bardziej skomplikowane niż te w Pythonie.
Wspomniany wcześniej boilerplate code w Pythonie ograniczony jest do minimum. Bardzo często nie będziemy musieli nawet dołączać żadnych bibliotek, ponieważ te dostępne bez użycia słowa kluczowego import będą wystarczające.
Obusiecznym mieczem jest również typowanie dynamiczne - nie musimy np. z góry deklarować jakie typy będą przyjmowane i zwracane przez nasze funkcje, jednak może to doprowadzić do niefortunnych sytuacji, w których nasza tablica będzie "pomieszana" niepasującymi do siebie elementami. Częstym problemem na początku jest również problem z rozróżnieniem między "funkcją" a "wynikiem wywołania funkcji" - w C++ie taki problem wychodzi od razu.
To jest tylko wybrane różnice między językami C++ a Python. Podsumowując, Python posiada łatwiejszy dostęp do prostszych w użyciu funkcji - w dodatku bez załączania bibliotek. Ponadto oferuje więcej funkcji-wytrychów niż C++, zważając na pojawiające się na maturach zadania. Python jest znacznie szybszym w nauce językiem i znacznie ułatwia pisanie matury. Odpowiadając na pytanie Python czy C++, polecałbym wybrać zloty środek. Wybrać Pythona jako język maturalny, nawet jeżeli mamy już doświadczenie z C++em (nawet lepiej - szybciej nauczymy się Pythona, czy innych języków!). Nie warto jednak rezygnować z C++. Warto się uczyć C++ dodatkowo lub ewentualnie sięgnąć po język C, aby mieć później łatwiejszy start na studiach, czy przy nauce nowych języków. Są to nadal języki powszechnie używane w wielu dziedzinach, od programowania gier po tworzenie oprogramowania satelitów komunikacyjnych.