← Назад к вопросам

С какими технологиями хотел бы работать на новом месте работы?

1.0 Junior🔥 201 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Технологии для работы на новом месте

Введение

После 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)

Заключение

Мой выбор технологий основан на практическом опыте, а не на хайпе. Я ищу стек, который:

  1. Решает реальные проблемы — не просто красивый код
  2. Имеет активное сообщество — легко найти help
  3. Остается актуальным — не deprecated через год
  4. Позволяет масштабировать — от MVP до миллионов юзеров
  5. Учит лучшим практикам — по мере работы, растешь

В конце концов, хороший разработчик может работать с любым стеком. Но работать с правильным стеком — это удовольствие, а не страдание.

С какими технологиями хотел бы работать на новом месте работы? | PrepBro