# Deep dives

- [Computer Science](/topics/deep-dives/computer-science.md): Learn everything you need to know in order to have a good grasp on the fundamentals of Computer Science.
- [Pseudocode and algorithms](/topics/deep-dives/computer-science/pseudocode-and-algorithms.md): Although you may read that you may not be involved in writing algorithms very often in web development; it's a good idea to at least develop an awareness of what algorithms and pseudocode are.
- [Recursion and algorithms](/topics/deep-dives/computer-science/recursion-and-algorithms.md): This lesson will cover what recursion is, when you may want to use it and when you really shouldn't, so that it is yet another tool in your problem-busting arsenal.
- [Project: Fibs and sorting](/topics/deep-dives/computer-science/recursion-and-algorithms/project-fibs-and-sorting.md): This project will help you understand that everything that can be done with recursion can be done with iteration; although the iteration solution may be more difficult to figure out.
- [More on algorithms](/topics/deep-dives/computer-science/recursion-and-algorithms/more-on-algorithms.md): In this lesson, we will be looking at an overview of different common categories of problems faced in computer science, and a few of their solutions algorithms.
- [Big O](/topics/deep-dives/computer-science/recursion-and-algorithms/big-o.md): Big O a kind of asymptotic notation that describes how an algorithm grows in time or space in relation to the size of it's input.
- [Project: Practicing Big O](/topics/deep-dives/computer-science/recursion-and-algorithms/project-practicing-big-o.md): In this project, you'll be using your language of choice for writing an insertion sort and a merge sort and testing them against large unsorted and sorted arrays.
- [Data structures](/topics/deep-dives/computer-science/data-structures.md): A data structure is simply an object or collection of objects that is designed to enable you to store, access and manipulate data.
- [Maps, Stacks and Queues](/topics/deep-dives/computer-science/data-structures/maps-stacks-and-queues.md): In this lesson, we look at some of the more simple data structures that don't come in layers. We will be looking at Maps, Stacks and Queues.
- [Project: Stacks and Queues](/topics/deep-dives/computer-science/data-structures/project-stacks-and-queues.md): This is mostly an academic exercise, so you will be asked to refrain from using queue-like or stack-like methods in your solution, however tempting this otherwise sensible choice would be.
- [Nodes, Linked Lists and Trees](/topics/deep-dives/computer-science/data-structures/nodes-linked-lists-and-trees.md): In this lesson, we will be doing more of this; but our approach won't think of data as an Array that needs to be accessed, but as Nodes that can be rearranged.
- [Project: Linked Lists](/topics/deep-dives/computer-science/data-structures/project-linked-lists.md): Learning how nodes work by writing them, and building a linked list, will give you a solid understanding for learning about a more complex subject in the next section, trees.
- [Project: Trees](/topics/deep-dives/computer-science/data-structures/project-trees.md): In this project, we shall first do a relatively straightforward task in implementing a Binary Search Tree. Afterwards, we will be tackling a Chess related challenge.
- [Next steps](/topics/deep-dives/computer-science/data-structures/next-steps.md): You've learned core concepts that are not exclusive to any language. The steps and pseudo-code you use for an algorithm will never change. This will help you be a more flexible developer.
- [Databases](/topics/deep-dives/databases.md): SQL (Structured Query Language), which is used to query databases, is a very simple syntax... there are only a small handful of verbs to learn.
- [Databases and SQL](/topics/deep-dives/databases/databases-and-sql.md): This is a very brief explanation of SQL. It won't be teaching you specific new tactics but instead will present a good general overview to help you get you started.
- [Project: SQL Zoo](/topics/deep-dives/databases/project-sql-zoo.md): SQL Zoo will show you a table and have you run queries against it to answer specific questions. The queries start off simple and then gradually get harder as you go.
- [Design / UX](/topics/deep-dives/design-ux.md): Learn everything you need to know in order to start designing web interfaces and shaping user experiences.
- [Fonts and typography](/topics/deep-dives/design-ux/fonts-and-typography.md)
- [Grids](/topics/deep-dives/design-ux/grids.md)
- [Project: Teardown](/topics/deep-dives/design-ux/project-teardown.md)
- [Responsive design](/topics/deep-dives/design-ux/responsive-design-1.md)
- [Project: Mobile friendly](/topics/deep-dives/design-ux/project-mobile-friendly.md)
- [CSS frameworks](/topics/deep-dives/design-ux/css-frameworks.md)
- [Project: Bootstrapping](/topics/deep-dives/design-ux/project-bootstrapping.md)
- [HTML / CSS](/topics/deep-dives/html-css.md): Learn everything you need to know in order to start building and styling content for the web.
- [HTML Basics](/topics/deep-dives/html-css/html-basics.md)
- [Linking](/topics/deep-dives/html-css/html-basics/linking.md)
- [Images and media](/topics/deep-dives/html-css/html-basics/images-and-media.md)
- [Project: Embedding media](/topics/deep-dives/html-css/html-basics/project-embedding-media.md)
- [HTML5](/topics/deep-dives/html-css/html-basics/html5.md)
- [Tables](/topics/deep-dives/html-css/html-basics/tables.md)
- [Lists](/topics/deep-dives/html-css/html-basics/lists.md)
- [Forms](/topics/deep-dives/html-css/html-basics/forms.md)
- [Project: Make a form](/topics/deep-dives/html-css/html-basics/project-make-a-form.md)
- [CSS Basics](/topics/deep-dives/html-css/css-basics.md)
- [Box model](/topics/deep-dives/html-css/css-basics/box-model.md)
- [Floats and positioning](/topics/deep-dives/html-css/css-basics/floats-and-positioning.md)
- [Flexbox](/topics/deep-dives/html-css/css-basics/flexbox.md)
- [Grids](/topics/deep-dives/html-css/css-basics/grids.md)
- [Project: Breaking news](/topics/deep-dives/html-css/css-basics/project-breaking-news.md)
- [Best practices](/topics/deep-dives/html-css/css-basics/best-practices.md)
- [Backgrounds and gradients](/topics/deep-dives/html-css/css-basics/backgrounds-and-gradients.md)
- [Project: One more thing](/topics/deep-dives/html-css/css-basics/project-one-more-thing.md)
- [CSS3](/topics/deep-dives/html-css/css-basics/css3.md)
- [Preprocessors](/topics/deep-dives/html-css/css-basics/preprocessors.md)
- [Project: Your own framework](/topics/deep-dives/html-css/css-basics/project-your-own-framework.md)
- [Next steps](/topics/deep-dives/html-css/next-steps.md)
- [JavaScript](/topics/deep-dives/javascript.md): Learn everything you need to know in order to start building web applications with JavaScript.
- [Refresher](/topics/deep-dives/javascript/refresher.md)
- [Organization](/topics/deep-dives/javascript/code.md)
- [Objects and constructors](/topics/deep-dives/javascript/objects-and-constructors.md)
- [Project: Library](/topics/deep-dives/javascript/project-library.md)
- [Factory functions and module patterns](/topics/deep-dives/javascript/factory-functions-modules.md)
- [Project: Tic Tac Toe](/topics/deep-dives/javascript/project-tic-tac-toe.md)
- [Classes](/topics/deep-dives/javascript/classes.md)
- [ES6 Modules](/topics/deep-dives/javascript/es6-modules.md)
- [Project: Restaurant](/topics/deep-dives/javascript/project-restaurant.md)
- [Object Oriented Programming](/topics/deep-dives/javascript/object-oriented-programming.md)
- [Project: Todo list](/topics/deep-dives/javascript/project-todo-list.md)
- [Linting](/topics/deep-dives/javascript/linting.md)
- [Menus and sliders](/topics/deep-dives/javascript/menus-and-sliders.md)
- [Forms](/topics/deep-dives/javascript/forms.md)
- [ES6 features](/topics/deep-dives/javascript/es6-features.md)
- [JSON](/topics/deep-dives/javascript/json.md)
- [Callbacks and promises](/topics/deep-dives/javascript/callbacks-and-promises.md)
- [Using APIs](/topics/deep-dives/javascript/using-apis.md)
- [Async and Await](/topics/deep-dives/javascript/async-and-await.md)
- [Project: Weather](/topics/deep-dives/javascript/project-weather.md)
- [Testing](/topics/deep-dives/javascript/testing.md)
- [Project: Testing 1-2-3](/topics/deep-dives/javascript/project-testing-1-2-3.md)
- [Advanced Testing](/topics/deep-dives/javascript/advanced-testing.md)
- [Project: Battleship](/topics/deep-dives/javascript/project-battleship.md)
- [Backends](/topics/deep-dives/javascript/backends.md)
- [Project: Where's Waldo?](/topics/deep-dives/javascript/project-wheres-waldo.md)
- [Project: All-Star](/topics/deep-dives/javascript/project-all-star.md)
- [Next steps](/topics/deep-dives/javascript/next-steps.md)
- [NodeJS](/topics/deep-dives/nodejs.md): Learn everything you need to know in order to start building applications with NodeJS.
- [Project: Going to school](/topics/deep-dives/nodejs/project-going-to-school.md)
- [Project: Passing the test](/topics/deep-dives/nodejs/project-passing-the-test.md)
- [Express](/topics/deep-dives/nodejs/express.md)
- [Templates and middleware](/topics/deep-dives/nodejs/express/templates-and-middleware.md)
- [CRUD and MVC](/topics/deep-dives/nodejs/express/crud-and-mvc.md)
- [Project: Message board](/topics/deep-dives/nodejs/express/project-message-board.md)
- [Routes](/topics/deep-dives/nodejs/express/routes.md)
- [Displaying data](/topics/deep-dives/nodejs/express/displaying-data.md)
- [Forms and deployment](/topics/deep-dives/nodejs/express/forms-and-deployment.md)
- [Project: Inventory](/topics/deep-dives/nodejs/express/project-inventory.md)
- [Authentication](/topics/deep-dives/nodejs/authentication.md)
- [Security](/topics/deep-dives/nodejs/security.md)
- [Project: Clubhouse](/topics/deep-dives/nodejs/project-clubhouse.md)
- [APIs](/topics/deep-dives/nodejs/apis.md)
- [Securing an API](/topics/deep-dives/nodejs/securing-an-api.md)
- [Project: Blog](/topics/deep-dives/nodejs/project-blog.md)
- [Testing](/topics/deep-dives/nodejs/testing.md)
- [Testing with a database](/topics/deep-dives/nodejs/testing-with-a-database.md)
- [Project: Social network](/topics/deep-dives/nodejs/project-social-network.md): Build a social network with NodeJS.
- [React](/topics/deep-dives/react.md): Learn everything you need to know in order to start building web applications with React.
- [Props and State](/topics/deep-dives/react/props-and-state.md): Learn more about props and state in React.
- [Render lists and handle inputs](/topics/deep-dives/react/render-lists-and-handle-inputs.md): Learn more about how to render lists and handle inputs in React.
- [Project: CV](/topics/deep-dives/react/project-cv.md): Learn how to build a CV with React.
- [Lifecycle methods](/topics/deep-dives/react/lifecycle-methods.md): Learn about lifecycle methods in React.
- [Hooks](/topics/deep-dives/react/hooks.md): Learn about hooks in React.
- [Project: Memory card](/topics/deep-dives/react/project-memory-card.md): Learn how to build a memory card game.
- [Router](/topics/deep-dives/react/router.md): Learn about routing in React.
- [Project: Shopping cart](/topics/deep-dives/react/project-shopping-cart.md): Learn how to build a shopping cart.
- [Advanced concepts](/topics/deep-dives/react/advanced-concepts.md): Learn more about advanced concepts in React.
- [Ruby](/topics/deep-dives/ruby.md): Learn everything you need to know in order to start building applications with Ruby.
- [Installation](/topics/deep-dives/ruby/installation.md): Learn how to install ruby.
- [Data types](/topics/deep-dives/ruby/data-types.md): Learn more about data types in Ruby.
- [Variables](/topics/deep-dives/ruby/variables.md): Learn more about variables in Ruby.
- [Input and Output](/topics/deep-dives/ruby/input-and-output.md): All applications are fundamentally based on input and output.
- [Conditionals](/topics/deep-dives/ruby/conditionals.md): Conditional statements control the flow of code.
- [Loops](/topics/deep-dives/ruby/loops.md): Loops repeat an action in code based on one or more conditions.
- [Arrays](/topics/deep-dives/ruby/arrays.md): An array is a collection of data that can contain any combination of variables, numbers, strings, or other Ruby objects (including other arrays).
- [Hashes](/topics/deep-dives/ruby/hashes.md): Ruby hashes are collections of data, similar to objects in JavaScript and dictionaries in Python.
- [Methods](/topics/deep-dives/ruby/methods.md): In this lesson, we're going to deconstruct what methods are, examine their behavior, and learn how to use them.
- [Enumerables](/topics/deep-dives/ruby/enumerables.md): Learn more about some of the most frequently used enumerable methods.
- [More enumerables](/topics/deep-dives/ruby/more-enumerables.md): Learn more about predicate enumerable methods.
- [Nested collections](/topics/deep-dives/ruby/nested-collections.md)
- [Blocks](/topics/deep-dives/ruby/blocks.md)
- [Pattern matching](/topics/deep-dives/ruby/pattern-matching.md)
- [Debugging](/topics/deep-dives/ruby/debugging.md): The debugging process is all about confirming assumptions about your code until you find something that goes against your assumptions.
- [Project: Caesar cipher](/topics/deep-dives/ruby/project-caesar-cipher.md): Learn how to build a simple command-line application that takes in a string and the shift factor and then outputs an "encrypted" string.
- [Project: Substrings](/topics/deep-dives/ruby/project-substrings.md): Learn how to build a simple command-line application that returns a hash listing of substrings.
- [Project: Stock picker](/topics/deep-dives/ruby/project-stock-picker.md): Learn how to build a simple command-line based stock picker.
- [Project: Bubble sort](/topics/deep-dives/ruby/project-bubble-sort.md): Learn how to build a bubble sort algorithm.
- [Object oriented programming](/topics/deep-dives/ruby/object-oriented-programming.md): Learn more about object oriented programming.
- [Project: Tic Tac Toe](/topics/deep-dives/ruby/project-tic-tac-toe.md): Learn how to build a tic tac toe game.
- [Project: Mastermind](/topics/deep-dives/ruby/project-mastermind.md): Learn how to build a Mastermind game from the command line where you have 12 turns to guess the secret code.
- [Serialization](/topics/deep-dives/ruby/serialization.md): Working with files gets you into the idea of serialization, which basically just means converting your data into a storable format like a string.
- [Project: Event manager](/topics/deep-dives/ruby/project-event-manager.md): Learn how to build an event management app that pulls information from an external API.
- [Project: Hangman](/topics/deep-dives/ruby/project-hangman.md): Learn how to build a simple command line Hangman game where one player plays against the computer.
- [Computer Science](/topics/deep-dives/ruby/computer-science.md): We're taking a look at some more Computer Science-y concepts here because they are fundamental to your career as a developer.
- [Recursion](/topics/deep-dives/ruby/computer-science/recursion.md): Learn more about when and how to use recursion.
- [Project: Merge Sort](/topics/deep-dives/ruby/computer-science/project-merge-sort.md): Learn how to build a merge sort algorithm.
- [Data structures and algorithms](/topics/deep-dives/ruby/computer-science/data-structures-and-algorithms.md): Learn more about data structures and basic algortihms.
- [Project: Linked Lists](/topics/deep-dives/ruby/computer-science/project-linked-lists.md): Learn how to build a linked list.
- [Project: Binary Search Trees](/topics/deep-dives/ruby/computer-science/project-binary-search-trees.md): Learn how to build a balanced binary search tree.
- [Project: Knight Travails](/topics/deep-dives/ruby/computer-science/project-knight-travails.md): Learn how to build a method called "knight\_moves" that shows the simplest possible way to get from one square to another by outputting all squares the knight will stop on along the way.
- [Testing](/topics/deep-dives/ruby/testing.md): Writing tests ensures that code that comes after has clearer design, purpose, and quality.
- [RSpec](/topics/deep-dives/ruby/rspec.md): RSpec and the "red-green-refactor" cycle will allow you to code with confidence, knowing that your classes and their behaviors continue to meet your specified expectations.
- [Project: Four in a row](/topics/deep-dives/ruby/project-four-in-a-row.md): Learn how to build a basic game where each player takes turns dropping pieces into the cage. Players win if they manage to get 4 of their pieces consecutively in a row, column, or along a diagonal.
- [Git](/topics/deep-dives/ruby/git.md): This section should help you take the first steps towards expanding your Git toolkit and understanding what's actually going on under the hood with Git.
- [Project: Open Source](/topics/deep-dives/ruby/project-open-source.md): Learn how to make a contribution to an open source project on GitHub.
- [Project: Chess](/topics/deep-dives/ruby/project-chess.md): Learn how to build a command line Chess game where two players can play against each other.
- [Next steps](/topics/deep-dives/ruby/next-steps.md): If you know Ruby, the world is sort of opened up for you. Nervous about Rails? Don't be. Rails is just Ruby that's been packaged up to do lots of stuff for you.
- [Ruby on Rails](/topics/deep-dives/ruby-on-rails.md): Learn everything you need to know in order to start building web applications with Ruby on Rails.
- [Using Heroku](/topics/deep-dives/ruby-on-rails/heroku.md): A straightforward setup for deploying web applications to the internet.
- [Installing Rails](/topics/deep-dives/ruby-on-rails/installing-rails.md): In this project, we're going to build a fully functional Rails application.
- [Basics](/topics/deep-dives/ruby-on-rails/basics.md): A quick overview to get a better understanding of how the web works before diving deeper into Rails.
- [Routing](/topics/deep-dives/ruby-on-rails/basics/routing.md): Routing is handled by the router, which is responsible for matching web requests with the appropriate controller actions to run them.
- [Controllers](/topics/deep-dives/ruby-on-rails/basics/controllers.md): Controllers are the equivalent of a "middle-person" in your application
- [Views](/topics/deep-dives/ruby-on-rails/basics/views.md): Views make up the user-facing side of your app.
- [Asset pipeline](/topics/deep-dives/ruby-on-rails/basics/asset-pipeline.md): The Asset Pipeline isn't something that you often think about, especially when just building little toy apps, but it becomes important to understand as soon as you want to deploy your application.
- [Deployment](/topics/deep-dives/ruby-on-rails/basics/deployment.md): Deployment is one of the most satisfying parts of building an application.
- [Project: Blog](/topics/deep-dives/ruby-on-rails/basics/project-blog.md): Learn how to build a blog with Rails.
- [Active Record](/topics/deep-dives/ruby-on-rails/active-record.md): Active Record is a powerful part of Rails and one of the trickiest to get the hang of. But don't worry, this section will make it easier.
- [Project: Upvote](/topics/deep-dives/ruby-on-rails/active-record/project-upvote.md): Learn how to build a website that lets users upvote content.
- [Forms](/topics/deep-dives/ruby-on-rails/forms.md): Most forms won't be that long or complicated for you, but it's useful to appreciate all the things you can (and one day will) do with them.
- [Cookies, sessions, and authentication](/topics/deep-dives/ruby-on-rails/forms/cookies-sessions-and-authentication.md): Authentication can appear to be a fairly complicated topic -- there are a lot of moving parts. But this section will help you understand how it works.
- [Project: Password](/topics/deep-dives/ruby-on-rails/forms/project-password.md): In this project, you'll be building a private site where your members can write anonymous posts.
- [Advanced forms and Active Record](/topics/deep-dives/ruby-on-rails/advanced-forms-and-active-record.md): In this lesson, we'll get into the more interesting and useful areas of Active Record queries.
- [Associations](/topics/deep-dives/ruby-on-rails/advanced-forms-and-active-record/associations.md): Associations are all over the place in Rails and are incredibly useful because of all the new methods they give you access to.
- [Project: Private Events](/topics/deep-dives/ruby-on-rails/advanced-forms-and-active-record/project-private-events.md): Learn how to build a site that allows users to create events and then manage user signups.
- [Callbacks](/topics/deep-dives/ruby-on-rails/advanced-forms-and-active-record/callbacks.md): Callbacks provide hooks into specific points (either before, after, or sometimes "around") in the life cycle of an object.
- [Menus, helpers and nested forms](/topics/deep-dives/ruby-on-rails/advanced-forms-and-active-record/menus-helpers-and-nested-forms.md): Let's take a look at some of the options you have to make a form handle multiple model objects.
- [Project: Ticket agent](/topics/deep-dives/ruby-on-rails/advanced-forms-and-active-record/project-ticket-agent.md): Learn how to build the first few steps of a checkout process for a one-way flight.
- [APIs](/topics/deep-dives/ruby-on-rails/apis.md): In this lesson, we'll cover how to build your own API. In the following lesson, we'll cover how to interface with the APIs of other applications.
- [External APIs](/topics/deep-dives/ruby-on-rails/apis/external-apis.md): This lesson will cover common characteristics of external APIs (those you'll most likely encounter throughout the web) and methods for authenticating with them.
- [Project: Animals](/topics/deep-dives/ruby-on-rails/apis/project-animals.md): Learn how to explore the Flickr API to retrieve pictures of animals.
- [Project: Photo widget](/topics/deep-dives/ruby-on-rails/apis/project-photo-widget.md): Learn how to build a photo widget to display photos from your Flickr feed.
- [Mailers](/topics/deep-dives/ruby-on-rails/mailers.md): In this lesson we'll cover the process that generates emails in Rails, and you'll get a chance to send your own.
- [Project: Confirmation](/topics/deep-dives/ruby-on-rails/mailers/project-confirmation.md): You'll be dusting off your Ticket agent project (or one of the other projects that has users registering) and having it send out a "You have booked your ticket" email to all Passengers.
- [Advanced topics](/topics/deep-dives/ruby-on-rails/advanced-topics.md): Learn more about advanced topics when working with Rails.
- [Action Cable](/topics/deep-dives/ruby-on-rails/advanced-topics/action-cable.md)
- [Project: Social network](/topics/deep-dives/ruby-on-rails/project-social-network.md): You'll be building a social network. As usual, any additional styling will be up to you but the really important stuff is to get the data and back end working properly.
- [Next steps](/topics/deep-dives/ruby-on-rails/next-steps.md): The point of this course has been to get you to a place where you can start thinking about actually getting that first job.
