Hey!👋 My name is Mark, I work as a mobile application developer at Sberbank, I also check students' homework on Skillbox and supervise a small telegram chat where I answer students' questions about Flutter. Sometimes I take small jobs. Read more about work experience below in the resume.I love programming, learning new technologies, solving problems. I am fond of competitive computer games (rating in Dota2 - 7040).From time to time I participate in various hackathons, I think they help me develop as a programmer, and most importantly, they give a big boost to soft-skills. I love writing unit tests💚.Programming languages: Dart (main language), JavaScript (low level, started working in it)📱Mobile: Flutter (Clean Architecture, TDD, BLoC)My main working tool in which I have the most experience."Cool" abbreviations:SOLID - I understand the meaning of letters, I try to adhere to these principles in development. Fortunately, layered architecture fits these principles very well. But I'm still a long way from a deep understanding.DRY - is a principle that unfortunately often pops up for me when refactoring, because the code is often repeated. I fight with it.OOP - because Flutter and Dart in particular use OOP, understand and use the basic principles in their work all the time.Architecture:I use layered architecture (Clean Architecture). I divide the application into 3 layers (some times 4-5):1️⃣ Data - work with data, repositories.2️⃣ Domain - the main layer with entities and useCases in which entities and business logic are stored,3️⃣ Presentation - data display layer + layer containing bloc.4️⃣ Business - sometimes I separate business logic to this layer (state management).5️⃣ Platform - data from android/ios platform, like an geoposition etc.I am injecting dependencies (Dependency Injection) via GetIt.Layers are connected to each other through abstract classes (interfaces). Each layer is covered with tests.I understand all the disadvantages of this approach.❌ A lot of "broiler code" (code generation solves part of the problem)❌ Different implementations of "Clean Architecture"❌ Not suitable for small projects (debatable)but the pros outweigh the cons.✅ Structured code.✅ Testable.✅Replacement of individual elements.✅ No direct relationship between layers.✅Expandable.✅ Easy refactoring.State Management:1️⃣ BLoC - the main library I use is bloc from Felix Angelov.2️⃣ Provider - used in early projects.3️⃣ Vanilla - for super small projects or modules, the usual setState() is sometimes enough.