Why I Didn't Start With Django with Mario Munoz

This video features Mario Munoz at DjangoCon US 2022 in San Diego, California, USA.

Why I Didn't Start With Django with Mario Munoz
0:26:49
Published November 3, 2022
637 views

Learning Python is exciting. Newcomers may quickly have powerful tools at their disposal, and they soon want to find a "place" to put their ideas. Some may gravitate toward web frameworks, and as they start learning about Django, it might feel a little intimidating. That happened to me.

This talk was presented at: https://2022.djangocon.us/talks/why-i-didn-t-start-with-django/

LINKS:
Follow Mario Munoz 👇
On Twitter: https://twitter.com/PythonByNight

Follow DjangCon US 👇
https://twitter.com/djangocon

Follow DEFNA 👇
https://twitter.com/defnado
https://www.defna.org/

Summary

Mario Muñoz explains that he chose Flask and then FastAPI instead of Django because metaphors such as “fast,” “modern,” and “flexible” made them feel more approachable. As a beginner, Django’s terminology, history, community, and descriptions such as “batteries included,” “opinionated,” and “monolithic” made it seem intimidating, while fear of failure and self-doubt influenced his decision more than technical comparison. He argues that choosing a tool is not purely rational: emotions and the language used by experienced developers affect whether newcomers feel able to begin. He recommends acknowledging those emotions, accepting unfamiliar terminology, and engaging with the community. To test Django for himself, he built a slideshow-management application using Django, Reveal.js, and HTMX in under two weeks, and concluded that not starting with Django was not necessarily the wrong choice—the real mistake would have been becoming paralysed and doing nothing.

Key takeaways

  • Beginners often choose frameworks based as much on emotional reactions and metaphors as on technical capabilities.
  • Django’s terminology and descriptions can intimidate newcomers who are still learning basic concepts such as apps, models, views, and templates.
  • Experienced developers and content creators should recognise that their language can affect newcomers emotionally, not just inform them technically.
  • New learners should acknowledge fear and self-doubt, work through unfamiliar terminology, and seek support from the community.
  • Muñoz built a Django slideshow-management app with Reveal.js and HTMX in less than two weeks, finding the experience enjoyable and capable enough for his needs.
  • There is no single perfect technology choice; avoiding action altogether would have been worse than choosing a different framework.

Summarised automatically from the transcript.

Chapters

  1. 0:00 Introduction Mario Munoz introduces himself, his limited Django experience, and the central question of why he did not start with Django.
  2. 1:59 Cyclical Learning Mario presents the Ouroboros as a metaphor for self-referential learning and describes building a website to learn Python.
  3. 2:50 Choosing a Framework He explains how he began looking for a framework to turn his Python knowledge into an application.
  4. 5:15 Django Metaphors Mario explores how phrases such as batteries included, feature rich, opinionated, and monolithic shaped his first impression of Django.
  5. 7:34 Django Terminology He works through the meaning of apps, projects, models, views, forms, templates, migrations, and other unfamiliar Django concepts.
  6. 12:12 The Appeal of FastAPI Competing metaphors led Mario from Django to Flask and then FastAPI, which initially seemed easier and more approachable.
  7. 13:43 Emotions and Technology Choices Mario reflects on intimidation, fear of failure, self-doubt, and the supportive role of the Python community in his decisions.
  8. 18:29 Lessons for Beginners and Experts He shares lessons about acknowledging emotions, accepting unfamiliar terminology, and embracing the developer community.
  9. 21:36 The Django Slideshow App Mario demonstrates the Django application he built to manage his conference slides and reflects on learning the framework through practice.
  10. 24:22 Questions Mario answers questions about comparing FastAPI with Django and choosing Python as a first programming language.

Transcript

4,189 words · auto-generated Show

Automatically transcribed, so expect mistakes in names and technical terms.

0:21

Speaker 1: All right. Hey everyone. I am super excited to be here. Bit nervous, but we'll get through it. I hope everyone's having a good morning so far. I really enjoyed Melanie and Jay's keynote if you haven't caught it. Catch it later through Loud Swarm. It's a great, great talk. I'm gonna jump right in. For those of you here, let's see. I'd like to start with a quick question. Um how many of you here have about, or let's say five years of Django experience or more? Five or more. It's pretty good. Any uh newer folks with maybe a year to five years of Django experience. There's a couple of oh good a couple of us here. Um You're you're in luck because I happen to have about 12, maybe even 13 days of hands-on Django experience.

1:13

Speaker 1: So I might be the least qualified person here on stage at DjangoCon, but uh we'll see. Um my talk is titled Why I Didn't Start with Django, or to put it another way, uh what in the world am I doing here? First, let me introduce myself again. Um my name is Mario. I am not an engineer by trade. I code for fun whenever I have a Spare moment. Um I have a day job, a wife, a four year old, so that usually tends to be at night uh pretty late at night. Not coincidentally, my Twitter Twitter handle is Python by night. Feel free to send me some comments or questions there. And for those of you that are attending online, I'll take a peek here at the

1:59

Speaker 1: um Slack if you if you're on that. Alright. Does anyone recognize this symbol? If you see the screen there, it looks like a target with a little circle and a gap. Something that looks kind of like a mo like a mouth. That's the Ouroboris. It's supposed to represent a snake eating its own tail. For me, it's sort of representative of how I like to learn, just kind of a cyclical. I know there's a lot of different meanings behind that symbol. I'll be coming back to this at the end of my talk in case you didn't see that coming I I tend to think of this as self-referential learning. Uh for example, uh when I started learning Python, I decided to build a website using Python to learn Python.

2:50

Speaker 1: And on that website, I write about learning Python. That website's called Python by Night, in case you wanted to know that. Uh backing up a little bit, um when I started learning Python, I I was learning a lot of cool things like you know, some data stuff, machine learning stuff. And I didn't quite know exactly what to do with these things I was learning, so I decided to build an application. Now I wasn't quite sure what that would entail, so I started looking at documentation, tutorials, guides, pretty much anything I could get my hands on. And you know, with enough time I felt like a bona fide web develop web developer, kind of like this guy here on the screen Uh there's a guy telling his partner, I've watched HGTV so many times, babe, I'm practically a property brother.

3:40

Speaker 1: So maybe I was feeling practically like an expert, you know But I needed to know where to start. So I started looking into some frameworks as people do online typing What framework should I use? How do I build an app? So I took a very measured and logical approach. I started thinking about the approachability of the documentation that's out there. How can I Really get into a new framework. Is the documentation clear? Does it provide some good instructions? Is the code really complex? Can I understand it by looking at it? Can I kind of follow it And what are the technical capabilities of of this framework?

4:26

Speaker 2: Keep going, use the podio.

4:28

Speaker 1: All right. The um the limits of this framework, how how far can I take it? So that was um you know that was a Uh that was something that I thought about early on. No, actually you know what? I'm just kidding. I didn't think about those things at all. I was really new at this. I had no idea what any of those things meant. A and I don't think that would have been a great way to get started anyway. I Uh uh you know, I could have read tons of documentation and still not made any progress. Um I don't even think to this day that would be a great way for me to approach what um you know what new tool I should use. So I'm gonna talk about uh something else. Um I'm gonna start with metaphors

5:15

Speaker 1: Now, most people new to any particular topic will depend heavily on metaphors, or or some people like similes as well, whatever floats your boat. Django is no different than many other things out there. A lot of you here might recognize some of these images, some of these metaphors that we use to describe. Django, such as batteries included. I don't know what kind of image you get in your head when you think of that term. I just think of a bunch of batteries everywhere. It's like what am I gonna do with all these batteries? Another thing I see a lot is that it's feature rich. A lot of things out of the box. Just you know, I I have an image here of just a bunch of buttons that do a bunch of different things.

6:03

Speaker 1: Another thing I've heard about Django is that it's very opinionated. Alright. I guess that's that describes a framework. Okay. Uh and a thing I saw a lot with my searching was that it's pretty great for large projects, uh that it's sort of a monolith. Now I don't know what you think of when you hear the word monolith. I just think of something like the Stonehenge. I'm like, what do I do with that? Mind you, metaphors are intended to provide some sort of dramatic effect uh what kind of effect uh that has on a person, it it depends on the person, of course, but um just those images alo alone uh they

6:48

Speaker 1: they were starting to create a a picture in my head. But um I knew that Uh maybe you know I had to reach a little further. But just as an example of some of the things I started thinking about was that hey, maybe I'm not quite ready. to uh get into this framework. It maybe it's just a little bit too big or maybe it's a little too complicated. Um I'm just kinda starting out. Maybe I'm not so much a property brother. Maybe I'm not the expert that I thought about. And here's one for me personally is that I just don't like opinions. So uh I don't know. I but I knew I couldn't stop at the metaphors alone.

7:34

Speaker 1: I I decided to um you know move a little bit from metaphor to more concrete language. Now any new su any new subject is gonna have its own uh nomenclature, new terms, new terminology. And You know, any subject will do that naturally. So I thought, okay, let me start with a very complicated term to see how well I can understand it. And basically I wanted to know what an app was, if that's what I was gonna build. Now thankfully the Django Project website has a very helpful piece there buried in the tutorial or pretty early on in the tutorial. It talks about the difference between a project and an app. Okay, this seemed pretty good.

8:20

Speaker 1: Here's a little nugget of knowledge that's tucked away there. I'll highlight it here. It says An app is a web application that does something. Now, an app is a web application that does something. Okay, well, I guess an app is an app. Okay, got it. N no, there there are some examples there, like a blog or the Polls app, which is part of the tutorial. Uh so I was uh starting to get a sense of of what was going on there. Now I read in other tutorials that some people like to create a directory called an apps directory and in that directory they might create a core or or some different names of different uh different sorts of directories and then you run some sort of magical

9:07

Speaker 1: Django command and then you'll end up with an apps. py file. So I started thinking, hmm, is the core my app? Is the apps. py my app, or is this whole thing an app? Okay, maybe it's just a cohesive whole. Maybe I'm just kind of um you know thinking about it too much. And that's until I got to the settings. py file. I was like, come on, there's like 10 things in there. Is that my app? I started getting a little confused when I saw these references to apps and all I wanted to do was build one app Um even so I kept looking at some of the terminology, some some of the very specific things in the Django namespace.

9:54

Speaker 1: And I started seeing things like models or views and forms and templates and migrations and this very magical thing called manage. py. I um if you see the screen there's a bunch of jumbled letters together. That's kind of how my head started feeling as I was looking into the terminology around the Djang around Django. That in and of itself also brought up some internal dialogue, such as, wait, what's an app again? Do I even know what I'm doing here? I I thought maybe I was in over my head. Another thing I saw a lot in the documentation as well

10:39

Speaker 1: was reference to models, controllers, and views. the MCV style of of uh project structure. I wondered, wait, do I need to look into that first before I understand Django? Um am I kind of out of my elements still Or even even so, will there just be more things that I need to learn? Is this just the tip of the iceberg? Are there just that many more terms that I'm gonna have to keep learning about? There's a classic XKCD comic some of you may be familiar with is called Average Familiarity. There's two individuals in the comic strip where they're just having a conversation and one of the individuals is saying

11:25

Speaker 1: Silicate chemistry is second nature to us geochemists, so it's easy to forget that the average person probably only knows the formulas formulas for olivine and one or two feldspars. And the other person is like, oh, and quartz, of course. Of course. And the catch in there reads that even when they're trying to compensate for it, experts in anything wildly overestimate the average person's familiarity with their field. Um I guess what I'm getting at is when I when it comes to Django, based on what I was reading and you know the the uh just the documentation and the conversation around Django, I was feeling less than average. I was feeling like maybe I wasn't even understanding the the beginning there.

12:12

Speaker 1: Um so uh Just a second. On the other hand, at the same time, again, I was trying to read a lot. Other metaphors started battling out for my headspace. If you see the screen, there's this big red easy button there. That sounded pretty fun. Or maybe what I needed was something sleek and modern. or something pretty flexible. Well maybe not that flexible, but something that uh wasn't maybe as rigid. And here's one that I really liked was something that was really fast. Now fast can mean a lot of things. If you're thinking of a metaphor, is it, hey, is it is this something I can learn fast or is this something that works quickly?

12:57

Speaker 1: Or um e either way, it's a great metaphor. Who who doesn't want to go fast? Um you may already have guessed where I'm going with this, which uh basically I decided to look into Fast API. And in reality, I actually started building my site with Flask. It was a little bit uh easier to fit in my headspace at the time, but I actually transitioned over to FastAPI. primarily on the power of those metaphors, those images that we were just seeing and other things I was reading. Now here's a key. um that I I missed and sometimes continue to miss, which is when I was starting, I

13:43

Speaker 1: may have thought that I could make a good decision uh about what tech stack to use just based on technical reasons alone, just looking at documentation and and trying to do comparisons. But I didn't recognize, and I still have trouble recognizing that I was and I am primarily motivated by some strong emotions. Now, there's a small disclaimer here, which emotions are unique to each person given their context. So not everyone Would have these same reactions that maybe I had starting out, given the same language and the same metaphors. These are specific to me. Um but when thinking about you know what we just saw, the things I was just talking about, I

14:31

Speaker 1: I started feeling very intimidated. Now already that might have been something that was already in my state of mind when I started out. Maybe that just couldn't be helped. But Django's history alone is intimidating to me. It's been around for Uh what did I hear earlier? Uh Calvin saying it's nearly twenty years old. Uh it's very uh well main maintained, it has a huge community. It has a Conference. So that that alone seemed intimidating, right? I felt like a drop in the bucket and maybe it felt rigid only because I was uncomfortable in that context. Fast API as a newer technology, I guess, just felt a little less intimidating to me. And again, that was mostly a feeling. The next one is something that's hard for me to admit, which

15:19

Speaker 1: I had a lot of fear of failure as well. And that could have been a pretty big motivating factor. If something feels too complex or something that I might not understand, I just don't like that feeling. My family, my friends might sometimes think of me as a know-it-all. I'm sorry, friends and family. Um but really that just comes from my own uh sense of not like I I just don't like being in a place where I don't know something. I just want to understand it fully and that fear and that intimidation uh really propped up a a sense of self-doubt. And given that I've joined the technosphere pretty late in life, I was close to 40 when I created my first Hello World script in Python.

16:05

Speaker 1: It felt great. That was nearly four years ago. I I guess I just felt a little safer in some little corner, uh fiddle fiddling away with something else. And Uh there are and there is something to be said about this superpower within the Python community that can make these things diminish. And uh Jay and Melanie talked about this in their keynote, which is the community. It is the one consistent feature I've seen in Python, whether it's a subset of a community around a certain tool or framework or just the larger Python community in general that You know, I kind of wish I would have reached out sooner

16:52

Speaker 1: so I could um maybe have some of these um these emotions not be quite as strong and not necessarily guide my choices. There's a lot more to say about the community and and I 'm super excited to be part of it and to be part of DjangoCon here with you. But you know, I want to keep going on with a question. Did I make the right choice? Now, given that I'm at DjangoCon, there probably is only one right answer to this, but Um so I like I said, I decided to learn fast API. So as I started reading and trying to understand it, there were a couple things I needed to learn, like models and routes. And these things called requests and responses

17:39

Speaker 1: and this uh templates and async and await and this thing called REST. Ah, I mean Look, honestly, I love FastAPI. It is an amazing tool, and it's likely the first one I would reach for when working on a quick project. But, you know, I just have to be honest with myself. Um anything that's worth doing is going to be challenging. And I don't just mean a little hard, it's gonna be a lot hard. And I actually don't know what the right choice was, but I know the wrong choice would have been to do nothing, to just have been paralyzed. You know, I thank the conference organizers here for providing me with an opportunity to just kind of reflect on this aspect of my Python journey.

18:29

Speaker 1: Allowing me to share it with you. When I started this um working on this presentation, I actually started with those three points that I crossed out. I really thought that I that I was motivated by a really smart technical decision early on, but that's not the case. I wanted to kind of talk through this and to present this to not only newer people to the Django community, but some of the more experienced folks out there as well. So I I do have Three takeaways that I've learned, and you know, for beginners out there, maybe you're thinking that Django seems too hard or too complicated. Hopefully you find something here. But also for content creators or experienced developers out there within the Django space, you know, just understand that the language that you use

19:20

Speaker 1: uh i it impacts users maybe in ways that that are unintended. Um it's not only on a technical level but very very much in an emotional level as well. So the first lesson I've learned Is that going forward, I want to acknowledge my emotional state. Again, I I like to probably think I'm smarter than I really am. I I tend to think, oh, I can make a great decision about what the best tool is to use in in this scenario. For example, I was looking into dependency managers and I thought, ooh, I'm going to choose PDM, because that one looks Really good, really exciting. But you know what? I I can't tell you that I made the best choice based on some technical decision.

20:06

Speaker 1: There there's a feeling behind the things I'm reading and seeing and the discussion around certain tools. Secondly, I've learned to accept and muddle through new terminology, things that might seem unfamiliar to me. This is just understanding that any new domain is going to have that kind of uh sensation, you know, again following the the metaphor of the keynote is jumping in the water kind of thing. It's it's scary and and you know maybe looks fun but you're not sure yet. That's almost that's the case in almost any new uh in any new domain. And lastly, or maybe this should be the first, which is

20:51

Speaker 1: I want to embrace the community. I I'm here with a great group of people in this room and sure out there. And it's something that if you're just starting out in your journey or you're, you know, out there, you've been doing this for about 20 years or so. Just you know, be open to new people and new people be open to the experienced people out there. They were new at it as well at some point. So We we've all been there and I think we can have empathy and compassion for one another. Now, I did say I would come back to the Ouroboros thing here again. I have a quick Easter egg here for you all. I I thought

21:36

Speaker 1: what better way to uh prepare my slides for DjangoCon than to build an app using Django to that tracks my slides for events and the associated slideshows. So I decided to build this Django app that you can see on your screens there. Um I called it my a perfectly simple a perfectly simple Django slideshow app. Maybe I can make this a little bigger. Let's see. There we go. So all this thing does is if I create a new slideshow, I use this uh JavaScript library called reveal. js. I'm sure some of you might be familiar with it Don't have to know a ton of JavaScript. You just kind of plug it in there.

22:24

Speaker 1: You create an HTML file or a markdown file and you can plug it in right into your code. You can see my slideshows that I have from for different events that I've had. To create a new slideshow, you just kind of click here. I use HTMX to be able to kind of do some neat little tricks. You can choose a new file and so on and so forth. When you upload your file, you just give it some a title, a description, and then it just appears in your um you know in your list here you can then attach those slideshows to events uh here's for example Django Con. I was at

23:09

Speaker 1: PyOhio, I was at PyCon. I had a tutorial on Fast API when I went to PyCon earlier this year. And that's about it. You can set which slideshow is used just here. I just activate. the slideshow and I can start it and there it is. So that's kind of uh how I Decided to learn about Django, go through the experience just so you knew that I wasn't just making stuff up. I I feel like if I was able to do this in a little less than two weeks, you know, it speaks a lot to the to the

23:56

Speaker 1: to the framework that's out there. And I think it's it's been an enjoyable experience and I'm sure I'm gonna continue using it. And I'm actually really happy with this app because I'm hoping maybe I continue going to events and have uh more to share with all of you. So that's all. I'll be taking a few questions. Thank you so much.

24:22

Speaker 3: Thank you. Um so so an API by itself doesn't do much unless you have a website to consume it. So you're comparing Fast APIs to Django, which is primarily a website builder. If you want Django to do APIs, then it needs API production. tools built into it. So tell us about that sort of apples oranges comparison.

24:41

Speaker 1: Yeah, that's a good question. I initially thought that I would likely build be building an API. When I thought of an application, I thought Well, I can do cool things, but what can I do with them? So let's say you have some machine learning model or some data stuff that you're doing. Usually an API is sufficient for that, but um That's that might have been another reason that I thought, well, maybe Django, you have to do some extra things to get a you know a good API experience. I I tried Flask and when I was using Flask I I started using Ginja which made the uh front end experience pretty good. So then I was able to just translate that into Fast API using Jinja templates and then it's pretty straightforward from there.

25:28

Speaker 1: It it actually becomes a pretty Uh uh for me a pretty exceptional experience working with HTTP responses in Fast API.

25:37

Speaker 4: My question is, how did you choose Python over other languages? I find that a lot of new programmers do struggle to figure out where to start at all. They get all sorts of crazy advice like start with C and nonsense like that. So yeah, why Python?

25:52

Speaker 1: Good question. Two points. One was a friend of mine was like, hey, I'm learning Python. Do you want to do that? I'm like, sure, why not? I I had no idea. Uh secondly was I as I mentioned I don't I don't I'm not a developer by trade, so I was working in payroll at the time and I found working with these spreadsheets and this data was just so daunting. So as I was learning Python, it became pretty um straightforward pulling in, you know, pandas or something to do some data manipulation. And for me it just became pretty understandable. uh perhaps the white space or just the structure just made it uh easier for me to understand. So that's one of the reasons.

26:35

Speaker 5: Thank you very much, Mario. One last round of applause.

Questions this talk answers

Why didn’t Mario start with Django?

He was influenced less by technical comparisons than by metaphors and emotions: Django felt intimidating and potentially too complex, while FastAPI seemed newer and less intimidating. Fear of failure and self-doubt also pushed him toward a tool that felt safer to try.

Discussed at 13:43

What should beginners keep in mind when learning Django or another new framework?

Mario recommends acknowledging the emotional reactions involved, accepting that unfamiliar terminology takes time to understand, and embracing the community instead of trying to learn in isolation.

Discussed at 19:20

What did Mario build to learn Django?

He built a slideshow-management app for his conference presentations. It lets him upload and organize Reveal.js slideshows, associate them with events, and activate a slideshow for viewing.

Discussed at 21:36

How does FastAPI compare with Django for building websites and APIs?

Mario sees FastAPI as a strong choice for quickly building APIs and found its HTTP-response experience excellent. Django is more oriented toward building websites out of the box, while using it for APIs may require additional tools; with Flask or FastAPI, he used Jinja templates for the frontend.

Discussed at 24:41

Why did Mario choose Python instead of another programming language?

A friend invited him to learn Python, and its readable structure and whitespace-based syntax made it approachable. It also helped him manipulate workplace spreadsheet and payroll data with tools such as pandas.

Discussed at 25:52

Presenters

Note: We understand that names change, people change, and bodies change. We respect each individual's journey and privacy. If you have any concerns about a video or need us to remove content, please don't hesitate to contact us. We will handle your request with care and promptly address any issues.

More videos by Mario Munoz

More videos from DjangoCon US