I finished the web development part of the Lambda School course this past week.

I can’t believe how much I learned in the last three months! I wanted to share the technical concepts I’ve learned as part of the web development program of the six month, full-time course I am taking with Lambda School. My objective is to provide a summary of everything I’ve learned with regards to web development in the past few months.

We started the web development course by learning about user interface and covered significantly HTML and CSS. These are the building blocks for web development and so we spent a lot of time understanding how these work. We struggled through positioning HTML elements and learned about the magic that is the flexbox module for positioning elements. I studied the HTML layout of websites and the importance of writing semantic HTML. I got very good at taking a website design mockup and and translating that to a working, fully responsive website.

I learned how the DOM works and how to manipulate elements to make a website interactive using Javascript. We spent quite a bit of time covering the fundamentals of the Javascript programming language. We covered the basics like arrays and functions (which are actually objects) but went much deeper into callback functions, lexical scope, and prototypal inheritance in Javascript. I’ve built so many small projects and covered an insane amount of topics in the last months. We learned a huge amount on what it takes to build modern web applications.

After we covered how to manipulate the DOM using Javascript, we moved on to learn React. It is the most common way to build interactive web applications that is used in the industry today. And so, we spent an entire month learning the framework. React is a Javascript UI library built by a team at Facebook to help scale web applications that is built around the concept of components. Components are reusable elements that can be plugged anywhere in an application. A React component gets updated automatically whenever there is a change in its state.

This makes it easier to build interactive web applications. When there is a change in state, the React framework checks to see what changed from the old version of the DOM and takes care of updating the DOM when something changes. Components receive properties that are used to display information which make components so versatile. We learned about higher order components that is a pattern for re-using component logic. We covered client side routing with React router and adding dynamic routes. In short, we learned an incredible amount of stuff and covered new concepts for building modern web applications with React.

One particular concept that was difficult for me to understand was managing state using Redux. Given the large-scale applications that can be built using React, it becomes increasingly complex to manage the state of all components. Redux provides a predictable state container for a web application and operates based on the immutability principle. It works by defining actions that dispatch an object describing the action change which, in turn, is captured by a reducer. Reducers are essentially a pure function that copies the current state’s value, makes a new state, and outputs the application’s new state that then gets rendered to the DOM. This is helpful when managing large-scale applications. I, personally, have not used it too much in my projects but it was an interesting topic to cover. It was an intense few weeks learning all of these concepts and building projects along the way to solidify our understanding.

After learning React and Redux, we switched gears a bit and spent a month covering back-end development. It was mainly focused on building web APIs using Node and Express that connect with a SQL database to provide data for an application. We covered huge topics that were difficult to go in depth, but were enough to understand the key parts. We learned about the best practices for building RESTful APIs that are stateless and how HTTP requests work. We learned about setting up a database and the basics of SQL for manipulating data. The topics were vast in scope but I feel we learned the areas that will help us in building functional web applications and receive guidance on what topics to tackle next to deepen our grasp of these topics.

I learned about HTTP requests and how to persist authentication using web tokens as well as the high-level pros and cons of encryption vs hashing. The last week of backend development was focused on testing best practices like unit tests and test driven development. All of these concepts were covered to ensure that we can build robust, fully functional web applications. It has been an intense and incredibly fun three months full of learning and applying what we learned. With each week that passed, I was always impressed at how much I learned that week.

The next step for me, which is different than the traditional Lambda School curriculum, is a part of the program called Labs in which we build a real project. The goal is to mimic a real software development job that you work with a team and a project manager and follow a timeline to deliver increments to an application that can be launched as a real business. After Labs I will move on to a computer science program that includes topics such as data structures and algorithms, object-oriented programming in Python, operating systems, and many more interesting topics. I’m very excited and completely amazed at how much I’ve learned in the last three months.

The curriculum and process at Lambda School has been incredible. I have learned more in the last few months that I have in years of formal and self-taught education. I am excited for the future of this type of education.