Day 15 of #100daysofcode: Discussion on Tech Stacks 
Tags: 100daysofcode, react, python, beginners
Published: 2021-11-21 03:55:58

I'm really in a learning phase right now, so I don't have much tangible work to talk about. Instead I want to talk a bit about the stack I have been working with and discuss each part of the stack a little bit. I included some questions in most sections, I plan to research each of them a little bit. I may talk about them more in the future.

## The Tech Stack I have been working with
### Deployment: Heroku
Heroku has been awesome to work with. The integration with GitHub is stellar and it is very easy to work with. I don't have much to say here as it is the only place I have deployed to, so I don't have much frame of reference.

#### Questions
1) Are there any big websites which currently deploy using Heroku?
2) Where would the weak points be of deploying with Heroku?
3) **How does deploying even work?** It's hosted on Heroku's servers, but if you wanted your own domain name, would you still host it on Heroku's servers? Would it make sense to deploy with Heroku onto your own servers with your own domain name? Is it even possible? I'm completely in the dark about this.

### Database: PostgreSQL
So I started learning a little bit about PostgreSQL because it is heavily integrated into Heroku. Admittedly, this is the part of my tech stack I know the least about, so I don't have a lot to say about it. I will say that it has been nice not having to learn much about PostgreSQL in order to make it work. I think that DBs in general are a giant blindspot of mine, so I think I need to learn more about them and about popular practices with databases.

#### Questions for PostgreSQL
1) What are the strengths PostgreSQL? 
2) What are the weaknesses of PostgreSQL?
3) Follow up: What databases are strong where PostgreSQL is weak?

Databases feel like a point of knowledge that is hard to learn about without having hands-on experience in big data. This is certainly something that I am interested in researching further.

### Backend: Python (Flask)
Yeah so I really like Flask. After walking through the Django tutorial, I think that I will stick with Flask with my Study Aid app. Originally, my plan was to use Django just to learn more about it, but I feel that Django is limiting in some way.

Flask uses decorators on functions to define endpoints. This looks like the following:
```python
@app.route('/index')
def index_page():
   ...
```
This feels intuitive to me, for *this* end-point I want *this* to happen. Django's system for endpoints feels more convoluted and personally, I think it is harder to read. Part of the power of Flask, to me, is that it feels easy to read. 

I am still considering using Django to develop this next app, just to see if there are things that I am missing that can only be discovered by digging deeper. 

#### Questions for Flask
1) In my current stack, I frequently see React-routing used for routing the client and Flask used for routing to the API. Is there a way to allow Flask to control all routing in a way that allows for multiple pages running JS? This is an issue that I have been unable to solve with purely Flask. Most answers involve "use React-routing".
2) What is considered "best practice" for the above question? My gut tells me that React handles routing the user sees, while interactions with the server would be handled using Flask routing.

### Frontend: ReactJS
So I'm very new to React and JS in general; I have only been using it about a month. Right before learning React and JS, I jumped into HTML and CSS. All this is to say that Front-end development is extremely new to me and I am still wrapping my head around it. 

That said, I have really enjoyed my experience with React. I was sort of inspired to dive deeper and start the FreeCodeCamp tutorials on JS *because* React was so nice to work with. Using `create-react-app` makes the process very smooth.

I am considering continuing my journey in learning about Front-end development by extending my future app into having a mobile facing side. One step at a time though, I have to create this web side first.

I don't really have any pointed questions I want to ask about for React. I am going to be researching React-routing very soon as I believe I will need it for the second sprint of the school project I am working on.

### Frontend: HTML/CSS
Maybe it isn't fair to put these into the same section, but it feels like you can't have one without the other. Very interesting stuff, especially on the CSS end. Personally, I can't see myself enjoying working with this software on a day-to-day basis. CSS is a very powerful language, but it's painful to work in for me.

Since I am creating full-stack applications, I will continue to use these, but they are my least favorite part of the stack for sure. 

For me, creating function is easy but creating an appealing design is borderline impossible.

#### Questions for HTML/CSS
1) Are there any good courses that teach you some useful *processes* when designing in HTML/CSS? 

## Today
* Completed a few more ES6 FreeCodeCamp tutorials
* Finished the MVP Planning of my upcoming Study Aid App
* (Skeptically) Played around a bit more with Django

## Upcoming
* Decide whether or not to use Django on Study Aid app. I need to do more research to determine whether getting out of my comfort zone in this regard is worth it. 
  * Work on the Django app which I made today; I want to try to use React routing with Django.
  * Read on comparing Flask vs. Django
* Start looking into Material UI! I have put some time into learning Bootstrap, specifically the React-bootstrap extension and now I would like to try my hand at learning some about Material UI!
* I also want to look into Material IO and see how it compares to MUI (or if its basically the same, I have no idea about it)


### Resources
[JS Course - FreeCodeCamp](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/)
[Material UI](https://mui.com)
[Django Tutorial](https://docs.djangoproject.com/en/3.2/intro/tutorial01/)
[Material IO](https://material.io/resources/get-started#web)