Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: I built a guided Build your own DNS Server challenge (codecrafters.io)
57 points by nixylemonbatman 9 months ago | hide | past | favorite | 10 comments
Hey everyone. It's Sherub here, author of the Build your own DNS Server challenge on CodeCrafters. Currently it’s available in Rust, Go, and Python and is free while in beta.

https://codecrafters.io/dns-server

I've kept the challenge accessible but still challenging for an intermediate developer. This challenge, like others from CodeCrafters, is self-paced. You can use any tools you prefer (terminal, editor, etc.) to build the project.

At the end of the challenge, you will have created a DNS forwarding server. The server can create and read DNS packets and respond to DNS queries. As you go, you'll learn about the DNS protocol, its format, servers, and A records. All while getting to hone your language skills.

Some of the challenges and choices I had to make:

* To make the stages easier, I had to break them up, such that each step builds on the previous one. This was especially challenging for the 2nd stage, where we write a DNS packet's header contents. Even though I’d have liked it to be easier, breaking it up further would have been weird.

* Instead of implementing a recursive resolver, I've restricted to a forwarding server. We made this decision so that most developers can still use it. To add more complexity, we can use a challenge extension (noted below).

* Deciding how much instruction and context the stages should provide. I’ve decided to keep them as thorough as possible for most of the stages. Developers can choose to have thorough details or just skim through them.

I would love your feedback and questions on the challenge. You can try it out for free here: https://codecrafters.io/dns-server (no CC required).

I also have challenge extensions planned. You can find them at https://app.codecrafters.io/vote/challenge-extension-ideas?c.... I'm also keen to hear what you think about the extension ideas.




I'm craving this type of content but in video format. Something along the lines of MIT/Stanford courses but focuses on "Do your own X". Most youtube content I'm aware of is focused on entertainment while coding and I find it distracting.


(CodeCrafters team here).

Out of curiosity, is there a reason why you prefer video format vs. interactive?

e.g out of habit, when I'm having a meal, I like watching "course videos" or streams occasionally. Is yours similar?

P.S. Jon Gjengset did a comprehensive stream going through the Build your own BitTorrent challenge https://youtu.be/jf_ddGnum_4?si=nwVLbe_2XsheIKav, if you're interested in Rust


Watching videos serves a diferent role than interactive b/c you get to take in audio and visual together, which _can_ support a higher bandwidth learning(depending on quality of the video). Also, for unfamiliar subjects, it’s useful to be exposed to the concepts and constructs first so you can build a mental scaffoliding that supports the details. Speech seems to be a better medium for that.

Interactive, like other info sources that present info linearly and in high detail are much less efficient, but allow you to learn the ‘doing’ aspect that a video would not.

But I am curious about what you’ve made. How has the reception for this type of info product been so far?


Makes sense. Reception has been healthy so far :)

Related:

* https://news.ycombinator.com/item?id=32342334

* https://news.ycombinator.com/item?id=37941075

On average I'd say we get a 50/50 split between folks who like the doing/challenge aspect of it, vs those who wished there was more "consuming" type of content, e.g vidoes/text


Interactive stuff requires me to participate whereas videos/streams can be consumed when I'm less attentive. I've just checked out Jon Gjengset's video, that's exactly what I'm talking about. Another similar channel: https://www.youtube.com/elie2222

I'm more interested in (a) system/code design and (b) mechanically how they solve problems (eg how they debug, get around the editor etc) to improve myself. I'm less interested in the code itself.


It’s a zoomer and younger millennial thing. It’s difficult for me to understand. But if you want to appeal to them, make videos.


We do have a supplementary screencasts feature (this challenge doesn’t have one yet since its new).

Here’s what it looks like on the Redis challenge: https://app.codecrafters.io/courses/redis/stages/2/screencas...


I recently wrote my own DNS server (https://github.com/acheong08/CaddyNS-Manager) - (rate limiting incomplete)

It’s interesting how many people query random subdomains (e.g. admin/manage/etc)


Hope to try out one of these challenges soon.


this is quite nice for learning, awesome work guys!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: