Building Software From Scratch

By John SonmezFebruary 23, 2017

Wielu twórców oprogramowania lubi komplikować rzeczy. Dostają coś, co mogłoby być proste i łatwe, a ze względu na to, co większość ludzi mówi w Internecie, sprawiają, że jest to skomplikowane.

Software powinien być prosty. Powiedziawszy to, łatwo zrozumieć, dlaczego tak wielu programistów ma trudności z budowaniem oprogramowania od podstaw. W ich umysłach jest to całkowicie skomplikowana i trudna rzecz, a oni całkowicie utknęli w środku procesu.

Więc pytanie brzmi… Jak budować oprogramowanie od zera?

Transkrypt z filmu

John Sonmez:

Hej, co słychać? John Sonmez z simpleprogrammer.com. Dzisiaj mam pytanie dotyczące budowania oprogramowania od podstaw. To jest pytanie, które dostałem wiele razy od wielu różnych ludzi, ponieważ jest to coś, co jest trudne do zrobienia, gdy jesteś początkujący, aby dowiedzieć się, jak możesz to zrobić.

To pytanie pochodzi od Akasha i mówi: „Hej John, twoje filmy są świetne i bardzo cenię sobie twoje rady. Jednym z problemów, z którymi się borykam, jest to, że jeśli chodzi o budowanie dużego oprogramowania, nie mogę wymyślić, jak zaprojektować całą rzecz od zera. Powiedzmy, jak rozbić całość na mini podzadania, a następnie zaimplementować każde podzadanie i połączyć je wszystkie razem, aby działało. Byłoby bardzo miło, gdybyś mógł mnie pokierować, jak pokonać ten problem. Dzięki z góry.”

Akash, chciałbym powiedzieć, że to, co chcesz zrobić, to zamiast myśleć o wzięciu całego systemu, tego rodzaju podejścia odgórnego, rozłożyć go na części, złożyć wszystkie te części i zobaczyć, jak do siebie pasują, i zbudować tego ogromnego Transformera lub klocki Lego z tych ogromnych klocków Lego. Chcesz myśleć o rozwoju oprogramowania bardziej jak o ewolucji.

Mam na myśli to, że zaczynasz od czegoś naprawdę prostego. Zacznij od najprostszej rzeczy, która mogłaby ewentualnie działać, która nie ma zbyt wielu funkcji, a następnie ewoluuj w kierunku, w którym chcesz iść, zamiast robić to, co nazywają wielkim projektowaniem z góry. Nie oznacza to, że nigdy nie powinieneś myśleć o ogólnej architekturze rzeczy i że nie masz projektów i pewnych rzeczy z góry. W wielu przypadkach nie musisz robić tak dużo, jak myślisz, że potrzebujesz.

Jeśli projektujesz oprogramowanie, które ma być osadzone wewnątrz urządzenia elektronicznego, a inżynier sprzętu będzie musiał opracować obwody lub niestandardowy chip, lub coś, aby to działało, prawdopodobnie będziesz musiał zaprojektować wiele z tych rzeczy z góry i prawdopodobnie będziesz musiał to zrobić. Możesz być nawet ograniczony w tym zakresie. Dla większości oprogramowania, które budujemy dzisiaj, szczególnie aplikacji internetowych i tego typu rzeczy lub aplikacji mobilnych, możemy zbudować coś, co jest bardzo, bardzo podstawowe, a następnie ewoluować, wprowadzać zmiany, aby je rozwijać i dodawać złożoność w miarę potrzeb.

Jedną z rzeczy – jednym z powodów, dla których jest to tak ważne – jest to, że zmorą rozwoju oprogramowania, jedną z najgorszych rzeczy w rozwoju oprogramowania jest złożoność. Ten kanał nazywa się Simple Programmer, a moja działalność polega na upraszczaniu tego, co skomplikowane, ponieważ właśnie to musimy robić. Jako twórcy oprogramowania jednym z waszych głównych zadań jest walka ze złożonością, ponieważ złożoność pojawia się w systemie i utrudnia jego utrzymanie i sprawia, że jest trudny do zrozumienia. Zwiększa prawdopodobieństwo wystąpienia błędów i awarii. Chcemy zredukować złożoność tak bardzo, jak to tylko możliwe. Chcemy upraszczać. Musimy zacząć tak prosto, jak to tylko możliwe, co jest najprostszą rzeczą, która może działać?

Wielokrotnie w świecie przedsiębiorców, nazywają to MVP lub minimalnym realnym produktem. Co możesz zrobić, kiedy próbujesz zbudować duży system oprogramowania lub co możesz zrobić, to zacząć od czegoś naprawdę małego. Zacznij od bardzo, bardzo małej rzeczy. Próbuję sobie przypomnieć książkę, ale czytałem tę naprawdę dobrą książkę o czymś, myślę, że był to test driven development step-by-step lub coś w tym stylu. W książce, on projektował aplikację typu Notatnik czy coś takiego. Zaczął od bardzo, bardzo inkrementalnego – zrobił to w bardzo inkrementalny sposób i zaczął od, myślę, że jego aplikacja potrzebowała bazy danych, ale zaczął od tego, że nie miał bazy danych. Zamiast tego, po prostu jak przechowywanie danych w plikach tekstowych, które czytał z plików tekstowych. Potem doszedł do punktu, w którym potrzebował umieścić je w bazie danych, a następnie zmodyfikował program i sprawił, że odczytywał te same dane, tyle że stworzył abstrakcję do odczytu z bazy danych.

To naturalna ewolucja rzeczy i w ten sposób można zbudować to złożone oprogramowanie. Gwarantuję ci, że większość złożonego oprogramowania, które faktycznie jest dziś budowane, jest budowana w ten sposób. Wiele z nich nie jest zaprojektowany z góry, a następnie zbudować wszystkie te kawałki i nadzieję i modlić się, że działają. W przeciwnym razie, kończy się to przekroczeniem budżetu i harmonogramu. Niestety, to się zdarza. Jeśli chcesz odnieść sukces, jeśli chcesz być w stanie to zrobić, po prostu zacznij od czegoś małego. Nie ma na tym świecie nic, co byłoby trudne. Nie ma nic, co byłoby skomplikowane. Tylko to, że składa się z kilku prostych rzeczy, sprawia, że wydaje się skomplikowane.

Możesz zbudować najbardziej złożoną architekturę. Możesz zbudować ogromną rzecz, ale musisz zacząć od tego, co proste. To wszystko składa się z prostych rzeczy. Następnie zamiast próbować po prostu wziąć wszystkie te kawałki, po prostu zacznij. Rozwijaj to. Zacznij. Zbuduj coś. Jaka jest najmniejsza, najprostsza rzecz, którą możesz zbudować, a która robi cokolwiek zbliżonego do funkcjonalności? Następnie zacznij dodawać funkcje. W miarę jak dodajesz funkcje, dodajesz architekturę, aby je wspierać i tworzysz abstrakcje.

Książka, którą polecam, która prawdopodobnie pomoże ci to zrobić, nazywa się Clean Code. Jest to jedna z moich ulubionych książek autorstwa Roberta Martina. Zdecydowanie polecam tę książkę, ale chcesz ewoluować swoją architekturę. Następnie drugą rzeczą, którą chciałbym powiedzieć na ten temat, jest to, że w miarę ewolucji rzeczy, będziesz tworzyć abstrakcje, aby utrzymać je w prostocie, abyś nigdy nie miał tej ogromnej, ogromnej złożoności. Czasami może to być nawet przepisanie całej rzeczy lub jej części, ale to jest w porządku. Tak właśnie działa ewolucja oprogramowania. Jest to lepsze niż dodawanie złożoności.

Wielokrotnie twórcy oprogramowania chcą przedwcześnie optymalizować. Chcą uczynić rzeczy niezwykle elastycznymi. Dokonują przedwczesnej optymalizacji oprogramowania, ponieważ próbują zbudować ten bardzo, bardzo solidny system. To się często nie udaje, ponieważ nie wiemy, czego nie wiemy. Nie wiemy, czego będziemy potrzebować, więc lepiej nie próbować tego przewidzieć, ale po prostu powiedzieć: „Dobra. Teraz muszę dodać tę nową funkcję lub sprawić, by to działało w ten sposób. Jak mogę to rozwinąć?”

Pamiętaj, rozwój oprogramowania nie jest jak most. To nie jest tak, że położyłeś beton, a teraz zamierzasz zmienić architekturę domu. Oprogramowanie jest plastyczne. Jest jak glina. Można je zmieniać dookoła. Nie ma wysokich, wysokich kosztów, abyś mógł je modyfikować i zmieniać. Musisz wykorzystać przewagę tego medium tak bardzo, jak to tylko możliwe, co nadaje się do ewolucyjnego procesu rozwoju oprogramowania, w przeciwieństwie do dużego projektu z góry.

Mam nadzieję, że to ci pomoże Akash. Świetne pytanie. Myślę, że wiele osób pytało o to w przeszłości. Jeśli masz pytanie do mnie, możesz wysłać e-mail na adres [email protected]. Jeśli podoba Ci się ten film, śmiało kliknij ten duży przycisk Subskrybuj poniżej, jeśli jeszcze nie zasubskrybowałeś. Jeśli już to zrobiłeś, doceniam to. Zostań z nami do następnego razu. Trzymaj się.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.