<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yao Ke</title>
    <description>The latest articles on DEV Community by Yao Ke (@yail259).</description>
    <link>https://dev.to/yail259</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3290737%2Feceb6ac5-de44-4b9d-b502-ef8bfdd29ea5.jpg</url>
      <title>DEV Community: Yao Ke</title>
      <link>https://dev.to/yail259</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yail259"/>
    <language>en</language>
    <item>
      <title>Human: Tool Choice</title>
      <dc:creator>Yao Ke</dc:creator>
      <pubDate>Tue, 24 Jun 2025 11:30:27 +0000</pubDate>
      <link>https://dev.to/yail259/human-tool-choice-j6h</link>
      <guid>https://dev.to/yail259/human-tool-choice-j6h</guid>
      <description>&lt;p&gt;As I was reading Svelte 5's documentation I noticed something interesting,&lt;br&gt;
a page with &lt;code&gt;.txt&lt;/code&gt; files for LLMs to crawl &lt;a href="https://svelte.dev/docs/llms" rel="noopener noreferrer"&gt;svelte.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This got me thinking, as more and more code is written by AI, how will this affect&lt;br&gt;
the tooling we choose. This applies in all sorts of areas, but especially in&lt;br&gt;
terms of programming languages. Consider the following points:&lt;/p&gt;

&lt;h2&gt;
  
  
  Popularity
&lt;/h2&gt;

&lt;p&gt;The elephant in the room for choosing any technology is popularity. React is&lt;br&gt;
popular because React is popular. Once a tool is established as commonplace and&lt;br&gt;
the de facto standard, it tends to cement itself until a generational improvement.&lt;/p&gt;

&lt;p&gt;This is with good reason too. Popularity means proven, popularity means better&lt;br&gt;
tooling, popularity means better support, popularity means more educational&lt;br&gt;
material, popularity means more jobs/employees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Popularity means better AI code generation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since AI is trained on all the code on the public internet, having seen more examples of a popular technology such as React, it'll understand it better and be able to apply it to more diverse situations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality
&lt;/h2&gt;

&lt;p&gt;The quality of the codebase online is also very, very important. The old adage&lt;br&gt;
remains true:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Garbage in, garbage out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Althought a technology like React is popular, it also means that there is more&lt;br&gt;
than enough spaghetti code online written in it. This can significantly impact&lt;br&gt;
the model's performance if the model's trainers did not carefully curate the data&lt;br&gt;
or otherwise combat low quality training data.&lt;/p&gt;

&lt;p&gt;Whilst languages like Haskell are niche, it may actually be much more suited for&lt;br&gt;
LLM code generation since the &lt;em&gt;dozens&lt;/em&gt; of Haskell coders are nerds who write high quality&lt;br&gt;
code!&lt;/p&gt;

&lt;h2&gt;
  
  
  Adoption
&lt;/h2&gt;

&lt;p&gt;Although the migration from Svelte 4 to Svelte 5 is generally an improvement,&lt;br&gt;
one hilarity I encountered is that no matter how much I specified "use Svelte 5",&lt;br&gt;
the models will continue to use Svelte 4.&lt;/p&gt;

&lt;p&gt;It seems that in the modern age, we not only need to convince humans to switch,&lt;br&gt;
but machines too!&lt;/p&gt;

&lt;h2&gt;
  
  
  Imperative vs Declarative Tooling
&lt;/h2&gt;

&lt;p&gt;Recently I've been writing a bit of SwiftUI code, and the experience is totally&lt;br&gt;
different. Since the layout and structure shown on the page is so declarative, it's so much easier to just generate correct code on the first go without some funky formatting issue.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that declarative means more "here's what I want", instead of "follow this step by step". This is more of a continuum/spectrum rather than classification. C is declarative compared to assembly, and Python is comparative compared to C.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's akin to the much higher quality of AI code in languages like Python and Swift, compared to lower level languages like C. I suppose this is true even for human programmers, but even truer for AI which struggles to think continuously across long contexts. As such, the design choices made in the tooling itself, whether that be languages or frameworks, can significantly impact the quality of AI generation. I've yet to see AI mess up PyTorch code because it's just so declarative.&lt;/p&gt;

&lt;p&gt;In the future, we may even see AI friendliness as a core trade-off when designing new tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I do not know what will actually be optimal tech stack as your decisions will&lt;br&gt;
be affected by some weighted combination of the above factors. Never mind the&lt;br&gt;
fact that choosing a tech stack was already a chore before AI.&lt;/p&gt;

&lt;p&gt;Tools development in the future will need to take AI into consideration and alway provide as much training data and explanation as it can. This not only allows AI&lt;br&gt;
generation, but stronger automated feedback and debugging too.&lt;/p&gt;

&lt;p&gt;Ultimately, the &lt;strong&gt;right&lt;/strong&gt; tool will always prove to be the easiest to work with, whether by human or AI. I personally would rather just use the easiest tool &lt;strong&gt;I prefer&lt;/strong&gt;, but your mileage may vary. Maybe some esoteric stack like Haskell backend, Flutter frontend is the future of AI web development.&lt;/p&gt;

&lt;p&gt;I wish I could've ended on a more definitive note, but I suppose a more objective measure of the tools AI is next to impossible. Perhaps I can end on on list of questions for the reader to explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much autonomy does the AI have in your workflow? If more than 50%, then maybe it should take priority in your choice of tools?&lt;/li&gt;
&lt;li&gt;Are LLMs actually self-aware of what tools they excel at using?&lt;/li&gt;
&lt;li&gt;Are tools easier for humans easier for LLMs too?&lt;/li&gt;
&lt;li&gt;Do you have an emotional connection to a tool? Will that affect your motivation and willingness to vet the AI code?&lt;/li&gt;
&lt;li&gt;How will adoption of new tools change? If BigCorp releases BigCorpLang, and an accompanying LLM, then adoption/learning cost is drastically reduced!&lt;/li&gt;
&lt;li&gt;Can we ever expect to measure the performance of LLMs on a tool by tool, language by language basis in a feasible and cost effective way?&lt;/li&gt;
&lt;li&gt;Will LLMs ever be able to learn on the job? Can we effectively teach it new tools and not just shove a huge .txt file into its system prompt and limited context window?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tooling</category>
      <category>coding</category>
      <category>ai</category>
    </item>
    <item>
      <title>Architecting In The Age of AI</title>
      <dc:creator>Yao Ke</dc:creator>
      <pubDate>Tue, 24 Jun 2025 11:28:29 +0000</pubDate>
      <link>https://dev.to/yail259/architecting-in-the-age-of-ai-51m3</link>
      <guid>https://dev.to/yail259/architecting-in-the-age-of-ai-51m3</guid>
      <description>&lt;p&gt;The other day I watched an interview where the CEO of Microsoft, Satya Nadella was talking about how in the future software development will be less about writing code and more about higher level system design.&lt;/p&gt;

&lt;p&gt;This is definitely one of the more grounded takes on AI's impact on coding. In my personal experience of using generative models such as ChatGPT, it's definitely not ready to completely replace human engineers yet, but it's certainly not useless.&lt;/p&gt;

&lt;p&gt;So coming back to the titular claim, what has really changed in the world of programming? Should we strive to all become architects, or is handcrafting every UTF-8 symbol still mission critical?&lt;/p&gt;

&lt;p&gt;In the following sections, I'll explore the different aspects of programming, and notate with + (it matters more now) and - (it matters less now) to paint my mental picture of programming in 2025.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax (-)
&lt;/h2&gt;

&lt;p&gt;Syntax and language specific notations is becoming less and less important. In my experience of coding in Python, Java, C and Golang, I had already noticed that I was becoming more and more syntax agnostic. In the same family of languages (in this case the C family of languages), syntactic difference such as &lt;code&gt;func&lt;/code&gt; vs &lt;code&gt;def&lt;/code&gt; vs &lt;code&gt;function&lt;/code&gt; matter less and less.&lt;/p&gt;

&lt;p&gt;A proficient C programmer can just as easily understand Python code generated by AI given a bit of time to connect the dots. Now, more quickly than ever, can a Java programmer contribute to a C project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Language specific foot guns (+)
&lt;/h2&gt;

&lt;p&gt;Whilst syntax is arguably less important, I would not be confident in saying languages are a thing of the past. This is due to the many nuances of particular languages which &lt;strong&gt;must&lt;/strong&gt; be reasoned about carefully.&lt;/p&gt;

&lt;p&gt;Everyone jokes about how Python is basically pseudocode, but it too has its unseeming language features. For instance, what could go wrong in the following code?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;spawn_lst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]):&lt;/span&gt;
    &lt;span class="n"&gt;lst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;lst&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Python, mutable default arguments are evaluated once and shared across function calls!&lt;/p&gt;

&lt;p&gt;This means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;spawn_lst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# == [5]
&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;spawn_lst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# == [5, 6]
&lt;/span&gt;
&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="c1"&gt;# == True
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, to someone who doesn't have a strong grasp of Python, or more importantly, memory referencing and pointers, this can seem totally intangible and ridiculous.&lt;/p&gt;

&lt;p&gt;But the bigger point is this, whilst syntactical differences for equivalent concepts have become trivial, not all languages are the same under the hood. Which leads me to my next point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming concepts (+)
&lt;/h2&gt;

&lt;p&gt;What exactly is the important thing about languages and design in general? Concepts and ideas.&lt;/p&gt;

&lt;p&gt;Design philosophies and understanding certain choices become more important than every. Golang refuses to have &lt;code&gt;class&lt;/code&gt; whilst in Java, everything must be in a &lt;code&gt;class&lt;/code&gt;. Swift uses automatic reference counting, C uses manual memory management whilst Python uses garbage collection. In Haskell, you can only code pure functions and all side effects must be wrapped in monads (a monoid in the category of endofunctors of course).&lt;/p&gt;

&lt;p&gt;All of these higher level ideas become increasingly important to understand and master. They affect things beyond the fascade of syntax. They effect how you code and &lt;em&gt;why&lt;/em&gt; you code in certain patterns. Cue the time I copied generated React code and kept wondering why the state was not saved (I called useCustomHook twice 🤕).&lt;/p&gt;

&lt;h2&gt;
  
  
  Style Guides (-)
&lt;/h2&gt;

&lt;p&gt;Whilst style guides remain generally important for both human and AI readers, it's not as critical for the human programmer/architect to be aware of the best style for a particular language. This is simply because the AI will automatically adhere to the best style for you! With the addition of tools like linters and language servers, it's increasingly easier to write code with is of &lt;em&gt;perfect&lt;/em&gt; convention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Structure (+)
&lt;/h2&gt;

&lt;p&gt;This involves perhaps one of the biggest limitations of LLMs, context window. An not just the raw advertised context window, but the true, effective context window (see &lt;a href="https://github.com/NVIDIA/RULER" rel="noopener noreferrer"&gt;Nvidia's RULER&lt;/a&gt;). As such, breaking down large projects into components with well designed and exposed interfaces is crucial to scaling AI coding.&lt;/p&gt;

&lt;p&gt;As such, I believe the most powerful AI coding tools in the future will intelligently manage the limited effective context window to design software component by component, with a sensible and well-designed overall architecture. The human will guide it along the way and each individual component will be reliable and self-contained.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for programmers
&lt;/h2&gt;

&lt;p&gt;Perhaps it is time to shift away from the keyboard. I know, this sounds like sacrilege. But perhaps the flowchart zealots were right all along.&lt;/p&gt;

&lt;p&gt;There is of course no substitute for complete beginners typing out every character of the code just as a beginner in maths should learn to add and multiply by hand. But now we enter a new age where our new "calculator", generative AI, has dropped. Now we don't need to do the calculations by hand anymore. So what should we be doing instead?&lt;/p&gt;

&lt;p&gt;I think pen and paper design, or something to that effect. But not just for behavioural diagrams and flow charts. Something in between code and specification. Something where implementation is shaping, but not concrete. Where structs are labelled in detail, constructors and destructors are well defined with responsibilities, inheritance hierarchies, mutations are clearly labelled...&lt;/p&gt;

&lt;p&gt;In other words, you paint the detailed skeleton of the code, and the AI fleshes it out. The more detailed the technical the skeleton, the better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Whilst typing every single character may be a thing of the past, high level understanding and concrete reasoning of design has never been more important. Having a solid grasp of key language concepts allow you to quickly get up to speed in any language regardless of the syntax with AI generated code.&lt;/p&gt;

&lt;p&gt;Understanding, integrating and designing said code will continue, in the forseeable future, be a challenging &lt;em&gt;human&lt;/em&gt; endeavour. &lt;/p&gt;

&lt;p&gt;Has this really changed since the past? We should strive to be better architects, but we always should've strived to be better architects. I guess the difference is now we have more time and ability to focus on architecting when the AI is doing the typing.&lt;/p&gt;

&lt;p&gt;Typing line by line will be like sewing, a fun pastime for the nostalgic. I'll definitely be one.&lt;/p&gt;

&lt;p&gt;Read other articles: &lt;a href="https://yaoke.pro/blogs" rel="noopener noreferrer"&gt;https://yaoke.pro/blogs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>coding</category>
      <category>ai</category>
      <category>design</category>
    </item>
  </channel>
</rss>
