Przemyślenia na temat podejścia do programowania

id02009

Chciałbym podzielić się z wami moją osobistą refleksją na temat w jaki sposób zmienia się myślenie o programowaniu. Jestem też ciekaw co o tym myślą starsi stażem ode mnie (i ci młodsi również), gdyż intensywną naukę rozpocząłem 3 lata temu a mimo to już zauważam pewne zmiany.

Chodzi mi o ogólne podejście do programowania jakie prezentują różni ludzie. Wyróżniam tutaj dwa typy:

1. Nazwijmy go roboczo twórczym. Jeżeli przed programistą staje jakiś problem, stara się on go rozwiązać w ramach własnych możliwości. Dopiero kiedy wszystko zawodzi zwraca się z prośbą do ogólnie pojętej społeczności programistów (forum, koledzy, książki) 2. Nazwijmy go odtwórczym. Od początku szukają gotowych rozwiązań (komponentów, algorytmów etc.) i nie chodzi mi to jedynie o posty na forum typu: chcę mieć kod, dajcie mi go.

Prosty przykład (z życia wzięty). Zajęcia. Pierwsze ćwiczenia - jednym z problemów było wyciągnięcie składników koloru z liczby int (jaka głębia - nieważne). X jako osoba, która reprezentuje podejście i wykonał to za pomocą działań logicznych i przesunięć bitowych. Z kolei Y, kolega X, zrobił to za pomocą funkcji GetRValue(...).

X i Y zrobili to w mniej więcej takim samym czasie. X wymyślił sposób i zaimplementował go, a Y znalazł gotowe rozwiązanie.

Zastanówmy się teraz nad plusami i minusami tych dwóch postaw:

Podejście 1 (twórcze) Podejście 2 (odtwórcze)
plusy plusy
- zmusza do myślenia - oszczędność czasu
- rozwija rozwiązującego problem - oszczędność zasobów poznawczych (można skupić się na meritum problemu, nie na szczegółach)
minusy minusy
- duży koszt rozwiązania problemu - nie wymaga rozumienia podstawowych problemów programistycznych i algorytmicznych
- wyważanie otwartych drzwi- daje mniej satysfakcji

To wszystko co udało mi się wymyśleć[#]_. Jak widać każde podejście ma wady i zalety. Jakie jest moje o tym zdanie? Myślę, że osoby które programowanie kojarzą z przeciąganiem komponentów po formie ale nie zadających sobie trudu zrozumienia zasad działania oprogramowania (podejście 2) to są właśnie Ci, którzy zalewają forum postami typu ?pomocy, na jutro mam napisać 5 programów z pętlą i się nie wyrobię?.

Oba podejścia jak już mówiłem mają wady i zalety. Uważam, że warto podczas nauki reprezentować podejście twórcze, żeby wyrobić u siebie umiejętność rozwiązywania problemów, żeby nauczyć się myśleć pod algorytm. Z kolei w pracy zawodowej warto przerzucić się na podejście odtwórcze (o ile jest to możliwe - wiadomo, niektóre projekty są tak innowacyjne, że wszytko od zera się pisze) aby pracować wydajniej.

Liczę na wasze komentarze w tej sprawie. Pozdrawiam Grześ (id02009) _____ [#] PS. Jeżeli przyszły Ci do głowy inne wady lub zalety któregoś z tych podejść - edytuj proszę ten dokument i dopisz do tabeli

7 komentarzy

Ja się podpisuję pod tym co napisał Dryobates, lecz sam art też jest do rzeczy.

Mnie osobiscie drażnią trochę osoby, które układają aplikację z klocków nie mając przy tym pojęcia o co chodzi w kodzie i nie ma się czemu dziwić jeżeli ich jedyny kontakt z klawiaturą ogranicza się do Ctrl+C potam Ctrl+V itd.

akurat Kuba (dryo) cos wie na temat "bycie programista" :)

Uhh Dyro co za wizja przedstawiona w gorzki sposób...:)

Ja bym to sformułował inaczej:

W programiście żyją 2 natury (a przynajmniej powinny): programista-artysta i programista-rzemieślnik. Jeden pisze program dla przyjemności tworzenia. Drugi pisze, by przeżyć.

Po prostu czasem artysta musi stać się prostytutką... sprzedać się.

No ciekawy tekst - w zasadzie informacje w nim zawarte są oczywiste, ale...
Myślę, że ważne jest aby podczas działania twórczego dojść samemu do takiego wniosku, który ty wysunąłeś, bo chyba tylko wtedy tak naprawde pojmiesz różnicę międziy "programowaniem", a programowaniem :)

Granica wydaje sie nieco sztuczna, ale nie twierdzę, że programista jest taki, albo taki. Jak słusznie powiedziałeś mozna potrafić i jedno, i drugie.
Wydaje mi się też, że jeżeli potrafisz rozwiązywać samodzielnie problemy to nie ma żadnego problemu dla Ciebie skorzystanie z gotowego rozwiązania. A z kolei, jeśli ktoś tylko korzystał do tej pory z gotowych komponentów nie nauczył się podstaw i potem pojawiają się pytania czemu jak zrobię SQL:="select * from tabela" kompilator wywala 'niekompatybilne string z TStrings'.

Dzięki za kometntarz ale nie będę wrzucał go to tekstu, bo myślę, że tu gdzie komentarze będzie mu dobrze i będzie dobrym uzupełnieniem artykułu.

Troche to wszystko naciągane.
Taki podział można jedynie zastosować wśród początkujących programistów. Chyba, że podane przykłady to tylko taka metafora ;)

Lepszy bylby podział (nawet podobny) na:

  1. programistów twórczych, rozwijających się, którzy traktują programowanie jako coś ważnego samo w sobie. Np. twórcy gier ;P

  2. oraz na ludzi, dla ktorych programowanie jest tylko środkiem, do osiągnięcia jakiegoś innego celu. Korzystają oni z gotowych rozwiązań, bo nie mają czasu sie zapoznawać z wszystkim od podstaw, liczy sie dla nich tylko efekt koncowy. Dostają pół-produkt i po drobnych modyfikacjach mają to czego chcieli.

Może jeszcze przykład: sklep internetowy. Mozna samemu się pobawić w PHP i MySQL i stworzyć niezły sklep, przy tym dużo się ucząc i bawiąc, ale można też skorzystać z gotowego szablonu, który po niewielkich podyfikacjach będzie nam odpowiadał.

Jednak jest to moim zdaniem i tak granica nieco sztuczna, ja sam czesto robie wszystko od zera, ale często tez korzystam z gotowych rozwiazan. Zależy od tego czy robiąc coś od zera, naucze się czegos pozytecznego, i ile poswiece na to czasu.

Nie chciałem modyfikowac Ci artykulu, poniewaz są to twoje przemyslenia. Jednak bez probemu, moj teks tam mozesz gdzies wcisnąć, jesli chcesz. ;)