Базовые ориентиры при написании кода

1. Код должен быть максимально понятным. Если на ревью кто-то не понимает ваш код, значит код не максимально понятен. Если кто-то правил ваш код, рефакторил и допустил ошибку - код не максимально понятен.

2. Код должен быть простым. Простой код делает всегда одну вещь. Если это метод - он делает одно действие. Если это класс - он отвечает за одну область ответственности. Если это модуль - он содержит только то, что нужно и относится к нему.

3. Код должен быть оптимальным по производительности. Это означает:

  • не создавать лишних объектов для GC
  • не выполнять ожидающих io действий там, где их можно выполнить отложенно
  • не наполнять память (например, создавая множество потоков)
  • не допускать удерживание объектов дольше их жизненного цикла (утечки памяти), деинициализировать то, что больше не нужно
  • знать среднее время каждной операции, которую вы пишете (например, сколько стоит вызов new Error(), new Thread() и т.д.)
  • прочтите книгу Effective Java

    4. Код не должен содержать ошибок многопоточности.

  • Всегда следите за жизненным циклом объектов
  • Многопоточным может быть также и однопоточный код, выполняющийся в Looper.loop()
  • Всегда подразумевайте, что код многопоточный. Поле в которое вы пишите/читаете может быть null. Текст, который собирается в StringBuilder и читается из разных потоков может превратиться в мусор
  • прочтите книгу Concurrency in Practice

    5. Код не должен падать в продакшене.

  • Пишите юнит-тесты тех мест, где вы сомневаетесь. (Pro-level: пишите юнит тесты еще и для тех мест где вы не сомневаетесь)
  • Если вы в себе (или сторонней либе) не уверены, оберните все в try..catch + отсылку нон-фатала в фабрик

    6. Вы должны получать удовольствие от своего кода. Если вы этого не чувствуете, попробуйте отдохнуть, взять отпуск. Если вы этого никогда не чувствовали, вам стоит расширить границы восприятия. Устройте себе challenge, поучаствуйте в соревнованиях codegolf, aicup, пощелкайте задачи hackerrank, leetcode. Попробуйте написать что-нибудь для себя лично в своем телефоне.