CodeCrafters (YC S22)
p/codecrafters
Programming exercises for experienced engineers.
Michael Seibel
CodeCrafters (YC S22) — Recreate your favorite developer tools from scratch
Featured
102
CodeCrafters makes interactive courses for software engineers, where you get to recreate popular developer tools from scratch. Build your own Redis, Git, Docker, and SQLite—in Go, Python, Rust, etc.
Replies
Best
Sarup Banskota — CodeCrafters (YC S22)
Thanks for hunting us @mwseibel, and hello Product Hunt. For @rohitpaulk and I, our desire to get really good at programming began 10 years back in Uni. One time we had the crazy idea to reimplement Git in Ruby (why not, right?). At that time we thought only some crazy genius types could build such a complex project. But not only did we build it, we also taught our friends. It turned out to be such an enriching experience that Paul and I became best friends over it. Years later, it's led to our first company together. Today, through CodeCrafters: ◆ Developers at companies like Apple & Vercel are mastering Rust, Go, Haskell, etc. ◆ Harvard & MIT students are mastering the internals of popular software (e.g Git) ◆ Companies like Rose Rocket (YC S16) are powering their up-skilling programs ◆ ... some engineering teams are even organising mini hackathons So how does it work? The basics are simple: 1. You choose a project from our catalog (e.g Build your own Git in Python) 2. We break it down for you into approachable features (aka. stages) 3. You implement each stage, and push code to get feedback And it gets more interesting from there: ◆ You can study others' implementations (with AI-assisted explanations) ◆ You can study the official source code (e.g the Redis source) for inspiration ◆ You can publish to GitHub, one click. Show off progress through gorgeous banners ◆ You can learn alongside your team, through private leaderboards and our Slack app We've built CodeCrafters with a lot of love. We'd love for you to try it, and tell us what you think. Can't wait to see you build.
Rohit Paul Kuruvilla
Hello Product Hunt! We’re different in the developer education segment in 3 main ways: ◆ First, we cater to people with programming experience. There are tons of introductory “learn to code” resources out there, but surprisingly little once you get past the basics. Good programmers want to get better and to develop in areas where they’re not strong yet, and that’s what we help with. ◆ Second, the coursework involves writing actual code instead of consuming videos. You handle concurrency, develop statecharts, traverse B-trees, etc. While we test against a fixed spec, you’re welcome to try different approaches. E.g in our Redis course, you could implement handling concurrent clients either using threads, or using an event loop. ◆ Third, instead of coding in the browser, you build these projects in your local dev environment. We create repositories for you to work out of, and you git push to run tests. The actual code can be written in your editor of choice (VSCode, Vim, Emacs, etc). This last point in particular — our git-based workflow — is something customers repeatedly tell us they enjoy. As open source contributors, we’ve always been interested in the internals of software we use day-to-day. We’ve learned how much hunger there is for a skill-building path that’s structured, fun, and focused on cool, well-known projects with serious technical dimensions. Jumping straight into the deep end as an open-source contributor has always been an option, but it’s daunting, if not intimidating. It can take a long time to get oriented in a major codebase, and mentorship isn’t always available. There’s a need for an intermediate approach with lessons that build technical expertise, and that’s where we fit in.
Albert Lie
Bravo, @rohitpaulk and @sarupbanskota! CodeCrafters is an absolute game-changer for software engineers. I believe hands-on learning is the best way to truly understand complex tools. CodeCrafters seems like the perfect platform to recreate popular developer tools and dive deep into their code. Are all the courses made in-house or by external experts? How do you prioritize what courses will be launched next?
Rohit Paul Kuruvilla
@albert_tri thank you! I agree - once you've experienced the "build your own x" style of learning, there's no going back. The courses are currently made in-house, but we have external experts contribute solutions for the challenges. Solutions need to cover a variety of languages, and we don't have all the talent needed for that in-house. In the long-term we do want to have external authors build courses. We aren't quite there yet though. There's a lot of work to be done on the course-authoring side of platform to make it user-friendly enough for an external author to build a course. In a sense we're dog-fooding the course creating platform - with each challenge we build the platform gets better and better, moving us closer towards the goal. We released the first couple of challenges based on what we thought would be interesting, all the others were driven by user demand. Our users vote on what challenges they want to see next: https://app.codecrafters.io/vote..., and we prioritize votes from users who've already completed other challenges.
Vera Rose
The idea of recreating popular developer tools from scratch in a variety of languages seems like a unique and immersive way to learn. 👏 Congrats on the launch!
Irfan S
This is something I wish I had in uni. Covers fundamentals, while covering tech that builds tech. Gonna be sharing this with a few juniors in my network, I genuinely believe this is one of the best, if not the best, way to understand the fundamentals of what CS is. Gonna sign up just to see what I can pick up as a quick project. More power to y’all 🔥
Sarup Banskota — CodeCrafters (YC S22)
@irfan_s Thanks Irfan! The Redis one is probably quickest :)
Deepti Chopra
This is so cool! Could have used this 6 years ago when I was trying to suck less as a software engineer 😂. Good luck!
Sarup Banskota — CodeCrafters (YC S22)
@deeptivchopra Haha so true. 6 years ago, the alternative was to follow tutorials. https://github.com/codecrafters-... has hundreds of them. (it's the 10th most popular repo on GitHub with 200k+ stars) But tutorials have these problems: ◆ They're only available in one language, the one the author knows ◆ Due to lack of tests and automated feedback, it's easy to go astray and lose motivation ◆ They're created at one point in time, and then go stale as the language gets new versions Those are some of the problems we hope to solve. Thank you for your kind support!
Gautam Shewakramani
Congratulations @sarupbanskota and @rohitpaulk on the PH launch! What happens when someone is stuck? Do you or could you pair them with a live mentor?
Rohit Paul Kuruvilla
@sarupbanskota @gshewakr thanks Gautam! Handling the "I'm stuck" problem is super important for us. That's where most of the learning happens, and if we don't offer help people are likely to get frustrated with our product and drop off. There are a combination of features that we offer to help people when they're stuck: ◆ The instructions for each stage are carefully refined based on user feedback so that all the common questions are answered. It's common for us to make 10s of edits to each stage after launch. ◆ The instructions for each stage are also tailored to the language you're using. So if a stage is difficult in Rust for of a specific reason, we highlight that. We offer a concise explanation in-app and link to external articles for further reading. Here's an example from a stage in our Docker challenge, where if one uses Go they might run into a cryptic error: https://rohitpaulk.com/articles/.... ◆ We have a "Hints" feature, where users can submit hints based on their experience. Other users can upvote/downvote these hints and reply to them. ◆ If you're stuck and hints don't help, you can browse through solutions from other users. These solutions come with "Automatic Explanations", which are AI-generated comments that explain the solutions in detail. This was a recent launch that uses GPT-4 under the hood, you can read more about it here: https://codecrafters.io/blog/exp.... I also tweeted about how we made this: https://twitter.com/RohitPaulK/s.... ◆ For popular languages, we also offer a "Recommended Solution". These are authored by experts in the field (Maintainers of Next.js, for example). More on recommended solutions here: https://codecrafters.io/blog/sol.... ◆ Lastly - we offer personalized 1:1 debugging help over email. It's rare for people to do this, but when they do we respond with a thoughtful answer within a few business days. Summary: Meticulously crafted instructions, hints, user solutions with AI-powered explanations, expert solutions, and if all else fails - a live human to help. There are a lot of other interesting things we want to do here. One of the ideas I'm very excited about is automated bug fixes. What if we could analyze the thousands of mistakes users have made before you, and use that to suggest a fix to your code? Automated program repair is typically considered unreliable since it's hard to verify a fix, but in our case we've got a rock solid test suite so it's easy to say whether a fix is valid or not.
Cindy Wu
Congrats on the launch! I have been working through CodeCrafters with my friends during my time at Recurse Center, programming for the joy of programming. Incredibly fun way to learn to build fundamental technologies from scratch. As an engineer, I am always into taking my tools apart, understanding the individual building blocks for what they are, and putting it them back together. CodeCrafters is where I go to put them back together in a guided way that keeps me motivated and enthusiastic. CodeCrafters is a tool I often draw on in my journey in becoming a dramatically better programmer. Thank you for making CodeCrafters!
Sarup Banskota — CodeCrafters (YC S22)
@cindywu The Recurse center community is the best. Thank you for your continued support, and please keep the feedback coming. We want to make a product every Recurse batch will enjoy.
Vishaag
This is amazing. In the sea of tutorials filled with mostly beginner content, this is much needed! My question though, is, how do you decide on the "stages" and the order in which they're presented?
Rohit Paul Kuruvilla
@vishaag good question! The process we use for breaking down challenges into stages is similar to "feature slicing": https://handbook.infinityworks.c.... As an example, in our Git challenge, the first stage is to initialize a repository since that's usually the first step in using Git + it's relatively easy (just creating a few files and folders). Subsequent stages involve more complex features like making commits, cloning repositories and so on. We try to order stages based on difficulty. This isn't always possible though, since there might be features that are simple to implement but only once another complex feature is already in place. We highlight such cases in the app so users know what level of difficulty to expect from a stage.
kumar puspesh
Great stuff @sarupbanskota and @rohitpaulk. Very helpful way to learn and master new skills/languages in detail esp in this world full of average content. Turning learning into such DIY programs is very useful for experienced developers (whereas most of the market is more attuned towards freshers or first-time learners). What caught my eye was the recently added AI-assisted explanations. Very cool to see an integrated implementation, nice work! Should be super useful and esp help with intimidating code pieces. How easy/hard was it to build this in? Did you guys end up doing any fine-tuning as well? Hope more and more engineers find this useful.
Rohit Paul Kuruvilla
@puspesh this wasn't too difficult to build, took us a couple of days experimenting with prompts to get good results. I tweeted the whole journey here: https://twitter.com/RohitPaulK/s... (includes the full prompt and how it evolved). We had to write two separate prompts - one to break a diff down into relevant chunks, and another to explain each chunk. We didn't need to do few-shot prompting or fine-tuning. The results are far better than I thought they'd be - GPT-4 is able to catch a lot of subtleties in code. One example that blew my mind is where it recognized that a variable was unused, and explained what purpose it might serve in _future_ changes to the code.
alana anderson
congrats on the launch! codecrafters has been a staple in my coding practice for the last 9 months now. as a vc, i don't get a *ton* of time to write code, but it's really important to me that i keep it up so that i can build & experiment with new technologies. codecrafters provides the perfect, byte-sized (no pun intended) challenges for me to complete so that i'm constantly keeping my skills sharp. when i studied cs in college, i was often frustrated at how theoretical everything felt. i didn't make a website until my senior year. i spent so much time learning data structures & algorithms, without actually learning how to build something real with them. codecrafters is different: it orients around the end-product and gives me a sense of accomplishment for building something real & useful. 11/10 recommend for anyone who wants to learn to code (start with the easy ones), up-level their coding abilities (try implementing a project in a new language), or just keep up their coding abilities with fun challenges. feature request: would love some more challenges that are less infra-y and more product-y. for example, i'd love to build my own cal.com, chatGPT, AI headshot generator, etc.
Rohit Paul Kuruvilla
@alanafanderson thanks Alana! 

 There’s definitely a lot of demand for full-stack product-y challenges like you mentioned. We’re going to experiment with some ideas in this space :) For context, we chose the current set of challenges (Redis / Docker / Git / SQLite / Grep) because:

 (a) they’re “evergreen” tools — widely used, some have been around for decades
 (b) they’re the kind of tools where learning the internals helps you become more efficient at _using_ the tool. For example: I rarely have to reach for regex cheat sheets anymore now that I’ve built my own Grep from scratch. (c) they’re easy to build tests for. All of these have structured interfaces (either they’re CLI tools, or they speak a well known protocol), and that makes it easy to test and convey error messages to the user.
Niranjan Rajendran
Congratulations to @rohitpaulk and @sarupbanskota on the spectacular launch! 🥳 I was fortunate to have access to an early preview version of the product, and I genuinely enjoyed working through the numerous challenges. They were engaging and well-crafted - precisely what you would expect from such a comprehensive solution. For me, the best way to learn a new programming language is by building something in that language. CodeCrafters absolutely excels in this area, providing the ideal platform for hands-on learning. I found my programming skills enhanced thanks to the variety and real-world applicability of the challenges presented. ✌️ Another feature that sets CodeCrafters apart is the ability to complete challenges using your own familiar tools that you would be using in your work, such as your preferred IDE and Git. It speeds up learning and provides a seamless experience. I am curious whether the team plans to add any social features for community learning and collaboration. I believe that incorporating such interactive elements could bolster the overall experience and foster a sense of camaraderie among learners. Overall, I'm incredibly impressed with CodeCrafters and see it as a must-have resource for anyone looking to up-skill or learn a new programming language. Cheers to Rohit and Sarup on crafting this fantastic platform, and best of luck with everything moving forward!
Sarup Banskota — CodeCrafters (YC S22)
@niranjan94! This comment touched me. You've been one of our greatest supporters. Community oriented features we've rolled out recently: ◆ You can now look at how others have approached the same stage you tried, and get our AI to explain what's going on in their code https://codecrafters.io/blog/exp... ◆ If you're part of a team, you can enjoy being part of a private leaderboard and Slack, where you can see how your team is making progress and be inspired by their submissions ◆ We're exploring the idea of letting larger teams create custom courses that fit their talent engagement and up-skilling goals, whether for internal or external talent cc @rohitpaulk
Niranjan Rajendran
@rohitpaulk @sarupbanskota I'm thrilled to hear that my comment resonated with you. It's great to have been able to support and witness your journey so far 😄 And those are some interesting features that you have mentioned there ! Will check them out :)
Faisal Ilaiwi
Amazing product! I love it, I am planning to pick up Rust and I cannot think of a better way to push myself.
Ahmed Ash
I’m a big fan of Codecrafters. Their challenges are unique and amazing. Trying to build sqlite db or git was something I was trying a lot to do by myself. So having codecrafters made it easy for me to approach it step by step. Kudos to the team and best of luck with what comes next!
Sarup Banskota — CodeCrafters (YC S22)
@ahmedash95 we appreciate your goodwill! thank you!
Rnjai Lamba
Congratulations @rohitpaulk and @sarupbanskota. I'm a firm believer that one really learns from trouncing complexity. And what is more complex than the greatest software projects ever created. The problem today is that there are so many such projects that CodeCrafters is needed to collect the best ones and isolate the most ground breaking and essential parts of their codebases.
Arshdeep Singh
Congratulations @sarupbanskota and @rohitpaulk for the product hunt launch! I have used it to build Redis from scratch and I'm really impressed with how well it's designed to help developers learn and improve their skills.
Sarup Banskota — CodeCrafters (YC S22)
@rohitpaulk @arsh99 we're glad! can't wait for you to try the other challenges.
Tomas Ruta
Amazing! What kind of engineers is this a best fit for? People just starting out?
Sarup Banskota — CodeCrafters (YC S22)
@tomasruta I attempted to answer this here https://www.producthunt.com/post... and here https://www.producthunt.com/post... TL;DR not a great fit as an "intro to programming" resource, but if you can program in any language, you'll find CodeCrafters relevant, at any skill level.
Shane Page
Great for early developers, TDD enthusiasts, and learners of new languages. Naysayers: "don't reinvent the wheel". But how else are we going to train to new inventors? It's not the wheel that matters, it's the skills we build!
Stan Lo
Congratulations on the launch! 🎉 I think CodeCrafters has tremendous potential in assisting companies with developer onboarding or helping developers expand their skill sets.
Gabriel Nori
Wow, congratulations on launching on Product Hunt! 🎉🎊 I'm really curious to know, what kind of projects have seen the most success on CodeCrafters? Are there any particular use cases or features that you think are especially beneficial? I'm so excited to see what people can create with your program. 🤩
Sarup Banskota — CodeCrafters (YC S22)
@gabriel_nori Thank you so much! When we started out, we thought we were teaching people the internals of popular software. Before CodeCrafters, you were a user of Git. After CodeCrafters, you knew how Git works. But we realised we were teaching something beyond software internals. ◆ Among the experienced engineer community (including staff/principal level engineers), they seem to enjoy CodeCrafters the most as a form of language mastery. Leetcode doesn't feel real-world enough. Other real-world sites don't feel complex and ambiguous enough. And books don't feel engaging enough. ◆ Among the early career community, they like the ability to explore areas of programming that they might not usually get a chance to explore at work. Reimplementing Redis is a journey into network programming. Docker is an adventure in OS and systems programming. grep is a deep dive into statecharts. etc ◆ Among Engineering Managers, they find CodeCrafters both a meaningful way to engage their team — but also to keep themselves up-to-date and hands on, especially when their dayjob causes their programming skills to go rusty. We're also exploring the idea of tailor-made programs for larger companies to engage talent, both internal and external. I hope this helps!