# Kodering Onderhoud Universiteit

> Ek het oorspronklik dié as 'n kort om-te-doen lys van studie onderwerpe om 'n sagteware ingenieur te word gemaak,
> maar did het gegroei tot die groot lys wat jy vandag sien. Nadat ek dié studieplan gevolg het, [het Amazon my
> aangestel](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)!
> Jy hoef heel waarskynlik nie soveel soos ek te studeer nie. Maar alles wat jy nodig het is hier.
> 
> Ek het ongeveer 8-12 gestudeer elke dag, vir maande. Hier is my storie: [Hoekom ek vol-tyd gestudeer het, vir 8 maande, vir 'n Google onderhoud](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
> 
> **Let asseblief op: ** Jy sal nie soveel soos ek hoef te studeer nie. Ek het baie tyd gemors op goed wat ek nie benodig het nie. Meer inligting daaroor onder. Ek sal jou help leer sonder om jou kosbare tyd te mors.
>
> Die items wat hier gelys is sal jou goed voorberei vir tegniese onderhoude by omtrent enige sagteware maatskappy,
> insluitend die reuse: Amazon, Facebook, Google, en Microsoft.
> 
> *Sterkte!*

<details>
<summary>Vertalings:</summary>

- [中文版本](translations/README-cn.md)
- [Tiếng Việt - Vietnamese](translations/README-vi.md)
- [Español](translations/README-es.md)
- [Português Brasileiro](translations/README-ptbr.md)
- [Polish](translations/README-pl.md)
- [繁體中文](translations/README-tw.md)
- [Japanese (日本語)](translations/README-ja.md)
- [Russian](translations/README-ru.md)
- [German](translations/README-de.md)
- [Bahasa Indonesia](translations/README-id.md)
- [ខ្មែរ - Khmer](translations/README-kh.md)
- [Uzbek](translations/README-uz.md)
- [Bulgarian](translations/README-bg.md)
- [বাংলা - Bangla](translations/README-bn.md)

</details>

<details>
<summary>Vertalings aan die gang:</summary>

- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81)
- [עברית](https://github.com/jwasham/coding-interview-university/issues/82)
- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98)
- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90)
- [French](https://github.com/jwasham/coding-interview-university/issues/89)
- [Українська](https://github.com/jwasham/coding-interview-university/issues/106)
- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118)
- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117)
- [Urdu](https://github.com/jwasham/coding-interview-university/issues/519)
- [Thai](https://github.com/jwasham/coding-interview-university/issues/156)
- [Greek](https://github.com/jwasham/coding-interview-university/issues/166)
- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239)
- [Persian - Farsi](https://github.com/jwasham/coding-interview-university/issues/186)

</details>

<div align="center">
    <hr />
    <p>
        <a href="https://github.com/sponsors/jwasham"><strong>Word 'n bydraër</strong> en borg Kodering Onderhoud Universiteit!</a>
    </p>
    <p>
        <strong>Spesiale dank aan:</strong>
    </p>
    <p>
        <a href="https://oss.capital/">
            <div>
                <img src="https://d3j2pkmjtin6ou.cloudfront.net/sponsors/oss-capital.svg" width="350" alt="OSS Capital">
            </div>
            <div>
                <sup><strong>Gestig in 2018, OSS Capital is die eerste en enigste waagkapitaal platform gefokus<br>uitsluitlik om vroeë stadium COSS (komersiële oop bron) opstart stigters te ondersteun.</strong></sup>
            </div>
        </a>
    </p>
    <br />
    <p>
        <a href="https://www.gitpod.io/?utm_campaign=jwasham&utm_medium=referral&utm_content=coding-interview-university&utm_source=github">
            <div>
                <img src="https://d3j2pkmjtin6ou.cloudfront.net/sponsors/gitpod-logo-light-theme.svg" width="300" alt="Gitpod">
            </div>
            <div>
                <p>
                    <strong>Dev omgewings gebou vir die wolk</strong>
                </p>
            </div>
            <div>
                <sup>Inheems geïntegreer met GitLab, GitHub, en Bitbucket, bou Gitpod outomaties en aanhoudend dev omgewings vir al jou takke. As gevolg kan span lede onmiddellik begin kodeer met vars dev omgewings vir elke nuwe taak - maak nie saak of jy 'n nuwe kenmerk bou, 'n fout wil reg maak, of werk aan 'n kode resensie nie.</sup>
            </div>
        </a>
    </p>
    <hr />
</div>

## Wat is dit?

![Kodering op die witbord - van HBO se Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)

Dié is my multi-maand studie plan om 'n sagteware ingeneur te word vir 'n groot maatskappy.

**Benodighede:**
* 'n Bietjie ondervinding met kodrering (veranderlikes, lusse, metodes/funksies, ens)
* Geduld
* Tyd
  
Let wel dat die 'n studieplan vir 'n **sagteware ingeneur** pos is, nie 'n webontwikkeling pos nie. Groot maatskappeie soos Google, Amazon,
Facebook en Microsoft sien sagteware ingeneurs as verskilled van webontwikkeling ingeneurs. Byvoorbeeld, Amazon het
Frontend Ingeneurs (FEE) en Sagteware Ontwikkeling Ingeneurs (SDE). Die is 2 verskeie rolle en die onderhoude verskil,
omdat elkeen sy eie bevoegdhede het. Dié maatskappeie benodig rekenaar wetenskap kennis vir
sagteware ontwikkeling/ingeneur rolle.

---

## Inhoudsopgawe

### Die Studie Plan

- [Wat is dit?]()
- [Hoekom gebruik dit?](#hoekom-gebruik-dit)
- [Hoe om dit te gebruik](#hoe-om-dit-te-gebruik)
- [Moenie voel asof jy nie slim genoeg is nie](#moenie-voel-asof-jy-nie-slim-genoeg-is-nie)
- ['n Nota Oor Video Hulpbronne](#n-nota-oor-video-hulpbronne)
- [Kies 'n Programmeeringstaal](#kies-n-programmeeringstaal)
- [Boeke vir Datastrukture en Algoritmes](#boeke-vir-datastrukture-en-algoritmes)
- [Onderhoud Voorbereïngsboeke](#onderhoud-voorbereidingsboeke)
- [Moenie My Foute Maak Nie](#moenie-my-foute-maak-nie)
- [Wat Jy Nie Sal Sien Gedek Word Nie](#wat-jy-nie-sal-sien-gedek-word-nie)
- [Die Daaglikse Plan](#die-daaglikse-plan)
- [Kodering Vrae Beoefening](#kodering-vrae-beoefening)
- [Kodering Probleme](#kodering-probleme)

## Onderwerpe om te Studeer

- [Kodering Onderhoud Universiteit]()
  - [Wat is dit?](#wat-is-dit)
  - [Inhoudsopgawe](#inhoudsopgawe)
    - [Die Studie Plan](#die-studie-plan)
    - [Onderwerpe om te Studeer](#onderwerpe-om-te-studeer)
    - [Kry die Werk](#kry-die-werk)
    - [Opsionele Ekstra Onderwerpe & Hulpbronne](#opsionele-ekstra-onderwerpe--hulpbronne)
  - [Hoekom gebruik dit?](#hoekom-gebruik-dit)
  - [Hoe om dit te gebruik?](#hoe-om-dit-te-gebruik)
    - [As jy nie git wil gebruik nie](#as-jy-nie-git-wil-gebruik-nie)
    - [As jy gemaklik met git is](#as-jy-gemaklik-met-git-is)
  - [Moenie voel asof jy nie slim genoeg is nie](#moenie-voel-asof-jy-nie-slim-genoeg-is-nie)
  - ['n Nota Oor Video Hulpbronne](#n-nota-oor-video-hulpbronne)
  - [Kies 'n Programmeeringstaal](#kies-n-programmeeringstaal)
    - [Vir die Studie Plan](#vir-die-studie-plan)
    - [Vir jou Kodering Onderhoud](#vir-jou-kodering-onderhoud)
  - [Boeke vir Datastrukture en Algoritmes](#boeke-vir-datastrukture-en-algoritmes)
    - [C](#c)
    - [Python](#python)
    - [Java](#java)
    - [C++](#c-1)
  - [Onderhoud Voorbereïngsboeke](#onderhoud-voorbereiding)
    - [As jy tonne ekstra tyd het](#as-jy-tonne-ekstra-tyd-het)
  - [Moenie My Foute Maak Nie](#moenie-my-foute-maak-nie)
    - [1. Jy Sal Nie Alles Onthou Nie](#1-jy-sal-nie-alles-onthou-nie)
    - [2. Gebruik flitskaarte](#2-gebruik-flitskaarte)
    - [3. Doen Kodering Onderhoud Vrae Terwyl Jy Leer](#3-doen-kodering-onderhoud-vrae-terwyl-jy-leer)
    - [4. Fokus](#4-fokus)
  - [Wat Jy Nie Sal Sien Gedek Word Nie](#wat-jy-nie-sal-sien-gedek-word-nie)
  - [Die Daaglikse Plan](#die-daaglikse-plan)
  - [Kodering Vrae Beoefening](#kodering-vrae-beoefening)
  - [Kodering Probleme](#kodering-probleme)
  - [Begin Solank](#begin-solank)
  - [Algoritmiese Kompleksiteit / Big-O / Asimptotiese analise](#algorithmic-complexity--big-o--asymptotic-analysis)
  - [Datastrukture](#datastrukture)
  - [Meer Kennis](#meer-kennis)
  - [Bome](#bome)
  - [Sorteer](#sorteer)
  - [Grafieke](#grafieke)
  - [Nog Meer Kennis](#nog-meer-kennis)
  - [Finale Resensie](#finale-resensie)
  - [Werk Jou CV By](#werk-jou-cv-by)
  - [Kry 'n Werk](#kry-n-werk)
  - [Onderhoudproses & Algemene Voorbereiding](#onderhoudproses--algemene-voorbereiding)
  - [Dink aan vir wanneer die onderhoud kom](#dink-aan-vir-wanneer-die-onderhoud-kom)
  - [Hê vrae vir die onderhoudvoerder](#he-vrae-vir-die-onderhoudvoerder)
  - [Sodra Jy Die Werk Het](#sodra-jy-die-werk-het)
  - [Bykomende Boeke](#bykomende-boeke)
  - [Stelsel Onderwerp, Skaalbaarheid, Data Hantering](#stelsel-onderwerp-skaalbaarheid-data-hantering)
  - [Bykomende Leer](#bykomende-leer)
  - [Bykomende Detail op Sommige Vakke](#bykomende-detail-op-sommige-vakke)
  - [Video Reeks](#video-reeks)
  - [Rekenaar Wetenshap Kursusse](#rekenaar-wetenshap-kursusse)
  - [Algoritmes implementering](#algoritmes-implementering)
  - [Papiere](#papiere)
  - [LISENSIE](#lisensie)

### Kry die Werk

- [Werk Jou CV By]()
- [Kry 'n Werk](#kry-n-werk)
- [Onderhoudproses & Algemene Voorbereiding](#onderhoudproses--algemene-voorbereiding)
- [Dink aan vir wanneer die onderhoud kom](#dink-aan-vir-wanneer-die-onderhoud-kom)
- [Hê vrae vir die onderhoudvoerder](#he-vrae-vir-die-onderhoudvoerder)
- [Sodra Jy Die Werk Het](#sodra-jy-die-werk-het)

**---------------- Alles hieronder is opsioneel ----------------**

### Opsionele Ekstra Onderwerpe & Hulpbronne

- [Kodering Onderhoud Universiteit]()
  - [Wat is dit?](#wat-is-dit)
  - [Inhoudsopgawe](#inhoudsopgawe)
    - [Die Studie Plan](#die-studie-plan)
    - [Onderwerpe om te Studeer](#onderwerpe-om-te-studeer)
    - [Kry die Werk](#kry-die-werk)
    - [Opsionele Ekstra Onderwerpe & Hulpbronne](#opsionele-ekstra-onderwerpe--hulpbronne)
  - [Hoekom gebruik dit?](#hoekom-gebruik-dit)
  - [Hoe om dit te gebruik?](#hoe-om-dit-te-gebruik)
    - [As jy nie git wil gebruik nie](#as-jy-nie-git-wil-gebruik-nie)
    - [As jy gemaklik met git is](#as-jy-gemaklik-met-git-is)
  - [Moenie voel asof jy nie slim genoeg is nie](#moenie-voel-asof-jy-nie-slim-genoeg-is-nie)
  - ['n Nota Oor Video Hulpbronne](#n-nota-oor-video-hulpbronne)
  - [Kies 'n Programmeeringstaal](#kies-n-programmeeringstaal)
    - [Vir die Studie Plan](#vir-die-studie-plan)
    - [Vir jou Kodering Onderhoud](#vir-jou-kodering-onderhoud)
  - [Boeke vir Datastrukture en Algoritmes](#boeke-vir-datastrukture-en-algoritmes)
    - [C](#c)
    - [Python](#python)
    - [Java](#java)
    - [C++](#c-1)
  - [Onderhoud Voorbereïngsboeke](#onderhoud-voorbereiding)
    - [As jy tonne ekstra tyd het](#as-jy-tonne-ekstra-tyd-het)
  - [Moenie My Foute Maak Nie](#moenie-my-foute-maak-nie)
    - [1. Jy Sal Nie Alles Onthou Nie](#1-jy-sal-nie-alles-onthou-nie)
    - [2. Gebruik flitskaarte](#2-gebruik-flitskaarte)
    - [3. Doen Kodering Onderhoud Vrae Terwyl Jy Leer](#3-doen-kodering-onderhoud-vrae-terwyl-jy-leer)
    - [4. Fokus](#4-fokus)
  - [Wat Jy Nie Sal Sien Gedek Word Nie](#wat-jy-nie-sal-sien-gedek-word-nie)
  - [Die Daaglikse Plan](#die-daaglikse-plan)
  - [Kodering Vrae Beoefening](#kodering-vrae-beoefening)
  - [Kodering Probleme](#kodering-probleme)
  - [Begin Solank](#begin-solank)
  - [Algoritmiese Kompleksiteit / Big-O / Asimptotiese analise](#algorithmic-complexity--big-o--asymptotic-analysis)
  - [Datastrukture](#datastrukture)
  - [Meer Kennis](#meer-kennis)
  - [Bome](#bome)
  - [Sorteer](#sorteer)
  - [Grafieke](#grafieke)
  - [Nog Meer Kennis](#nog-meer-kennis)
  - [Finale Resensie](#finale-resensie)
  - [Werk Jou CV By](#werk-jou-cv-by)
  - [Kry 'n Werk](#kry-n-werk)
  - [Onderhoudproses & Algemene Voorbereiding](#onderhoudproses--algemene-voorbereiding)
  - [Dink aan vir wanneer die onderhoud kom](#dink-aan-vir-wanneer-die-onderhoud-kom)
  - [Hê vrae vir die onderhoudvoerder](#he-vrae-vir-die-onderhoudvoerder)
  - [Sodra Jy Die Werk Het](#sodra-jy-die-werk-het)
  - [Bykomende Boeke](#bykomende-boeke)
  - [Stelsel Onderwerp, Skaalbaarheid, Data Hantering](#stelsel-onderwerp-skaalbaarheid-data-hantering)
  - [Bykomende Leer](#bykomende-leer)
  - [Bykomende Detail op Sommige Vakke](#bykomende-detail-op-sommige-vakke)
  - [Video Reeks](#video-reeks)
  - [Rekenaar Wetenshap Kursusse](#rekenaar-wetenshap-kursusse)
  - [Algoritmes implementering](#algoritmes-implementering)
  - [Papiere](#papiere)
  - [LISENSIE](#lisensie)

---

## Hoekom gebruik dit?

As jy wil werk as 'n sagteware ingeneur vir 'n groot maatskappy, hierdie is die goed wat jy moet ken.

As jy uitgemis het op 'n rekenaar wetenskap graad, soos ek het, sal hierdie jou laat opvang en vier jaar van jou lewe spaar.

Toe ek hierdie projek begin het, kon ek nie verskil tussen 'n stapel en 'n hoop nie, het niks van Big-O geweet nie, of enige iets van bome nie, of hoe om
'n grafiek te dwars nie. As ek 'n sorteer algoritme moes kode, kan ek jou verseker dit was verskriklik.
Elke datastruktuur wat ek ooit moes gebruik was ingebou in die taal, end ek het nie geweet hoe hulle werk
onder die kap nie. Ek het nooit nodig gehaad of geheue te bestuur nie, tensy 'n proses vir my 'n "te min
beskikbare geheue" fout gegee het, en dan moes ek 'n ander oplossing kry. Ek het 'n paar multidimensionele skikkings
in my lewe gebruik en duisende assosiatiewe skikkings, maar ek hoef nooit 'n datastruktuur van nuut af gebou het nie.

Dis 'n lang plan. Dit gaan maande vat. As jy klaar gemaklik met baie van dié is gaan dit jou baie minder tyd vat.

## Hoe om dit te gebruik?

Alles hieronder is 'n uitlyn, en jy moet elke item aan pak in orde van bo tot onder.

Ek gebruik Github se spisiale markdown flavor, insluitend taaklyste om vordering te volg.
  - [More about GitHub-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)

### As jy nie git wil gebruik nie

Op dié blad, kliek die Code knop naby die bookant, dan kliek "Download ZIP". Unzip die lêer en jy kan werk met die teks lêers.

As jy in 'n kode redakteur is wat markdown verstaan, sal jy sien alles is mooi geformateer.

![Hoe om die repo af te laai as 'n zip lêer](https://d3j2pkmjtin6ou.cloudfront.net/how-to-download-as-zip.png)

### As jy gemaklik met git is

Skep 'n nuwe tak sodat jy items soos dié kan merk, sit net 'n x in die hakies: [x]

    Virk 'n tak en vold die bevele hieronder

Virk die Github repo https://github.com/jwasham/coding-interview-university deur om die Fork knop to druk.

Kloon na jou plaaslike repo:

    git clone git@github.com:<your_github_username>/coding-interview-university.git
    git checkout -b progress
    git remote add jwasham https://github.com/jwasham/coding-interview-university
    git fetch --all

Merk al die bokse met X nadat jy jou veranderinge voltooi het:

    git add .
    git commit -m "Marked x"
    git rebase jwasham/main
    git push --set-upstream origin progress
    git push --force

## Moenie voel asof jy nie slim genoeg is nie

- Suksesvolle sagteware ingeneurs is slim, maar baie het onsekerhede dat hulle nie slim genoeg is nie.
- [Die mite van die Geniale Programeerder](https://www.youtube.com/watch?v=0SARbwvhupQ)
- [Dit is Gevaarlik om Alleen te Gaan: Struikel teen die Onsigbare Monsters in Tegnologie](https://www.youtube.com/watch?v=1i8ylq4j_EY)

## 'n Nota Oor Video Hulpbronne

Sekere videos is net beskikbaar as jy skryf vir 'n kurses in 'n Coursera of EdX klas. Dié is genoem MOOCs.
Soms is die klasse nie in sessie nie end jy sal moet wag vir 'n paar maande, so jy het nie toegang nie.

Dit sal wonderlik wees om die aanlyn klasse te vervang met gratis en altyd-beskikbare openbare bronne,
soos YouTube videos (verkieslik universiteitslesings), sodat julle daarvanaf enige tyd kan leer,
nie net wanneer 'n spesifieke aanlyn kursus in sessie is nie.

## Kies 'n Programmeeringstaal

Jy sal 'n programmeringstaal moet kies vir die kodering onderhoude wat jy gaan doen,
maar jy sal dan ook 'n taal moet kies waarmee jy rekenaar wetenskap konsepte kan leer.

Verkieslik is die taal dieselfde, sodat jy net vaardigheid in een hoef te bou.

### Vir die Studie Plan

Toe ek die studie plan gedoen het, het ek 2 tale gebruik vir meeste van dit: C en Python

* C: Baie lae vlak. Laat jou toe om met pointers en geheue allocation/deallocation te werk, sodat jy die datastrukture en
    algoritmes voel in jou bene. In hoër vlak tale soos Python en Java word die weggesteek van jou af. In daaglikse werk is dit wonderlik,
    maar wanneer jy leer hoe die lae-vlak datastrukture gebou is, voel dit lekker om naby die metaal te wees.
    - C is orals. Jy sal voorbeelde in boeke, lesings, vidoes, en *oral* sien wanner jy studeer.
    - [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
        - Dié is 'n kort boek, maar dit sal jou 'n goeie vat gee oor die C taal en as jy dit 'n bikie oefen sal jy vinnig
            vaardigheid bou. Deur om C te verstaan help dit jou om te verstaan hoe programme en geheue werk.
        - Jy hoef nie super diep in die boek te gaan nie (of eens dit klaar te maak nie). Gaan net tot die punt waar jy C gemaklik kan lees en skryf.
        - [Antwoorde vir vrae in die boek](https://github.com/lekkas/c-algorithms)
* Python: Modern en baie duur, ek het dit geleer want dis super nuttig en laat my toe om minder kode te skruf in 'n onderhoud.

Die is my voorkeur. Doen jy wat vir jou pas, natuurlik.

Jy mag dit dalk nie nodig kry nie, maar hier is 'n paar webwerwe om jou nuwe taal te leer:
- [Exercism](https://exercism.org/tracks)
- [Codewars](http://www.codewars.com)
- [Codility](https://codility.com/programmers/)
- [HackerEarth](https://www.hackerearth.com/)
- [Sphere Online Judge (spoj)](http://www.spoj.com/)
- [Codechef](https://www.codechef.com/)
- [Codeforces](https://codeforces.com/)

### Vir jou Kodering Onderhoud

Jy kan 'n taal gebruik waarmee jy gemaklik in is om die kodeering deel van die onderhoud te doen, maar vir groot maatskappye is die goeie besluite:

- C++
- Java
- Python

Jy kan ook dié gebruik, maar lees eers rond. Daar is baie caveats:

- JavaScript
- Ruby

Hier is 'n artikel wat ek geskryf het oor hoe om 'n taal te kies vir die onderhoud: 
[Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/).
Hierdie is die oorspronklike artikel wat my pos op basseer was: [Choosing a Programming Language for Interviews](https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/)

Jy moet baie gemaklik in die taal wees en kundig.

Lees meer oor besluite:
- [Choose the Right Language for Your Coding Interview](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/)

[Sien taal-spesifieke hulpbronne hier](programming-language-resources.md)

## Boeke vir Datastrukture en Algoritmes

Die boek sal jou fondasie vir rekenaar wetenskap vorm.

Kies net een, in die taal waarin jy gemaklik sal wees. Jy sal baie lees en kodeering doen.

### C

- [Algorithms in C, Parts 1-5 (Bundle), 3rd Edition](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080)
    - Fondasie, Datastrukture, Sorteer, Soek, en Grafiek Algoritmes

### Python

- [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
    - deur Goodrich, Tamassia, Goldwasser
    - Ek lief die boek. Dit dek alles en meer.
    - Pythonic kode.
    - my gloeiende boekverslag: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/

### Java

Jou besluit:

- Goodrich, Tamassia, Goldwasser
    - [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
- Sedgewick and Wayne:
    - [Algorithms](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
    - Free Coursera course that covers the book (taught by the authors!):
        - [Algorithms I](https://www.coursera.org/learn/algorithms-part1)
        - [Algorithms II](https://www.coursera.org/learn/algorithms-part2)

### C++

Jou besluit:

- Goodrich, Tamassia, and Mount
    - [Data Structures and Algorithms in C++, 2nd Edition](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275)
- Sedgewick and Wayne
    - [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
    - [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)

## Onderhoud Voorbereïngsboeke

Jy hoef nie 'n klomp van die te koop nie. Eerlikwaar is "Craking the Coding Interview" heelwaarskynlik genoeg,
maar ek het meer gekoop om myself meer oefening te gee. Maar ek doen altyd te veel.

Ek het beide van die gekoop. Hulle het vir my genoeg oefening gegee.

- [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/)
    - Antwoorde in C++ en Java
    - Hierdie is 'n goeie opwarming vir Cracking the Coding Interview
    - Nie te moeilik nie. Meeste probleme mag dalk makliker wees as dié in die onderhoud (van wat ek gelees het)
- [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
    - antwoorde in Java

### As jy tonne ekstra tyd het:

Kies een:

- [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
- [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
- [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
        - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)

## Moenie My Foute Maak Nie

Hierdie lys het gegroei oor baie maande, en ja, dit het uit die hand geruk.

Hierdie is 'n paar foute wat ek gemaak het sodat jy 'n beter ervaaring het. En jy sal maande se tyd spaar.

### 1. Jy Sal Nie Alles Onthou Nie

Ek het ure lank videos gekyk en deeglike notas gevat, en maande later was daar baie wat ek nie meer onthou het nie. Ek het 3 dae spandeer
om deur my notas te gaan en flitskaarte te maak, sodat ek kon revisie. Ek het nie al daardie kennis nodig gehaad nie.

Asseblief, lees sodat jy nie my foute maak nie:

[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/).

### 2. Gebruik flitskaarte

Om die probleem op te los, het ek a klein flitskaart webwerf gemaak waar ek 2 tipe flitskaarte kon byvoeg: algemeen en kode.
Elke kaart se formatering was verskillend. Ek het 'n mobiele-eerste webwerf gemaak, so ek kon revisie op my foon en tablet, waarookal ek is.

Maak jou eie verniet:

- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)

**Ek BEVEEL NIE AAN dat jy my flitskaarte gebruik nie.** Daar is te veel onnodige kaarte wat jy nie nodig het nie.

Maar as jy nie na my wil luister nie, hier is hulle:
- [My flash cards database (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
- [My flash cards database (extreme - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):

Hou in gedagte dat ek oorboord gegaan het en het kaarte wat alles van assembly taal en Python trivia na masjien leer en statistiek dek.
Dit te veel vir wat nodig is.

**Nota op flitskaarte:** Die eerste keer wat jy erken dat jy die anwoord ken, moenie dit as ken merk nie. Jy moet dieselfde
kaart sien en dit vele kere reg beantwoord voordat jy regtig dit ken. Herhaling sal die kennis diepier
in jou brein berê.

As 'n alternatief na my flitskaart webwerf is [Anki](http://ankisrs.net/), wat vir my voorgestel is talle kere.
Dit gebruik 'n herhalingssisteem om te help onthou. Dit gebruikers-vriendelik, beskikbaar op alle platforms en het 'n wolk sync sisteem.
Dit kos $25 op iOS maar is verniet op ander platforms.

My flitskaart databasis in Anki formaat: https://ankiweb.net/shared/info/25173560 (dankie [@xiewenya](https://github.com/xiewenya)).

Sommige studente het 'n kwessie na vore gebring dat daar wit spasie is in die formatering wat reg gemaak kan word met die volgende stappe: open deck, edit card, kliek cards, kies die "styling" radio knop, verg by die member "white-space: pre;" aan die einde van die card class.

### 3. Doen Kodering Onderhoud Vrae Terwyl Jy Leer

HIERDIE IS BAIE BELANGRIK.

Begin met die kodering onderhoud vrae terwyl jy datastrukture en algoritmes leer.

Jy moet toepas wat jy leer om probleme op te los, of jy sal vergeet. Ek het die fout gemaak.

Sodra jy 'n onderwerp geleer het, en voel sowat gemaklik met dit, byvoorbeeld, **linked lists**:
1. Maak een van die [Onderhoud Voorbereïngsboeke](#onderhoud-voorbereidingsboeke) (of kodering probleem webwerve, onder gelys) oop
2. Doen 2 of 3 vrae met betrekking tot linked lists.
3. Beweeg aan na die volgende onderwerp.
4. Later, gaan terug en doen nog 2 of 3 linked list probleme.
5. Doen hierdie met elke nuwe onderwerp wat jy leer.

**Hou aan probleme doen terwyl jy al hierdie goed leer, nie na die tyd nie.**

Jy word nie aangestel vir kennis nie, maar hoe jy die kennis toepas.

Daar is baie hulpbronne vir dié glys onder. Gaan voort.

### 4. Fokus

Daar is 'n klomp afleidings wat jou kosbare tyd kan opvat. Fokus en konsentreer is moelik. Sit musiek
aan sonder lirieke en jy sal in staat wees of goed te fokus.

## Wat Jy Nie Sal Sien Gedek Word Nie

Hierdie is algemene tegnologie maar is nie deel van hierdie studie plan nie:

- SQL
- Javascript
- HTML, CSS, en ander front-end tegnologie.

## Die Daaglikse Plan

Die kursus gaan oor baie onderwerpe. Elkeen sal heerwaarskynlik jou 'n paar dae vat, of dalk tog 'n week of meer. Dit hang af van jou skedule.

Elke dag, vat die volgende onderwerp op die lys, kyk 'n paar videos oor daardie onderwerp, en dan skryf 'n implimentering
van daardie datastruktuur of algoritme in die taal wat jy gekies het vir hierdie kursus.

Jy kan my kode hier sien:
 - [C](https://github.com/jwasham/practice-c)
 - [C++](https://github.com/jwasham/practice-cpp)
 - [Python](https://github.com/jwasham/practice-python)

Jy hoef nie elke algoritme the memoriseer nie. Jy moet net dit genoeg verstaan om jou eie implimenteering te skryf.

## Kodering Vrae Beoefening

    Hoekom is dié hier? Ek's nie gereed vir onderhoude nie.

[Dan gaan terug en lees die.](#3-doen-kodering-onderhoud-vrae-terwyl-jy-leer)

Hoekom jy oplossings na programeringprobleme moet oefen:
- Probleem erkenning, en waar die regte datastrukture en algoritmes inpas
- Versameling van vereistes vir die probleem
- Praat oor hoe jy die probleem oplos soos jy sal in die onderhoud
- Kodering op 'n wit bord of papier, nie 'n rekenaar nie
- Om te formuleer wat die tyd-en-spasie-kompleksiteit vir jou oplossing is (sien Big-O onder)
- Toets jou oplossing

Daar is 'n wonderlike inleiding vir metodiese, kommunikatiewe probleem oplossing in 'n onderhoud. Jy sal dié ook van die
programmeering boeke kry, maar ek het die uitstekend gevind:
[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/)

Skryf kode op 'n wit bord of papier, nie 'n rekenaar nie. Toets met sommige insette. Dan tik en toets dit op 'n rekenaar.

As jy nie 'n wit bord by die huis het nie, tel 'n groot skryfblad op by die kuns winkel. Jy kan sit op die bank en oefen.
Dié is my "sofa whiteboard". Ek het die pen in die foto gesit vir skaal. As jy 'n pen gebruik gaan jy wens jy kon dit uitvee.
Word baie morsig. **Ek gebruik 'n potlood en uitveër.**

![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg)

**Kodering vrae oefening is nie oor oplossings van programmering probleme memoriseer nie.**

## Kodering Problem

Moenie jou sleutel kodering onderhoud boeke vergeet [hier](#onderhoud-voorbereidingsboeke) nie.

Probleme Oplos:
- [How to Find a Solution](https://www.topcoder.com/thrive/articles/How%20To%20Find%20a%20Solution)
- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/thrive/articles/How%20To%20Dissect%20a%20Topcoder%20Problem%20Statement%20Content)

Kodering Onderhoud Vrae Videos:
