Full Stack Web Development - Python Resources
Web development is an exciting space to be in right now. Creating high quality, fully featured web applications is becoming more and more accessible. Understanding how everything works in a web stack is essential for fast and enjoyable development. Even if you decide you want to specialize in a specific aspect of the stack (design, front end, UI, UX, back end, DevOps, etc) a basic understanding of the stack in its entirety will benefit you greatly.
What does full stack web development mean?
What "full stack" means in todays culture is hotly debated. Each aspect of the basic stack can be broken down into smaller stacks. Eventually you might specialize in one of the smaller stacks, or even a specific technology from one of the smaller stacks. Python falls into the back end of the stack, the "Server Side Code". The purpose of a server side language is to process logic and spit it out to the user.
With the insane number of technology stacks available for web development, a question I get asked a lot is, "Why did you choose Python?". Honestly, simply because it was mentioned to me. A developer was explaining programming to me years ago, and the only thing I remembered from that conversation was this thing called Python. So naturally, its the first technology I looked up. With my limited knowledge of programming at the time, I was sold on its general purpose nature and design philosophy.
I don't really believe one language is "better" than another. Each has its own strengths and weaknesses based on the problem that needs to be solved. Python happens to be a well supported, multi-purpose language with many pluggable options for web development.
I was not working in the tech industry at the time I choose Python, so it wasn't important what language I started with. If you're in a position where the company you work at uses specific technologies. I highly recommend you start with those instead of arbitrarily picking something.
Arguably if you successfully learn a skill with a set of materials, you will be biased towards those materials. So its not my intention to say these are the only qualified options for learning Python or web development in general. More like a curated list of resources I've personally found beneficial. These resources focus on learning the Python language itself, not the frameworks or libraries surrounding it.
Learn Python the Hard Way by Zed Shaw
This was the first resource I decided to pick up when I decided you check out programming. You get thrown right into the fire, no IDEs, just command line and text editor. One of the assignments involves making a game. So you could say the first functioning program I wrote in Python was a text based game called DZERO. You can see the hilariously terrible code here.
Udacity - Computer Science 101
After hearing about MOOCs (Massively Open Online Course) on a podcast, I checked out the Udacity Computer Science 101 course. The course utilizes Python to cover basic programming principles. You actually end up creating a search engine which I found to be pretty fun! At the time it was totally free, I believe you can pay a monthly fee now to have a more personal experience.
Udacity - Web Development
This course is taught by Steve Huffman, the founder of Reddit! I really enjoying hearing his anecdotes about getting Reddit off the ground. The course uses Google App Engine along with the Python SDK to guide you through building a blog.
While I think online learning solutions like Codeschool or Treehouse are great introductions to specific topics, I find a much richer experience in solving problems. Project Euler is a set of math based problems that you can solve in any language. In the end, the languages you know are not nearly as important as understanding the logic that drives them. If you want to learn a new language I encourage you to check out problem based learning like Project Euler.
Like Project Euler, Hackerrank is a problem driven learning tool available to many languages. You get to code your solutions in a web based text editor and run it through a series of tests before submitting. The problem spaces available include, Algorithms, Functional Programming, Artificial Intelligence and Linux Shell. I can't emphasize enough how much more enjoyable it is to learn by solving problems verses running through tutorials.
This variation of Project Euler and Hackerrank also lets you solve the problems in a variety of languages. What Exercism brings to the table is nitpicking. Basically you submit your first iteration of the problem, where it will be open to the community to make suggestions (nitpick). You can then keep submitting iterations until satisfied with the result. I really like the community driven approach to the coding challenge realm.
Referring the the pluggable nature of Python I mentioned earlier, some popular frameworks exist to expedite the construction of a new web application. Flask comes to mind for smaller projects. If you're interested in more features and a bigger community, check out Django. Full Stack Python has awesome tutorial lists for both Flask and Django.
In my next post, I'll explore some front end resources I use. After that I'll dive into where and how I deploy web applications.