Pracuję nad tworzeniem oprogramowania od ponad 10 lat i zaczyna mi przychodzić na myśl, że rzadko mogę tworzyć cokolwiek „nowego”. Zdaję sobie sprawę, że „nowy” jest niejasnym terminem, ale zdefiniowałbym to jako coś od oczywistego nowego projektu na dużą skalę do nowej dużej funkcji w istniejącym projekcie (powiedz coś, co wymagałoby zastanowienia się nad jego projektem, a to może ukończenie 2 tygodni lub dłużej). Może zgrubna wytyczna jest czymś nowym, jeśli wymaga pisemnej specyfikacji. Myślę, że większość programistów wie o czym mówię - jesteś w strefie i piszesz mnóstwo kodu w szybkim tempie.
W każdym razie, wracając do tego, co zrobiłem, szacuję, że mniej niż 10% mojego czasu spędzam na „nowej” pracy. Są rzeczy takie jak „dostosowanie istniejącego systemu do pracy w tym nowym środowisku”, co z pewnością wymaga dużo planowania, ale faktyczne kodowanie i „nowe rzeczy” sprowadzają się do wprowadzania drobnych zmian w wielu miejscach w całym kodzie. Podobnie w przypadku małych żądań funkcji - jeśli wiem, co robić, często można je ukończyć w niecałą godzinę, a jeśli tego nie zrobię, to tylko czytanie kodu i zastanawianie się, co robić (co mnie frustruje, ponieważ się uczę znacznie lepiej, robiąc, a nie czytając).
Ogólnie mam wrażenie, że tak naprawdę przez większość czasu nic nie tworzę. Przyjąłem, że tak było w większości miejsc - nowy produkt pojawiał się dość szybko, w tym momencie wszyscy byliby podekscytowani i szybko rozwalali kod, ale po uruchomieniu przechodzi w tryb konserwacji, w którym kilka późniejszych zmian zostanie uznanych za „nowe i kreatywne”.
Czy się mylę? Czy dokładnie opisuję większość zadań związanych z programowaniem, czy też większość programistów uważa, że często tworzą nowe rzeczy?
Odpowiedzi:
Dużą część pracy oprogramowania stanowi konserwacja. Oczywiście żaden menedżer ds. Rekrutacji nie powie Ci o tym, ale z pewnością tak jest.
źródło
Tak, twoje postrzeganie jest dokładne. To absolutny truizm, że o wiele więcej czasu, pieniędzy i wysiłku przeznacza się na utrzymanie systemów niż na tworzenie nowych systemów. Oczywiście przydział czasu większości programistów to odzwierciedli.
Jednym z powodów tego jest to, że wiele osób, kiedy robią „nowe i kreatywne”, robią to źle, więc utrzymanie systemu jest trudne (jest to szczególnie prawdopodobne, jeśli sami nigdy nie przeprowadzili konserwacji - nikt, kto stale pracował nad małymi projektami typu greenfield, nie może naprawdę twierdzić, że jest kompetentny).
Innym (prawdopodobnie większym) powodem jest to, że większość systemów jest zaprojektowana tak, aby były ciągle użyteczne, nie tylko na jednorazowe wydarzenie. Więc przyzwyczajają się znacznie dłużej niż ich opracowanie. Ale w tym czasie wymagania zmieniają się (i są dodawane) z powodu zmian w ustawodawstwie, rynku, badaniach, użytkownikach, cokolwiek. A to oznacza prace konserwacyjne.
źródło
Starsze systemy są udane. Przeżyli początkowy proces rozwoju, w którym 50% projektów kończy się niepowodzeniem (nawet po ponownym zdefiniowaniu sukcesu!). Przeżyli zmieniające się otoczenie biznesowe. Prawdopodobnie przetrwali około dziesięciu propozycji młodych naiwnych programistów, aby ponownie napisać całość w Javie lub czymkolwiek, co było wówczas modne. Mieli szczęście, że niezależnie od działu, firmy lub agencji, która obsługiwała oprogramowanie, przetrwały różne cięcia budżetowe, reorganizacje, fuzje itp.
Prawdopodobnie mniej niż 5% napisanego oprogramowania będzie nadal działać dziesięć lat później.
Zamiast więc narzekać na ten temat, traktuj to jako przywilej pracy nad taką darwinowską historią sukcesu i okazją, aby dowiedzieć się, co działa w prawdziwym świecie i dlaczego.
źródło
Terminem często używanym w przypadku nowych projektów, które nie są zależne od starszego rozwoju, jest projekt typu greenfield . Czasami możesz zobaczyć ten termin na liście ofert pracy - wiedząc, że zaczynasz od zera, zamiast odziedziczyć czyjeś nieudane przedsięwzięcie, może sprawić, że praca będzie bardziej atrakcyjna.
Udane projekty oprogramowania zwykle poświęcają dużo więcej czasu na utrzymanie niż na tworzenie nowych projektów, więc nie jest zaskakujące, że nie można robić wielu całkowicie „nowych” rzeczy.
Również stworzenie czegoś zupełnie nowego to dużo pracy. Nawet w projekcie typu greenfield prawdopodobnie wybierzesz różne narzędzia: platformę, kompilator, frameworki, biblioteki itp. Jak tylko dokonasz tych wyborów, nałożyłeś pewne ograniczenia na swój projekt. Nie oznacza to, że nie wykonujesz już nowej pracy, tylko że „nowy” jest tutaj terminem względnym. Stąd nie jest duży krok, aby dodać funkcję lub moduł do istniejącego projektu jako „nowy”, nawet jeśli nie nazwałbyś go projektem typu greenfield.
źródło
To zależy od poszukiwanej pracy.
Tylko raz pracowałem dla firmy produkującej wyłącznie oprogramowanie, w której pracowałem nad ich pojedynczą, pozłacaną aplikacją w małym zespole startowym.
Poza tym pracowałem dla firm technologicznych, które potrzebowały oprogramowania do obsługi wewnętrznych badań i rozwoju lub produktów zewnętrznych.
Plusem jest to, że mogę zbudować kompletne produkty od początku do końca i właściwie zbudować to, czego chcę. Czasami możesz również wypróbować nowsze technologie, niż gdybyś utknął, dodając funkcje do istniejącej wiodącej aplikacji na rynku.
Minusem jest to, że jesteś częścią kosztów, a nie częścią produktu. Miałem już projekty, ponieważ „nie zajmujemy się oprogramowaniem” / „oprogramowanie nie jest podstawową działalnością” = to niesamowite, jak firmy myślą, że mogą sprzedać obrabiarkę o wartości 100 000 USD bez oprogramowania do jej obsługi!
źródło
Zamiast postrzegania starszego kodu jako ciągłego sprzątania czyichś bałaganów, spójrz na to jako okazję do pracy nad wieloma nowymi projektami.
Pomyśl o tym, każda nowa funkcja dodana do systemu to mały projekt sam w sobie. Nadal musisz zastosować cały SDLC, aby upewnić się, że poprawnie wykonałeś zadanie. Jasne, prawdopodobnie otrzymałeś specyfikację tej funkcji, ale zwykle nie było żadnych drobnych szczegółów, więc to do ciebie należy analiza problemu, jak pokazano, zaprojektowanie najlepszej metody zastosowania zmiany, przetestowanie jej, zakodowanie, a następnie zwolnij go z powrotem do systemu kontroli wersji i prawdopodobnie utrzymaj go w przyszłości.
Z mojego doświadczenia wynika, że często nie dostajesz się do pracy na całkowicie zielonym polu, a często, gdy masz na to szczęście, możesz spodziewać się, że zobaczysz projekt przez dużą część jego konserwacji, a może nawet okres użytkowania produktu lub przez cały czas pracy u danego pracodawcy. Wynika to z faktu, że Twoje intymne doświadczenie z produktem oznacza, że stajesz się repozytorium wiedzy, a przejście do innych rzeczy może być postrzegane jako kosztowne. Kiedy zaczynasz od istniejącego produktu, dzieje się tak dlatego, że pracodawca niedawno stracił zasób lub potrzebuje więcej zasobów na projekt, a jego firma musi upewnić się, że nie spowoduje to zbyt dużej straty z inwestycji w oprogramowanie . Taka jest rzeczywistość bycia inżynierem oprogramowania.
Pracuję w IT od prawie 22 lat, a 15 z nich jako programista. Przez cały ten czas stworzyłem tylko około 5 nowych produktów. Większość czasu spędziłem na utrzymywaniu tych produktów w dłuższej perspektywie lub na utrzymywaniu cudzych produkt. Każdy z nich dał mi wyzwania i problemy do rozwiązania, a każdy został potraktowany nie tylko jako duży projekt, którego jestem tylko częścią, ale także jako OGROMNA seria mikroprojektów do ukończenia.
To zadziwiające, jak małe ćwiczenia umysłowe mogą całkowicie zmienić twoje postrzeganie i czerpanie radości z codziennej pracy, którą wykonujesz. ;-)
źródło
Myślę, że wiele zadań związanych z programowaniem obejmuje ulepszanie istniejącego produktu lub dostosowanie istniejącego kodu do nowego klienta lub rynku.
To nie jest tak naprawdę „konserwacja”. Na przykład VMWare właśnie wydała wersję 8, jest to znacząca aktualizacja ich głównego produktu. Podejrzewam, że kilku programistów, którzy wykonali tę pracę, było tam, kiedy napisano pierwszy wiersz kodu dla VMWare. Zbudowali swoją główną aktualizację na kodzie napisanym przez facetów, którzy dawno się przeprowadzili.
W Workplace Beta pojawia się pytanie, jak działa 20% osobisty system projektów Google .
Jestem pewien, że Google zorientowało się, że najlepsi programiści chcą być obecni przy tworzeniu nowych produktów programowych i w końcu znużą się latami dodawania drobnych funkcji i ulepszania GUI do następnego wydania.
Mając 20% projektów, spekuluję, że programista Google nie będzie miał nic przeciwko ulepszaniu projektów Google, ponieważ nadal może czerpać radość z bycia tam na początku czegoś nowego.
źródło
Spędzisz czas na tworzeniu nowej funkcjonalności i zmienianiu funkcjonalności istniejącego kodu w celu dostosowania do nowej specyfikacji.
Inni nazywają to utrzymaniem, ale to okropny termin. Jest to przeprojektowanie i refaktoryzacja lub ponowne kodowanie oprogramowania w celu dostosowania go do nowej idei tego, co program powinien zrobić.
źródło
Powiedziałbym, że zależy to od firmy, w której pracujesz.
Moją pierwszą pracą była firma zajmująca się oprogramowaniem księgowym, której głównym produktem był system ERP, konkurujący na mniej więcej tym samym poziomie co Great Plains lub Peachtree (tak jak w przypadku przejścia z QuickBooks lub na boki, gdy masz dość zaciemnionego schematu GP lub cokolwiek innego myślałeś, że jest źle z PT, a następnie całkowicie wycofałeś się z poziomu do pakietu takiego jak SAP). Zadanie polegało na konserwacji w 99,99%, zdefiniowanej jako naprawianie błędów i dodawanie „drobiazgów”, bez zasadniczej zmiany sposobu działania oprogramowania ani możliwości. Odszedłem z firmy, gdy dyrektor generalny chciał zrobić pierwszą zmianę systemu, co byłoby fajne, gdyby nalegał na kilka funkcji projektowych, które są wyraźnymi anty-wzorami, takich jak wewnętrzna platforma (pozwalająca na wysoki stopień dostosowania programu, po prostu dając klientowi głupiego VS Designer,
Moja następna praca po tym była firmą kontraktową, która „rozwijała się pod klucz”; system, który podał klient, został zbudowany od podstaw, sprzętu i oprogramowania, a następnie, po zakończeniu projektu, wszystko zostało przekazane klientowi, który mógł albo sam go utrzymać, albo zachować usługi firmy za miesięczną opłatą. Moja praca polegała na opracowaniu jednego z tych dużych projektów, więc podczas gdy tam pracowałem, prawie wszystko, co zrobiłem, nie istniało przed rozpoczęciem. Nawet wtedy rozwój jest z natury iteracyjny; zawsze dodajesz do tego, co już masz (nawet jeśli to, co masz, jest niczym), i musisz unikać i naprawiać problemy z regresją (nowe rzeczy niszczą stare). A kiedy projekt przejdzie w stan „gwarancji”,
Moje obecne zadanie powróciło do rozwoju wewnętrznego dla firmy ochroniarskiej, która wykorzystuje monitorowanie wideo i sprzężenie audio w celu weryfikacji sygnału alarmowego i innych usług „wirtualnej ochrony”. To pole szybko rośnie i wciąż się rozwija; cały czas pojawia się na rynku nowy sprzęt, rejestrowani są nowi klienci, którzy chcą, abyśmy robili nowe rzeczy, a istniejące produkty nie spełniają już wymagań UL i rządowych. 99% tej pracy to „integracja”; pisząc nowe oprogramowanie, które nigdy wcześniej nie istniało, aby jeden nowy, ale istniejący wcześniej sprzęt lub oprogramowanie działał z innym prawdopodobnie wcześniejszym, istniejącym sprzętem lub oprogramowaniem, abyśmy mogli robić nowe rzeczy za pomocą obu.
źródło
Powiedziałbym, że zależy to w dużej mierze od charakteru twojej roli.
Należę do małego zespołu i dlatego muszę utrzymywać i wspierać wszystko, co tworzę.
5 lat temu większość tego, co zrobiłem, było „nowe” - teraz powiedziałbym, że utrzymanie istniejącego kodu zajmuje co najmniej połowę mojego czasu, a kolejne 25% to „nowe” wersje istniejących systemów.
Ale jeśli pracowałeś wyłącznie jako programista z zespołem, aby zająć się konserwacją i wsparciem po wydaniu kodu, technicznie wszystko byłoby „nowe”. Jeśli możesz znaleźć pracę, w której utrzymanie własnego kodu nie jest wymagane, weź ją!
źródło
To zależy, jak niebezpieczne jest twoje stanowisko pracy: ;-)
Jeśli pracujesz dla nowej firmy, która opracowuje nowe produkty z dużym ryzykiem, że firma przetrwa, prawdopodobnie tworzysz wspaniałe nowe produkty.
Jeśli pracujesz dla starej firmy, która ma stabilną pozycję na rynku, bardziej prawdopodobne jest, że będziesz kodować w trybie konserwacji ;-).
Tworzenie nowego oprogramowania jest zawsze bardzo kuszące . Prawda jest trudna, aby zrobić to we właściwy sposób . Wykonanie możliwego do utrzymania kodu nie jest łatwym zadaniem.
Jeśli zastanawiasz się nad tymi tonami aspektów, musisz napisać dobry kod: prawidłowe rejestrowanie, właściwe monitorowanie i gromadzenie statystyk, opisowy projekt, który jest wydajny i pomaga nawet nieznanym osobom w zaangażowaniu się w Twój projekt, dokumentowanie, automatyczne testowanie i rozwój oparty na testach.
Niewiele osób robi to dobrze, więc musimy zachować kod i dopracować go do właściwego stanu. ;-)
Dobra wiadomość jest taka, że jeśli jesteś w firmie wystarczająco długo, możesz mieć wpływ na sposób pisania nowego kodu :-)
źródło
Niezależnie od tego, czy zajmujesz się głównie konserwacją, czy też nie, przynajmniej częściowo kontrolujesz. W moim przypadku większość mojej pracy przez ostatnie 15 lat to nowy rozwój. To dlatego, że szukam pracy, które pozwolą mi dokonać nowego rozwoju. Nie jestem wykonawcą i generalnie nie zajmuję się tworzeniem stron internetowych. Prawie zawsze pracowałem dla małych pracodawców i zwykle pracuję w niszowych obszarach (tworzenie graficznego interfejsu użytkownika, narzędzia kontroli jakości, narzędzia programistyczne, rynki pionowe).
Widziałem także i doświadczyłem z pierwszej ręki, że najlepsi programiści w zespole zazwyczaj (choć nie zawsze) dostają najlepsze prace. Skoncentruj się więc na byciu najlepszym programistą w swojej firmie, a zobaczysz, że pojawią się nowe rozwiązania.
źródło
Rozwój utrzymania jest trudnym zadaniem, trudniejszym pod wieloma względami niż nowy rozwój. Z mojego doświadczenia wynika, że pracodawcy lubią utrzymywać programistę w zakresie konserwacji, szczególnie jeśli są w tym dobrzy. Znalezienie dobrych programistów zajmujących się konserwacją starszych technologii jest trudniejsze niż znalezienie kogoś, kto może pracować z najnowszą technologią.
Pracowałem w firmie, która została podzielona na zespół ds. Produktu, który był w całości utrzymany, oraz zespół projektowy, który był całkowicie nowy. Po obu stronach byli wspaniali programiści, ale specjaliści od konserwacji byli zdecydowanie bardziej wyspecjalizowani i używali starszej technologii.
Czy mogę zasugerować, abyś odparł i poprosił o nowe prace rozwojowe? A jeśli twój pracodawca zajmuje się tylko utrzymaniem, to może musisz przejść dalej?
źródło
Powiedziałbym, że zależy to od wielu czynników. Gdzie pracujesz, jakie produkty produkujesz, jak zorganizowany jest Twój zespół itp.
Przez cztery lata pracy w mojej firmie powiedziałbym, że 70–80% mojego czasu spędzam na tworzeniu czegoś nowego. Prawdopodobnie 50-60% tej kwoty jest przeznaczane na duże projekty, które są całkowicie nowym kodem, a resztę czasu przeznacza się na ulepszenia obecnej funkcjonalności.
Po części wiem, jak działa moja firma. Nie wszyscy w moim zespole programistów spędzają tyle czasu na tworzeniu nowych funkcji. Istnieje wiele, które skupiają swój czas na niczym innym, jak naprawianiu błędów / polowaniu. Jeśli jest to zupełnie nowa funkcjonalność lub potrzebują pomocy, zostaje mi to przekazane do zbadania. Ogólnie rzecz biorąc, ten niewielki zespół łowców błędów jest tym, co pozwala większej grupie programistów działać bez przerwy.
źródło
Pracuję prawie trzy lata jako jedyny programista w firmie, która używała QuickBooków i Excela i nic więcej, kiedy zaczynałem. Teraz mamy aplikację Windows Forms , konfigurację SharePoint , SQL Server + Raporty, dodatek Excel i dodatek Outlook.
Właśnie dzisiaj po raz pierwszy skonfigurowałem system biletowy, ponieważ straciłem możliwość zarządzania żądaniami e-mail w tempie, które powstrzymywało użytkowników przed narzekaniem, więc widzę, że to znak, że wszedłem w tryb konserwacji.
Moje poprzednie prace były bardziej podobne do tego, co napisali inni, ale pomyślałem, że wrzucę moje nietypowe doświadczenie tylko dlatego, że pokazuje, że nigdy nie wiesz, co przyniesie kolejna praca. Jestem wyczerpany, ale kwota, której nauczyłem się w tej pracy, była warta pracy.
źródło
Niektóre większe organizacje, takie jak Firma, dla której pracuję, stosują politykę wycofywania oprogramowania z eksploatacji po kilku latach, być może dlatego, że język programowania, w którym został napisany, nie jest już używany (ktoś Delphi?) Lub platforma jest wymieniana (Windows XP) lub wymagają tego wymagania regulacyjne. Np. Dwa poziomy programów, które komunikują się bezpośrednio z bazą danych, są obecnie wycofywane na korzyść trzech poziomów, które używają połączeń Kerberized dla większego bezpieczeństwa.
Użytkownicy wciąż potrzebują tej oryginalnej funkcjonalności, dlatego opracowywana jest zupełnie nowa wersja, wykorzystująca najnowsze techniki.
Spodziewaj się 5-7-letniego cyklu wymiany tego rodzaju rzeczy. Np. Do 2020 roku oczekuję, że oprogramowanie WPF (klient) / Java (serwer), które teraz piszę, będzie starą technologią i zostanie zastąpione czymś nowszym.
źródło