/mastering-code-challenges

Learn to improve problem-solving skills using algorithms.

MIT LicenseMIT

translations

Mastering Code Challenges

Ada Lovelace

“I never am really satisfied that I understand anything; because, understand it well as I may, my comprehension can only be an infinitesimal fraction of all I want to understand about the many connections and relations which occur to me, how the matter in question was first thought of or arrived at…” - Ada Lovelace

Motivation

Software development comes down to just one thing: solving problems. The main question I have been thinking about is how to solve problems efficiently. I decided to create this repository to produce a content guide that allows us to learn how to solve problems in a better way.

We develop a thinking framework for problem solving using algorithms when we have a good view of the fundamentals of computer science.

My intention with this is to be able to learn and create study plans. Not a single path will be presented, but several. What suits you best! 😉

Table of Contents

Study Plan

This is relative to each individual. There is no rule about how you should study. It is possible to find different methods and study routines.

Leonardo da Vinci for example followed a cycle based on working 4 hours and sleeping 20 minutes.

Find the best approach for you.

When thinking about incorporating the right methods for you, consider the following recommendations:

  • Getting enough sleep

  • Drink water

  • Practice physical exercise

Build a discipline. Don't depend on your motivation, it's unstable.

Learn from the great masters. Richard Feynman left us as a legacy of his excellent: Feynman technique. This method consists of remembering what you have studied using concepts of elaboration and association.

The Feynman Technique Can Help You Remember Everything You Read

Algorithms

  • Search

    • Linear
    • Binary
  • Sort

    • Selection
    • Insertion
    • Merge
    • Quick
    • Heap
    • Bubble
    • Counting

Data Structures

  • Array
  • Linked List
  • Stack
  • Queu
  • Hash Table
  • Graph
  • Tree

Problem Solving Techniques

  • Divide & Conquer
  • Dynamic Programming
  • Design Patterns
  • Object Oriented Programming
  • Functional Programming

Concepts

  • Big O Notation
  • Abstraction
  • Recursion
  • Parallelism
  • Concurrency

Tests

  • Test Driven Development(TDD)
  • Mocking

Security

  • Hashing
  • Asymmetric cryptography

Learn even more

  • String Matching and Parsing
  • Backtracking

Books

  • Introduction to Algorithms
  • Grokking Algorithms
  • Cracking the Coding Interview

Code Challenges Platforms

  • HackerRank
  • Coderbyte
  • Project Euler
  • Codewars
  • TopCoder
  • LeetCode
  • CodeChef

Human Development

  • Communication
  • Writing
  • Transparency
  • Empathy
  • Collaboration
  • Flexibility
  • Resilience
  • Ethic

Love the people. ❤️