2012-01-20 5 views
5

Przepraszamy, jeśli to pytanie jest zbyt otwarte na stronie, ale wydawało się, że jest to najlepsze miejsce, aby o nie zapytać.Zasoby do budowania umiejętności inżynierii oprogramowania

Jestem programistą samoukiem z niewielkim wykształceniem matematycznym, który przez dziesięcioletnią karierę powoli przechodził od frontowych skryptów sieciowych i tworzenia stron internetowych do oprogramowania średniego i warstwy danych. . W rezultacie są pewne obszary mojej wiedzy i doświadczenia, których brakuje.

Po niedawnym przeglądzie z moim kierownikiem, zostało mi wskazane, że przezwyciężenie tych luk było wszystkim, co było między mną a awansem do roli inżyniera. Jednak aby to osiągnąć, musiałem znaleźć dla siebie uporządkowane podejście do uczenia się i wykazać, że wziąłem na siebie to, co powinienem wiedzieć.

Osobiście identyfikuję moje słabości w następujący sposób. Należy pamiętać, że problemem w wielu przypadkach nie jest to, że nie rozumiem, technicznie, jak te rzeczy działają, ale nie widzę, gdzie to jest lub nie jest właściwe, aby je zastosować. Na przykład wiem, czym jest interfejs i, z technicznego punktu widzenia, co robi, ale trudno mi odróżnić, kiedy właściwe jest użycie interfejsu, na przykład, grupy powiązanych klas OO, które dziedziczą po klasie bazowej. Jest to więc raczej ignorancja dobrego projektowania oprogramowania niż techniczna ignorancja - mam problemy z docenianiem, trawieniem i pracą nad takimi luźno powiązanymi systemami.

  • Interfejsy
  • Delegaci
  • Wzorce projektowe
  • architektura sieci & protokoły

Również nigdy nie robiłem niektóre rzeczy niskiego poziomu jak kompilatory i tym podobnych. Zastanawiam się czasami, czy miałoby to duże znaczenie dla mojej zdolności pisania kodu, który jest nie tylko skuteczny, ale również zoptymalizowany, gdybym miał lepszą znajomość tego rodzaju materiału.

Czasami niepokój, że nie mogę zidentyfikować słabości w moim zestawie umiejętności, ponieważ nie wiem, jak zadać właściwe pytania, odskakuje na mnie. Tak więc, mając nadzieję, że właściwie sformułowałem pytanie, chciałbym, aby twoje sugestie:

  • Z tego, czego mi obecnie brakuje, czy są jeszcze inne tematy, o których powinienem pomyśleć?
  • Gdzie są dobre zasoby do nauki tego materiału?
  • Czy są jakieś ustrukturyzowane, samoukowate kursy, nad którymi mogę pracować? Niestety nie mam czasu na przyjęcie formalnej kwalifikacji.

Cheers, Matt

+0

Matt Chciałbym również uczestniczyć w wieczornych spotkaniach w sieci .net. Walczę, aby dostać się do każdego (jak ty, mam małe dzieci). Ale http://dotnetdevnet.com/ i http://cms.vbug.net/Regions/VBUG-Bristol/Bristol-Events.aspx są lokalne i bardzo dobre. –

+0

Matt, Jestem teraz w podobnej sytuacji. Każda rada oparta na twoim doświadczeniu. – jaamit

Odpowiedz

8

byłem samoukiem koder nie tak dawno temu, więc mogę odnosić się do swojej pozycji. Od tego czasu wysłałem 10 milionów aplikacji LOC, więc musiałem rozwinąć rozeznanie. 3 rzeczy pomaga mi zdobyć inżynierię oprogramowania: książki, kod i ludzie.

Przede wszystkim dobra inżynieria to piękno, piękno eleganckiego wzornictwa, wydajnego mekka. Musisz rozwinąć ten zmysł dla piękna i zrobić to, co musisz zobaczyć i omówić.

Książki takie jak SICP, Refactoring, Head First Design Patterns i Beautiful Code dotyczą wszystkiego, co piękne/lepsze. W większości przypadków nie dotyczą one języka jako takiego (lub języków egzotycznych). Kod zakończony jest również interesujący, ale jakoś bardziej niski poziom.

Online czytanie kodu to również dobry sposób na poznanie smaku. Nie mam na myśli przykładu, ale jest to common question, powinieneś z łatwością znaleźć kilka pomysłów. Również budowanie ambitnej aplikacji (gra, modelarz 3D, serwer sieciowy, baza danych) jest dobrą praktyką: możesz ją powtórzyć 2 lub 3 razy, aby mieć lepszą architekturę.

Ludzie są również bardzo ważni. Jeśli znajdziesz/namiętnych architektów oprogramowania, z którymi porozmawiasz, będziesz mógł skonfrontować swój pogląd na to, co jest pięknem. Wciąż trawię niektóre dyskusje, które prowadziłem z moim kierownikiem kilka lat temu.

Ten "enlighment" jest procesem ciągłym, więc nie zniechęcaj się i idź dalej. Pewnego dnia zobaczysz brzydki kod z oczywistą alternatywną implementacją, którą możesz omówić i porównać obiektywnie jako lepiej niż oryginał.

1

Posiadanie projektu dla zwierząt domowych, wokół którego można stale wprowadzać zmiany, ma długą drogę w samokształceniu.

Szczerze mówiąc, chciałbym rzucić okiem na niektóre z otwartych materiałów szkoleniowych wydanych przez MIT lub Caltech i tym podobne. Wybierz temat, który Twoim zdaniem przyniesie ci korzyści i wyślij lekcję. Spróbuj zrozumieć pojęcia najlepiej jak potrafisz. Kontynuując tworzenie i modyfikowanie swojego projektu dla zwierząt domowych, zaczniesz oczywiście dodawać rzeczy, których się uczysz.

Wspomniałeś, że nigdy nie dotykałeś kompilatorów - daj temu kursowi strzał i zobacz, gdzie stoisz. Dzięki dziesiątkom pełnych programów CIS na YouTubie możesz łatwo znaleźć instruktora, z którego możesz czerpać przyjemność. Dorzucę się Intro do algorytmów jak uczy Leiserson i Demaine jako punkt wodowania: „I nie, niestety, mają czas do podjęcia formalnych kwalifikacji”

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/

można wspomnieć Formalne czy nie, zajmie to sporo czasu, aby to się stało. Wybierz najlepszą dla siebie trasę i trzymaj się jej. Upewnij się, że wprowadzasz swoje nauki w praktykę, aby umocnić i rozwinąć twoje zrozumienie.