# The Daily Plan

Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement.

Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:

* C - using structs and functions that take a struct \* and something else as args
* C++ - without using built-in types
* C++ - using built-in types, like STL's std::list for a linked list
* Python - using built-in types (to keep practicing Python)
* and write tests to ensure I'm doing it right, sometimes just using simple assert() statements
* You may do Java or something else, this is just my thing

You don't need all these. You need only one language for the interview.

Why code in all of these?

* Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
* Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python or Java))
* Make use of built-in types, so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)

I may not have time to do all of these for every subject, but I'll try.

You can see some code I found here:

* [C](https://github.com/VivekanandaYadla/practice-c)
* [C++](https://github.com/VivekanandaYadla/practice-cpp)
* [Python](https://github.com/VivekanandaYadla/practice-python)

You don't need to memorize the guts of every algorithm.

Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then test it out on a computer.

### Prerequisite Knowledge

* &#x20;**Learn C**
  * C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying
  * &#x20;[The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
    * This is a short book, but it will give you a great handle on the C language and if you practice it a little you'll quickly get proficient. Understanding C helps you understand how programs and memory work
    * [Answers to questions](https://github.com/lekkas/c-algorithms)
* &#x20;**How computers process a program:**
  * &#x20;[How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA)
  * &#x20;[How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA)
  * &#x20;[Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU)
  * &#x20;[The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60)
  * &#x20;[Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k)
