My problem with those asking you to learn Dart before Flutter and why I think otherwise
Week in and week out, the Flutter community gets questions like these:
and so on...
While they all look different, they are all variations of the same question: Should I learn Flutter before Dart? You would be shocked there's no simple answer for such a simple question regardless of the expertise of the person you speak to. It's so much that early last year, Mangirdas went viral for tweeting:
So which is it?
See, here's the Big Truth
Most devs in the community first heard of the cool framework for making apps which is Flutter before realizing they needed to pick Dart if they wanted to go beyond generating basic static screens.
As they dig deeper, they hit roadblocks with tricky stuff like async code doesn't really "run in the background", how streams are lazy-loaded and won't start running if you don't listen
or await
on them even if they were invoked, and other head-scratchers.
Then they come to share their struggles online and in the end, tip that it's because they picked Flutter before Dart. So you shouldn't be surprised when the answer they give to the question "What should I learn first: Flutter or Dart?" is to learn Dart first.
Of course, it seems sensible to start with Dart. But while the advice is laced with good intentions, sadly, it's a bit of harmful advice. Why? you ask. Read on and I will tell you.
What's the biggest blocker for beginners?
For everyone I knew who started writing code and dropped out within a few weeks, the biggest blocker was a lack of Motivation and Boredom. I've seen it happen to so many people – they start all excited, but within a few weeks, they're out.
Flutter solves this with its good developer experience — you can whip up an app for your device with just a few lines of code. Sadly, Dart is almost the exact opposite.
Think about it – what exciting thing can you really build to keep your motivation alive? Printing fizz buzz? checking if a number is prime? Computing Factorials? Sure, you can ask for user input and give them some answers, but let's be real – you can't post that to Twitter and get those sweet likes.
You get the point, right?
When motivation is solved, other things are small problems.
This is why I suggest Flutter before Dart
And it doesn't end there. It's also because it's what I followed, and it works.
I built a good enough screen with Text, Image, and a Clickable Button. Let's forget the fact that I didn't even know how to remove the debug banner, but building something as nice as that prompted me to share.
Within a week, I had already integrated Google Maps. Started playing with basic text rotation and animations. Three months in and I was already on state management and about five months later, I'd started teaching others Flutter and helping them resolve bugs that kept them awake at night.
Do you think I would be able to move at that speed if I was still printing "Hello World" to the console, splitting and formatting strings, or using a for loop to print out the multiplication tables?
The answer is of course a big No. You need something that keeps you pumped up and ready to code. And that, my friend, is where Flutter takes the spotlight.
Start picking Dart once you've got that momentum and motivation
Don't mind the naysayers. You won't feel like throwing your laptop away as they like to say. You won't see a lot of "Shege". Let's even say you do, at that point, you would have come too far to stop. Isn't that interesting?
Something that people who started with Dart can't even boast of.
Kiishi gets it:
On Mastery?
You can't master any language or framework, you can only try. Mastery is a lifelong journey. It will take you the rest of your career to "master" anything. It's why I agree with Romain here:
In fact, the more you know, the more you will realize you don't know.
So don't rush. Start with Basics: Variables, Data Types, Functions, async/await, Classes, and OOP. Then move on to the Intermediate topics like Custom Painters, Error Handling, Mixins, and Isolates.
After a while, you will get to the point where you feel "I've finally gotten it". For me, it was when I started becoming more comfortable with reading the docs than watching YouTube for concepts I'm not familiar with.
So forget about mastery and only learn what you need now. This isn't school.
Don't bug your head with irrelevant things that don't matter. You can learn the rest later. So how do you figure out what matters? By having a well-defined project and a deadline that's just enough...That way you will instinctively focus on what matters. I talked more about it in this Interview with Esther on YouTube.
Do you have recommended learning resources for Flutter and Dart?
Of course, I do.
I started with NetNinja's two Courses. One was an Intro to Flutter then a Few parts of Dart, and the other was on using Firebase services like AuthService, and Firestore which is good since you don't have to rely on a custom backend.
In my search for something deeper, I came across Vandad Nahavandipoor's course on YouTube. I never finished it. In fact, I didn't even got Halfway through, but I learnt a lot in the process.
From time to time, I see a lot of people recommending Angela Yu's course. I've not taken it. By the time I got to look at the outline, I was already past that stage: I was starting to fiddle with State management.
As you grow, you will begin to appreciate Code With Andrea's articles, Michael Lazebny's musings, and some clips in the Flutter Observable Channel
Don't mind people who say to read the docs
At least for your current stage of development.
The doc is only clear when you understand what you are doing. I couldn't install Flutter with the docs until I saw a YouTube video. But now, I can install it without even visiting YouTube.
And you don't have to blame yourself. Most docs are written by experts who aren't seeing things the way you see them. They think they are, but they aren't.
This brings us to a very important point: Share your knowledge on a concept as soon as you understand it as I do on this blog and my Twitter Page, it makes it easier for those coming behind and they will thank you for it.
Join relevant Communities
Hang around on Twitter. Follow people who dedicate their page to Flutter/Dart. Help people if you know the answer. Ask questions. Share your knowledge. And don't be too rigid or reluctant to reevaluate your knowledge.
Most importantly, understand that small adjustments here and there can lead to a huge difference. Stay consistent and put in the work. People who say it cannot be done, should not interrupt those doing it. See you another time 👋