Work in progress: 181,232 of 181,233 sites checked so far, more every week · updated 2 Nov 2026Missing a blog? Tell us

Top all-time · #3093

T

The Ethically-Trained Programmer

Personal blog · blog.carlmjohnson.net/postprogramming

The Ethically-Trained Programmer is a personal blog at blog.carlmjohnson.net about programming. Since 2016, 23 different Hacker News readers have linked it 51 times, most often “Writing Go CLIs with Just Enough Architecture · the Ethically-Trained Programmer”. It is still writing: the last post was on 2025-02-24, and you can follow it by feed.

Visit the blog
51mentions?
23HN people?
2016–2023first – last linked?
Links on Hacker News per year · peak 19 in 2020

Too few sampled comments (6) to say how often HN recommends it.?

Why HN links it

HN readers link this blog's Go posts for practical how-tos, including go:embed, Hugo cache busting, and layering a Go CLI. One commenter calls its abstraction advice a favourite.

Summarised by Claude from a sample of 6 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.

“It should be noted that no ethically-trained software engineer would ever consent to write a `DestroyBaghdad` procedure. Basic professional ethics would instead require him to write a `DestroyCity` procedure, to which Baghdad could be given as a parameter.” — [Nathaniel Borenstein](http://www.guppy

Most-linked posts?

  1. Writing Go CLIs with Just Enough Architecture · the Ethically-Trained Programmer
    4 people · 4 mentions · first linked 2020-06-05
  2. I wrote my own Go HTTP client
    3 people · 3 mentions · first linked 2021-12-17
  3. /post/2021/how-to-use-go-embed/
    3 people · 3 mentions · first linked 2021-08-25
  4. Dropping Support for IE11 Is Progressive Enhancement
    2 people · 4 mentions · first linked 2020-11-12
  5. Three Minor Features in Go 1.18
    2 people · 2 mentions · first linked 2021-12-21
  6. The failed promise of Web Components
    2 people · 2 mentions · first linked 2020-09-27
  7. Ten Years of “Go: The Good, the Bad, and the Meh
    2 people · 2 mentions · first linked 2023-07-18
  8. The 2,500 year old history of why Python’s all([]) returns True
    2 people · 2 mentions · first linked 2020-03-18

What Hacker News says?

  1. > Internet Explorer represents less than 1% of my work traffic according to Google Analytics. People will sometime spin this away by arguing that 1% of a large number is also a large number. If you have 100 million hits, 1% is 1 million hits! But the flipside is that 99 million hits are not Internet Explorer and are not helped by optimizations aimed at Internet Explorer. https://blog.carlmjohnson.net/post/2020/time-…

    Comment linking /post/2020/time-to-kill-ie11/

    on “TailwindCSS v2.0”
  2. Submitted Never use a dependency that you could replace with an afternoon of programming as a story · 347 points

    HN discussion
  3. > Git is the democracy of programming: it is the worst tool for version control, except all those other tools that have been tried from time to time. https://blog.carlmjohnson.net/post/2018/git-gud/

    Comment linking /post/2018/git-gud/

    on “Git is too hard”
  4. Submitted Three Minor Features in Go 1.18 as a story · 224 points

    HN discussion
  5. I recommended avoiding Gitflow back in 2018: > There are more complicated systems for branching like Git flow that have a separate “develop” branch and distinguish between “features” and “hot fixes”. These systems are fine if they fit your use case, but if a project releases code quickly, the level of complexity involved in Git Flow is unnecessary. > Ideally, branches should be short lived. One strategy to allow mer…

    Comment linking /post/2018/git-gud/

    on “Please stop recommending Gitflow”
  6. Submitted The 2,500 year old history of why Python’s all([]) returns True as a story · 189 points

    HN discussion
  7. They use comments for compilation directives, build instructions, code generation and other such stuff. https://dave.cheney.net/2018/01/08/gos-hidden-pragmas https://dave.cheney.net/tag/build-constraints https://blog.carlmjohnson.net/post/2016-11-27-how-to-use-go-...

    Comment linking /post/2016-11-27-how-to-use-go-generate/

    on “25 Years of PHP”
  8. Submitted What’s New in Go 1.19? as a story · 53 points

    HN discussion
  9. I write CLIs basically all the time. It’s fun. Everyone should do it. https://blog.carlmjohnson.net/post/2018/go-cli-tools/

    Comment linking /post/2018/go-cli-tools/

    on “Ask HN: Have you created programs for only your personal use?”
  10. Submitted I wrote my own Go HTTP client as a story · 4 points

    HN discussion
  11. This is what I’ve been doing with Go on Netlify (which is a wrapper around AWS Lambda). https://blog.carlmjohnson.net/post/2020/how-to-host-golang-o...

    Comment linking /post/2020/how-to-host-golang-on-netlify-for-free/

    on “Moving my serverless project to Ruby on Rails”
  12. Submitted Ten Years of “Go: The Good, the Bad, and the Meh as a story · 3 points

    HN discussion
  13. I wrote a blog post about my rewrite: https://blog.carlmjohnson.net/post/2020/go-cli-how-to-and-ad...

    Comment linking /post/2020/go-cli-how-to-and-advice/

    on “Diving into Go by building a CLI application”
  14. Submitted Even More Minor Features in Go 1.18 as a story · 3 points

    HN discussion
  15. Sure, I’m on a real keyboard now. You don’t need separate client and models packages. You should have two packages: main (which has only one line) and everything else (call it package xkcd). Your main continues even after it finds an error in fetching the comic. This is because you can’t return err in main and you didn’t use panic/log.Fatal. You also don’t exit with a non-zero code on error. The solution to all of t…

    Comment linking /post/2018/go-cli-tools/

    on “Diving into Go by building a CLI application”
  16. Submitted The failed promise of Web Components as a story · 3 points

    HN discussion
  17. Yes, and it's super easy to do nowdays with embed since Go 1.16 https://blog.carlmjohnson.net/post/2021/how-to-use-go-embed/

    Comment linking /post/2021/how-to-use-go-embed/

    on “Ask HN: Companies of one, what is your tech stack?”
  18. Submitted Writing Go CLIs with Just Enough Architecture · the Ethically-Trained Programmer as a story · 3 points

    HN discussion
  19. bokwoon · 2020-07-05Recommends
    One of my favourite abstraction advice comes from this article: https://blog.carlmjohnson.net/post/2020/go-cli-how-to-and-ad... . "You want one layer to handle user input and get it into a normalized form. You want one layer to do your actual task. And you want one layer to handle formatting and output to the user. Those are the three layers you always need." The "do the task" layer can be abstracted again further.…

    Comment linking /post/2020/go-cli-how-to-and-advice

    on “Beginner's Guide to Abstraction”
  20. Submitted The 2,500 year old history of why Python’s all([]) returns True as a story · 2 points

    HN discussion
  21. Only tangentially related, but go:embed is pretty neat https://blog.carlmjohnson.net/post/2021/how-to-use-go-embed/

    Comment linking /post/2021/how-to-use-go-embed/

    on “Go 1.18 will embed source version information into binaries”
  22. Submitted Major standard library changes in Go 1.20 as a story · 2 points

    HN discussion
  23. It's a bit more advanced than what Rust macros provided last time I checked. You can shove whole directories in there and then traverse them or serve as static resources with pretty much one line of code. Random blog post with a few examples: https://blog.carlmjohnson.net/post/2021/how-to-use-go-embed/

    Comment linking /post/2021/how-to-use-go-embed/

    on “Thirteen Years of Go”
  24. Submitted Three Minor Features in Go 1.18 as a story · 2 points

    HN discussion
  25. Lol, Web Components aren’t a standard. They’re a series of unrelated technologies and a good PR campaign. https://blog.carlmjohnson.net/post/2020/web-components/

    Comment linking /post/2020/web-components/

    on “React created roadblocks in our enterprise app”
  26. Submitted I wrote my own Go HTTP client as a story · 2 points

    HN discussion
  27. Yes, exactly. The workers can send results to the manager, but the manager does all the management. Anything else gets too hairy, too fast to reason about. I wrote a blog post about it: https://blog.carlmjohnson.net/post/share-memory-by-communica...

    Comment linking /post/share-memory-by-communicating/

    on “Rust concurrency: the archetype of a message-passing bug”
  28. Submitted Would you fund this grant proposal? as a story · 2 points

    HN discussion
  29. You might be ready to invest in my startup: https://blog.carlmjohnson.net/post/2019/introducing-bummr/

    Comment linking /post/2019/introducing-bummr/

    on “What Did the Past Smell Like?”
  30. Submitted Dropping Support for IE11 Is Progressive Enhancement as a story · 2 points

    HN discussion

Search all of HN for blog.carlmjohnson.net

Linked by the same people?