Zaczynam zdawać sobie sprawę, że tworzenie oprogramowania to (między innymi) proces ciągłego zadawania sobie pytań. Pytania dotyczące jakości kodu, separacji problemów, minimalizacji zależności, ...
Ale główne pytanie brzmi: jak daleko można się posunąć bez wylądowania w szpitalu psychiatrycznym?
Ubiegam się o nową pracę. Wczoraj byłem z potencjalnym przyszłym pracodawcą, który chciał przetestować moje możliwości programistyczne. Jednym z ćwiczeń było: wyjaśnienie, co robi ten kod. Przeszedłem przez pewien kod aplikacji (winforms w vb.net), którą opracowują (jest to aplikacja administracyjna dla szpitala). To dało mi okazję zobaczyć, jak do tego podchodzą, i było to raczej rozczarowujące.
Kilka przykładów:
- Gdzieś widziałem: Zadzwoń [wpisz tutaj nazwę podprogramu] -> Uderzyło mnie: czy to nie jest coś z VB6?
- Mają osobną warstwę danych, wykorzystującą ado.net, ale jedna metoda, którą musiałem zbadać, zwraca zestaw danych do warstwy wywołującej. Niezależnie od tego, czy jest to osobna warstwa danych, czy nie, aplikacja jest powiązana z ado.net (co również nigdy nie może stanowić problemu, jeśli nigdy nie przełączy się na inne podejście do dostępu do danych).
- Ten zestaw danych jest odczytywany „tak, jak jest”, więc nadal jest to podejście skoncentrowane na danych (oczywiście można spierać się o to, ile logiki / zachowania można umieścić w klasach takich jak „Pacjent” lub „LabAnalysisRequest”.
- Uważam również, że widziałem konstruowanie zapytania SQL przez konkatenację łańcuchów.
- Używają procedur przechowywanych (co dla mnie oznacza: rozproszenie logiki)
- bez wzmianki o widokach / kontrolerach: wszystko zależy od formy
- Najbardziej brzydką rzeczą, jaką zobaczyłem, było:
Jeśli TestEnvironment.IsTesting to someVar = [jakaś zakodowana wartość] jeszcze someVar = [jakaś wartość pobierana dynamicznie] koniec jeśli [pozostała część funkcji tutaj]
To wszystko tak różni się od tego, czego nauczyłem się w szkole: warstwa domeny (agnostyczna trwałość), warstwa trwałości, warstwa prezentacji, testy jednostkowe, ...
Przeformułowuję więc moje pytanie: jak fundamentalny lub dogmatyczny powinien być? W jakim stopniu programista powinien trzymać się swoich zasad lub po prostu napisać kod, który wykona zadanie?