Discussion on learning, memorization, reviewing and an app to tie it all together
Tags: python, javascript, webdev, beginners
Published: 2021-11-03 18:47:46

Well this is my first post. Fittingly, I can't find any tags that *really* fit what I'm going for here, so I'm adding tags that kind of fit the app itself I plan on making. If these tags are incorrect, or if you have recommendations for better tags for this post, please let me know!

## The big idea

For a long time, I've had this idea of creating an app that aids and facilitates learning and memorization. One of the hardest parts of actually learning new concepts is memorizing the content. Most developers are very aware of this; one of my mentors once jokingly said that his memory only lasted for about 10 lines of code.

Since the space of software is ever-changing, developers need to be ever-learning. Unfortunately, I think that a lot of developers instead overly lean on being skilled at looking up the same information over and over. This is a great tool to have, but building on your own knowledge is still crucial.

## The problem

Learning new concepts frequently follows a flow like this:
(1) You discover that there is something you want to learn
(2) You spend some time figuring out what you need to learn
(3) You spend time learning it
(4) You verify that you understand correctly

And that's that. You've learned it, huzzah!

Ah, I forgot a step...
(5) You forget it by the next time you need it

So you haven't truly learned it; you need to review what you've learned. You have to check in and make sure you still know what you think you know.

This probably isn't anything new to you, you've probably learned this the hard way or have had it taught to you one way or another, so let's dig a little deeper.

## Reviewing and the power of sleep

Sleep has been proven to play a major part in learning and memorization. You actively work on learning things while awake, and your brain tries to make connections between things you've learned while you're asleep. 

Allowing yourself sleep between learning some 'thing' and then reviewing it again helps your brain to make new connections to that 'thing', further strengthening your grasp and memory of it. Over time, you create a web of knowledge connected to this new 'thing'.

But we're busy people! We can't review everything we've learned every day of our lives!

Absolutely! And there is probably significant diminishing returns on this, so there is no reason to be so extreme with our review sessions.

I have read in many places that the most effective strategy to reviewing something is to start by reviewing it frequently, then less and less frequently over time. For example, you could learn something today, review it tomorrow, then again 5 days from now, then a week later, then a month later and you can see where this is going.

This raises a new problem; remembering when and what to study and organizing these study materials. If you apply this process to many different concepts that you're trying to learn, you'll quickly run into a web of 'things' with overlapping schedules and maybe even overlapping review materials. This is where my idea for a review reminder app comes into play.

## The app

Using the above knowledge, I plan on creating a reminder app which will facilitate creating these reminders which use an increasing time frame between each reminder. Included in this, I will try and also help organize study materials so that each reviewing session is as easy as possible.

Here is the flow I see the user experiencing:
1. The user learns something on their own time
2. The user starts a reminder on the app, with a link to what they learned (or where they learned it)
3. The app prompts the user the next time it is time to review, and the user clicks the link to quickly review it and marks the review complete
4. 3 repeats in an increasing length of time before it either stops or maxes out at a certain time frame (whichever the user prefers)

### The nitty-gritty

I've had this idea for a really long time now, and even set off creating an app to fulfill this purpose, however, I really didn't have any knowledge of app development. I started off trying to create the front-end, which was something I had never *really* done before, and used some highly recommended Python UI framework (which I won't name here because it's not their fault). Unsurprisingly, I got caught in the weeds of figuring out the UI and the project died in the water.

Recently I've had the pleasure of having a professor who bridged the gap between general coding knowledge and using tools to *create something*. Admittedly, I should have been able to do this on my own time, but better late than never I suppose. He showed us how to create a simple web-app using Python's Flask as the web server and React/JS to handle the client side. I think it's time I give this app another shot using my newly acquired tools.

So the newest version of the app will be a browser-based app using the above tools. I'm going to be developing the app while also working on my final school project among other, school-related things, so development will be pretty sporadic. I'm hoping that keeping a tech blog will inspire me to keep up development.

As far as future posts go, I'm not sure what I'll be talking about. I have this pie in the sky idea of posting frequently talking about random things I learn about and am excited about in tech. After looking through the tags though, it seems that this site is more after keeping tabs on people who are actively developing that keeping tabs on the ideas people have so I don't know what I'll be posting in the future.