# Learn How to Code

## Learn How to Code

- [Welcome](https://howtocode.trek.io/topics/master.md): This website is a free resource with everything you need to get started or level up as a web developer.
- [Introduction](https://howtocode.trek.io/topics/foundations/introduction.md): This section intentionally covers a very broad range of topics. It's silly to go diving straight into programming without having a context for what it is and why it's useful.
- [Becoming a web developer](https://howtocode.trek.io/topics/foundations/introduction/becoming-a-web-developer.md): Web development could be a good profession for you if you like solving logical problems, building useful things, and experimenting with new technologies.
- [Motivation and mindset](https://howtocode.trek.io/topics/foundations/introduction/motivation-and-mindset.md): In this course, "Foundations" you'll take a journey through the entire spectrum of topics that you will eventually need to know.
- [Join a supportive community](https://howtocode.trek.io/topics/foundations/introduction/join-a-supportive-community.md): Learning web development will be a long and arduous journey, but you can make the marathon a lot more fun by pairing up with others.
- [How does the web work?](https://howtocode.trek.io/topics/foundations/introduction/how-does-the-web-work.md): Before you can understand how to program the web, you need a more rigorous understanding of the web itself than you likely have now.
- [Requirements](https://howtocode.trek.io/topics/foundations/requirements.md): Having the experience of setting up a development environment to run the code you'll write is an invaluable, real-world skill you'll carry with you for the rest of your career.
- [Prerequisites](https://howtocode.trek.io/topics/foundations/requirements/prerequisites.md): This curriculum only supports using a laptop, desktop or supported Chromebook. We cannot help you set up a developer environment on a RaspberryPi or any other device.
- [Text editors](https://howtocode.trek.io/topics/foundations/requirements/text-editors.md): You can think of code editors as specialized web development tools. They are highly customizable and offer many features that will make your life easier.
- [Command line basics](https://howtocode.trek.io/topics/foundations/requirements/command-line-basics.md): The command line is like our base of operations, from which we can launch other programs and interact with them.
- [Setting up Git](https://howtocode.trek.io/topics/foundations/requirements/setting-up-git.md): Git is like an epic save button that can keep track of all of the things you and others are working on.
- [Setting up Node](https://howtocode.trek.io/topics/foundations/requirements/setting-up-node.md): Node allows you to run JavaScript outside of your web browser, enabling you to build all kinds of applications.
- [Git](https://howtocode.trek.io/topics/foundations/git.md): Git is a very popular version control system. You'll become very familiar with this piece of software throughout the curriculum.
- [Git basics](https://howtocode.trek.io/topics/foundations/git/git-basics.md): This is a reference list of the most commonly used Git commands. Try to familiarize yourself with the commands so that you can eventually remember them all.
- [Project: Practicing Git](https://howtocode.trek.io/topics/foundations/git/project-practicing-git.md): Walk through the basic Git workflow that you will use in all your projects.
- [Frontend](https://howtocode.trek.io/topics/foundations/frontend.md): A frontend developer works between a designer on one end and a backend developer on the other, translating the design into code and plugging the data from the back-end into the right spots.
- [HTML and CSS](https://howtocode.trek.io/topics/foundations/frontend/html-and-css.md): HTML codifies the structure and format of a page. CSS codifies the style to determine what it will look like.
- [Developer Tools](https://howtocode.trek.io/topics/foundations/frontend/developer-tools.md): Developer tools provide you with an incredibly powerful assortment of useful tools that will save you a lot of frustration and time as you develop your own websites.
- [Project: Create a web page](https://howtocode.trek.io/topics/foundations/frontend/project-create-a-web-page.md): Build a basic web page to learn how elements get placed on the page, and how they get styled and aligned.
- [JavaScript](https://howtocode.trek.io/topics/foundations/javascript.md): Learn the basics about variables and frequently used operators in JavaScript.
- [Strings and Conditionals](https://howtocode.trek.io/topics/foundations/javascript/strings-and-conditionals.md): Learn the basics about strings, booleans and conditionals in JavaScript.
- [Using Developer Tools](https://howtocode.trek.io/topics/foundations/javascript/using-developer-tools.md): Developer tools save you lots of time by helping you debug and analyze the effects of code in relation to web pages.
- [Functions](https://howtocode.trek.io/topics/foundations/javascript/functions.md): Functions bundle code into reusable chunks that can be utilized throughout an application.
- [Problem solving](https://howtocode.trek.io/topics/foundations/javascript/problem-solving.md): The best way to improve your problem solving ability is by building experience by making lots of programs. The more practice you have the better you'll be prepared to solve real world problems.
- [Project: Rock paper scissors](https://howtocode.trek.io/topics/foundations/javascript/project-rock-paper-scissors.md): Make a basic version of the classic game, "Rock, Paper, Scissors"  with JavaScript.
- [Writing clean code](https://howtocode.trek.io/topics/foundations/javascript/writing-clean-code.md): There are many different opinions on what constitutes great JavaScript code, but there are several things you can do to ensure that yours is hopefully easy for others to read.
- [Arrays and Loops](https://howtocode.trek.io/topics/foundations/javascript/arrays-and-loops.md): Learn the basics about arrays and loops in JavaScript.
- [The DOM](https://howtocode.trek.io/topics/foundations/javascript/the-dom.md): The Document Object Model is a tree-like representation of the contents on a webpage or document.
- [Project: Etch-A-Sketch](https://howtocode.trek.io/topics/foundations/javascript/project-etch-a-sketch.md): Make a basic version of the classic "Etch-A-Sketch" toy with JavaScript.
- [Objects and More Arrays](https://howtocode.trek.io/topics/foundations/javascript/objects-and-more-arrays.md): Learn the basics about objects and more detailed ways to leverage arrays in JavaScript.
- [Project: Calculator](https://howtocode.trek.io/topics/foundations/javascript/project-calculator.md): Make a calculator with JavaScript.
- [Backend](https://howtocode.trek.io/topics/foundations/backend.md): The backend is the server side of a web application.
- [Frameworks](https://howtocode.trek.io/topics/foundations/backend/frameworks.md): Frameworks help prevent repetition and provide great organization. They tend to force you to organize your files and code in a way that keeps it highly modular and really clean.
- [Next steps](https://howtocode.trek.io/topics/foundations/next-steps.md): With what you now know you could start putting together some basic websites, but we're here to help you get a lot further than that!
- [Computer Science](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/design-ux/fonts-and-typography.md)
- [Grids](https://howtocode.trek.io/topics/deep-dives/design-ux/grids.md)
- [Project: Teardown](https://howtocode.trek.io/topics/deep-dives/design-ux/project-teardown.md)
- [Responsive design](https://howtocode.trek.io/topics/deep-dives/design-ux/responsive-design-1.md)
- [Project: Mobile friendly](https://howtocode.trek.io/topics/deep-dives/design-ux/project-mobile-friendly.md)
- [CSS frameworks](https://howtocode.trek.io/topics/deep-dives/design-ux/css-frameworks.md)
- [Project: Bootstrapping](https://howtocode.trek.io/topics/deep-dives/design-ux/project-bootstrapping.md)
- [HTML / CSS](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics.md)
- [Linking](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/linking.md)
- [Images and media](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/images-and-media.md)
- [Project: Embedding media](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/project-embedding-media.md)
- [HTML5](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/html5.md)
- [Tables](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/tables.md)
- [Lists](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/lists.md)
- [Forms](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/forms.md)
- [Project: Make a form](https://howtocode.trek.io/topics/deep-dives/html-css/html-basics/project-make-a-form.md)
- [CSS Basics](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics.md)
- [Box model](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/box-model.md)
- [Floats and positioning](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/floats-and-positioning.md)
- [Flexbox](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/flexbox.md)
- [Grids](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/grids.md)
- [Project: Breaking news](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/project-breaking-news.md)
- [Best practices](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/best-practices.md)
- [Backgrounds and gradients](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/backgrounds-and-gradients.md)
- [Project: One more thing](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/project-one-more-thing.md)
- [CSS3](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/css3.md)
- [Preprocessors](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/preprocessors.md)
- [Project: Your own framework](https://howtocode.trek.io/topics/deep-dives/html-css/css-basics/project-your-own-framework.md)
- [Next steps](https://howtocode.trek.io/topics/deep-dives/html-css/next-steps.md)
- [JavaScript](https://howtocode.trek.io/topics/deep-dives/javascript.md): Learn everything you need to know in order to start building web applications with JavaScript.
- [Refresher](https://howtocode.trek.io/topics/deep-dives/javascript/refresher.md)
- [Organization](https://howtocode.trek.io/topics/deep-dives/javascript/code.md)
- [Objects and constructors](https://howtocode.trek.io/topics/deep-dives/javascript/objects-and-constructors.md)
- [Project: Library](https://howtocode.trek.io/topics/deep-dives/javascript/project-library.md)
- [Factory functions and module patterns](https://howtocode.trek.io/topics/deep-dives/javascript/factory-functions-modules.md)
- [Project: Tic Tac Toe](https://howtocode.trek.io/topics/deep-dives/javascript/project-tic-tac-toe.md)
- [Classes](https://howtocode.trek.io/topics/deep-dives/javascript/classes.md)
- [ES6 Modules](https://howtocode.trek.io/topics/deep-dives/javascript/es6-modules.md)
- [Project: Restaurant](https://howtocode.trek.io/topics/deep-dives/javascript/project-restaurant.md)
- [Object Oriented Programming](https://howtocode.trek.io/topics/deep-dives/javascript/object-oriented-programming.md)
- [Project: Todo list](https://howtocode.trek.io/topics/deep-dives/javascript/project-todo-list.md)
- [Linting](https://howtocode.trek.io/topics/deep-dives/javascript/linting.md)
- [Menus and sliders](https://howtocode.trek.io/topics/deep-dives/javascript/menus-and-sliders.md)
- [Forms](https://howtocode.trek.io/topics/deep-dives/javascript/forms.md)
- [ES6 features](https://howtocode.trek.io/topics/deep-dives/javascript/es6-features.md)
- [JSON](https://howtocode.trek.io/topics/deep-dives/javascript/json.md)
- [Callbacks and promises](https://howtocode.trek.io/topics/deep-dives/javascript/callbacks-and-promises.md)
- [Using APIs](https://howtocode.trek.io/topics/deep-dives/javascript/using-apis.md)
- [Async and Await](https://howtocode.trek.io/topics/deep-dives/javascript/async-and-await.md)
- [Project: Weather](https://howtocode.trek.io/topics/deep-dives/javascript/project-weather.md)
- [Testing](https://howtocode.trek.io/topics/deep-dives/javascript/testing.md)
- [Project: Testing 1-2-3](https://howtocode.trek.io/topics/deep-dives/javascript/project-testing-1-2-3.md)
- [Advanced Testing](https://howtocode.trek.io/topics/deep-dives/javascript/advanced-testing.md)
- [Project: Battleship](https://howtocode.trek.io/topics/deep-dives/javascript/project-battleship.md)
- [Backends](https://howtocode.trek.io/topics/deep-dives/javascript/backends.md)
- [Project: Where's Waldo?](https://howtocode.trek.io/topics/deep-dives/javascript/project-wheres-waldo.md)
- [Project: All-Star](https://howtocode.trek.io/topics/deep-dives/javascript/project-all-star.md)
- [Next steps](https://howtocode.trek.io/topics/deep-dives/javascript/next-steps.md)
- [NodeJS](https://howtocode.trek.io/topics/deep-dives/nodejs.md): Learn everything you need to know in order to start building applications with NodeJS.
- [Project: Going to school](https://howtocode.trek.io/topics/deep-dives/nodejs/project-going-to-school.md)
- [Project: Passing the test](https://howtocode.trek.io/topics/deep-dives/nodejs/project-passing-the-test.md)
- [Express](https://howtocode.trek.io/topics/deep-dives/nodejs/express.md)
- [Templates and middleware](https://howtocode.trek.io/topics/deep-dives/nodejs/express/templates-and-middleware.md)
- [CRUD and MVC](https://howtocode.trek.io/topics/deep-dives/nodejs/express/crud-and-mvc.md)
- [Project: Message board](https://howtocode.trek.io/topics/deep-dives/nodejs/express/project-message-board.md)
- [Routes](https://howtocode.trek.io/topics/deep-dives/nodejs/express/routes.md)
- [Displaying data](https://howtocode.trek.io/topics/deep-dives/nodejs/express/displaying-data.md)
- [Forms and deployment](https://howtocode.trek.io/topics/deep-dives/nodejs/express/forms-and-deployment.md)
- [Project: Inventory](https://howtocode.trek.io/topics/deep-dives/nodejs/express/project-inventory.md)
- [Authentication](https://howtocode.trek.io/topics/deep-dives/nodejs/authentication.md)
- [Security](https://howtocode.trek.io/topics/deep-dives/nodejs/security.md)
- [Project: Clubhouse](https://howtocode.trek.io/topics/deep-dives/nodejs/project-clubhouse.md)
- [APIs](https://howtocode.trek.io/topics/deep-dives/nodejs/apis.md)
- [Securing an API](https://howtocode.trek.io/topics/deep-dives/nodejs/securing-an-api.md)
- [Project: Blog](https://howtocode.trek.io/topics/deep-dives/nodejs/project-blog.md)
- [Testing](https://howtocode.trek.io/topics/deep-dives/nodejs/testing.md)
- [Testing with a database](https://howtocode.trek.io/topics/deep-dives/nodejs/testing-with-a-database.md)
- [Project: Social network](https://howtocode.trek.io/topics/deep-dives/nodejs/project-social-network.md): Build a social network with NodeJS.
- [React](https://howtocode.trek.io/topics/deep-dives/react.md): Learn everything you need to know in order to start building web applications with React.
- [Props and State](https://howtocode.trek.io/topics/deep-dives/react/props-and-state.md): Learn more about props and state in React.
- [Render lists and handle inputs](https://howtocode.trek.io/topics/deep-dives/react/render-lists-and-handle-inputs.md): Learn more about how to render lists and handle inputs in React.
- [Project: CV](https://howtocode.trek.io/topics/deep-dives/react/project-cv.md): Learn how to build a CV with React.
- [Lifecycle methods](https://howtocode.trek.io/topics/deep-dives/react/lifecycle-methods.md): Learn about lifecycle methods in React.
- [Hooks](https://howtocode.trek.io/topics/deep-dives/react/hooks.md): Learn about hooks in React.
- [Project: Memory card](https://howtocode.trek.io/topics/deep-dives/react/project-memory-card.md): Learn how to build a memory card game.
- [Router](https://howtocode.trek.io/topics/deep-dives/react/router.md): Learn about routing in React.
- [Project: Shopping cart](https://howtocode.trek.io/topics/deep-dives/react/project-shopping-cart.md): Learn how to build a shopping cart.
- [Advanced concepts](https://howtocode.trek.io/topics/deep-dives/react/advanced-concepts.md): Learn more about advanced concepts in React.
- [Ruby](https://howtocode.trek.io/topics/deep-dives/ruby.md): Learn everything you need to know in order to start building applications with Ruby.
- [Installation](https://howtocode.trek.io/topics/deep-dives/ruby/installation.md): Learn how to install ruby.
- [Data types](https://howtocode.trek.io/topics/deep-dives/ruby/data-types.md): Learn more about data types in Ruby.
- [Variables](https://howtocode.trek.io/topics/deep-dives/ruby/variables.md): Learn more about variables in Ruby.
- [Input and Output](https://howtocode.trek.io/topics/deep-dives/ruby/input-and-output.md): All applications are fundamentally based on input and output.
- [Conditionals](https://howtocode.trek.io/topics/deep-dives/ruby/conditionals.md): Conditional statements control the flow of code.
- [Loops](https://howtocode.trek.io/topics/deep-dives/ruby/loops.md): Loops repeat an action in code based on one or more conditions.
- [Arrays](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby/hashes.md): Ruby hashes are collections of data, similar to objects in JavaScript and dictionaries in Python.
- [Methods](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby/enumerables.md): Learn more about some of the most frequently used enumerable methods.
- [More enumerables](https://howtocode.trek.io/topics/deep-dives/ruby/more-enumerables.md): Learn more about predicate enumerable methods.
- [Nested collections](https://howtocode.trek.io/topics/deep-dives/ruby/nested-collections.md)
- [Blocks](https://howtocode.trek.io/topics/deep-dives/ruby/blocks.md)
- [Pattern matching](https://howtocode.trek.io/topics/deep-dives/ruby/pattern-matching.md)
- [Debugging](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby/project-stock-picker.md): Learn how to build a simple command-line based stock picker.
- [Project: Bubble sort](https://howtocode.trek.io/topics/deep-dives/ruby/project-bubble-sort.md): Learn how to build a bubble sort algorithm.
- [Object oriented programming](https://howtocode.trek.io/topics/deep-dives/ruby/object-oriented-programming.md): Learn more about object oriented programming.
- [Project: Tic Tac Toe](https://howtocode.trek.io/topics/deep-dives/ruby/project-tic-tac-toe.md): Learn how to build a tic tac toe game.
- [Project: Mastermind](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby/computer-science/recursion.md): Learn more about when and how to use recursion.
- [Project: Merge Sort](https://howtocode.trek.io/topics/deep-dives/ruby/computer-science/project-merge-sort.md): Learn how to build a merge sort algorithm.
- [Data structures and algorithms](https://howtocode.trek.io/topics/deep-dives/ruby/computer-science/data-structures-and-algorithms.md): Learn more about data structures and basic algortihms.
- [Project: Linked Lists](https://howtocode.trek.io/topics/deep-dives/ruby/computer-science/project-linked-lists.md): Learn how to build a linked list.
- [Project: Binary Search Trees](https://howtocode.trek.io/topics/deep-dives/ruby/computer-science/project-binary-search-trees.md): Learn how to build a balanced binary search tree.
- [Project: Knight Travails](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby/testing.md): Writing tests ensures that code that comes after has clearer design, purpose, and quality.
- [RSpec](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby/project-open-source.md): Learn how to make a contribution to an open source project on GitHub.
- [Project: Chess](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/heroku.md): A straightforward setup for deploying web applications to the internet.
- [Installing Rails](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/installing-rails.md): In this project, we're going to build a fully functional Rails application.
- [Basics](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/basics/controllers.md): Controllers are the equivalent of a "middle-person" in your application
- [Views](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/basics/views.md): Views make up the user-facing side of your app.
- [Asset pipeline](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/basics/deployment.md): Deployment is one of the most satisfying parts of building an application.
- [Project: Blog](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/basics/project-blog.md): Learn how to build a blog with Rails.
- [Active Record](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/active-record/project-upvote.md): Learn how to build a website that lets users upvote content.
- [Forms](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/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](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/advanced-topics.md): Learn more about advanced topics when working with Rails.
- [Action Cable](https://howtocode.trek.io/topics/deep-dives/ruby-on-rails/advanced-topics/action-cable.md)
- [Project: Social network](https://howtocode.trek.io/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](https://howtocode.trek.io/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.
- [Preparing to find a job](https://howtocode.trek.io/topics/getting-hired/preparing-to-find-a-job.md): Learn everything you need to know about preparing to find a job.
- [Plan a strategy](https://howtocode.trek.io/topics/getting-hired/preparing-to-find-a-job/plan-a-strategy.md): You've got to have a plan or you'll find yourself spamming your resume out to every job post on every job board and wondering why you haven't had any success.
- [What companies want](https://howtocode.trek.io/topics/getting-hired/preparing-to-find-a-job/what-companies-want.md): Companies are looking for someone who can add value as soon as possible and who will be able to grow with the organization.
- [Get yourself together](https://howtocode.trek.io/topics/getting-hired/preparing-to-find-a-job/get-yourself-together.md): You should have at least an informal list of the things that matter to you. Now ruthlessly rank them. What are your non-negotiables and what are your nice-to-haves?
- [How to prepare](https://howtocode.trek.io/topics/getting-hired/preparing-to-find-a-job/how-to-prepare.md): You may be uncomfortable "selling yourself" but that's exactly what you'll have to do.
- [Project: Make your website](https://howtocode.trek.io/topics/getting-hired/preparing-to-find-a-job/project-build-a-personal-website.md): In general, it's best to keep your site simple and clean. Let your portfolio of work speak for itself.
- [Applying and interviewing](https://howtocode.trek.io/topics/getting-hired/applying-and-interviewing-for-a-job.md): Learn everything you need to know about applying and interviewing for a job.
- [Qualifying leads](https://howtocode.trek.io/topics/getting-hired/applying-and-interviewing-for-a-job/qualifying-leads.md): Part of the reason for qualifying the leads is to make sure you don't get sucked into a process and waste a bunch of time applying to jobs that you wouldn't actually take anyway.
- [Project: Make your resume](https://howtocode.trek.io/topics/getting-hired/applying-and-interviewing-for-a-job/project-make-a-developer-resume.md): A developer's resume is an interesting thing because so much of your value is demonstrated from your projects, which live in your GitHub (and are hopefully also deployed somewhere online).
- [Applying for jobs](https://howtocode.trek.io/topics/getting-hired/applying-and-interviewing-for-a-job/applying-for-jobs.md): Start with companies that you're on the fence about. Once you feel comfortable with your application-sending and hopefully interviewing abilities, start tackling your top choices.
- [Preparing for an interview](https://howtocode.trek.io/topics/getting-hired/applying-and-interviewing-for-a-job/preparing-for-an-interview.md): You'll want to figure out the questions you might expect to be asked (and the general responses you'll have for each which demonstrate your brilliance) and you'll want to research the company too.
- [Handling an offer](https://howtocode.trek.io/topics/getting-hired/applying-and-interviewing-for-a-job/handling-an-offer.md): Do not accept right away. This is doubly true if you don't think it's a good offer.
- [Final words](https://howtocode.trek.io/topics/getting-hired/applying-and-interviewing-for-a-job/final-words.md): Build some awesome software, learn as much as you can, and pay it forward when you're able to.
