HACKER Q&A
📣 throwaway_salsa

Project ideas to learn CS fundamentals


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'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'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/new, smaller/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.

Additionally if there are any such kind of projects online (e.g. github) where you deal with many algos/DS, please mention.

Thanks !


  👤 elonmollusc Accepted Answer ✓
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.


👤 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.



👤 superdeeda
The Berkeley AI course is very practical. The “search” section can help you learn search algorithms: 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.


👤 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/

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


👤 killvung
Build your own API rate limiter

👤 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.


👤 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.


👤 caseyscottmckay
Nand2Tetris

👤 machiaweliczny
Maybe write interpreter or DB