С какими технологиями хотел бы работать на новом месте работы?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Технологии для работы на новом месте
Введение
После 10+ лет в индустрии я осознал, что технология — это средство, не цель. Важнее выбрать стек, который решает реальные проблемы, остается актуальным, и имеет здоровую экосистему. Вот мой идеальный стек.
1. Frontend (Мобильное приложение)
Flutter
Почему: Это лучший выбор для кроссплатформной разработки на сегодня.
- Производительность: Native-like performance благодаря Dart VM
- UI/UX: Material Design + Cupertino из коробки
- Hot reload: Разработка быстрее в 10 раз
- Экосистему: Pub.dev имеет всё, что нужно
- Сообщество: Активно растёт, много контента
- Версионирование: Стабильные релизы каждый месяц
// Пример качественного Flutter кода
class HomeScreen extends StatefulWidget {
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final _controller = TextEditingController();
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('My App')),
body: ListView(
children: [
TextField(controller: _controller),
ElevatedButton(
onPressed: () => print(_controller.text),
child: Text('Submit'),
),
],
),
);
}
}
Dart
Почему: Язык, спроектированный для UI разработки.
- Null safety: Eliminates whole class of bugs
- Strong typing: IDE support, refactoring
- Extensions: Функциональное программирование
- Async/await: Простой асинхронный код
- Быстрый компилятор: Мгновенный feedback
2. State Management
Выбор зависит от сложности проекта.
Для простых проектов: Provider
// Просто, понятно, мощно
class CounterProvider extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
// Использование
Consumer<CounterProvider>(
builder: (context, provider, _) => Text('${provider.count}'),
)
Для сложных проектов: Riverpod
// Functional, reactive, testable
final counterProvider = StateNotifierProvider<CounterNotifier, int>((ref) {
return CounterNotifier();
});
class CounterNotifier extends StateNotifier<int> {
CounterNotifier() : super(0);
void increment() => state++;
}
НЕ хотел бы: GetX
- Слишком магический
- Service locator antipattern
- Сложный для тестирования
3. Backend API
REST API с GraphQL опционально
// REST клиент
class ApiClient {
final Dio _dio = Dio(BaseOptions(
baseUrl: 'https://api.example.com',
connectTimeout: Duration(seconds: 10),
));
Future<User> getUser(String id) async {
final response = await _dio.get('/users/$id');
return User.fromJson(response.data);
}
}
Почему REST: Simplicité, performance, хорошая кэшируемость.
GraphQL опционально: Для сложных запросов с вложенными данными.
4. Базы данных
SQLite/Hive для локального хранилища
// Локальные данные
final hiveAdapter = HiveAdapter();
Box<User> users = await Hive.openBox<User>('users');
users.add(User(name: 'John'));
// Или SQLite
final database = await openDatabase('app.db');
await database.execute(
'CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)'
);
PostgreSQL/MySQL на backend'е
Почему: Надежность, масштабируемость, ACID гарантии.
5. Backend Technologies
Dart (Shelf/Serverpod) или Node.js (NestJS)
Dart Serverpod:
// Единый язык frontend и backend!
class UserEndpoint extends Endpoint {
Future<User> getUser(Session session, String id) async {
return await User.db.findById(session, id);
}
}
Почему: Unified tech stack, меньше context switching.
Альтернатива: Node.js с NestJS
@Controller('users')
export class UserController {
@Get(':id')
async getUser(@Param('id') id: string) {
return this.userService.findById(id);
}
}
Почему: Экосистема, производительность, простота.
6. CI/CD и DevOps
GitHub Actions
name: Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v2
- run: flutter test
- run: flutter build apk
Docker для backend
FROM google/dart:latest
WORKDIR /app
COPY . .
RUN dart pub get
CMD ["dart", "run", "bin/server.dart"]
Kubernetes опционально
Почему: Масштабируемость, надежность, настоящие DevOps.
7. Аналитика и мониторинг
Sentry для ошибок
await Sentry.init(
'https://your-sentry-dsn@sentry.io',
tracesSampleRate: 1.0,
);
try {
riskyFunction();
} catch (e) {
await Sentry.captureException(e);
}
Firebase Analytics для событий
final analytics = FirebaseAnalytics.instance;
await analytics.logEvent(
name: 'user_signup',
parameters: {'method': 'email'},
);
Grafana для метрик
Почему: Видишь что происходит, быстро найдешь bottleneck.
8. Тестирование
Unit: Mockito/mocktail
class UserServiceTest {
late MockUserRepository mockRepo;
late UserService service;
setUp(() {
mockRepo = MockUserRepository();
service = UserService(mockRepo);
});
test('getUser returns user', () async {
when(mockRepo.getUser('1'))
.thenAnswer((_) async => User(id: '1', name: 'John'));
final user = await service.getUser('1');
expect(user.name, equals('John'));
});
}
Integration: Patrol/Flutter Integration Test
final find = CommonFinders();
await tester.pumpWidget(MyApp());
await tester.tap(find.byText('Login'));
await tester.pumpAndSettle();
expect(find.byText('Welcome'), findsOneWidget);
9. Документация и Know-How
Obsidian/Notion для документации
Почему: Localized knowledge, search, backlinks.
Architecture Decision Records (ADR)
# ADR-001: Use Provider for State Management
## Status
Accepted
## Context
We need state management solution that is simple
and well-documented.
## Decision
Use Provider package.
## Consequences
- Simpler code
- Large community
- Good IDE support
10. Development Tools
VS Code + Extensions
{
"extensions": [
"Dart-Code.dart-code",
"Dart-Code.flutter",
"GitHub.copilot",
"esbenp.prettier-vscode"
]
}
Git Flow + Conventional Commits
# Структурированные коммиты
git commit -m "feat: add user authentication"
git commit -m "fix: handle null pointer exception"
git commit -m "refactor: extract UserRepository"
Что НЕ хотел бы видеть
- ❌ Legacy кода без тестов
- ❌ Протеизм (решаем все что угодно чем угодно)
- ❌ Синхронный код везде
- ❌ Zero documentation
- ❌ Outdated dependencies (год без обновлений)
- ❌ No monitoring (узнаём об ошибках от пользователей)
- ❌ Manual deployment
Полный стек (мой идеал)
Frontend: Flutter (Dart) State: Provider или Riverpod API: REST (REST hooks) Backend: Node.js (NestJS) или Dart (Serverpod) Database: PostgreSQL + SQLite CI/CD: GitHub Actions Monitoring: Sentry + Grafana Testing: Mockito + Patrol Deployment: Docker + Kubernetes (или просто VPS)
Заключение
Мой выбор технологий основан на практическом опыте, а не на хайпе. Я ищу стек, который:
- Решает реальные проблемы — не просто красивый код
- Имеет активное сообщество — легко найти help
- Остается актуальным — не deprecated через год
- Позволяет масштабировать — от MVP до миллионов юзеров
- Учит лучшим практикам — по мере работы, растешь
В конце концов, хороший разработчик может работать с любым стеком. Но работать с правильным стеком — это удовольствие, а не страдание.