Osiągnięcie statusu programowania pośredniego [zamknięte]

32

Jestem inżynierem oprogramowania, który zajmuje się programowaniem pozycji w VBA (chociaż nie śmiem uważać tego za „prawdziwe” doświadczenie, ponieważ było to metodą prób i błędów!), Perl w / CGI, C # i ASP.NET. Te dwa ostatnie są po studiach licencjackich, z moim wejściem do „prawdziwego świata”. Jestem 2 lata po studiach i mam 5-letnie doświadczenie (łącznie) we wszystkich językach, o których wspomniałem. Jednak jeśli chodzi o moje CV, mogę odłożyć tylko 2 lata na C # i mniej niż rok na ASP.NET.

Wydaje mi się, że znam C #, ale wciąż muszę spędzać czas na „Co robi ta metoda?”, Podczas gdy niektórzy inżynierowie wyższego szczebla mogą od razu powiedzieć: „Och, Metoda X to robi, nawet na to nie patrząc. metoda wcześniej. ” Wiem więc empirycznie, że jest tam przepaść, ale nie jestem do końca pewien, jak ją pokonać. Zacząłem programować w Project Euler i wybrałem książkę o wzorach projektowych, ale nadal czuję, że spędzam każdy dzień chodząc po wodzie, zamiast iść do przodu.

Nie oznacza to, że nie czuję się tak, jakbym poczynił postępy, to po prostu oznacza, że ​​o ile przybywam każdego dnia, wciąż widzę szczyt w oddali.

Moje pytanie brzmi: jak pokonałeś ten płaskowyż? Jak długo Ci to zajęło? Jakie metody możesz mi w tym pomóc?

Przeczytałem Code Complete , The Mythical Man Month i CLR poprzez C #, wydanie drugie - moje pytanie brzmi: co mam teraz robić?


Edycja : Właśnie znalazłem to pytanie dotyczące projektów dla programistów na poziomie średnim. Myślę, że to dodaje do dyskusji (choć nie zastępuje mojego pytania). Jako taki, dodaję go do pytania jako „Aby uzyskać więcej informacji”.

George Stocker
źródło
2
Ostatnio grałem z Project Euler i obejmuje on tylko dość ograniczony zakres technik. To wszystko bardzo dobrze optymalizuje funkcję przez zapamiętywanie lub programowanie dynamiczne, ale nie pomoże ci pisać GUI lub aplikacji internetowych. Trudne problemy zostały zaprojektowane z myślą o trudnej matematyce, a nie o twardym kodowaniu.
Dobra zabawa, mimo wszystko: nie mam nic przeciwko, po prostu nie ma na celu pomóc Ci nauczyć się języka poza podstawowymi typami danych, strukturami i być może kilkoma technikami optymalizacji, jeśli tak jak ja wolisz, aby twoje rozwiązania były poniżej 0,1 s, gdzie to możliwe.
@Gortok, zgadzam się, że istnieje wiele konkretnych rzeczy, które możesz zrobić, aby poprawić swój zestaw umiejętności, ale z pewnością zależy to od tego, jaki rodzaj programowania wykonujesz. Programiści systemu Windows potrzebują na przykład innych umiejętności niż programiści urządzeń wbudowanych. Myślę, że zadane pytanie jest w rzeczywistości zbyt ogólne, aby uzyskać dobrą odpowiedź.
Nathan Fellman
1
Programuję od 2 roku życia. Nie udało mi się zostać najlepszym programistą na świecie, a teraz nienawidzę swojego życia. Chciałbym, aby moim celem była najlepsza gwiazda porno na świecie.
Nie czujesz, że robisz postępy, ponieważ intuicja mówi ci o przepaści między praktyką akademicką a praktyką biznesową (w świecie rzeczywistym). Twoja intuicja jest prawidłowa. W praktyce akademickiej chodzi o małe samodzielne problemy i ćwiczenia. Firma naprawia błąd lub dodaje funkcję / stronę internetową itp. Do potwora (zwykle). Praktyką akademicką jest rekursja. Biznes to czytelność i łatwość konserwacji. Praktyką akademicką jest wiedza z matematyki i informatyki. Biznes to analiza umiejętności i wymagań ludzi tak samo jak kodowanie. Uznałbym to za odpowiedź, ale Q jest zamknięte.
Brad Thomas

Odpowiedzi:

41

Gratulacje!

Z Twojego opisu, to pośrednim deweloper.

Ta faza potrwa około 3-8 lat, w zależności od chęci uczenia się ponad problem chwilą

Aby przyspieszyć ten proces, czytaj, surfuj, bloguj, chodź na spotkania grup użytkowników, znajdź mentora, przeprowadzaj niezależne badania, poboczne projekty kodu i zakopuj się w nowych technologiach. To może zmniejszyć czas o rok lub dwa.

Lub możesz mieć życie poza programowaniem ;-)

Poważnie, bądź na bieżąco i introspektywnie, ale od czasu do czasu wyłączaj #% $ @

Dodatek: kiedy wychodzisz na zewnątrz, pamiętaj, aby nosić spodnie.

Steven A. Lowe
źródło
17
i uważaj na cytowanie Tolkiena, to trudny hobbit do złamania
Steven A. Lowe,
1
Dobrze zagrał pan Lowe, dobrze zagrał.
kemiller2002
1
Poważnie, miej życie poza programowaniem. Po pierwsze: życie to coś więcej niż kod. Po drugie: wiele można się nauczyć z innych dyscyplin.
kemiller2002
1
+1 - ładnie wykonane. Nic nie zastępuje praktyki (ani dobrego poczucia humoru).
15

Jednym z najlepszych sposobów na górę jest napisanie czegoś dla siebie, ponieważ chcesz. Najlepsi programiści mają wspaniałe odpowiedzi na pytanie „jaki jest najciekawszy program, który napisałeś w wolnym czasie”. Jeśli w wolnym czasie nie piszesz żadnego kodu, nie kochasz swojego rzemiosła na tyle, aby być w nim lepszym.

Norman Ramsey
źródło
8
Nie podoba mi się ta teoria, ludzie mają pełnoetatową pracę, a potem inne obowiązki. Nie należy zakładać, że ci, którzy nie mają pobocznych projektów, nie lubią wystarczająco programować lub są złymi programistami. Zgodnie z przyjętą odpowiedzią: Żyj poza programowaniem.
10
Nie zgadzam się - najlepsi programiści są jak najlepsi pisarze: dosłownie nie mogą powstrzymać się od robienia tego, co robią najlepiej.
Norman Ramsey,
2
Mogą nie być w stanie się powstrzymać, ale życie może i dla niektórych będzie.
Shannon Severance
@ShannonSeverance, Dla wielu będzie, nie tylko dla niektórych.
Pacerier,
9

Musisz przejść przez etap larwalny.

Chociaż teraz programuję w VB.NET w systemie Windows, przeszedłem fazę larwalną w systemie Linux x86 z asemblerem jako moim podstawowym językiem.

Przez pewien czas musisz poświęcić się rzemiosłu, dopóki go nie opanujesz. Tak zwane instynkty mistrza programisty to naprawdę wyuczone zachowania. To wspólna kultura. Programiści muszą myśleć tak samo, jak maszyna.

Owce stają się jak owczarki, a owczarki jak owce, ale żadne z nich nie jest bardzo długie na świecie. Z [drzewami i] Entami jest szybciej i bliżej, a oni idą razem przez wieki. - Tolkien

Poznaj i zrozum. Największymi umiejętnościami nie są umiejętności związane z konkretnym językiem, ale można je zastosować w prawie każdym języku. Poznaj pojęcia, szukaj ich zarówno w problemach, jak i językach, bądź gotowy wymyślać nowe rzeczy, gdy zajdzie taka potrzeba.

To jest droga do wielkości.

Jozuego
źródło
2
Czy to w jakiś sposób wiąże się z cheetos? Obraz w mojej głowie zawiera cheetosy.
2
lol „Nie jest łatwo być tandetnym!”
gnovice
Stadium larwalne czy stadium Laravela? ;)
Brad Thomas
9

Programuję od 8 roku życia ... Będę miał 33 lata w Wigilię Bożego Narodzenia. Nadal widzę górę w oddali. Bez względu na to, jak daleko zaszedłeś, zawsze jest więcej do nauczenia się.

Weź paradygmaty za pasek i dowiedz się, w jaki sposób język, w którym obecnie kodujesz, wdraża te paradygmaty. Programowanie to doświadczenie na całe życie, które zawsze wymaga więcej nauki. To radość, bez względu na to, jak biegły jesteś, zawsze jest więcej.

Jednym ze sposobów, w jaki uczę się nowych rzeczy, których normalnie bym się nie nauczył, jest spędzanie czasu tutaj i na innych forach programistycznych, takich jak Bytes and Experts Exchange, gdzie ludzie zadają pytania. Jeśli potrafisz odpowiedzieć na pytanie, śmiało, jeśli nie możesz, spróbuj dowiedzieć się, jak samodzielnie wykonać zadanie, PO nie tylko doceni twój wysiłek i pomoc, ale także nauczysz się czegoś nowego.

Odkryłem, że uczę się więcej, pomagając innym ludziom znaleźć odpowiedzi na rzeczy, których jeszcze nie wiem, niż kiedykolwiek, po prostu programując moje codzienne rzeczy, które robię codziennie.

BenAlabaster
źródło
9

Status programowania pośredniego oznacza, że ​​wychodzisz z mentalnej małpki „pisz szybciej” i wkraczasz w sferę chęci budowania prawdziwych systemów jako kariery. Jest to poważna zmiana zawodowa i, szczerze mówiąc, tak naprawdę nie chodzi o umiejętności techniczne. Praca na poziomie pośrednim (inaczej „programistycznym”) wymaga znacznie zaawansowanego zestawu umiejętności ludzi.

Oto kilka symptomów, o których możesz pomyśleć:

  1. Czy wkraczasz w edycję wojen online? Jeśli tak, możesz pokazywać, że lubisz spierać się o szczegóły w swojej strefie komfortu bardziej niż chcesz zrozumieć punkt widzenia drugiej osoby.
  2. Czy uważasz, że języki to naprawdę różne rzeczy? Zarówno C #, jak i Java wprowadzają własne platformy i zasoby do tabeli, ale oba są efektywnymi modelami obliczalności. Czy potrafisz nauczyć się nowego języka i platformy wystarczająco szybko, aby otrzymywać wynagrodzenie za pracę?
  3. Czy nadal myślisz o zadaniach programowych jako pisaniu na klawiaturze? Jeśli masz zadanie w pracy, dlaczego? Do czego będzie używany ten kod? Jaki system będzie częścią? Informacje te mogą radykalnie zmienić proponowane rozwiązanie.
  4. Czy opuścił know-to-wszystko fazę swojego życia za sobą? Czy słuchasz reszty zespołu, czy tylko zastanawiasz się nad następną rzeczą do powiedzenia?
  5. Czy zdajesz sobie sprawę, że „ciągnięcie wszechstronnego” w celu uzyskania błędnego rozwiązania w ostatniej chwili nie robi już imponującego wrażenia? Po pierwszych ośmiu godzinach możesz łatwo wyobrazić sobie, że reszta czasu została wykorzystana na pisanie błędów.

Najlepsze podsumowanie, jakie mogę wymyślić, to to, że pośredni programista (lub „programista”) nauczył się być bardziej produktywny w ciągu ośmiu godzin pracy, aby mogli pójść do diabła do domu i mieć życie poza pracą.

Punkty bonusowe przyznawane, jeśli uda ci się znaleźć małżonka i powielić ....

Bob Cross
źródło
8

To, co teraz robisz, jest świetne, ale jeśli chcesz niesamowicie przyspieszyć swój postęp, możesz zrobić dwie dodatkowe rzeczy:

1) „Naucz” - Prostym sposobem na to jest założenie bloga i próba wniesienia czegoś przydatnego regularnie (być może co tydzień). Celuj w rzeczy, których ostatnio się nauczyłeś lub o których jeszcze nie wiesz . Oznacza to, że zmusisz się do badań, zrozumienia i ponownego wykorzystania.

BTW, możesz bardzo łatwo założyć konto SingingEels, na którym masz bezpłatny blog na istniejącej społeczności programistów.

2) Napisz wiele miniprogramów - mam na myśli około 1 tygodniowo. Możesz użyć tego w połączeniu z powyższym ... lub po prostu dla zabawy. To, co zrobiłem jako młody programista, po prostu losowo wybrałem (nie żartuję) przestrzeń nazw w środowisku .NET. W tym wybierz klasę, której nigdy wcześniej nie widziałeś / nie używałeś i stwórz mały program, który z niej korzysta.

Timothy Khouri
źródło
8

Spróbuj

Czytaj więcej książek Odbierz te wielkie tytuły z Amazon i przeczytaj je. Na przykład autor Code Complete napisał świetną książkę o inżynierii oprogramowania - Rapid Software Development, kup ją i przeczytaj.

Naucz się innego języka programowania Warto nauczyć się języka skryptowego, takiego jak python / ruby. A może funkcjonalny język programowania :) Może to zmienić zdanie na temat programowania. Być może wiesz, że niektóre wzorce GOF nie są konieczne dla tego rodzaju języków.

Dołącz do społeczności Ludzie mogą wymieniać swoje myśli, słuchając innych i wygłaszając prezentacje.

rozpruwacz
źródło
4

Znajdź inteligentnych programistów i ucz się od nich. Naśladuj ich. Zauważ, że robią inaczej niż ty.

Czy Twoja firma wykonuje recenzje kodu? To jeden z najlepszych sposobów na naukę. Możesz być zaskoczony sugestiami, które robią bardziej zaawansowani programiści i rzeczami, o których oni myślą podczas kodowania.

David Norman
źródło
3

co powiesz na zaangażowanie się w inny trwający projekt open source, aby przynajmniej ktoś był wart swojej pracy, a Ty możesz uczyć się i wchodzić w interakcje z innymi bardziej zaawansowanymi programistami wykonującymi pracę w świecie rzeczywistym

abyś przynajmniej nie był ograniczony tym, czego chcesz się nauczyć lub jakiego rodzaju projektu chcesz wykonać. i jest to już darmowe narzędzie, którego używasz, możesz być dumny z tego, że faktycznie pomagasz je ulepszyć.

i pokazuje się również w twoim CV. :)

więc jeśli nadal pozostawia Ci to trochę wolnego czasu, dlaczego nie prowadzić bloga dokumentującego twoją naukę, doświadczenia i co nie. kto wie, możesz być kolejnym joelem w oprogramowaniu lub programistycznym horrorze: str

Melaos
źródło
-1

Aby wyróżnić się jako programista C #, przeczytaj poniższe dwa. Zauważ, że te książki koncentrują się bardziej na języku (C #), a nie frameworku (.NET) ..

  1. Niezbędny C # : link jest do najnowszej edycji. Właściwie czytam poprzedni (C # 4.0), ale zakładam, że im nowszy, tym lepiej. Ta książka zawiera także kilka podstawowych rzeczy, ale bądź cierpliwy i czytaj ją od deski do deski.
  2. C # in Depth : link jest ponownie do najnowszej edycji, która zostanie wydana za 10-15 dni. Przeczytałem tylko książkę, ale moi koledzy, którzy ją przeczytali, bardzo ją cenią.

Czytałeś już CLR przez C # , w przeciwnym razie jest to prawdopodobnie trzecia sugestia dla deweloperów C #.

Powinno to również uczynić cię lepszym programistą: Wytyczne dotyczące projektowania ram i efektywna praca ze starszym kodem .

Asim Ghaffar
źródło
starają się wyjaśnić, dlaczego nie głosowali?
Asim Ghaffar,