Witam, jaki język programowania wybrać do nauki pod systemem Linux? Ma być nowoczesny i przyszłościowy, przypasował mi C#, ale pod Linuksem średnio działa ten Monodevelop, co myślicie Vala? Składniowo podobny do C# i do tego młodszy. https://wiki.gnome.org/Projects/Vala
http://www.chip.pl/blogi/linuxblog/2012/03/dlaczego-programowac-na-linuksa
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
Uwaga wymieniam jakie języki pod Linuxa:
BASH - albo coś podobnego do skryptów powłoki
Python - do naszych skryptów, prostych appek lub większych skryptów
ANSI C - klasyka i czasem się przydaje - oprócz tego Linux jest napisany w C i C to jest podstawa w informatyce.
W C jest dużo bibliotek fajnych.
Java - do aplikacji biznesowych, korporacyjnych, serwerow naszych jakiś czy nawet apek użytkowych (patrz JavaFX).
Pod Linuxem zacznij od BASHa.
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
C nie jest łasy na bugi. A Java - no jest stara, ale dobra. Nie ma obecnie niestety lepszej alternatywy. Pytanie czy chcesz być produktywny na tej produkcji czy modny, powolony i hipsterski.
- Rejestracja:około 10 lat
- Ostatnio:27 minut
- Lokalizacja:Tam gdzie jest (centy)metro...

- Rejestracja:prawie 11 lat
- Ostatnio:około 7 lat
- Postów:957
A co chcesz konkretnego programować? Twoje pytanie brzmi "jaki samochód do jeżdżenia?". Owszem, parę osób powie ci, że jakiś mercedes lub tesla, ale czy będzie to odpowiadało twoim potrzebom lub możliwościom intelektualnym - nie wiadomo.
Na Linuksie możesz programować niemal w każdym języku, podobnie jak po drogach możesz jeździć niemal każdym samochodem.
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
No to Qt albo JavaFX
W twoim przypadku to nie język jest problemem, a algorytmy i ich nieumiejętność implementacji.
Dobrze można w c na javie pisać znając tylko bajtkod jvm, albo korzystając z NDK.
Sprytny programista zbuduje sobie takie narzędzia w swoim języku, że ogarnie każde zadanie.
W linuxie wszystko jest plikiem, a każdy język implementuje tą właściwość to bezproblemów można robić co się chce.
Trudne pisanie w C++ dopuściły takich bugów w Ubuntu.
http://www.dobreprogramy.pl/Raport-o-bledach-w-Ubuntu-sam-z-trywialnym-bledem-pozwalajacym-na-zdalny-atak,News,77993.html
datdata napisał(a):
LISP jest stary, a ciągle nic lepszego nie wymyślili.
jest Lisp na JVM, czyli Clojure
jest też a la Lispowy Racket (Czyli dobre stare Scheme)
Rust, Go, D i Vala to nowoczesne języki programowania w których można już pisać systemy informatyczne, jak alternatywa dla C++17. Linus Torvalds powiedział kiedyś, że jak by miał przepisywać Linux od nowa musiał by do tej roboty nająść murzynów. HaikuOS napisany jest już w C++ i kilka innych nowych systemów też. Ciekawi mnie to który kompilowany język programowania, zastąpi wysłużone C/C++. Niektórzy autorzy książek o C, jak Zed A. Saw twierdzą że C jest złym językiem programowania, trudno się w nim piszę i łatwo popełnić w nim błędy. Do tego trudno w nim utrzymać dobry jakościowo kod, ale jak na razie nikt nie będzie nic przepisywał. Linux, BSD, Solaris, Minix pisane są w C. Windows w C i C++, Apple od OS X korzysta z kodu, jąder FreeBSD, NetBSD i raczej też po części z C/C++ lub Objective-C?
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
HaikuOS napisany jest już w C++ i kilka innych nowych systemów też.
przecież *BSD i Linux też mógł zostać napisany w C++, bo już wtedy istniał. Tylko oni znali się na rzeczy i zauważyli, że ten język, którego nawet sam autor do końca nie ogarnia a komunikaty o błędach kompilacji są niezrozumiałe się do tego nie nadaje. zresztą czy kompilator C++ jest tak przenośny jak kompilator języka C? -chyba nie. Tutaj masz co Linus Torvalds sądzi o C++ : http://harmful.cat-v.org/software/c++/linus
Ciekawi mnie to który kompilowany język programowania, zastąpi wysłużone C/C++.
żaden nie zastąpi, bo za dużo softu w tym powstało. te języki to jak mnożenie i dzielenie w matematyce. Można wymyślać logarytmy i nowe stwory, ale sprawdzone dobre podstawy zostawiamy te same. Chociaż co do C++ to trudno powiedzieć, bo ten język z coraz to nowymi standardami ewoluuje w coraz straszniejszego stwora - czyt. jest skomplikowany i na za dużo rzeczy pozwala - dodają mnóstwo nowości a podwaliny stanowi C z lat 80 i ma nadal zwykłe wskaźniki, to nie może wyglądać dobrze :/
trudno w nim utrzymać dobry jakościowo kod
pierwszy lepszy kawałek kodu jądra Linux: https://github.com/torvalds/linux/blob/master/kernel/kthread.c
czy to wygląda twoim zdaniem na słaby jakościowo kod?



slen + 2
to chyba wszyscy wiemy
Faktycznie C++ popsuła całą ta obiektowość, ciężko go już ogarnąć. Ale nie jesteś pewna czy nie powstanie jakiś super fajny język programowania do pisania systemów. Nie twierdzę że Go, D czy Rust ale zupełnie inny który będzie się do tego nadawał. Po tym co robi Linux ostatnio z systemd i dołączanie do niego Microsoftu, nie podoba mi się to zbytnio. Na szczęście mam alternatywy z FreeBSD, Open Indiana, czy HaikuOS. Ale są jeszcze systemy pisane w ASM czy inne w Rust:
www.redox-os.org/
https://websetnet.com/pl/redox-os-operating-system-written-rust/
http://toaruos.org/
http://sortix.org/



- Rejestracja:prawie 22 lata
- Ostatnio:15 minut
- Postów:6648
Sądzę, że obecne systemy operacyjne mają już tyle kodu napisanego, że nie opłaca się przepisywać tego do innego języka, czy pisać od zera. I nie chodzi mi tylko o czas potrzebny na to, ale też o pracowników, którzy mieliby to robić. To jest spore przedsięwzięcie.
Jak długo się rozwijał i wciąż rozwija Android? Jak długo Windows, Linux, czy Mac OS. Bardziej opłaca się wspierać i udoskonalać istniejący system, niż zaczynać wszystko od początku.
16 letni C# to nie taka nowinka, potrzeba kilka GB aby to zainstalować uruchomić. No i jest uzależniony od jednego Microsoftu. Programiści Delphi, Pascala też nie myśleli że Microsoft to porzuci. Dlatego jak dla mnie .Net odpada. Przegrał na polu mobilnym i teraz w czasach gdzie wszystko idzie w chmurę, siec lub mobile - też przegra na desktopie.


- Rejestracja:około 11 lat
- Ostatnio:ponad 3 lata
- Postów:459
Python albo Elixir.
Python, bo już go masz na linuxie. Jest uniwersalny, ma masę rozszerzeń, ma wygodną składnię, jest mega czytelny (może przypominać C++, w tym że ma tradycyjne pętle czy instrukcje sterujące).
Elixir, bo ma składnię podobną do Rubiego, a możliwości Erlanga.

Python [...] ma podobną do C++ składnię
że co proszę słucham?
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
na pewno pętle z goto, (+ https://github.com/torvalds/linux/blob/master/kernel/audit.c)
@spartanPAGE tylko trochę widać, że nie są to bezmyślne skoki a wydzielono możliwe wspólne (dla wielu różnych warunków)
zakończenia,wyjścia z funkcji na koniec i skacze się do nich przez goto. Czy to jest takie straszne?
Jak Ty byś wydzielił te bloki? Do osobnych funkcji albo plików? - to byłoby tego strasznie dużo :/
Przykładowo taka jak poniższa funkcja - czy to aż tak tragicznie wygląda? - chyba nie. Zwłaszcza patrząc na koniec funkcji gdzie mamy możliwe jej zakończenia a w środku, jak coś - tylko się do nich skacze przez goto. goto - rzecz normalna, naturalna i szczera
static struct audit_buffer * audit_buffer_alloc(struct audit_context *ctx,
gfp_t gfp_mask, int type)
{
unsigned long flags;
struct audit_buffer *ab = NULL;
struct nlmsghdr *nlh;
spin_lock_irqsave(&audit_freelist_lock, flags);
if (!list_empty(&audit_freelist)) {
ab = list_entry(audit_freelist.next,
struct audit_buffer, list);
list_del(&ab->list);
--audit_freelist_count;
}
spin_unlock_irqrestore(&audit_freelist_lock, flags);
if (!ab) {
ab = kmalloc(sizeof(*ab), gfp_mask);
if (!ab)
goto err;
}
ab->ctx = ctx;
ab->gfp_mask = gfp_mask;
ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask);
if (!ab->skb)
goto err;
nlh = nlmsg_put(ab->skb, 0, 0, type, 0, 0);
if (!nlh)
goto out_kfree_skb;
return ab;
out_kfree_skb:
kfree_skb(ab->skb);
ab->skb = NULL;
err:
audit_buffer_free(ab);
return NULL;
}
definiowanie makr wewnątrz funkcji jak i same funkcje > 100 linii kodu to przykład pięknej jakości.
może po to żeby nie trzeba było skakać do góry, żeby zobaczyć definicję makra. Tylko od razu widać.
100 linii kodu - jakby stosowali się do rad wujka Boba to pewnie do teraz ten system byłby dalej od ukończenia niż GNU Hurd
Wiadomo też, że pattern-matching ze switchami w C bardzo pozytywnie wpływa na ilość kodu
https://github.com/torvalds/linux/blob/master/kernel/audit.c#L803-L819.
no a jak to lepiej zrobić?
Wiadomo też, że im mniej dzielimy funkcje, tym łatwiej się je czyta https://github.com/torvalds/linux/blob/master/kernel/audit.c#L960-L1237
no dobra, ale nie zawsze tak łatwo wydzielić z dużej funkcji mniejsze funkcje i nie zawsze większa ziarnistość kodu zwiększa czytelność.
scrolla używa się łatwo a tak to trzeba byłoby skakać po plikach i pamiętać abstrakcje z poszczególnych plików
o magic numbers nie wspominając, bo czemu slen + 2 to chyba wszyscy wiemy
dobra bez przesady dodali komentarze
new_len = slen + 3; /* enclosing quotes + null terminator */
albo
skb_put(skb, slen + 2); /* don't include null terminator */
moim zdaniem tak łatwo jest komentować, krytykować i coś oceniać. a może zrób pull requesta i pokaż, że da się lepiej?
ciekawe jak wygląda kod Windowsa - oni nawet tego nie pokażą. aa co to za kod, który jest ładny piękny ale nikomu się nie przydaje?
A tutaj kod jest znośny i w dodatku przydaje się światu.

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
- Go: czyżby następca C z dużo większą biblioteką standardową? przenośny i ładny składniowo? programowanie sieciowe included? mikroserwisy?
- Rust: ponoć bezpieczny, czas pokaże
- Julia: do obliczeń naukowych - chociaż to indeksowanie od 1 to jakiś WTF, efekty kompilacji i praca rozproszona bardzo obiecujące
- Scala: eee, hmmm, programowanie reaktywne? Sam nie wiem do czego
- Elixir: programy sieciowe, mikroserwisy
Stare które warto znać:
- Java - programowanie aplikacji biznesowych
- Groovy - do testów i małych narzędzi około-JVM
- Python - taki bash do obliczeń naukowych
- bash - pseudo-język do automatyzacji narzędzi
- C++11 - obliczenia naukowe w wersji produkcyjnej
- PHP - postawienie forum czy sklepu w sieci (do bloga nie potrzebny)
- JavaScript - żeby nie psioczyć gdy kalendarzyk nie chce się pokazać w enterprise-grade Java
Mam poważne wątpliwości czy warto:
- C++17: miejscami trudno rozpoznać C++
- R: niby popularne, ale skoro są Julia, Python i C++ to po co jeszcze jeden?
R: niby popularne, ale skoro są Julia, Python i C++ to po co jeszcze jeden?
Kwestia preferencji, R jest innym językiem niż Julia/Python/C++, ma świetne IDE (R Studio), jeżeli są libsy w dziedzinie której potrzebujesz nie widzę sensu stawiać go poniżej innych.
Java jest świetna, Dart powinien działać. Z takich "żeby być lepszym programistą" Haskell/Ocaml/Scheme, ale ogólnie to większość języków działa na linuxsie, właśnie często na Windowsie są problemy (wykluczając wynalazki ms - one są "specjalne"). Tak samo jest z grami komputerowymi - starsze gry często prędzej odpalisz na WINE niż na nowszych windowsach (już widywałem rozwiązania w FAQ - zainstaluj linuxa i odpal na WINE).

- Rejestracja:prawie 20 lat
- Ostatnio:3 dni
Scala: eee, hmmm, programowanie reaktywne? Sam nie wiem do czego
Do wszystkich aplikacji typu klient-serwer, zwłaszcza jeśli klientów jest dużo i/ lub serwer składa się z wielu mikroserwisów w chmurze.
Poza tym podejście funkcyjne (Scala jest językiem łączącym OOP i FP) nawet w tworzeniu GUI się sprawdza - przykładem jest React i jego ekosystem.
- Rejestracja:prawie 11 lat
- Ostatnio:ponad 2 lata
- Postów:320
Golang
Sporo ciekawego softu w tym powstaje a nie jakies CRUDy. Niekoniecznie w Polsce ale czesto open source.

- Rejestracja:prawie 12 lat
- Ostatnio:11 dni
@karolinaa czyli na obronę stwierdzenia, że w C trudno w nim utrzymać dobry jakościowo kod
masz dobra bez przesady dodali komentarze
? ;)

No więc tak Vala i Ceylon mimo że są od Red Hata warto zobaczyć. Obecnie na Linux słuszny wybór to Python i ładnie się prezentuje Golang. Kto wie, być może kiedyś Google zastąpi nim Javę. W między czasie można się uczyć C najnowszy standard i Rust, jak chcesz coś szybkiego napisać, chociaż znając Go obejdzie się bez tych dwóch. To tylko kwestia która składnia Ci przypasuje. Powstał też kompilowany język programowania ze składnią podobną do Pythona i Ruby - kto odgadnie jego nazwę?
Tu programiści dyskutują na temat tych języków programowania i twierdzą, że najlepszym językiem programowania do pisania kerneli systemowych jest Rust.
https://www.quora.com/Of-the-emerging-systems-languages-Rust-D-Go-and-Nim-which-is-the-strongest-language-and-why
Ulubionym językiem programowania programistów również był Rust
http://stackoverflow.com/research/developer-survey-2016#technology-most-loved-dreaded-and-wanted
Go też przyjaźnie
https://d3ansictanv2wj.cloudfront.net/29-future-lang-adb360de1cdbce64a546e34141ca7bbb.png
karolinaaW linuxie wszystko jest plikiem
w większości, ale nie wszystko. Jeszcze jakiś czas temu według wikipedii mogłeś zrobić sobiecat /dev/urandom > /dev/dsp
(OSS) aa teraz jest już ALSAaplay -c 2 -f S16_LE -r 44100 /dev/random
. Na pierwszy rzut oka widać, że odchodzenie od świętych zasad UNIXa tylko komplikuje. Szkoda, że w Linuxie nie ma parcia na przestrzeganie tej zasady.