I cannot support this advice enough. I recently did this with an exchange/order-filling engine in Go and it was a great little toy project. You’ll learn a ton about some things you don’t typically get to dive into when you take the “first principles” approach.