Learning Django Through Problem-Solving: How A Lawyer Built His Side Project

“I’m not looking to be a programmer. I just want to build State of K, but at this point, I’ve probably already learned every topic in Django.”

Ingram, a full-time lawyer and creator of State of K, the Q-and-A website where users can answer their own questions based on academic studies, started his programming journey with a very clear goal and a very vague idea of how.

StateofK.png

“For many years, I had the idea of a site that I wanted to exist,” Ingram explained, “There are certain types of questions — empirical questions — where the best available answer comes from published studies, rather than someone’s opinion. But there are too many obstacles to understanding what those studies say. I wanted to solve that problem.”

Under normal circumstances, someone with barely any programming knowledge would choose to hire an expert developer to build their product. “I would liken it to a work of art,” Ingram explained, “You can’t commission an artist if you don’t know yet what you want the drawing to look like.” He went on to share that as he didn’t have a clear image of how the question-answer website would work, he wanted the freedom to be able to play around with the code. And as he had no idea what he would ask the developer to do, Ingram figured it would be easier to control the budget by building it himself.

So only equipped with the basic HTML and CSS learned at the turn of the century, he tried creating a website mockup by making a table with HTML “Because that’s what people did in 2001.” It got the job done, but he also quickly realized that his knowledge was outdated, and certainly not enough to bring the idea he had in his head to life.

After lots of research, Ingram theorized a “very complicated way” to build the website and set out to find a mentor or senior developer that could give him feedback. “The first person I met on Codementor told me my implementation plan was totally wrong,” he laughed. Luckily, it wasn’t all in vain as the mentor pointed him in the right direction: to learn Django.

And so he did. But as a full-time lawyer with limited free time, Ingram needed a way to learn code that could fit into his busy schedule. But traditional teaching methods weren’t a good fit: “With bootcamps, you need to be physically on site or adhere to their teaching schedule.” Instead, he started teaching himself by buying a book, watching Youtube videos, and purchasing several Udemy courses.

After a while, he realized he was making decisions that would have a butterfly effect on future decisions. He figured he could either continue puzzling together advice from YouTube videos, or work with a mentor that knew what they were doing and could help him make better decisions.

He chose the latter.

Ingram chatted with a couple of mentors and eventually found Jessamyn, a mentor he’s been consistently working with for years now. They started out working together a couple of times a week before increasing it to multiple times a week as his project (and budget) increased.

One surprising takeaway was how helpful working with a mentor was for learning the most basic things.

“It was like my 10th session, when Jessamyn asked off-handedly where I was saving my code,” he shared. And like most non-technical people, Ingram saved the project on his laptop. In that session, he learned about Git, how to use it, and how a programmer would actually run a project. “Of course, there are YouTube videos on how to use Git, but if you don’t know that it exists, you wouldn’t know to search for it in the first place.”

State of K quote-Codementor.png

“I’m not interested in becoming a developer. I’m just interested in building a specific project,” he emphasized when we talked about his learning journey. With traditional learning models, the foundation building, while critical, did not fit into Ingram’s schedule. “The problem with the foundation learning model for me is that I don’t understand why the content will be useful until many months later by which time I’ve forgotten the lesson and have to relearn it. ”

He uses a goal-oriented approach when learning. “I usually know what I want to create,” Ingram said about his learning process. He spends time going through online resources and documentation — “the free official documentation for Python and Django have been the most useful” — before coming up with an implementation plan he shares with the mentor. “I try to do as much as I can on my own, and get Jessamyn’s approval early on,” he shared, “It’s an iterative process. Usually, if I’ve put enough thought into it beforehand, the concept works out the first time, but sometimes considerations that I never even thought of pop up once I start implementing."

However, with a demanding full-time job, there are days when he tries to shortcut the learning process: “It’s usually after I’ve pulled a couple of all nighters at work, or I reasonably believe that I won’t encounter a specific issue again.” During these sessions, he’ll learn by watching the mentor code and ask questions as she goes, which is much less demanding. “But I have to say, in almost every case, I end up encountering the problem again and have to spend more money and time to master what she did,” he said, “It usually pays to just pay attention and learn it properly the first time.”

Codementor Learn Django.png

It’s been four years since Ingram started on his programming journey, and State of K is steadily growing its user base. While his learning process can be described as “problem solving”, at this point, he’s “probably already learned every topic in the Django library and could apply that knowledge to other projects.” This has been echoed by his mentor, Jessamyn: “Ingram showed incredible growth as a developer over the several years I was actively mentoring him. He went from a novice to being able to develop quite complex features.”

"Have I learned Django more slowly than someone else? Definitely. But I've also done it while working a full-time job, which I think is also pretty great."

Learn Python by building projects on DevProjects

Last updated on Feb 19, 2021