25 karma · joined December 16, 2025
Though I genuinely wrote a substantial part of the book myself.
I will finish the review on Github in the coming days/weeks and will hopefully get some collaborators there
Feedback is clear, I should never had posted and will probably not post in the future.
Hopefully the book will be useful for those who find it, I will get feedback elsewhere and will finish reviewing it myself
I wanted to mention the tools I used including Claude Code. I hope it does not seem that I am here to promote Anthropic tools as well?
I just thought it appropriate to mention for the correct attribution, because the heavy lifting was done by the tools, not by me
I just mentioned the tools I use normally and it is my personal project done on my personal time of which my employer is not aware.
I might not mention the tools I used but they did the bulk of the work so I thought appropriate to mention.
Promoting Zenflow or Claude Code was not my goal. They are mentioned purely for the attribution purposes
This is what I was taught: work should be attributed correctly. If I would not mention the tools it would seem if the book was written entirely by me which is not the case.
This is a book which was started by me, I did use the AI tools I normally use in my daily routine on my personal projects. They are secondary in this post though.
I posted in my personal capacity and my employer is not aware or connected to this - the book is entirely mine.
It is not AI slop. A large part of its content was written originally by me 10 years ago.
But if it has offended anyone and I should not had posted the work which I have not fully yet reviewed myself, then sorry
The book is still a work in progress, and I have tried to be transparent about that. If you have specific concerns about the quality or suggestions for improvement, I would genuinely appreciate hearing them.
Having both an engineering and academic background, I felt there's underappreciated potential in bringing software engineering best practices - tests, type contracts, CI - into an algorithms textbook. Most CS teaching treats code as illustration. I wanted it to be the source of truth.
And agreed on structural typing for graphs. TypeScript lets you define a Graph<T> interface and defer the representation choice, which maps very well to how the topic is actually taught - abstract properties first, concrete implementations second.
And I am human, who first finished a similar course roughly 20 years ago, worked as a TA and taught students programming and algorithms
Type signatures document contracts directly:
export function rabinKarp(text: string, pattern: string): number[]
Clear that it takes two strings and returns match positions. No separate explanation needed.Interfaces model return types and ADTs cleanly:
export interface ShortestPathResult<T> {
dist: Map<T, number>;
parent: Map<T, T | undefined>;
}
export function dijkstra<T>(graph: Graph<T>, source: T): ShortestPathResult<T>
It's also lightweight, flexible, has familiar C-like syntax, and unlike pseudocode — you can actually run everything.Re: generics feeling awkward — in TypeScript they feel pretty natural. The type inference helps a lot, you rarely need to spell out type parameters at call sites.