
Ask HN: Project ideas to learn CS fundamentals - throwaway_salsa
I am a software developer with 5 years of experience. I have worn multiple hats in my jobs, but I mainly work in python where I don&#x27;t have to deal with CS fundamentals. Recently I started seriously looking into opportunities in FAANG. The biggest problem is, am not from CS background and it doesn&#x27;t motivate me studing algorithms and data-structure just for job preparation. What I am looking for is some project ideas (any kind of, old&#x2F;new, smaller&#x2F;bigger, any stack), where I have to deal with these kind of problems. I am more like learn-by-doing kind. Any advice will be appriciated.<p>Additionally if there are any such kind of projects online (e.g. github) where you deal with many algos&#x2F;DS, please mention.<p>Thanks !
======
elonmollusc
Here are some projects that I've assigned in my programming and algorithms
classes. All of these projects can be done in Python or any other language.

For general object-oriented programming and working with lists/sets, write
your own versions of classic 2-D arcade games like Snake, Asteroids, Pac-Man,
or Breakout. You can use simple geometric shapes and any drawing framework if
you don't want to create complex graphics.

Conway's Life, Notakto (2-D arrays)

Frequency-based cipher analysis (easy application of hash tables)

Password cracking (hashing)

Search engine for the plays of Shakespeare: given a word, return the text
locations where it occurs (implementing and constructing an index data
structure)

Predictive text generators

Simulating queues and theme park rides (priority queues, event-driven
simulation)

Stack-based programming language interpreter (stacks, postfix arithmetic,
simple lexical analysis)

Generating mazes by building spanning trees (graphs, greedy algorithms)

Spellchecking (using dynamic programming for edit distances)

Writing an interpreter is hard but will tie a lot of things together (lexical
analysis, recursive parsing, trees, tree traversals)

I also second the recommendation for coding a simple game like Tic-Tac-Toe or
Nim and writing a search-based AI opponent. Great for developing proficiency
with recursion.

~~~
throwaway_salsa
Awesome. Thanks for mentioning related algorithms too. It will be good if we
build some github repo for this kind of listing.

------
laurentl
If you want a nice tour of classical CS concepts in bite-size chunks, give the
"Advent of Code" a try (adventofcode.com)

It's a collection of 25 vaguely Christmas-themed problems published each
December. The 2019 advent requires you to, among others, write an interpreter
for pseudo-machine code, navigate around a maze, manipulate graphs... So it's
a fun way to play around with algorithmic and data structure concepts.

~~~
throwaway_salsa
Great work ! Thanks !

------
jdbowman
There is a reasonably popular book (a free version is available online, as
well) called _Think Python_: [https://greenteapress.com/wp/think-
python-2e/](https://greenteapress.com/wp/think-python-2e/)

It was originally titled "How to Think Like a Computer Scientist." It tries to
teach basic CS concepts with Python.

------
superdeeda
The Berkeley AI course is very practical. The “search” section can help you
learn search algorithms:
[http://ai.berkeley.edu/search.html](http://ai.berkeley.edu/search.html)

I think writing small games and solvers for them can be a good way to learn
and practice algorithms and data structures. In my first year of CS we had to
implement the Rush Hour game and write a solver for it.

~~~
throwaway_salsa
this sounds terrific. building game and writing solve for it.

------
asicsp
Check out this list: [https://github.com/tuvtran/project-based-
learning](https://github.com/tuvtran/project-based-learning)

I'd also suggest: [https://github.com/tayllan/awesome-
algorithms](https://github.com/tayllan/awesome-algorithms)

~~~
throwaway_salsa
Great repos. Thanks

------
shakkhar
> Recently I started seriously looking into opportunities in FAANG.

Somewhat orthogonal to your question - but I wanted to point out that if FAANG
opportunities are what you're after, doing projects is not going to help.

> it doesn't motivate me studing algorithms and data-structure just for job
> preparation.

That's exactly what you need to do if you wish to land a FAANG job.

------
probinso
adventure game with both a GUI and a TUI.

Things like graph exploration for maps, memory management, string parsing,
software design and architecture are all found in adventure games

as puzzle problems, it's worth implementing and benchmarking various tree
types. Implement from scratch a bst, trie, b-tree, avl, red-black, quadtree

Sort a collection of numbers larger than the memory of your machine.

~~~
probinso
To be clear, build a TUI and a simple GUI for the same game, with exactly the
same back end

~~~
throwaway_salsa
ok thanks. This is what I am looking exactly.

------
killvung
Build your own API rate limiter

------
caseyscottmckay
Nand2Tetris

------
machiaweliczny
Maybe write interpreter or DB

