Mam podobny problem. Zacząłem przepisywać program, który tworzę już dwa lata.
Przepisywanie zacząłem w grudniu i jestem przy 25% funkcji, które działają w porównaniu z pierwotną wersją.
Czego się przy tym nauczyłem?
Warto pisać program z głową od początku, tak by nie było konieczne jego pisanie od nowa!!!
Czasami jednak tak bywa, że aplikacja się rozrasta i dochodzą do niej różne moduły, więc po jakimś czasie z małego programiku powstaje duży koszmarek.
(Przykładowo katalog mojej aplikacji w projektach zajmuje 60mb z czego pliki *.pas ponad 4mb.
Ciekawe, czy dałoby się policzyć, ileż to linii kodu napisałem?)
Przy przepisywaniu programu, okazuje się, że wiele rzeczy można zrobić inaczej. Prościej.
Również wyskakują bugi, których wcześniej nie było widać. To, zajmuje chyba najwięcej czasu.
Ze zrozumieniem kodu nie mam problemu, bo staram się komentować procedury; czasami jednak pojawi się coś, że za chiny nie wiem, po co była użyta ta stała, albo co ten program ma robić w tym miejscu :)
Wtedy tracę niepotrzebnie czas, bo wyeliminowanie jakiejś zmiennej może być fatalne w skutkach przy dalszej części kodu - wtedy trzeba cofać się do początku kodu.
Oczywiście najważniejsze, postawić sobie jakieś zadania typu, co w danym dniu chcę zrobić by działało.
Czy zająć sie wyglądem aplikacji, czy jej funkcjami? Przykładowo można 3 dni spędzić na tworzeniu nowego wyglądu okienek, menu itd. aby stwierdzić, że w pierwszej aplikacji lepiej to wyglądało i wrócić z powrotem do oryginału. brr...
Podsumowując.
- Trzeba postanowić, czy program ma mieć taki sam wygląd.
- Opracować i rozpisać sobie jego funkcje. Które z nich można usunąć, a jakie nowe należy dopisać.
- Jeśli coś dobrze działało, trzymać się tego i nie tworzyć nie potrzebnie nowych algorytmów, które mogłyby działać lepiej.
- Na początek dobrze jest utworzyć formatki i komponenty, a potem dopisywać do nich procedury.
np. ja sobie robie tak:
//---------------- menu main
procedure TForm1.mnuFiltersClick(Sender: TObject);
begin
// do zrobienia
end;
procedure TForm1.mnuStremInfoClick(Sender: TObject);
begin
// do zrobienia
end;
//---------------- menu popup1
itd.
Mam pogrupowane funkcje osobno dla menu, osobno dla przycisków itd.
Dzięki czemu łatwo mogę znaleźć daną procedurę. Tworzę coś w rodzaju ramy (jak w rowerze), a potem kształtuję całość dopisując kod dla danych elementów.
Przydatne jest używanie pakietu FastMM, a w szczególności opcja pełnego debugowania pamięci.
http://sourceforge.net/projects/fastmm/
lub
Memproof - http://automatedqa.com/downloads/memproof/index2.asp
W trakcie wykonywania programu, zaraz po jego zakończeniu mam raport czy nastąpiły wycieki pamięci "mem leaks". Kiedyś nie zwracałem na to uwagi, ale jak pewna aplikacja zaczęła mi się krzaczyć przy zamykaniu i w innych niespodziewanych miejscach jej działania, doceniłem tę metodę kontrolowania kodu.
No i najważniejsze, nie brać się za kodowanie po 3 piwach - można wtedy sporo namieszać, tak, że tydzień nie wystarczy na odkręcenie tego, co się namieszało.