[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-M7oUEY-dPa4oA4iOhEu2X6iioyZqCgoS2o04kQ3Fof0":3,"sanity-0nocuNzOtqqddRcGDs4vA3s-PpUlKOqiobTYsvbQ0Cc":365},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":340},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"50f4509c-4f55-4f11-8adc-5556e821ea77","2026-06-30T07:40:00.000Z",{"_type":10,"current":11},"slug","why-intent-prediction-needs-more-than-an-llm",null,"Why intent prediction needs more than an LLM",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":64,"comments":286,"dateUrl":287,"excerpt":288,"image":289,"legacyBody":292,"product":12,"publishedAt":295,"slug":296,"sponsored":12,"tags":298,"title":339,"visible":286},"2023-05-25T09:39:13Z","wp-post-15166","07ZbrKPSUrjrV4wQ6fIhWF","blogPost","2023-07-13T14:55:31Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_system":50,"_type":53,"_updatedAt":54,"avatar":55,"employee":60,"name":61,"slug":62},"2023-05-23T16:27:18Z","wp-author-213","nRfzWrvFg3DIXOd15U9uv8",{"base":51},{"id":48,"rev":52},"9xJoPFf2DISyAMMJXP7Ct6","blogAuthor","2025-07-29T19:37:47Z",{"_type":56,"asset":57},"image",{"_ref":58,"_type":59},"image-e81c84dcaeb58be1002795a6544b595bd6fc8071-1024x1024-jpg","reference","former","Ben Popper",{"current":63},"benpopper",[65,89,119,138,150,161,172,180,199,218,235,254,262,270],{"_key":66,"_type":67,"children":68,"markDefs":84,"style":88},"f1491ba317d4","block",[69,75,80],{"_key":70,"_type":71,"marks":72,"text":74},"f1491ba317d40","span",[73],"em","This is part 5 of an ongoing series detailing my journey from total noob to hobbyist coder. I share my thoughts as I learn the basics of programming. You can find the rest of the series ",{"_key":76,"_type":71,"marks":77,"text":79},"f1491ba317d41",[73,78],"f028a66b7d2d","here",{"_key":81,"_type":71,"marks":82,"text":83},"f1491ba317d42",[73],".",[85],{"_key":78,"_type":86,"href":87,"reference":12},"link","https:\u002F\u002Fstackoverflow.blog\u002Ftag\u002Fworst-coder-in-the-world\u002F","normal",{"_key":90,"_type":67,"children":91,"markDefs":114,"style":88},"68a35acf07b6",[92,96,101,105,110],{"_key":93,"_type":71,"marks":94,"text":95},"68a35acf07b60",[],"One of the challenging things about learning to code is that while you are still mastering the basics of fundamental languages, the whole ecosystem seems to be evolving at a breakneck pace. By the time I get a handle on CSS, everyone will scoff at folks who don’t use React. Why learn C or Python when I could be ",{"_key":97,"_type":71,"marks":98,"text":100},"68a35acf07b61",[99],"c1c9f77c6a6b","using Go",{"_key":102,"_type":71,"marks":103,"text":104},"68a35acf07b62",[],"? Why bother with Go when I could devote myself ",{"_key":106,"_type":71,"marks":107,"text":109},"68a35acf07b63",[108],"d90ae08fdc56","to Rust",{"_key":111,"_type":71,"marks":112,"text":113},"68a35acf07b64",[]," instead? If Ruby is the language that helps beginners fall in love with programming, why didn’t anyone tell me that at the start?\n",[115,117],{"_key":99,"_type":86,"href":116,"reference":12},"https:\u002F\u002Fstackoverflow.blog\u002F2019\u002F10\u002F07\u002Fhow-salesforce-converted-einstein-analytics-to-go\u002F",{"_key":108,"_type":86,"href":118,"reference":12},"https:\u002F\u002Fblog.discordapp.com\u002Fwhy-discord-is-switching-from-go-to-rust-a190bbca2b1f",{"_key":120,"_type":67,"children":121,"markDefs":135,"style":88},"5d94bcfefa2d",[122,126,131],{"_key":123,"_type":71,"marks":124,"text":125},"5d94bcfefa2d0",[],"Charles Martin, a veteran software engineer and consultant, ",{"_key":127,"_type":71,"marks":128,"text":130},"5d94bcfefa2d1",[129],"7e03800f90a1","wrote a piece",{"_key":132,"_type":71,"marks":133,"text":134},"5d94bcfefa2d2",[]," for our our blog this week that touched on this idea same idea in a slightly different way:\n",[136],{"_key":129,"_type":86,"href":137,"reference":12},"https:\u002F\u002Fstackoverflow.blog\u002F2020\u002F02\u002F20\u002Frequirements-volatility-is-the-core-problem-of-software-engineering\u002F",{"_key":139,"_type":67,"children":140,"markDefs":149,"style":88},"b25066aa3f53",[141,145],{"_key":142,"_type":71,"marks":143,"text":144},"b25066aa3f530",[73],"Start by accepting that change is inevitable.",{"_key":146,"_type":71,"marks":147,"text":148},"b25066aa3f531",[],"\n",[],{"_key":151,"_type":67,"children":152,"markDefs":160,"style":88},"914b8813c484",[153,157],{"_key":154,"_type":71,"marks":155,"text":156},"914b8813c4840",[73],"Any project, no matter how well planned, will result in something that is at least somewhat different than what was first envisioned. Development processes must accept this and be prepared to cope with it.",{"_key":158,"_type":71,"marks":159,"text":148},"914b8813c4841",[],[],{"_key":162,"_type":67,"children":163,"markDefs":171,"style":88},"e1e315cd7151",[164,168],{"_key":165,"_type":71,"marks":166,"text":167},"e1e315cd71510",[73],"As a consequence of this, software is never finished, only abandoned.",{"_key":169,"_type":71,"marks":170,"text":148},"e1e315cd71511",[],[],{"_key":173,"_type":67,"children":174,"markDefs":179,"style":88},"0b3242ebdd2e",[175],{"_key":176,"_type":71,"marks":177,"text":178},"0b3242ebdd2e0",[73],"We like to make a special, crisply-defined point at which a development project is “finished.” The reality, however, is that any fixed time at which we say “it’s done” is just an artificial dividing line. New features, revised features, and bug fixes will start to come in the moment the “finished” product is delivered. (Actually, there will be changes that are still needed, representing technical debt and deferred requirements, at the very moment the software is released.)",[],{"_key":181,"_type":67,"children":182,"markDefs":196,"style":88},"478fe2dbed6f",[183,187,192],{"_key":184,"_type":71,"marks":185,"text":186},"478fe2dbed6f0",[],"Terrifying! These realizations can, if you’re not careful, lead to a sort of paralysis, a ",{"_key":188,"_type":71,"marks":189,"text":191},"478fe2dbed6f1",[190],"9f8195aca28c","Zeno’s Paradox",{"_key":193,"_type":71,"marks":194,"text":195},"478fe2dbed6f2",[]," of programming in which the start of any journey inevitably reveals the impossibility of an end.\n",[197],{"_key":190,"_type":86,"href":198,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FZeno%27s_paradoxes",{"_key":200,"_type":67,"children":201,"markDefs":215,"style":88},"e26cfd281b19",[202,206,211],{"_key":203,"_type":71,"marks":204,"text":205},"e26cfd281b190",[],"I was chatting with ",{"_key":207,"_type":71,"marks":208,"text":210},"e26cfd281b191",[209],"1c8a92a8e39a","Teresa Dietrich",{"_key":212,"_type":71,"marks":213,"text":214},"e26cfd281b192",[],", our new chief product officer, about this conundrum. She has been working in technology for three decades, and seen plenty of trends come and go. “Every few years we have this brand new architecture and it's going to change the world, right? The truth, however, is that you cannot remove complexity from a system.” Every system involves not just code, she explained, but the folks who write it, maintain it, and rely on it. “It’s people, process, and technology. What happens when a new software architecture comes along? You have to ask, where did you move the complexity?”\n",[216],{"_key":209,"_type":86,"href":217,"reference":12},"https:\u002F\u002Fstackoverflow.blog\u002F2020\u002F02\u002F04\u002Fpodcast-your-buddy-is-typing-teresa-dietrich\u002F",{"_key":219,"_type":67,"children":220,"markDefs":234,"style":88},"f5a4b804f1e7",[221,225,230],{"_key":222,"_type":71,"marks":223,"text":224},"f5a4b804f1e70",[],"This way of thinking about the situation struck a chord with me. It’s almost a fundamental law of nature",{"_key":226,"_type":71,"marks":227,"text":229},"f5a4b804f1e71",[228],"strong",": complexity is a constant",{"_key":231,"_type":71,"marks":232,"text":233},"f5a4b804f1e72",[],". Bringing a new programming language into the picture might solve some pain points or produce some gains in speed and cost. But now your code base has five languages, not four. How does that trickle down across the expertise of the hires you’ve made over the last few years? And the support engineers who sit on another continent, who handle crises for customers in seven different spoken languages. “If we really decide a new coding language is a priority and is going to move the needle, can we step back and find another language to deprecate at the same time?\" asked Teresa.",[],{"_key":236,"_type":67,"children":237,"markDefs":251,"style":88},"b0b1a88e9798",[238,242,247],{"_key":239,"_type":71,"marks":240,"text":241},"b0b1a88e97980",[],"Our brains learn to recognize patterns over time, and that makes certain approaches seem more intuitive. Here’s a nice quote from ",{"_key":243,"_type":71,"marks":244,"text":246},"b0b1a88e97981",[245],"7452119bf54a","an article",{"_key":248,"_type":71,"marks":249,"text":250},"b0b1a88e97982",[]," by Sandy Maguire, which has been introducing me to if, and, or, and nand.",[252],{"_key":245,"_type":86,"href":253,"reference":12},"https:\u002F\u002Freasonablypolymorphic.com\u002Fbook\u002Fpreface",{"_key":255,"_type":67,"children":256,"markDefs":261,"style":88},"cb98294f0d14",[257],{"_key":258,"_type":71,"marks":259,"text":260},"cb98294f0d140",[],"“While computer science has very little to do with snowmen, it has everything to do with patterns. The study of computer science, like mathematics, is one of overwhelming self-referentiality. The patterns that seemed so difficult and novel yesterday are today’s run-of-the-mill building blocks. Like a snowball rolling down a mountain, the student of computer science cannot help but gain momentum as these concepts begin converge in one huge avalanche.”",[],{"_key":263,"_type":67,"children":264,"markDefs":269,"style":88},"8df401ff17cc",[265],{"_key":266,"_type":71,"marks":267,"text":268},"8df401ff17cc0",[],"There are lots of ways to express this universal truth, but I tend to favor dark humor. Let me know your own stories about code, complexity, and infinite choice in the comments.",[],{"_key":271,"_type":67,"children":272,"markDefs":282,"style":285},"3fbf124a1a63",[273,277],{"_key":274,"_type":71,"marks":275,"text":276},"3fbf124a1a630",[],"All languages were created equal, but some were created more === than others.\n\n— Arne Mæhlum (@arnemahl) ",{"_key":278,"_type":71,"marks":279,"text":281},"3fbf124a1a631",[280],"f9e25b943b63","February 1, 2020",[283],{"_key":280,"_type":86,"href":284,"reference":12},"https:\u002F\u002Ftwitter.com\u002Farnemahl\u002Fstatus\u002F1223575470425411589?ref_src=twsrc%5Etfw","blockquote",true,"2020\u002F02\u002F22","Why bother to learn a programming language when it will be out of date by the time I master it?",{"_type":56,"asset":290},{"_ref":291,"_type":59},"image-418e83f6c45276005fa806e799d6fe6a23a73db3-1200x630-png",{"code":293,"language":294},"\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cem>This is part 5 of an ongoing series detailing my journey from total noob to hobbyist coder. I share my thoughts as I learn the basics of programming. You can find the rest of the series \u003Ca href=\"https:\u002F\u002Fstackoverflow.blog\u002Ftag\u002Fworst-coder-in-the-world\u002F\">here\u003C\u002Fa>.\u003C\u002Fem>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>One of the challenging things about learning to code is that while you are still mastering the basics of fundamental languages, the whole ecosystem seems to be evolving at a breakneck pace. By the time I get a handle on CSS, everyone will scoff at folks who don’t use React. Why learn C or Python when I could be \u003Ca href=\"https:\u002F\u002Fstackoverflow.blog\u002F2019\u002F10\u002F07\u002Fhow-salesforce-converted-einstein-analytics-to-go\u002F\">using Go\u003C\u002Fa>? Why bother with Go when I could devote myself \u003Ca href=\"https:\u002F\u002Fblog.discordapp.com\u002Fwhy-discord-is-switching-from-go-to-rust-a190bbca2b1f\">to Rust\u003C\u002Fa> instead? If Ruby is the language that helps beginners fall in love with programming, why didn’t anyone tell me that at the start?\u003Cbr>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Charles Martin, a veteran software engineer and consultant, \u003Ca href=\"https:\u002F\u002Fstackoverflow.blog\u002F2020\u002F02\u002F20\u002Frequirements-volatility-is-the-core-problem-of-software-engineering\u002F\">wrote a piece\u003C\u002Fa> for our our blog this week that touched on this idea same idea in a slightly different way:\u003Cbr>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cem>Start by accepting that change is inevitable.&nbsp;\u003C\u002Fem>\u003Cbr>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cem>Any project, no matter how well planned, will result in something that is at least somewhat different than what was first envisioned. Development processes must accept this and be prepared to cope with it.&nbsp;\u003C\u002Fem>\u003Cbr>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cem>As a consequence of this, software is never finished, only abandoned.\u003C\u002Fem>\u003Cbr>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cem>We like to make a special, crisply-defined point at which a development project is “finished.” The reality, however, is that any fixed time at which we say “it’s done” is just an artificial dividing line. New features, revised features, and bug fixes will start to come in the moment the “finished” product is delivered. (Actually, there will be changes that are still needed, representing technical debt and deferred requirements, at the very moment the software is released.)\u003C\u002Fem>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Terrifying! These realizations can, if you’re not careful, lead to a sort of paralysis, a \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FZeno%27s_paradoxes\">Zeno’s Paradox\u003C\u002Fa> of programming in which the start of any journey inevitably reveals the impossibility of an end.&nbsp;\u003Cbr>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>I was chatting with \u003Ca href=\"https:\u002F\u002Fstackoverflow.blog\u002F2020\u002F02\u002F04\u002Fpodcast-your-buddy-is-typing-teresa-dietrich\u002F\">Teresa Dietrich\u003C\u002Fa>, our new chief product officer, about this conundrum. She has been working in technology for three decades, and seen plenty of trends come and go. “Every few years we have this brand new architecture and it's going to change the world, right? The truth, however, is that you cannot remove complexity from a system.” Every system involves not just code, she explained, but the folks who write it, maintain it, and rely on it. “It’s people, process, and technology. What happens when a new software architecture comes along? You have to ask, where did you move the complexity?”&nbsp;\u003Cbr>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>This way of thinking about the situation struck a chord with me. It’s almost a fundamental law of nature\u003Cstrong>: complexity is a constant\u003C\u002Fstrong>. Bringing a new programming language into the picture might solve some pain points or produce some gains in speed and cost. But now your code base has five languages, not four. How does that trickle down across the expertise of the hires you’ve made over the last few years? And the support engineers who sit on another continent, who handle crises for customers in seven different spoken languages. “If we really decide a new coding language is a priority and is going to move the needle, can we step back and find another language to deprecate at the same time?\" asked Teresa.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Our brains learn to recognize patterns over time, and that makes certain approaches seem more intuitive. Here’s a nice quote from \u003Ca href=\"https:\u002F\u002Freasonablypolymorphic.com\u002Fbook\u002Fpreface\">an article\u003C\u002Fa> by Sandy Maguire, which has been introducing me to if, and, or, and nand. \u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>“While computer science has very little to do with snowmen, it has everything to do with patterns. The study of computer science, like mathematics, is one of overwhelming self-referentiality. The patterns that seemed so difficult and novel yesterday are today’s run-of-the-mill building blocks. Like a snowball rolling down a mountain, the student of computer science cannot help but gain momentum as these concepts begin converge in one huge avalanche.”\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>There are lots of ways to express this universal truth, but I tend to favor dark humor. Let me know your own stories about code, complexity, and infinite choice in the comments.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:html -->\n\u003Cblockquote class=\"twitter-tweet\">\u003Cp lang=\"en\" dir=\"ltr\">All languages were created equal, but some were created more === than others.\u003C\u002Fp>— Arne Mæhlum (@arnemahl) \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Farnemahl\u002Fstatus\u002F1223575470425411589?ref_src=twsrc%5Etfw\">February 1, 2020\u003C\u002Fa>\u003C\u002Fblockquote> \u003Cscript async=\"\" src=\"https:\u002F\u002Fplatform.twitter.com\u002Fwidgets.js\" charset=\"utf-8\">\u003C\u002Fscript>\n\u003C!-- \u002Fwp:html -->","html","2020-02-22T13:05:00.000Z",{"current":297},"ben-popper-is-the-worst-coder-5-complexity-is-the-constant",[299,307,309,314,318,322,327,332,334],{"_createdAt":300,"_id":301,"_rev":302,"_type":303,"_updatedAt":300,"slug":304,"title":306},"2023-05-23T16:43:21Z","wp-tagcat-bulletin","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":305},"bulletin","Bulletin",{"_createdAt":300,"_id":301,"_rev":302,"_type":303,"_updatedAt":300,"slug":308,"title":306},{"current":305},{"_createdAt":300,"_id":310,"_rev":302,"_type":303,"_updatedAt":300,"slug":311,"title":313},"wp-tagcat-change-management",{"current":312},"change-management","change management",{"_createdAt":300,"_id":315,"_rev":302,"_type":303,"_updatedAt":300,"slug":316,"title":317},"wp-tagcat-go",{"current":317},"go",{"_createdAt":300,"_id":319,"_rev":302,"_type":303,"_updatedAt":300,"slug":320,"title":321},"wp-tagcat-rust",{"current":321},"rust",{"_createdAt":300,"_id":323,"_rev":302,"_type":303,"_updatedAt":300,"slug":324,"title":326},"wp-tagcat-stack-overflow",{"current":325},"stack-overflow","stack overflow",{"_createdAt":300,"_id":328,"_rev":302,"_type":303,"_updatedAt":300,"slug":329,"title":331},"wp-tagcat-stackoverflow",{"current":330},"stackoverflow","Stackoverflow",{"_createdAt":300,"_id":328,"_rev":302,"_type":303,"_updatedAt":300,"slug":333,"title":331},{"current":330},{"_createdAt":300,"_id":335,"_rev":302,"_type":303,"_updatedAt":300,"slug":336,"title":338},"wp-tagcat-worst-coder-in-the-world",{"current":337},"worst-coder-in-the-world","worst coder in the world","Ben Popper is the Worst Coder : Complexity is the Constant",[341,347,353,359],{"_id":342,"publishedAt":343,"slug":344,"sponsored":12,"title":346},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":345},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":348,"publishedAt":349,"slug":350,"sponsored":12,"title":352},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":351},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":354,"publishedAt":355,"slug":356,"sponsored":12,"title":358},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":357},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"_id":360,"publishedAt":361,"slug":362,"sponsored":12,"title":364},"30b995f7-7cb9-4dd8-bf71-d0685940a32b","2026-06-19T14:00:00.000Z",{"_type":10,"current":363},"dispatches-from-o-reilly-from-capabilities-to-responsibilities","Dispatches from O'Reilly: From capabilities to responsibilities",{"data":366,"sourceMap":-1},{"count":367,"lastTimestamp":368},27,"2023-05-25T09:47:03Z"]