Mówisz o inżynierii oprogramowania niż o programowaniu. To trochę architektura, trochę „najlepszych praktyk” i „wzorców projektowych”, trochę praca z innymi. Chociaż istnieją książki, które mogą pomóc, większość z nich pochodzi z doświadczenia. Nikt nie zaczyna pisać, powiedzmy, Microsoft Word.
Pomyśl o dużym, „prawdziwym” programie, który chciałbyś napisać. Pomyśl teraz o różnych elementach, które musisz zbudować, aby działały tak, jak chcesz. Na przykład w nowoczesnej grze pierwszoosobowej potrzebujesz silnika graficznego 3D, sztucznej inteligencji postaci innej niż gracz, modułu muzycznego / dźwiękowego, silnika fizyki i modułu najwyższego poziomu, który egzekwuje reguły gry (wie „mapa”, sposób interakcji różnych postaci itp.). A potem jest grafika i projekt postaci oraz muzyka, z których żaden nie jest kodem, ale jest niezbędny do ukończenia gry.
Teraz: Które z nich zbudujesz sam, a które dostaniesz gdzie indziej? Większość dużych projektów oprogramowania nie jest programowana od zera. Być może użyjesz gotowego silnika 3D i modułu muzyki / dźwięku i zaprogramujesz tylko te rzeczy, które czynią twoją grę wyjątkową. OK, więc musisz dowiedzieć się, jakich modułów innych firm będziesz używać, co będzie wiązało się z takimi czynnikami, jak koszt, języki, z którymi pracują, jakie funkcje mają, jak zaprojektowano ich interfejs API (czyli jak go skompletować to, jak dobrze pasuje do twojego osobistego stylu programowania itp.). Być może napiszesz „proof of concept” lub testujesz programy z wykorzystaniem jednego lub dwóch kandydatów do różnych modułów innych firm, aby upewnić się, że zrobią wszystko, czego potrzebujesz i będą łatwe w użyciu.
Również kod, który sam chcesz napisać, może być zbyt wielkim zadaniem, abyś sam mógł go ukończyć w przewidzianych ramach czasowych. Ilu innych programistów potrzebujesz do pracy nad projektem? Jak podzielisz pracę? Jak zostaną zaprojektowane różne moduły, aby wszystkie pasowały do siebie, mimo że zostały napisane przez różnych ludzi? Jak wszyscy będziecie pracować na tym samym kodzie źródłowym bez wymazywania sobie nawzajem zmian (odpowiedź: kontrola wersji, co jest niezwykle przydatne, gdy pracujesz solo, ale jest niezbędne, gdy pracujesz z innymi).
Kiedy już zorientujesz się, jakie moduły chcesz napisać wewnętrznie, wykonasz ten sam proces. Wymyśl elementy każdego modułu, jak powinny się do siebie pasować, i które sam napiszesz, a które dostaniesz gdzie indziej. Kontynuuj rozkładanie rzeczy, aż każdy kawałek będzie wystarczająco mały, abyś mógł pamiętać w myślach: „tak, mógłbym to napisać!” A potem zrób to. Gdy to zrobisz, napotkasz nieprzewidziane przeszkody w sposobie łączenia różnych elementów programu. Będą to frustrujące, ale są okazją, aby dowiedzieć się więcej o swoim rzemiośle i powinny być postrzegane w ten sposób.
Początkowo będziesz w stanie przechowywać w pamięci tylko bardzo małe fragmenty swojego programu - powiedzmy, poszczególne funkcje - i będziesz musiał wiele zepsuć, zanim zaczniesz kodować. Jak można zdobyć doświadczenie, będziesz myśleć w funkcji zamiast konieczności myśleć o funkcjach i zacząć myśleć o obiektach. A potem będziesz myśleć w obiektach i myśleć o większych modułach. Wreszcie będziesz myśleć w modułach i myśleć o całych, dużych, prawdziwych programach.
A potem odkryjesz, że wciąż musisz się wiele nauczyć ... ale i tak się dzieje. Jeśli jako programista przestaniesz się uczyć, jesteś przestarzały i zostaniesz zastąpiony nowszym modelem.
W każdym razie, nie bój się i nie martw się, jeśli to zabrzmi ... okropnie lub niemożliwie, a tak naprawdę nie chcesz być programistą. To nie jest dla wszystkich. Uwielbiam muzykę i desery, mogę trochę grać na klawiszach i gotować niektóre potrawy, ale nie jestem skłonny poświęcać czasu, aby stać się wielkim muzykiem lub mistrzem kuchni.
Jeśli okaże się, że nie chcesz być programistą piszącym duże, prawdziwe aplikacje komputerowe, istnieją inne rodzaje zadań programistycznych. Możesz na przykład zostać wbudowanym programistą. Istnieją pewne interesujące wyzwania związane z pisaniem programów osadzonych i wykonujesz użyteczną pracę, ale zwykle programy są raczej mniejsze niż aplikacje komputerowe. Lub możesz pisać aplikacje internetowe. W Internecie łatwo jest skleić ze sobą trochę funkcji, dzięki czemu można napisać (np.) System komentarzy internetowych i byłby użyteczny, nawet jeśli nie jest to cała aplikacja internetowa. Łatwo jest również stopniowo ulepszać rzeczy w Internecie, dzięki czemu możesz zacząć od (powiedzmy) podstawowego klienta poczty internetowej i z czasem przekształcić go w coś takiego jak Gmail. (Ale nie rób tego, bo wtedy będziesz konkurować z Gmailem).
Jeśli w ogóle nie chcesz być programistą, ale nadal chcesz pracować z komputerami, możesz przejść do informatyki lub innej dziedziny techniki. W takich przypadkach wiedza o tym, co już programujesz, jest bardzo przydatna, ponieważ twoi rówieśnicy mogą nawet nie mieć tak dużo. Lub, wiesz, zostań muzykiem, jeśli to przemawia, ponieważ (podobnie jak większość dziedzin) dotyczy dziś komputerów. Napisz małe programy, które manipulują plikami audio lub MIDI na różne sprytne sposoby, dzięki czemu będziesz lepszym muzykiem. Przekonasz się, że wszelkie posiadane umiejętności programowania można zastosować w wielu dziedzinach, aby poprawić swoją pracę.