Muszę pogodzić te 2 fakty:
- Nie czuję się komfortowo pracując na Linuksie;
- Muszę opracować oprogramowanie dla systemu Linux.
Trochę tła: mam ponad 10-letnie doświadczenie w programowaniu w systemie Windows (prawie wyłącznie C / C ++, ale także niektóre .NET), byłem użytkownikiem FreeBSD w domu przez około 3 lata (potem musiałem wrócić do Windows) i nigdy nie miałem dużo szczęścia z Linuksem. A teraz muszę opracować oprogramowanie dla systemu Linux. Potrzebuję planu.
W systemie Windows możesz oderwać się od znajomości języka programowania, interfejsu API, na którym kodujesz, swojego IDE (VisualStudio) i kilku bardzo podstawowych narzędzi do rozwiązywania problemów (Depends, ProcessExplorer, DebugView, WinDbg). Wszystko inne przychodzi naturalnie.
W systemie Linux jest to zupełnie inna historia. Skąd, do diabła, miałbym wiedzieć, jakie biblioteki DLL (przepraszam, obiekt współdzielony) zostałyby załadowane, jeśli odsyłam do niego z wtyczki Firefox? Jaki jest odpowiednik wstawienia __asm int 3 / DebugBreak () w źródle i uruchomienia programu, a następnie umożliwienia systemowi operacyjnemu wywołania debuggera? Dlaczego kompilacje wersji Hell korzystają z czegoś, o nazwie appLoader, podczas gdy kompilacje debugowania działają w jakiś inny sposób? Co najgorsze: jak udostępnić środowisko programistyczne dla systemu Linux?
Biorąc pod uwagę, że nienawiść zwykle wiąże się z niewystarczającą wiedzą, co byś polecił? Nie mam nic przeciwko Emacsowi i GCC. Muszę kształcić się jako administrator / użytkownik Linuksa i muszę nauczyć się odpowiednich narzędzi do rozwiązywania problemów (strace jest fajne, btw), odpowiedników tych wymienionych powyżej.
Czy muszę robić Linuksa od zera? Czy też muszę po prostu przeczytać kilka książek (przeczytałem „Środowisko programowania UNIX” Kernighana i „Advanced Programming ...” Stevensa, ale muszę nauczyć się czegoś bardziej praktycznego)? Czy też muszę mieć dystrybucję Linuksa na moim komputerze domowym?
man
jest twoim przyjacielem. Chciałbymman nm
iman ld
jako punkt wyjścia.Odpowiedzi:
Ciekawy może być artykuł Dynamiczne łączenie w Linuksie i Windowsie, który wyjaśnia, w jaki sposób każdy system operacyjny wykonuje dynamiczne łączenie. Artykuł Ścieżki przeszukiwania bibliotek współużytkowanych wyjaśnia, w jaki sposób znajdują się biblioteki. Także statyczne, współdzielone dynamiczne i ładowalne biblioteki Linux są bardzo dobre. Zaletą bibliotek Linuksa jest to, że mają lepszą obsługę wersjonowania i mają kilka wersji biblioteki niż Windows (AFAIK, nie robię Windowsa). Zobacz w tym celu Interfejs biblioteki w wersjach Solaris i Linux . Artykuły te powinny naprawdę zapewnić ci bibliotek.
GDB jest bardzo potężny, dobrym wprowadzeniem jest prawdopodobnie samouczek gdb RMS . Możesz przeczytać o warunkowych punktach przerwania. Aby
__asm(int 3)
zobaczyć odpowiedniki, zobacz pytanie Ustaw punkt przerwania w kodzie C lub C ++ programowo dla gdb w systemie Linux .Książka Advanced Unix Programming autorstwa Marc Rochkind to obowiązkowa lektura, IMHO. Ma wiele przykładów i obejmuje wszystkie tematy POSIX / SUS w bardzo dobrze wyjaśniony sposób. To najlepsza książka na ten temat, jaką do tej pory przeczytałem.
Ale aby ułatwić Ci życie, polecam użycie interfejsu API wysokiego poziomu, który streszcza dla Ciebie różne rzeczy, takie jak Qt. Ułatwia także pisanie na wielu platformach.
Wykonanie Linuxa od zera pomaga zrozumieć, w jaki sposób składa się system Linux, ale myślę, że nie poprawia to znacznie twojej wiedzy na ten temat z punktu widzenia programistów. To sprawia, że czujesz się bardziej komfortowo z Linuksem, ponieważ dowiadujesz się, jakie części są w środowisku Linux (a częściowo także dlaczego ). Linux nie będzie dla ciebie dużym blackboxem po pracy z Linuksem od podstaw.
źródło
Jeśli chcesz
strace
, nie zapomnijltrace
: odpowiednik wywołań bibliotecznych.Ponadto tak, polecam Linux From Scratch . Jest to dobre ćwiczenie w opracowywaniu podstawowych elementów systemu operacyjnego i ich zgodności.
Aby uzyskać nowoczesne, kompletne leczenie referencyjne programowania systemu, polecam wybranie interfejsu programowania systemu Linux .
źródło
Mac OS X jest jak Mercedes; jest najładniejszy i najczystszy, ale kosztuje dużo. Windows jest jak Toyota; doprowadzi cię tam iz powrotem.
Linux jest jak hot rod; Ludzie mogą się w to zagłębić, rozebrać i złożyć ponownie. Linux nie jest dla kogoś, kto chce po prostu korzystać z komputera; jest dla ludzi, którzy kochają komputery. Ludzie, którzy nie kochają komputerów, powinni trzymać się od nich z daleka.
Rzeczy, których nauczyłeś się w systemie Windows, nie będą dobrze tłumaczyć, nie. Ale widzisz elementy wewnętrzne i obserwujesz pracę silnika.
Postaraj się wziąć Linuksa jako nową zabawkę, z którą możesz się bawić i czołgać się, aby zobaczyć, co się dzieje. Rzeczy, które są łatwe w systemie Windows, są trudniejsze w systemie Linux; rzeczy, które są niemożliwe w systemie Windows, są możliwe w systemie Linux.
Jeśli kochasz komputery, możesz pokochać Linuksa; jeśli nie kochasz komputerów, dlaczego w ogóle programujesz?
źródło
Co powiesz na rozwój w Mono w Monodevelop? Dzięki temu możesz zacząć od łatwego ponownego korzystania z platformy .NET.
źródło
To jest zniechęcające, gdy patrzysz na to od samego początku (tak jak gdybyś był programistą Linuksa, którego zadaniem było tworzenie oprogramowania Windows). Poradziłbym sobie z tym jednym problemem naraz.
Co najważniejsze, pozostaw wszystkie subiektywne opinie przed drzwiami. I nie, nie musisz być guru, aby rozwijać się w Linuksie, wiem wystarczająco dużo, aby się poruszać, i nie wszystko - ale czuję się dobrze z tym ...
źródło
The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.
Jak długo zajęło Ci opanowanie pracy w środowisku Windows. Możesz powiedzieć, że to proste, dopiero co zacząłeś. Ale wcześniej miałeś kilka lat pracy z oknami. Jak długo korzystałeś z systemu Windows, zanim napisałeś swój program pięści. To było dla mnie 8 lat, chociaż używam Linuksa prawie wyłącznie od 5 lat. Jestem teraz bardziej biegły w Linuksie niż w Windowsie. Powinieneś dać sobie przynajmniej tyle czasu na zapoznanie się z nowym systemem.
Zacznij od listy aplikacji, z którymi nie możesz żyć bez okien i poszukaj alternatyw w świecie * nix. http://alternativeto.net/ i dalsze sekcje Wikipedii mogą być pomocne tutaj.
Oto lista alternatywnego oprogramowania, które może okazać się bardzo przydatne. Oto kilka alternatyw dla rzeczy, o których wspomniałeś.
Inne przydatne zasoby do przenoszenia z jednego systemu do drugiego
O tym, jak zostać lepszym użytkownikiem zaawansowanym lub administratorem, zapoznaj się z tymi zasobami
Wygląda na to, że minęło trochę czasu, odkąd spojrzałeś na świat * nix. Poleciłbym niektóre nowe wydania dystrybucji z Fedory , Suse , Debiana lub mojej preferowanej stacji roboczej Ubuntu .
Prawdopodobnie możesz teraz uciec, nie znając wewnętrznych elementów systemu i tylko podstaw, takich jak w systemie Windows. Nie chciałbym po prostu uciec od minimum. Jeśli widzisz Linuksa jako narzędzie, które faktycznie pomaga ci w rozwoju, a nie tylko system operacyjny, w którym się rozwijasz, byłoby pomocne.
Linux From Scratch będzie znacznie ważniejszy, jeśli programujesz dla Linuksa, jest to bardzo specyficzny i techniczny sens. IE, który chcesz opracować dla jądra lub port, na którym programujesz, na super komputer z systemem Linux. Byłoby to jednak bardzo przydatne. Myślę, że prawdopodobnie mógłbyś to zostawić na kilka miesięcy, podczas gdy po prostu próbujesz zacząć korzystać z Ubuntu. Ubuntu będzie tak blisko rzeczy, które działają w świecie Mac i Windows.
źródło
Myślę, że odpowiedziałeś na pytanie w pytaniu:
„W systemie Windows możesz oderwać się od znajomości języka programowania, interfejsu API, na którym kodujesz, swojego IDE (VisualStudio) i kilku bardzo podstawowych narzędzi do rozwiązywania problemów (Depends, ProcessExplorer, DebugView, WinDbg). Wszystko inne przychodzi naturalnie. „
Zgaduje, co w Linuksie można uniknąć, znając język programowania, interfejs API (lub kilka), swoje IDE (Eclipse lub NetBeans, nawet Geany, Emacs lub vim, jeśli chcesz) oraz kilka podstawowych narzędzi do rozwiązywania problemów ( gdb, narzędzia do śledzenia, kłaczki, htop, ps).
Masz dużo wiedzy zainwestowanej w ekosystem programowania Windows. Znaczna część tego (mam nadzieję) abstrakcyjnej wiedzy (co to jest kompilator, debugger, wspólna biblioteka, proces, wątek? Co robią?), Która łatwo będzie tłumaczyć, gdy nauczysz się różnych narzędzi. Niektóre są specyficzne dla domeny (z jaką biblioteką DLL jest połączone, gdy dodam X do projektu?), Ale nawet przejście z jednej klasy języka do drugiej w systemie Windows wymagałoby nowej nauki.
Zainstaluj Ubuntu lub Fedorę na maszynie wirtualnej, przeczytaj niektóre samouczki C ++ Hello World w Eclipse lub NetBeans oraz niektóre debugowania w samouczkach Eclipse / NetBeans i pozwól naturalnej zdolności twojego mózgu do przejęcia kontroli. Przetłumaczy pomysły, jeśli się zrelaksujesz i po prostu uruchomisz.
źródło
Nauczyłem się Uniksa ogólnie, czytając strony podręcznika. Powinieneś przynajmniej je przejrzeć. Tak, mam na myśli ich wszystkich. Metodę, której używam, jest cd do katalogów stron podręcznika i atakowanie ich pojedynczo.
Używam tego:
... zastępując .1 numerem sekcji, którą czytasz, .2, .3 itd. Naciśnij ctrl-Z ctrl-C, aby wyjść z pętli. Twój przebieg może się różnić, jeśli twoja dystrybucja linuksa przechowuje rzeczy inaczej, tzn. Nie jako cmdname.1.gz.
Wystarczy przejrzeć opisy i więcej, jeśli jest to coś interesującego. Sekcje 1, 2 i 3 są najważniejsze dla programisty. 1 obejmuje ogólne polecenia użytkownika, które obejmują narzędzia kompilacyjne i różne narzędzia kryminalistyczne. 2 to wywołania systemowe, a 3 to wywołania biblioteczne.
źródło
xman
jako bardziej „przyjazny” interfejs. Wybierz sekcję, kliknij stronę podręcznika, przeczytaj ją. Spłucz, powtórz.Nie zmuszaj się do robienia czegoś, czego nie lubisz. Użyj systemu Windows jako środowiska programistycznego, napisz przenośny kod, skompiluj go krzyżowo dla systemu Linux i testuj go tylko od czasu do czasu na maszynie wirtualnej.
źródło
Nie jestem pewien, czy to działa na platformach, ale na języki programowania, uznałem, że warto pomyśleć o tym, jak zapoznałem się z tymi, w których jestem dobry, i spróbować odtworzyć te doświadczenia i działania dla tego, co „ próbuję się uczyć.
Może coś na tych liniach?
Generalnie rzecz biorąc, moje zainteresowanie i zaufanie do GNU / Linuksa wynika z tego, że jestem o wiele bardziej podatny (i wymagał majsterkowania we wczesnych dniach) niż Windows. Musiałem zadzierać z wieloma rzeczami, aby wszystko działało, a to pomogło mi się wiele nauczyć. Teraz jest znacznie lepiej, ale wszystkie te godziny pomogły.
źródło
Byłem jednym z dwóch, którym powierzono coś podobnego, ale innego. Pracuję w okręgu szkolnym K-12, a system biznesowy (HR, finanse itp.) Migruje z bazy danych HP3000 / TurboImage na platformę Linux / MS SQL. Czuję się dobrze ze stroną MS SQL. Ale nie po stronie Linuksa. Oboje jesteśmy po stronie administratora, a nie po stronie programowania. Programowanie odbywa się na zewnątrz - zewnętrzna aplikacja biznesowa dla organizacji K-12.
Wziąłem 5 weekendowe wprowadzenie do Linuksa (Redhat) w weekendy - odbywało się to głównie w trybie wiersza poleceń - i było to dla mnie warte czasu, jako szybki start w Linuksie. Oczywiście YMMV w zależności od klasy / nauczyciela.
Wspomniałeś „Najgorsze: jak udostępnić środowisko programistyczne dla systemu Linux?”? Ponieważ znasz już system Windows, zdecydowanie sugeruję, abyś otrzymał kopię vmWare Workstation. Dzięki temu możesz zachować Windows jako stację roboczą i zainstalować Linuksa jako systemy gościa - usuwaj, płucz i powtarzaj w razie potrzeby. Gdy uzyskasz dobrą konfigurację, uważam, że możesz ją wykonać, ale nie mogę powiedzieć na pewno, które wersje są w stanie wykonać migawkę. A jeśli wybierzesz ścieżkę vmWare Workstation, aby umożliwić wiele konfiguracji programistycznych - zdecydowanie zwiększ pamięć.
Nie mam również nic przeciwko poleceniu gościom CentOS jako systemu operacyjnego Linux. Z tego, co rozumiem, to jak RedHat bez brandingu i / lub sprzedaży i / lub kosztów wsparcia. Nie jestem zaznajomiony z innymi wersjami Linuksa, więc nie mogę dać wkładu w te.
Greg
źródło
Lubię obie platformy i ze względu na wszystkie różnice w interfejsie użytkownika i ekosystemie deweloperów uważam, że są bardziej podobne niż inne pod przykryciem. W rzeczywistości dla większości koncepcji systemu Windows można znaleźć równoważne koncepcje systemu Linux, przeszukując Internet.
Powiedziawszy to, zdecydowanie sugeruję nauczenie się, jak robić rzeczy w „uniksowy sposób”. Użyj raczej linii poleceń niż błędnego interfejsu GUI (mówię tu głównie o gdb); nie szukaj IDE i naucz się zamiast tego korzystać z zestawu specjalistycznych narzędzi. Wybierz dobrego edytora (wskazując na vima) i naucz się go dobrze. Przeczytaj, jak to
make
działa, nawet jeśli nie planujesz zostać ekspertem. Może nawet polubisz Linuksa. Jest przyjazny dla maniaków i zapewnia dobrą zabawę.źródło
Zastanów się: kiedyś nie wiedziałeś nic o Windowsie, ale nauczyłeś się go i z czasem poczułeś się komfortowo.
Następnie MS zmieniło dowolny system programowania, w którym czujesz się komfortowo, na .NET i nie wiedziałeś już nic o DLLS, COM i czymkolwiek, musisz nauczyć się takich rzeczy jak zestawy, GAC, domeny aplikacji. Nauczyłeś się tych ok.
Dlaczego więc martwisz się, że możesz zrobić to samo z Linuksem?
W sieci jest mnóstwo samouczków „na początek” dla wszystkich środowisk programistycznych. Teraz mówisz GCC, więc zamierzam założyć programowanie w C ++. Zdobądź Eclipse, zainstaluj CDT (narzędzia programistyczne) na swojej platformie Eclipse (Eclipse to uniwersalne IDE, możesz go używać do C ++, PHP, Java, cokolwiek - ale musisz zainstalować narzędzia dla swojego języka ponieważ tak naprawdę nie chciałbyś, aby wszystko było wstępnie zainstalowane jak VS i zajmuje 3 dni do instalacji :))
W Internecie dostępne są łatwe w obsłudze samouczki. IBM ma tutaj jeden, który jest dość kompleksowy.
Narzędzia do debugowania ... Eclipse ma to wbudowane ( samouczek ), ale możesz znaleźć wiele narzędzi takich jak te, o których wspomniałeś, po prostu przeszukuj Internet, a znajdziesz wiele opcji. Zajmie ci to trochę czasu, aby dowiedzieć się, jak odczytać zrzut podstawowy (na przykład w przeciwieństwie do zrzutu użytkownika Windows), ale dostaniesz się tam.
Warto również założyć blog z własnymi doświadczeniami, nie tylko pozwoli ci przypomnieć sobie o tym, co zrobiłeś (np. Skonfiguruj zaćmienie, jak ci się podoba, zapomnisz, kiedy będziesz musiał to zrobić ponownie w rok), ale pomoże to innym w twojej sytuacji.
źródło
Nie sądzę, że musisz robić Linuksa od zera. Gdybym był tobą, wybrałbym Ubuntu. Jest wygodniejszy i oparty na Debianie dostępnych jest wiele materiałów technicznych.
Jeśli chcesz zagłębić się w Linuksa, Gentoo to dobra opcja. Wymaga to sporo przeczytania o konfiguracji i jądrach, ale daje również całkiem funkcjonalny system do pracy w systemie af
źródło
Google „Sztuka programowania w Uniksie” i przeczytaj ją. IMO, twoją główną trudnością jest inna filozofia, a ta książka jest do tego znakomita.
Przedstawia także niektóre nieoczywiste, ale technicznie bardzo ważne różnice między systemami * n * x i Windows - są to kluczowe czynniki pozwalające zrozumieć, dlaczego wykonywanie innych czynności ma sens w systemie Linux.
źródło
Pierwsze pytanie, które zadam, brzmi: co chcesz rozwinąć? Jeśli jest to aplikacja oparta na gui, może to różnić się od konieczności napisania czegoś w rodzaju rozszerzenia jądra.
W przypadku aplikacji GUI uważam, że najłatwiejszą metodą jest użycie Qt, który ma własne środowisko programistyczne (Qt-Creator) i będąc wieloplatformowym, pozwala nauczyć się tylko jednego API, którego można używać w systemie Windows / Linux / OSX, a nawet tworzenie aplikacji mobilnych. Podobnie jak Visual Studio w systemie Windows lub XCode w OSX, możesz tworzyć i układać okna i elementy z edytora graficznego, a interfejs API jest bardzo łatwy do pobrania z mnóstwem przykładowych aplikacji.
Jeśli potrzebujesz uzyskać więcej niższego poziomu, to kiedy już poznasz sposób poruszania się po Linuksie w linii poleceń, umiesz przeglądać katalogi, manipulować plikami, rozumieć uprawnienia itp., Albo zacznij czytać, jak skompilować prosty program z gcc, jak połączyć pliki i uruchomić plik wykonywalny, a następnie jak debugować za pomocą gdb.
Alternatywnie, jeśli wydaje się to trochę zniechęcające, możesz pobrać Eclipse lub inne IDE, ale prawdopodobnie na dłuższą metę poczujesz się bardziej komfortowo z Linuksem, jeśli najpierw umieścisz czas i wysiłek w wierszu poleceń.
źródło