Я начинаю понимать, что разработка программного обеспечения - это (помимо прочего) процесс постоянного задавания себе вопросов. Вопросы относительно качества кода, разделения проблем, минимизации зависимостей, ...
Но главный вопрос: как далеко вы можете пройти, не попав в психиатрическую больницу?
Я подаю заявку на новую работу. Вчера я был с возможным будущим работодателем, который хотел проверить мои возможности программирования. Одним из упражнений было: объяснить, что делает этот код. Я просмотрел некоторый код приложения (winforms in vb.net), который они разрабатывают (это административное приложение для больницы). Это дало мне возможность реально увидеть, как они подходят к вещам, и это было довольно обидно.
Несколько примеров:
- Я где-то видел: Позвоните [введите название подпрограммы здесь] -> Я был поражен: разве это не что-то из VB6?
- У них есть отдельный слой данных, использующий ado.net, но один метод, который мне пришлось изучить, возвращает набор данных на вызывающий слой. Таким образом, отдельный слой данных или нет, приложение привязано к ado.net (что также никогда не будет проблемой, если они никогда не переключатся на другой подход к доступу к данным).
- Этот набор данных читается как есть, поэтому он по-прежнему ориентирован на данные (конечно, можно поспорить, сколько логики / поведения вы можете поместить в такие классы, как «Patient» или «LabAnalysisRequest»).
- Я также считаю, что видел конструирование SQL-запроса путем конкатенации строк.
- Они используют хранимые процедуры (что для меня означает: рассеяние логики)
- нет упоминаний о представлениях / контроллерах: все это зависит от формы
- Самое ужасное, что я видел, было:
Если TestEnvironment.IsTesting то someVar = [жестко закодированное значение] еще someVar = [некоторое динамически полученное значение] конец, если [Остальная часть функции здесь]
Все это так сильно отличается от того, что я изучал в школе: (постоянный уровень) уровень домена, постоянный уровень, уровень представления, модульное тестирование, ...
Поэтому я перефразирую свой вопрос: насколько фундаментальным или догматичным должен быть человек? В какой степени программист должен придерживаться своих принципов или просто писать код, который выполняет свою работу?