Читаешь ли дополнительную литературу
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Дополнительное чтение и самообразование
Краткий ответ
Да, я постоянно читаю. Для senior разработчика это не опция, а необходимость. Технологии меняются каждые 6-12 месяцев, и нужно оставаться актуальным.
Книги, которые я перечитывал
1. "Clean Code" — Robert Martin
Когда читал: 2014, 2018, 2022 (перечитывал трижды)
Время: ~15 часов в первый раз, потом по 30 мин в год (на переповтор)
Значимость: 10/10 ⭐⭐⭐⭐⭐
Что дала:
- Переформатировал свой код (named variables вместо obscure names)
- Понял принципы Small Methods vs Large Functions
- Научился читать код других людей критически
Цитаты, которые запомнил:
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
Как применил в Android:
// ❌ БЫЛО (плохо читаемо)
fun proc(l: List<Int>) {
for (i in l.indices) {
if (l[i] > 10) println(l[i])
}
}
// ✅ СТАЛО (clean code)
fun printLargeNumbers(numbers: List<Int>) {
val largeNumbers = numbers.filter { it > LARGE_NUMBER_THRESHOLD }
largeNumbers.forEach { println(it) }
}
private const val LARGE_NUMBER_THRESHOLD = 10
2. "Refactoring" — Martin Fowler
Когда читал: 2016, 2020 (Java edition → Kotlin edition)
Время: ~20 часов
Значимость: 9/10 ⭐⭐⭐⭐⭐
Что дала:
- 72 паттерна рефакторинга
- Как узнать, когда нужен рефакторинг (code smells)
- Как безопасно рефакторить (не сломать функциональность)
Практический пример (Extract Method):
// ❌ ДО
fun processUser(user: User) {
// валидация
if (user.name.isEmpty()) return
if (user.email.isEmpty()) return
// сохранение
database.save(user)
// отправка email
emailService.send(user.email, "Welcome!")
}
// ✅ ПОСЛЕ (рефакторинг: Extract Method)
fun processUser(user: User) {
if (!validateUser(user)) return
saveUserToDatabase(user)
sendWelcomeEmail(user)
}
private fun validateUser(user: User) =
user.name.isNotEmpty() && user.email.isNotEmpty()
private fun saveUserToDatabase(user: User) =
database.save(user)
private fun sendWelcomeEmail(user: User) =
emailService.send(user.email, "Welcome!")
3. "Designing Data-Intensive Applications" — Martin Kleppmann
Когда читал: 2019
Время: ~25 часов (очень плотная книга)
Значимость: 10/10 ⭐⭐⭐⭐⭐
Что дала:
- Понимание масштабируемости и reliability
- Как работают базы данных изнутри
- Концепции консистентности (CAP theorem)
- Как проектировать системы под масштаб
Применение в Room:
// Понимая книгу, я знаю:
// 1. Зачем Room использует коллекции над сетью
// 2. Как избежать N+1 queries
// 3. Зачем нужна транзакция
@Dao
interface UserDao {
// ❌ НЕПРАВИЛЬНО: N+1 queries
@Query("SELECT * FROM users")
fun getAllUsers(): List<User>
// На каждого пользователя будет отдельный query для его постов!
// ✅ ПРАВИЛЬНО: 1 query с JOIN
@Query("""
SELECT u.*, p.id, p.title
FROM users u
LEFT JOIN posts p ON u.id = p.user_id
""")
fun getUsersWithPosts(): List<UserWithPosts>
}
4. "The Pragmatic Programmer" — Hunt & Thomas
Когда читал: 2017 (в процессе)
Время: ~10 часов
Значимость: 8/10 ⭐⭐⭐⭐
Что дала:
- Практические советы (не философия)
- DRY, KISS, YAGNI принципы
- Как быть эффективным разработчиком
- Коммуникация с командой
Применение:
- Я не пишу код "на будущее" (YAGNI)
- Я не дублирую логику (DRY)
- Я выбираю простые решения (KISS)
Статьи и блоги, которые следю
Еженедельно (30 мин):
-
Medium — Top Android Writers
- Ищу статьи про Kotlin, Compose, Architecture
- Авторы: Roman Elizarov (coroutines), Yigit Boyar (Jetpack)
-
Android Developers Blog (developer.android.com)
- Официальные новости про SDK
- Best practices updates
- Library releases
-
Habr (русский язык)
- Статьи про архитектуру
- Case studies от Яндекса, Авито, Сбера
Ежемесячно (1 час):
-
WWDC / Google I/O видео
- Новые tools и frameworks
- Performance optimization tips
- Design patterns от Google engineers
-
Kotlin blog (blog.jetbrains.com)
- Новые фичи языка
- Примеры использования
Документация, которую читаю постоянно
Каждую неделю я перечитываю части документации:
✅ Jetpack Compose
- State Management
- Performance
- Testing
✅ Kotlin Coroutines
- Dispatchers
- Exception handling
- Flow vs StateFlow
✅ Android Architecture
- Lifecycle
- Process death
- Background execution
Подкасты (во время спорта)
Время: ~2 часа в неделю (во время пробежки, в тренажёрке)
1. "Fragmented Podcast" (Android разработка)
2. "Kotlin Podcast" (новые фичи)
3. "Software Engineering Daily" (системный дизайн)
GitHub — мой инструмент обучения
Что я изучаю:
1. Open source коды
- Как устроены популярные библиотеки
- Какие паттерны используют опытные разработчики
- Примеры: Retrofit, OkHttp, Room
2. Архитектурные примеры
- Architecture samples от Google
- Now in Android (reference app)
- JetNews (Compose example)
3. Code reviews других разработчиков
- Что критикуют в PRs
- Какие best practices упоминаются
Метод: я не просто смотрю код, я анализирую:
// Читаю Retrofit и спрашиваю себя:
// 1. Почему используется Interface вместо Abstract Class?
// 2. Зачем нужен @GET, @POST аннотации (как они работают)?
// 3. Как реализован Interceptor паттерн?
// 4. Почему OkHttp поверх HttpUrlConnection?
Как я организую обучение
Структура моей недели:
ПН-ПТ: Работа (практическое применение знаний)
СР 19:00-20:00: Чтение статей (Medium, Habr)
ПТ 20:00-21:00: Документация (Kotlin, Android, Compose)
СБ 10:00-11:30: Видео (Google I/O, talks)
ВС 08:00-08:45: Спорт + подкаст
Что я НЕ читаю
❌ Избегаю (зря времени):
- Tutorials по базовым вещам (есть official docs)
- Medium статьи "10 способов сделать X" (часто неправильно)
- Старые книги про Java design patterns (Kotlin проще)
- Любые "Learn in 30 days" курсы (поверхностно)
Критическое отношение к источникам
Не верю всему, что читаю:
// Статья говорит: "Используй RxJava для всего!"
// Мой анализ:
// ❌ RxJava сложнее, чем Coroutines
// ❌ Learning curve выше
// ✅ Coroutines — современный стандарт (2023+)
// ✅ Google рекомендует Coroutines
// Я выбираю Coroutines
Результат постоянного обучения
✅ За 10+ лет я:
- Выучил 5+ языков программирования
- Освоил 3+ мобильных платформы
- Прошёл эволюцию Android (AsyncTask → RxJava → Coroutines)
- Остаюсь актуальным в быстроменяющейся индустрии
Мой совет junior разработчикам
Читайте, но:
- Выбирайте источники — официальная документация > блоги
- Тестируйте на практике — не просто читайте, кодьте
- Критикуйте — если статья странная, проверьте
- Делайте переповтор — читайте классику несколько раз
- Обучайте других — лучший способ закрепить знания
Итог
Я читаю не из обязанности, а потому что люблю профессию. Постоянное обучение — это часть идентичности senior разработчика. Без этого ты быстро устаешь и становишься "вчерашним разработчиком" в мире, где завтра уже приходит каждые 6 месяцев.