Aplikacje Windows pracuję w C ++ od około 10 lat. Niedawno zacząłem zagłębiać się w niektóre projekty Linuksa i nie mogę znieść, jak jestem nieproduktywny ...
Szybko się uczę i od pewnego czasu używam Linuksa jako podstawowej platformy. Czuję się bardzo dobrze z powłoką, zasadami systemu operacyjnego i graficznym interfejsem użytkownika. Ale jeśli chodzi o rozwój, wydaje mi się, że wróciłem do szkoły.
Gdy tylko otworzę jakiś większy projekt, utknąłem. Większość z nich jest oparta na plikach makefile, więc w zasadzie, kiedy próbuję nawigować nimi za pomocą QT lub CodeBlocks, w najlepszym wypadku mogę korzystać z intellisense dla poszczególnych plików. I większość zmiennych czasowych wyciek z zakresu.
Potem jest kwestia przejścia do definicji, która wydaje się nieistniejąca, spróbuj dołączyć do jakiegoś większego projektu z sourceforge i utkniesz na kilka dni, ponieważ nawigacja do definicji jest tak trudna ... grep -r "this_def" . --include "*.cpp" --include "*.h"
wydaje się taka powolna i niezdarna.
A potem debugowanie gdb działa, ale bez względu na to, co robię, wydaje się, że minęły lata świetlne od debugera WinDbg lub VisualStudio.
Te rzeczy sprawiają, że jestem zdesperowany, chcę pisać kod, ale to idzie tak wolno ... Zaczynam myśleć, że programiści Linuksa uczą się definicji funkcji na pamięć i analizują kod oczami, ale nie mogę uwierzyć, że to więc.
Czy ktoś przez to przeszedł? Czy brakuje mi czegoś, co mogłoby zwiększyć produktywność?
Odpowiedzi:
Co ciekawe, okresowo mam ten sam problem w przeciwnym kierunku. Jestem przede wszystkim programistą UNIX, ale okresowo muszę przenosić pliki do systemu Windows. Nie mogę powiedzieć, ile razy chciałem wyciągnąć włosy, ponieważ nie mogę znaleźć odpowiedniego pola wyboru dla opcji kompilatora ukrytej na jednej z 35 stron ustawień preferencji dla projektu. Wolę po prostu otworzyć plik proj i sam dodać kod XML.
W obu kierunkach sekretem jest cierpliwość i nauka zestawu narzędzi dla platformy, na której próbujesz pracować. Oczywiście będziesz sfrustrowany, nowy i nieznany, a ty zostaniesz przywrócony do statusu początkującego od nowa. Nie da się tego uniknąć.
W twoim konkretnym przypadku istnieje kilka dodatkowych narzędzi, o których powinieneś wiedzieć. Pierwszym z nich jest DDD , interfejs GUI dla gdb. Nie jest tak elegancki jak Visual Studio, ale będzie trzymał twoją rękę. Jednak naprawdę poleciłbym gryźć kulę i zająć się poznawaniem tajników gdb. W rzeczywistości, jeśli jesteś zwykłym użytkownikiem, nie ma dużej różnicy między zapamiętywaniem poleceń do wpisania a zapamiętywaniem okna dialogowego, które musisz wyświetlić, aby zmienić ustawienie.
Musisz także wiedzieć o narzędziach takich jak CScope i CTags . Jako że możesz się oprzeć, sugerowałbym naukę VIM lub EMACS . Dobrze integrują się z narzędziami tagów, o których właśnie wspomniałem. Jeśli wejdziesz między wrony, musisz krakać jak i one. Możesz znaleźć rozszerzenia dla VIM i EMACS, które wykonają dla Ciebie uzupełnianie kodu. Moje własne doświadczenie z narzędziami oferującymi uzupełnianie kodu jest takie, że oszczędza trochę pisania, ale ogólnie pisanie jest łatwe. Myślenie jest tym, co trudne. Twoja opinia może się różnić, szczególnie jeśli masz zespół cieśni nadgarstka.
Co do marki. Make jest wprawdzie okropny, ale prawdopodobnie będziesz musiał go po prostu wyssać i nauczyć się.
źródło
Rozwijaj w systemie Windows, wdrażaj w systemie Linux.
Obejmuje to przeprowadzanie testów jednostkowych zarówno na własnym komputerze (Windows), jak i na serwerze kompilacji (Linux).
Jako efekt uboczny nauczysz się pisać przenośny kod.
Kolejnym pozytywnym efektem jest to, że używanie różnych kompilatorów generuje więcej ostrzeżeń, a tym samym wykrywa więcej błędów.
AKTUALIZACJA : Wszystkim fanom Linuksa oceniającym odpowiedź: Nie twierdzę, że każdy powinien rozwijać się w systemie Windows! Ale korzystanie z platformy, którą znasz bardzo dobrze, jest bardziej produktywne niż poświęcanie dużo czasu na naukę nowej platformy.
źródło
Twój problem został rozwiązany wiele razy w świecie Linuksa, jednak w przeciwieństwie do narzędzi Windows / Microsoft, nie zostanie przekazany na srebrnej płycie z przystawką dodatków. Być może trzeba będzie popracować, aby go zdobyć.
Używam edytora komercyjnego (Visual Slick Edit, który jest uważany za drogi przez tych, którzy nie cenią swojego czasu tak bardzo jak ja) do tego dokładnego problemu. Eclipse z wtyczką CDT to droga typu open source, która ma uzasadnione szerokie grono zwolenników. (Nie jest to dla mnie dobre, ponieważ często potrzebuję wsparcia ADA)
Czego nie robię, spróbuj przekształcić makefile w jakiś projekt. Korzystam z wbudowanych systemów IDE i ręcznie dodam / usuwam pliki w razie potrzeby. Jestem pewien, że mógłbym to zrobić, ale ten czas prawdopodobnie nie jest tego wart. W tym celu znalazłem zaćmienie nieco mniej użyteczne niż Slickedit (co mogło łatwo (i prawdopodobnie zmieniło się) od czasu ostatniego spojrzenia)
Linux ma szeroką gamę narzędzi, faceci, którzy wiedzą, że dobrze mnie wykonują we wszystkich aspektach edycji, mają odnośniki, itp., Po prostu stroma krzywa uczenia się. Jestem pewien, że Emacs może to wszystko zrobić, chociaż nigdy tego nie używał.
źródło
Jeśli chodzi o to, co jest warte, w Linuksie masz lepsze systemy do budowania niż zwykła stara marka GNU (która często idzie w parze z okropnym autoconfem ), na przykład omake i wiele innych (
cmake
,scons
...).źródło
jedna sugestia dotycząca tego, jak żmudne jest używanie grep do wyszukiwania kodu: skonfiguruj aliasy bash w pliku .bashrc. Więc to tylko jedno polecenie:
prawdopodobnie są lepsze sposoby na napisanie polecenia, ale pomysł jest taki sam. Chcesz wyszukać kod? napisz alias o nazwie searchCode. Pamiętaj, że chociaż są one uciążliwe i skomplikowane, narzędzia uniksowe mogą być również używane, aby ułatwić Ci życie.
źródło
Mój 2c jako ktoś, kto opracował C ++ na obu platformach i lubi je oba.
1) Pliki makefile są bolesne - najlepszą radą, jaką mogę ci dać, jest próba przejścia na inny system kompilacji, jeśli to możliwe.
2) Do edycji i przeglądania kodu istnieje kilka całkiem przydatnych narzędzi. Jasne, nie są zintegrowane, ale tak naprawdę nie ma to znaczenia, jeśli chodzi o wykonanie zadań. vim + ctags + grep po prostu cię tam zaprowadzą. Oczywiście są też IDE, ale szczerze mówiąc nie podobało mi się to, czego próbowałem: Eclipse + CDT, KDevelop, Code :: Block. Możesz jednak dojść do innych wniosków.
3) W celu debugowania wystarczy trzymać się wiersza polecenia gdb. Oczywiście, jeśli chodzi o funkcje, jest dość opóźniony w stosunku do Windbg, ale w większości przypadków jest w porządku. Graficzne nakładki (ddd, KDbg) były dość wadliwe, kiedy je wypróbowałem, ale znowu rzeczy mogły się zmienić :)
Najważniejsze jest - tak, musisz włożyć trochę wysiłku w naukę, ale potem będziesz tak samo produktywny jak w systemie Windows.
źródło
gdb
od wewnątrzemacs
(na Linuksie) i to bardzo pomaga.Do wszystkich pozostałych dobrych porad, które już otrzymałeś, chciałbym dodać kilka linków, odpowiednio do ack i pss .
Są one skierowane do programistów, którzy muszą szczególnie dbać o kod źródłowy, starając się ulepszyć w stosunku do grep.
źródło
Świetne odpowiedzi. Dodając do nich,
Kiedy wykonałem ten ruch, popełniłem błąd, próbując wskoczyć do kodu bez należytej staranności w systemie kompilacji GNU, który wrócił, by mnie ugryźć, gdy chciałem wprowadzić zmiany w kodzie. Poświęć kilka dni, aby zrozumieć, jak działa zestaw narzędzi AutoMake / AutoConf / Make, po tym będziesz bardzo szybki.
Jeśli chodzi o narzędzia - Eclipse + CDT / GDB + DDD to naprawdę długa droga.
źródło
Oto kilka porad, które ułatwią Ci działanie:
źródło