Programuję (obsesyjnie) od 12 roku życia. Mam dość dużą wiedzę na temat różnych języków, od asemblera, przez C ++, aż po Javascript, a także Haskell, Lisp i Qi. Ale wszystkie moje projekty zostały wykonane przeze mnie.
Uzyskałem dyplom inżynierii chemicznej, a nie CS lub inżynierii komputerowej, ale po raz pierwszy tej jesieni będę pracować nad dużym projektem programistycznym z innymi ludźmi i nie mam pojęcia, jak się przygotować. Korzystam z systemu Windows przez całe życie, ale ten projekt będzie bardzo uniksowy, więc niedawno kupiłem komputer Mac, mając nadzieję na zapoznanie się ze środowiskiem.
Miałem szczęście uczestniczyć w hackathonie z kilkoma przyjaciółmi w ubiegłym roku - z obu kierunków CS - i co ciekawe, wygraliśmy. Ale zdałem sobie sprawę, że pracując z nimi, ich przepływ pracy był bardzo różny od mojego. Użyli Git do kontroli wersji. Nigdy tego nie używałem, ale od tego czasu dowiedziałem się o tym wszystkiego. Użyli również wielu frameworków i bibliotek. Musiałem się dowiedzieć, czym Rails był z dnia na dzień podczas hackatonu (z drugiej strony nie wiedzieli, co to jest leksykalne określenie zakresu lub zamknięcie). Cały nasz kod działał dobrze, ale nie rozumieli mojego, a ja nie rozumiałem ich.
Słyszę odniesienia do rzeczy, które robią prawdziwi programiści na co dzień - testy jednostkowe, recenzje kodu, ale mam tylko niejasne pojęcie o tym, co to jest. Zwykle nie mam wielu błędów w moich małych projektach, więc nigdy nie potrzebowałem systemu śledzenia błędów ani testów dla nich.
A ostatnią rzeczą jest to, że dużo czasu zajmuje mi zrozumienie kodu innych ludzi. Zmienne konwencje nazewnictwa (które różnią się w zależności od każdego nowego języka) są trudne (__mzkwpSomRidicAbbrev) i uważam, że luźne sprzęganie jest trudne. Nie oznacza to, że nie luźno łączę różne rzeczy - myślę, że jestem w tym całkiem dobry do własnej pracy, ale kiedy pobieram coś takiego jak jądro Linuksa lub kod źródłowy Chromium, żeby na to spojrzeć, spędzam godziny próbując aby dowiedzieć się, w jaki sposób łączą się te wszystkie dziwnie nazwane katalogi i pliki. Grzechem programistycznym jest odkrywanie koła na nowo, ale często uważam, że szybsze jest samodzielne napisanie tej funkcji niż spędzanie godzin na analizie biblioteki.
Oczywiście ludzie, którzy zarabiają na życie, nie mają tych problemów i sam muszę do tego dojść.
Pytanie: Jakie kroki mogę podjąć, aby rozpocząć „integrację” ze wszystkimi innymi?
Dzięki!