Poprzez ten artykuł chcę zachęcić ludzi do rozpoczęcia programowania w systemie operacyjnym GNU/Linux (od tej pory nazywanym po prostu „Linux”). Studenci, którzy dopiero zaczynają swoją przygodę z programowaniem; nauczyciele, którzy uczą lub mają rolę w uczeniu programowania nowych studentów; hobbyści, którzy programują w Windows – proszę was wszystkich, abyście przeczytali dalej i dali Linuksowi naprawdę dobrą próbę na co najmniej tydzień. Jeśli zgodzisz się, że programowanie w Linuksie jest rzeczywiście lepszym doświadczeniem niż poprzednia platforma, to zostań z nim i ciesz się wolnością, którą cieszy się reszta z nas!
Aby wyjaśnić wszelkie nieporozumienia, nie mam na celu nakłonienia cię do pisania kodu dla samego jądra Linuksa (choć to może nastąpić w miarę wzrostu twojego komfortu i biegłości w programowaniu). Zamiast tego, mówię o pisaniu programów w przestrzeni użytkownika – włączając w to ćwiczenia, zadania domowe i prace projektowe, które większość kursów informatyki zawiera. Zanim zaczniemy, tutaj jest zastrzeżenie: ten artykuł zawiera silne osobiste opinie i przekonania; w żaden sposób nie zamierzam być obraźliwy, ale niektóre z tych pomysłów po prostu mogą być warte wypróbowania – przez ciebie – aby zobaczyć czy czujesz to samo!
Przeciwstawienie się mentalności
Powszechnie uważa się, że Linux jest 'trudny w użyciu'. Jasne, różni się od tego do czego przyzwyczaili się ludzie korzystający z Windowsa – ale nie jest trudny. Kiedy już przyzwyczaisz się do tych różnic, prawdopodobnie sam będziesz się śmiał z tego błędnego przekonania i powiesz innym jak bardzo ich wyobrażenie jest błędne!
Pomyśl tylko o wielu studentach informatyki, którzy zostali zainspirowani przez szum jaki wywołuje Linux od dłuższego czasu. Zdecydowanie zabrali się do nauki jego obsługi z własnej inicjatywy – zadając pytania na listach dyskusyjnych, forach i kanałach IRC. W ciągu kilku tygodni są gotowi zrobić coś więcej niż tylko poruszać się po systemie. Często, w ciągu miesiąca, czują się tak dobrze z Linuksem, że zaczynają zapoznawać innych z tym systemem operacyjnym. Zdumiewające? Może się tak wydawać – ale to tylko dlatego, że ci studenci byli zdeterminowani aby odkrywać i uczyć się, i zignorowali wołania „To trudne.”
Zawsze jest krzywa uczenia się zaangażowana, gdy ktoś nabywa nową umiejętność, a Linux nie jest wyjątkiem. Jeśli studenci są uczeni jak używać i programować w Linuxie, nie tylko się nauczą, ale również uznają to za proste. Będzie to dla nich naturalne – uczenie się czegoś czego wcześniej nie znali. „Linux jest trudny” jest współczesnym mitem, który musi zostać obalony. Jeśli jesteś nauczycielem, proszę zrób co do ciebie należy. Jesteś osobą na którą studenci patrzą z podziwem i jeśli pokażesz im właściwą drogę, będą podążać za twoim przykładem.
Uruchomienie Linuksa
Dobrze, kiedy już zdecydowałeś się używać Linuksa, jak się za to zabrać? Być może słyszałeś o wielu różnych linuksowych „distro” (zwanych również dystrybucjami): Ubuntu, Fedora, Debian i wiele innych. Dlaczego tak wiele „Linuksów”? Pozwól mi wyjaśnić. Technicznie rzecz biorąc, „Linux” to nazwa jądra (więcej informacji można znaleźć w tym artykule Wikipedii lub na oficjalnej stronie Linuxa). Ponieważ jądro samo w sobie jest mało użyteczne, narzędzia przestrzeni użytkownika z projektu GNU (włączając w to najbardziej powszechną implementację biblioteki C, popularną powłokę i wiele popularnych narzędzi UNIX-owych, które wykonują wiele podstawowych zadań systemu operacyjnego) zostały połączone z jądrem Linuksa, by stworzyć użyteczny system operacyjny. Graficzny interfejs użytkownika (lub GUI) używany przez większość systemów linuksowych jest zbudowany na bazie implementacji X Window System. Różne projekty wolnego oprogramowania i sprzedawcy tworzą różne kombinacje pakietów i funkcji, aby zapewnić różne doświadczenia z Linuksem dla różnych odbiorców – w ten sposób powstało wiele dystrybucji Linuksa.
Więc, której dystrybucji Linuksa powinieneś użyć? Ubuntu i Fedora obie indywidualnie uczyniły Linuksa bardzo przyjaznym dla zwykłych użytkowników komputera – do surfowania po Internecie, obsługi poczty elektronicznej i przetwarzania dokumentów. Każda z nich jest idealna do rozpoczęcia pracy.
Instalacja Linuksa może być nieco skomplikowana, szczególnie jeśli zamierzasz stworzyć system dual-boot, w którym będziesz mógł uruchomić Linuksa lub starego Windowsa. W przeciwnym razie, jest to całkiem proste: pobierz obraz CD (ISO), wypal go na płycie, uruchom komputer z niego i pozwól mu się zainstalować! Najlepszym sposobem na przeprowadzenie konfiguracji dual-boot za pierwszym razem jest skontaktowanie się z kimś w szkole, okolicy lub biurze, kto się na tym zna i poproszenie go o pomoc.
Istnieją również inne opcje, jeśli chcesz wypróbować Linuksa bez instalowania go, bez zastępowania Windows lub przeprowadzania konfiguracji dual-boot. Zobacz sekcję Radzenie sobie z praktycznymi aspektami pod koniec tego artykułu, aby zapoznać się z niektórymi z tych pomysłów.
The Ultimate Linux Newbie Guide jest dobrym punktem odniesienia, aby pomóc ci nauczyć się rzeczy samemu. W przypadku Linuksa, eksperymentalne podejście do nauki bardzo pomaga. Tak więc, zrób kopię zapasową swoich danych, i zacznij od tych płyt instalacyjnych jeśli nie możesz znaleźć nikogo kto mógłby ci pomóc. W dzisiejszych czasach większość dystrybucji Linuksa ma zainstalowane tylko podstawowe aplikacje i biblioteki – co prawdopodobnie nie wystarczy do potrzeb programistycznych.
Aby umożliwić łatwą instalację nowego oprogramowania, większość dystrybucji posiada menedżera pakietów (w świecie Linuksa oprogramowanie jest dystrybuowane w postaci „pakietów”), którego używasz do łatwego pobierania i instalowania nowego oprogramowania z Internetu. The Ultimate Linux Newbie Guide jest dobrym źródłem informacji na ten temat.
Aby ten artykuł był jak najbardziej użyteczny, postaram się być bardziej ogólny i unikać faworyzowania jakiejkolwiek konkretnej dystrybucji.
Wybór edytora tekstu
Nie będziemy używać zintegrowanego środowiska programistycznego (IDE), przynajmniej na początku. Będziemy to robić w prosty sposób: pisać kod za pomocą edytora tekstu, zapisywać go i kompilować/interpretować za pomocą odpowiedniego kompilatora/interpretera. W świecie Linuksa masz do wyboru wiele edytorów tekstu. Jeden z nich, taki jak gedit lub kwrite, na pewno będzie zainstalowany podczas instalacji Linuksa – możesz używać obu. Jeśli zainstalujesz dystrybucję taką jak Ubuntu, która posiada środowisko graficzne GNOME, wtedy będziesz miał już zainstalowany gedit. Jest to tak jak Notatnik, tylko bardziej użyteczny i bogaty w funkcje.
Programowanie w C/C++ w Linuksie
C jest zazwyczaj pierwszym językiem nauczanym przez wielu studentów w indyjskich szkołach inżynierskich i college’ach, więc najpierw przyjrzyjmy się jak programować w C w Linuksie. Zauważ, że kod C, który napiszesz w Linuksie będzie taki sam jak ten, który napiszesz w Windows/DOS, tak długo jak będziesz pisał kod ANSI C. Niektóre funkcje biblioteczne, takie jak te dostarczane przez conio.h
i graphics.h
, nie są częścią standardu ANSI. Stąd, nie będziesz mógł ich używać w Linuksie.
Kompilator C, którego używasz w Linuksie to GCC. Jest on częścią Kolekcji Kompilatorów GNU. Otwórz terminal i uruchom polecenie: gcc
. Jeśli zobaczysz coś takiego jak poniższe wyjście, oznacza to, że GCC jest już zainstalowane.
gcc: no input files
Jednakże, jeśli zobaczysz coś takiego jak „Command not found”, wtedy będziesz musiał zainstalować GCC używając menedżera pakietów.
Poza kompilatorem, będziesz również potrzebował biblioteki standardowej C, zwanej glibc
, aby poprawnie skompilować swoje programy C. Wpisz w locate glibc
i sprawdź wynik. Jeśli pokaże struktury katalogów w formie /foo/bar/glibc
lub podobnej, to masz glibc
zainstalowany; w przeciwnym razie musisz go zainstalować.
Okay, teraz, gdy potwierdziliśmy obecność edytora tekstu, kompilatora i biblioteki standardowej, napiszmy nasz pierwszy kod w C na Linuksie. Na potrzeby tego artykułu, utwórzmy podkatalog o nazwie 'codes' pod katalogiem 'home', w którym będziemy przechowywać cały nasz kod źródłowy.
Uruchom gedit i wprowadź ten prosty kod C, aby wypisać czynnik liczby:
#include<stdio.h>int main(int argc, char **argv){ int n, i,fact=1; printf("Enter a number for which you want to find the factorial:: "); scanf("%d", &n); for(i=1;i<=n;i++) fact=fact*i; printf("Factorial of %d is :: %dn", n,fact); return 0;}
Zapisz ten kod w podkatalogu codes z nazwą fact.c
. Uruchom swój program powłoki (terminal) i uruchom cd codes
aby przejść do tego katalogu. Gdy już tam będziesz, wydaj następujące polecenie:
gcc factorial.c
Po wykonaniu polecenia uruchom ls
i zobaczysz plik a.out
w bieżącym katalogu. Jest to plik wykonywalny twojego programu w języku C, skompilowany i połączony z odpowiednimi bibliotekami. Aby go wykonać, uruchom (zwróć uwagę na wiodący ./
, który jest niezbędny!):
./a.outEnter a number for which you want to find the factorial:: 5Factorial of 5 is :: 120
Gratulacje, właśnie napisałeś swój pierwszy program w języku C na Linuksa! To był zwykły C, który piszesz w DOSie lub Windowsie – żadnych niespodzianek! Trochę więcej o tym pliku a.out
: Jest to linuksowy odpowiednik pliku .exe, który zobaczyłbyś pod DOS/Windows; jest to wykonywalna forma twojego kodu. Jak być może już się domyśliłeś, ten plik nie może być wykonany w DOS-ie lub Windowsie, ponieważ jest w innym formacie.
Teraz, zamiast zmieniać nazwę pliku wykonywalnego za każdym razem, gdy kompilujesz, możesz określić nazwę pliku wyjściowego dla kompilatora:
gcc -o factorial factorial.c
Spróbuj jeszcze kilku programów z zajęć z programowania w C i struktur danych.
Język programowania C jest znaną książką programistyczną autorstwa Briana Kernighana i Dennisa Ritchie, która uczy programowania w języku C z silnym smakiem Linuksa. Dobrym pomysłem będzie wypróbowanie przykładów i programów ćwiczeniowych z tej książki, aby poznać programowanie w C w Linuksie.
Zapiszmy teraz nasz pierwszy program w C++ w Linuksie. Cykl kodowania, kompilacji i wykonywania jest bardzo podobny do tego w C, z wyjątkiem kompilatora, którego używamy, a którym jest g++
. Sprawdź czy jest już zainstalowany uruchamiając polecenie w terminalu, tak jak zrobiliśmy to dla gcc
. Następnie, użyj menedżera pakietów, aby sprawdzić, czy libstdc++
, standardowa biblioteka C++, jest zainstalowana (jeśli nie, zainstaluj ją). Gdy obie biblioteki są zainstalowane, otwórz gedit i wpisz ten prosty program C++:
#include<iostream>#include<string>using namespace std;int main(int argc, char **argv){ string s1="Hello"; string s2="World"; cout <<s1+" " + s2 << "n"; return 0;}
Zapisz ten plik jako string-demo.cxx
w podkatalogu codes.
Kompiluj i wykonaj plik:
g++ -o string-demo string-demo.cxx./string-demo
Wykonanie powyższego polecenia powinno spowodować wyświetlenie w terminalu następującego wyniku:
Hello World
Kod C++, który widzisz, to standardowy C++, z pominięciem .h
w plikach nagłówkowych. Pliki źródłowe C++ konwencjonalnie używają jednego z sufiksów .C
.cc
.cpp
.c++
.cp
, lub .cxx
.
Zapiszmy teraz prosty program w C++, który wykorzystuje klasy:
#include<iostream>using namespace std;class Circle{ float r; public: void init(float x) /* Inline function */ { r = x; } float area();};float Circle::area(){ return 3.14*r*r;}int main(int argc, char **argv){ float radius; Circle circle; cout << "Enter the radius of the circle:: "; cin >> radius; circle.init(radius); cout << "Area of the Circle:: "<<circle.area()<<"n"; return 0;}
Zapisz plik w podkatalogu codes jako class-demo.cxx
.
Kompiluj i wykonaj go:
g++ -o class-demo class-demo.cxx./class-demoEnter the radius of the circle:: 4Area of the Circle:: 50.24
Zakładając, że udało Ci się pomyślnie skompilować te programy, polecam teraz pójść dalej i napisać, skompilować i przetestować niektóre z Twoich zadań C/C++ i problemów przy użyciu gcc i g++. Jeśli napotkasz jakiekolwiek problemy, jesteś mile widziany do pingowania mnie.
Programowanie w Javie na Linuxie
Java jest prawdopodobnie kolejnym najczęściej nauczanym językiem w indyjskich szkołach i uczelniach po C/C++. Najlepszą częścią programowania w Javie na Linuksie jest to, że używasz tych samych narzędzi, których używałbyś na Windowsie – tak, Sun Java Development Kit.
Aby zainstalować JDK na Linuksie, pobierz instalator dla Linuksa z jego oficjalnej strony.
Wybierz plik .bin
, a nie *rpm.bin
, chyba że wiesz, co robisz. (Plik .bin
jest odpowiednikiem .exe
w systemie Windows). Po zakończeniu pobierania, w terminalu, cd
przejdź do katalogu, z którego został pobrany plik i użyj następujących poleceń:
chmod +x jdk-6u18-linux-i586.bin./jdk-6u18-linux-i586.bin
Nazwy plików powyżej mogą się różnić w zależności od wersji JDK, którą pobrałeś. Pierwsza linia czyni instalator wykonywalnym, a druga linia go uruchamia. Instalator powinien się teraz uruchomić i powinieneś zobaczyć „Sun Microsystems, Inc. Umowa licencyjna na kod binarny”.
Zaakceptuj licencję, a powinno rozpocząć się wydobywanie JDK. Gdy instalator zostanie zamknięty, powinieneś zobaczyć nowy podkatalog o nazwie 'jdk1.6.0_18′ w bieżącym katalogu. Jeśli jesteś zaznajomiony z programowaniem w Javie na Windowsie, powinno to być łatwo rozpoznawalne. Wewnątrz tego katalogu znajduje się podkatalog bin, który zawiera kompilator Javy (javac
), interpreter Javy (java
) i inne.
Z tym wszystkim jesteśmy gotowi; napiszmy nasz pierwszy program w Javie na Linuksie. Odpal gedit i napisz następujący kod Java, który pokazuje użycie tablicy liczb całkowitych:
import java.util.Random;class ArrayDemo { public static void main(String args) { int arr = new int; for(int i=0;i<10;i++) arr = (new Random()).nextInt(); for(int i=0;i<10;i++) System.out.println("Element at index " + i + "is::" + arr); }}
Zapisz kod do pliku ArrayDemo.java
, a następnie skompiluj i uruchom go w następujący sposób:
/home/amit/jdk1.6.0_18/bin/javac ArrayDemo.java/home/amit/jdk1.6.0_18/bin/java ArrayDemo
Zwróć uwagę na pierwsze dwa polecenia, w których podałem pełną ścieżkę do lokalizacji plików wykonywalnych javac i java. W zależności od tego, gdzie rozpakowałeś JDK, twoja ścieżka będzie się różnić.
Wykonanie drugiego polecenia powinno wyświetlić następujące dane w twoim terminalu:
Element at index 0is:: 480763582Element at index 1is:: -1644219394Element at index 2is:: -67518401Element at index 3is:: 619258385Element at index 4is:: 810878662Element at index 5is:: 1055578962Element at index 6is:: 1754667714Element at index 7is:: 503295725Element at index 8is:: 1129666934Element at index 9is:: 1084281888
Więc, w ten sposób możesz kompilować, uruchamiać, testować i debugować swoje programy w Javie.
OpenJDK
Artykuł o programowaniu w Javie w magazynie open source byłby niekompletny bez wspomnienia o OpenJDK. Dobrze, żebyś wiedział o tym projekcie. Jak już pewnie się domyślasz, jest to licencjonowana na GPL, otwarta implementacja Java Standard Edition – czyli kod źródłowy JDK, który tak dobrze znasz, jest teraz dostępny do wglądu, na wypadek gdyby coś Ci się w obecnym JDK nie podobało.
Czy to jest inna Java? Nie – piszesz ten sam kod Java. OpenJDK można zainstalować z menedżera pakietów w dystrybucji Linuksa (w niektórych dystrybucjach może być preinstalowany). Instrukcje instalacji są dostępne tutaj.
Radzenie sobie z praktycznymi aspektami
Z różnych powodów, wdrożenie Linuksa w całym laboratorium nie zawsze jest możliwe. W takich przypadkach dobrym pomysłem jest posiadanie w laboratorium jednej maszyny linuksowej, działającej jako serwer SSH; na innych systemach operacyjnych można zainstalować niezbędne oprogramowanie klienckie SSH, które umożliwi zdalne połączenie się z maszyną linuksową.
Maszyna ta powinna mieć stosunkowo dobrą konfigurację, w zależności od tego, ilu studentów będzie jej używać do kodowania i kompilacji – dwu- lub czterordzeniowy procesor z 4 GB pamięci RAM i dysk twardy o pojemności co najmniej 320 GB to dobry pomysł. Dla Windows, Putty jest powszechnie używanym klientem SSH. W przypadku pisania kodu w systemie Windows i kopiowania go na maszynę linuksową w celu skompilowania i uruchomienia, należy również pobrać ze strony program pscp
, który pozwala na kopiowanie plików z maszyny lokalnej na linuksowy serwer SSH.
Jeśli potrzebujesz, aby sesja GUI z serwera linuksowego była dostępna na maszynie Windows (na przykład podczas programowania GUI), to zbadaj serwer OpenNX (do zainstalowania na maszynie serwera linuksowego) i klienta NoMachine NX dla Windows. Maszyna o powyższej konfiguracji powinna obsłużyć około 10 sesji użytkowników, zanim zacznie zwalniać. Dostrojenie menedżera pulpitu (użyj lekkiego jak LXDE lub XFCE) i użycie lżejszych edytorów jak GVim do pisania kodu, to dobry początek.
Inną opcją (która nie wymaga dedykowanej maszyny serwerowej z Linuksem) jest zainstalowanie Linuksa w maszynie wirtualnej na twoim biurku. Może się to również okazać przydatne na domowym komputerze. VirtualBox jest oprogramowaniem do wirtualizacji, które po zainstalowaniu na twoim systemie Windows pozwoli ci na stworzenie wirtualnej maszyny, wewnątrz której będziesz mógł zainstalować Linuksa bez zakłócania instalacji Windows. Oczywiście będziesz potrzebował trochę wolnego miejsca na dysku (8 GB lub więcej) na plik dyskowy maszyny wirtualnej. W tym przypadku nie musisz nagrywać ISO instalacyjnego Linuksa na płytę CD – możesz po prostu poinstruować VirtualBox, aby używał pliku obrazu ISO jako płyty włożonej do napędu CD-ROM maszyny wirtualnej.
Jest to również dobry sposób, aby przećwiczyć instalowanie Linuksa i przekonać się, jakie to proste. Dla Ubuntu, w szczególności, jest Wubi, który pozwala zainstalować (i odinstalować) Ubuntu jak każda inna aplikacja Windows, w prosty i bezpieczny sposób, „za pomocą jednego kliknięcia”. Pliki Ubuntu są przechowywane w jednym folderze na dysku Windows, a opcja uruchamiania Ubuntu jest dodawana do menu bootloadera Windows.
Jednakże dostęp do dysku twardego jest nieco wolniejszy niż w przypadku instalacji na dedykowanej partycji. Jeśli twój dysk Windows jest bardzo pofragmentowany, wydajność będzie się dalej pogarszać. Hibernacja nie jest obsługiwana przez Wubi. Ponadto, system plików Wubi jest bardziej podatny na twarde restarty (wyłączenie zasilania) i awarie zasilania niż normalna instalacja na dedykowanej partycji, która zapewnia bardziej wytrzymały system plików, który lepiej znosi takie zdarzenia.
Ogólnie, programowanie w Linuksie będzie wymagało przyzwoitego poziomu znajomości pracy z poleceniami powłoki. Zapoznaj się z pracą z powłoką. Postaraj się zminimalizować użycie myszy 🙂
Używanie ulubionego IDE w Linuksie
Jeśli używasz jakiegoś IDE do swoich potrzeb programistycznych, to powinna to być świetna wiadomość, że dwa bardzo popularne IDE – NetBeans i Eclipse – mają również wersje dla Linuksa, i oba z nich wspierają programowanie w C, C++ i Javie. Dla dystrybucji Linuksa opartych na GNOME, Anjuta DevStudio jest kolejnym potężnym IDE dla C, C++ i Javy (a także innych języków). Wszystkie trzy powinny być dostępne w menedżerze pakietów twojej dystrybucji.
Kończąc ten artykuł, chciałbym zachęcić cię do podjęcia szczerego wysiłku, abyś przyjął Linuksa do programowania. To o wiele lepszy świat do bycia w nim. Chętnie odpowiem na wszelkie pytania/wątpliwości/komentarze/sugestie, które możesz mieć, dotyczące tego artykułu.
Źródła
- graphics.h jak funkcjonalność przy użyciu GCC
- GNU Compiler Collection
- by Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language
- Bjarne Stroustrup, The C++ Programming Language
- Neil Matthew, Richard Stones, Beginning Linux Programming
- StackOverflow to forum społeczności, na którym możesz umieścić swoje pytania związane z programowaniem. Jest ono neutralne językowo, co czyni je bardzo atrakcyjnym.
- Podstawowe wprowadzenie do SSH
- VirtualBox. Podręcznik użytkownika.
- yolinux.com jest dobrym źródłem ogólnych informacji o Linuksie.