Roughly 1 month ago, I took a challenge for myself that focuses on learning and building in public. It’s time to reflect on what I’ve achieved.
I focused on learning and building, so writing blogs was not a priority. And I decided that today is the best time to make a review of my past 2 weeks.
Learned
Lately, I’ve been learning Kotlin coroutines and flow. It was more of a quick introduction to this topic because I plan to learn databases, so I’ll need to understand it. Although now I’d want to do things differently, it was interesting to dip my toe into reactive programming.
Coroutines are scheduled code within a thread. And the fact that a new thread is not necessarily started confuses me. For now, the traditional way of multithreading with threads and callbacks is actually more clear and readable for me. But I’m sure that’s only because I haven’t worked with coroutines much, especially in the practical setting.
When it comes to flows, they are essentially placeholders for values that come in a certain period of time. That’s why they are called streams of data.
I also learned the Compose Navigation library that is AFAIU here just for convenience so that we don’t need to hold everything in state, write a huge when
expression, manually deal with animations, and manually integrate with other Jetpack Compose components.
I also was surprised by the simplicity of MVI. Met this thing unexpectedly. So the main idea is that you put all the states in one data class as plain val
s and then put the whole class to a single state. First, I doubted how optimized this approach is, because I thought that an update to a state would cause unnecessary recompositions. But this turned out to be not true because they are skippable as Compose is smart enough. This is not true about xml views though. However, MVI introduces some hassle if you want to save the state to the SavedStateHandle
and can also cause race conditions [source] so I think I’m good with MVVM for now.
Resources
Here are some resources that helped me learn this.
Coroutines
- Introduction to coroutines
- Use Kotlin Coroutines in your Android App
- 5 Fatal Coroutine Mistakes Nobody Tells You About
Flow
- Kotlin Flow: Simple yet Powerful Implementation — This helped me understand how they actually work.
- The Ultimate Guide to Kotlin Flows
⚠️ However, I rethought my learning approach. |
---|
According to my new mindset, I should’ve begun with the following pathways right away. ⬇️ Especially given that they do not require knowledge of coroutines and flow. It is actually taught there. 1. Android Basics with Compose — Unit 5: Connect to the internet. 2. Android Basics with Compose — Unit 6: Data persistence. |
+ Jetpack Compose Navigation Codelab
Progress
I modified my roadmap a bit and now I’m in the middle of my path 🎉
- Android basics
- Kotlin
- Jetpack Compose basics
- Advanced state, side effects, and Gradle
- Inline functions, testing, introduction to Coroutines and Flow ◀️
- Databases and modularization
- Interaction with remote API
- Dependency injection
- Architecture (MVVM, MVI) and other stuff
See that “Make my app — 5%”? I actually managed to let go and it doesn’t bother me. But what I contemplated is that it’s not OK. I can already write business logic and the UI, only then add data storage. I also shouldn’t care about best practices that much. So to stay both practical and motivated, I decided to focus on building now.
Oh, and I entered a university
Actually, I did it in the summer, but the lectures traditionally start in September.
And that’s coming from a person who is a big fan of the practical approach and says that higher education is a scam. 🌚
I’m honestly, indeed very skeptical about the higher education for developers. But, first, it’s free for me. Second, here are my expectations in descending priority:
- More opportunities to find a job. I can get an internship or eventually go overseas.
- Communication. Very high chances of finding great friends.
- Plan B. Being self-taught and having a degree at the same time is a win-win, especially for someone of my age.
- Get the foundation, support, and confidence. However skeptical I was, that’s what schools do well.
This is insufficient for me to justify the amounts of money people spend. My time is already a significant investment! 😼
I used to spread the information that classes only would take ~6 hours a day. People felt sorry for me, but it actually turned out not true. 😆 I just confused some stuff. In reality, it’s about 4.5 h. And Friday is a day off.
I’m enjoying it so far and feel like my expectations are going to be met. Who knows, I may change my decision in the future.
Performance (adjusted to 2 weeks)
My challenge
✔️ 7/10 tweets
✔️ 2/3 articles
Healthy habits
I’d better not tell you 🤭
Changes
So I allowed myself to fall behind a bit. And until now I’ve been only increasing my goals. But now that I’m not going to have that much time, I think it’s an opportunity to focus only on a few of them. And finally, get back to the comfort zone.
And I also have exactly four weeks until my challenge finishes. So now I don’t have room for error.
- No more tweets. I’ll tweet only when I want.
- I will do programming at least 6 days a week, but won’t count the hours anymore.
- Back to 1 article a week.
- Also deleted a couple of habits I already have, and switched to HabitNow for habit tracking.
Ending
I wrote this article for myself mainly. But if you read this far, thanks for being interested in me. 🤗
If you're learning Android and struggling with some of these topics, you can DM me on Twitter or email me (daniel.rendox@gmail.com) and we'll figure it out together.
Top comments (2)
Hi Daniel
Cool article.
How did you decide on Kotlin for a start?
Hey, Cyril! It's a great question. I like to ask why a dev chose a particular programming language too.
In my situation, the reason is simple — 2 years ago I had an opportunity to start my journey into IT with a free bootcamp. We learned Android with Java, but I actually quit in the middle of the course due to the lack of time. So my first language was Java.
This summer I had much more free time, which allowed me to continue learning Android. Android world is Kotlin-first — lots of learning learning resources are Kotlin-only, and new libraries are now written in Kotlin. So I switched to it. And I had already known Java on a decent level.
I can't really tell, but I feel like Java is actually a better language to start with.