Jak przejść od umiejętności pisania kodu do bycia dobrym programistą?

10

Sfrustruje mnie brak konkretnych wyjaśnień, jak przejść od umiejętności pisania skryptów (bash, awk) i pisania prostych aplikacji (c, php, python) do projektowania i tworzenia większych, bardziej skomplikowanych programów. Wydaje się, że z jednej strony są książki z językami programowania, az drugiej strony książki z inżynierii oprogramowania / zarządzania projektami przeznaczone dla zespołów programistów.

Przeczytałem dużo obu. Przeczytałem klasykę XP / Agile i dobrze rozumiem teoretycznie proces tworzenia oprogramowania. Lubię czytać kod innych ludzi i mogę go dość dobrze śledzić. Ale kiedy mam pomysł na projekt lub chcę przejść od „oto problem / potrzeba” do „tutaj jest rozwiązanie”, mój umysł rysuje się pusto i nie wiem od czego zacząć.

Czy to po prostu włamuję? Czy są jakieś ustrukturyzowane przepływy pracy dla indywidualnych programistów, którzy nie pracują w zespołach lub w dużym domu oprogramowania? Naprawdę nie mam ochoty zdobywać PMP ani pracować dla firmy programistycznej. Po prostu szukam skutecznego, wydajnego i praktycznego przepływu pracy.

Thomas Owens
źródło
2
Doświadczenie to dobry nauczyciel.
Bernard
Czy większe, bardziej skomplikowane oprogramowanie to nie tylko zbiór prostszych i bardziej prostych programów?
Rig
5
„Ponieważ najważniejszą rzeczą w sztuce jest praca. Nic innego nie ma znaczenia poza codziennym siedzeniem i próbowaniem”. - Steven Pressfield
Ryan Kinal
W ten sam sposób dotrzesz do Carnegie Hall ...
Michael Brown,
1
Tak samo jak do Carnegie Hall - Ćwicz!
Martin Beckett,

Odpowiedzi:

11

Moim zdaniem, jesteś dobrym programistą, mając doświadczenie i pracując na wiele sposobów. Stwierdziłeś, że masz problem z przejściem od „oto mój pomysł” do „oto moje rozwiązanie”. To coś więcej w kierunku metodologii tworzenia oprogramowania, a także bycia doświadczonym programistą.

Korzystanie z metodologii tworzenia oprogramowania jest czymś więcej niż „po prostu włamaniem się do kodu”, a te metodologie zapewniają ustrukturyzowane przepływy pracy. Tam rodzina Agile zapewnia dobrą strukturę dla mniejszych zespołów programistycznych (lub osób), którą możesz śledzić, aby pomóc Ci przejść od fazy „pomysłu” do fazy „produktu gotowego”.

Przez lata uczyłem się kilku rzeczy od innych i pracując nad różnymi projektami, takimi jak:

  • Uczyń wszystko sprawdzalnym, to znacznie ułatwi ci życie;
  • Nie możesz oczekiwać doskonałego projektu i możliwości zaprojektowania aplikacji dla przedsiębiorstw / następnej największej gry / wstaw więcej tutaj, bez doświadczenia w tym zakresie;
  • Trudno jest zaprojektować dobre oprogramowanie, jeśli nie masz takiego doświadczenia i nie nauczyłeś się od innych;
  • Nigdy nie będziesz mieć idealnego projektu za pierwszym razem, nawet jako doświadczony programista - rzeczy się zmieniają i dlatego; twój projekt też może;
  • Zapisz rzeczy: Pisanie / rysowanie / whiteboarding / malowanie / cokolwiek, z czym czujesz się komfortowo, ułatwia życie, jeśli masz rzeczy spisane. Takie jak projekty GUI, diagramy klas itp. Z mojego doświadczenia wynika, że ​​po prostu „zhakowanie czegoś razem” może mieć katastrofalne skutki;
  • Nie wymyślaj na nowo koła, nie powinieneś. Jeśli próbujesz wdrożyć własną HashMap, prawdopodobnie robisz coś złego. Zbadaj rzeczy i zastanów się, zanim napiszesz kod.

Mam nadzieję, że to pomoże.

Deco
źródło
Może to jest symptom ery cyfrowej, którą staram się przetrwać bez ołówka i papieru. Pamiętam, jak tworzyłem mapy myśli i tym podobne. Dobra rada.
Zgadzam się z zapisaniem rzeczy. Mam duże doświadczenie w pracy w bardzo małych i dużych zespołach, a pierwszą rzeczą, którą bym zrobił, było spisanie podstawowych wymagań dotyczących oprogramowania / modułu. Co to robi? Naucz się zasad projektowania oprogramowania, a właściwie tego właśnie szukasz - na początku nie musi on być dobrze skonstruowany, wystarczy kilka notatek organizacyjnych, które pomogą ci skoncentrować się na kierunku, bez odniesienia do języków lub technologii. Kiedy masz jasny kierunek, dowiedz się, jak go wdrożyć.
Nie sądzę, że naprawdę możesz zaprojektować cokolwiek bez jakiegoś notatnika, czy to ołówka i papieru, czy tablicy. Zachowuję również wszystkie iteracje projektu, ponieważ nigdy nie wiadomo, kiedy ten wspaniały pomysł, który musiałeś odrzucić, nagle stanie się wykonalny.
TMN
Jestem bardzo wizualną osobą, więc zdjęcia zawsze pomagają mi zrozumieć i wypracować :-)
Deco
5

Moim zdaniem, jak w każdym zawodzie, aby być dobrym profesjonalistą, wszystko, czego potrzeba - oprócz formacji teoretycznej - to doświadczenie .

Ponieważ lekarz nie może być dobry tylko z zajęciami w szkole medycznej, a prawnik nie może poznać całej politycznej strony bycia adwokatem tylko z jego stopniem, będąc dobrym deweloperem potrzebuje doświadczenia i czasu.

Doświadczenie nie przychodzi po przeczytaniu kodu innej firmy. Jeśli dostaniesz studenta medycyny, będzie on w stanie wskazać wiele procedur, chorób, leków itp., Ale faktyczne zastosowanie tych rzeczy (kiedy zastosować jedną procedurę, jaką chorobę zdiagnozować itp.) Przychodzi tylko z nadzorem i doświadczeniem.

Ponieważ nie chcesz pracować dla dużej firmy (ani żadnej innej firmy w tym zakresie), sugeruję, aby zacząć od opracowania małych aplikacji, krok po kroku. Uwierz mi, że samodzielne tworzenie oprogramowania zajmuje dużo czasu.

Inną rzeczą, którą sugeruję, aby zostać dobrym programistą / inżynierem oprogramowania, jest przyczynianie się do oprogramowania open source. Wielu facetów zarobiło sporo pieniędzy (i doświadczenia, btw), pomagając w tworzeniu oprogramowania typu open source i udzielając konsultacji. Zasłynęli sławą dzięki swoim wkładom w open source.

W każdym razie myślę, że nie ma skrótu do zdobywania doświadczenia i należy go realizować z dyscypliną i cierpliwością .

Carlos
źródło
To dobra analogia. Czytanie kodu innych osób pomogło mi w tym stylu , ale masz rację, nie daje mi to żadnego prawdziwego doświadczenia. Ktoś inny zasugerował pójście drogą OSS. Myślę, że przyjrzę się temu.
4

Możesz zacząć od ulepszenia kodu innych osób. Weź jakiś projekt i dodaj do niego funkcję. Musisz zdecydować, co ta funkcja ma zrobić i jak powinna to zrobić. Pracując w ramach istniejącego kodu, zaprojektuj swoje rozwiązanie.

I nie bój się włamać. Dużo nowego rozwoju dokonuje się poprzez udoskonalenie (lub najlepiej przepisanie) szybkich i brudnych prototypów. Śmiało i wykorzystaj każdą najgorszą praktykę i antypattern w książce, po prostu wykręć coś, co robi, co chcesz. Następnie wróć i odpowiednio go zaprojektuj. Zwykle myślę sobie: „Wiesz, lepszym sposobem na zrobienie tego byłoby ...”, podczas gdy twardo koduję niektóre parametry konfiguracyjne w mojej 800-liniowej potworności z trzema procedurami.

Wiem, że obecnie nie jest to modne, ale techniki analizy strukturalnej naprawdę pomogły mi opanować projektowanie oprogramowania. Pobaw się, tworząc kilka wykresów bąbelkowych i DFD, aby poczuć się jak przy rozkładaniu problemów i projektowaniu różnych części systemu do współpracy.

TMN
źródło
2

Jak powiedzieli inni, doświadczenie pochodzi z pisania kodu. Ale jeśli to możliwe, powinieneś również poprosić kogoś innego o sprawdzenie twojego kodu. Bardziej doświadczony programista może wskazać problemy w kodzie i pokazać lepsze sposoby działania. Udział w projekcie typu open source da ci szansę zrobienia obu.

Jonathan
źródło
1

Dla mnie pomaga rozbić większy program na mniejsze części. A następnie podziel te kawałki na jeszcze mniejsze części i tak dalej. Każdy program to zbiór małych elementów logicznych.

Weźmy na przykład blog. Chcesz móc tworzyć i edytować posty, które inni mogą czytać. Od razu możesz podzielić projekt na części administracyjne i publiczne. Administrator będzie wymagał co najmniej użytkowników administratora, strony logowania i sekcji do zarządzania blogiem. Sekcję dotyczącą zarządzania blogiem można podzielić na interfejs CRUD (tworzenie, czytanie, aktualizowanie, usuwanie). Utworzenie nowego posta na blogu będzie wymagało sprawdzenia, aby upewnić się, że administrator ma odpowiednie uprawnienia, formularz, sprawdzanie poprawności formularza i możliwość zapisywania w bazie danych. I tak dalej.

Im bardziej rozwiążesz problem lub funkcję, tym łatwiej będzie się nią zarządzać. Dziel i rządź. Gdy będziesz już w stanie zmapować swoje oprogramowanie w ten sposób, możesz sprawdzić, jak różne jego elementy współdziałają ze sobą. Gdzie możesz powtórzyć kod? Co można streścić? Powinien to być proces iteracyjny zarówno podczas planowania, jak i pisania samego kodu.

Poleciłbym dowiedzieć się, od czego powinien zacząć się Twój minimalny zestaw funkcji i wdrożyć go przed dodaniem do niego innych elementów. Będziesz chciał kodować obronnie, aby przyszłe zmiany nie były zbyt trudne, ale jednocześnie nie chcesz implementować półfunkcji, które mogą nigdy nie zostać ukończone. Trudno jest przejść między elastycznością a chęcią bezwzględnego zabijania swoich ukochanych, pożyczenia literackiego odniesienia. Osiąganie dobrych wyników w tym konkretnym działaniu równoważącym wynika wyłącznie z doświadczenia.

I do tego się sprowadza, jak wspomniały inne odpowiedzi: doświadczenie. Jedynym sposobem na to jest po prostu zacząć. Nie martw się tak bardzo od samego początku. Najpierw spraw, aby kod działał, a następnie uczyń go pięknym, a następnie spraw, aby był szybki.

Ponadto, w przeciwieństwie do tego akapitu, nie zwracaj uwagi na bezpieczeństwo na końcu. Powinieneś mieć pojęcie o zagrożeniach dla twojego oprogramowania, ale na początek nigdy nie ufaj wkładowi użytkowników.

VirtuosiMedia
źródło
0

Wiem, że mówisz, że nie chcesz pracować dla firmy programistycznej, ale to dobre miejsce, aby uzyskać doświadczenie, o którym mówi wiele innych odpowiedzi. Niezależnie od tego, czy chcesz pracować nad dużymi projektami, dobrze jest mieć kontakt z pracą i stylem pracy innych ludzi.

Nie możesz na przykład samodzielnie wypróbować programowania w parach. A jeśli jesteś sparowany z kimś mądrzejszym od ciebie, zyskujesz dodatkową korzyść, zdobywając od nich lepsze praktyki, jednocześnie zdobywając doświadczenie w tej metodologii.

BTW, postanowiłem pracować z grupami, w których czuję się poniżej przeciętnego doświadczenia, umiejętności i tym podobnych. Ogromnie podnosi moją grę. To znacznie trudniej to zrobić samodzielnie lub gdzie jesteś „doświadczony” facet.

DaveE
źródło
0

To, czego szukasz, to umiejętności rozwiązywania problemów . Zauważyłem, że zakłada się, że programista może już to zrobić, co jest głupie. Na szczęście rozwiązywanie problemów to ogólna umiejętność stosowana w matematyce, badaniach, życiu codziennym i tak dalej.

Przede wszystkim powinieneś postępować zgodnie z metodą naukową, z pewnymi dodatkami.

  1. Masz problem (użyj narzędzi i technik, które pomogą to zdefiniować)
  2. Podejrzewasz hipotezę rozwiązania (wzorce i doświadczenie pomocy)
  3. Testowa hipoteza (możesz nawet nie mieć kodu tutaj)
  4. Powtarzaj kroki 2 i 3, aż hipoteza się utrzyma. Masz teraz teorię (program do rozwiązywania problemów)
  5. Opracuj eksperyment obciążający teorię stresu, szukając dziur (przypadki testowe!)
  6. Jeśli przypadki testowe się utrzymują, masz rozwiązanie! W przeciwnym razie spłucz i powtórz

Zauważ, że jest to raczej wysoki poziom. Każdy krok zazwyczaj obejmuje kilka etapów, takich jak określenie, na czym polega problem. Jako przykład przyjrzyj się rozwiązywaniu problemów słownych w matematyce. Gromadzisz fakty (narzędzie) i określasz, czego naprawdę potrzebujesz. Następnie analizujesz swoje fakty, próbując zmapować je do rozwiązania.

To staje się podproblemami pierwotnego problemu. Więc ponownie wykonaj kroki. Potrzebujemy przedmiotu pośredniego, aby uzyskać końcowy wynik, więc staje się on naszym nowym problemem. To rozkłada problem na małe, łatwo zrozumiałe sekcje. Po rozwiązaniu każdego elementu rozwiązanie jest składane razem.

Spencer Rathbun
źródło