Stack Overflow in the AI Age
(This article was originally published at jakelevirne.com)
Stack Overflow started in 2008 and has helped millions of developers, myself included, get answers to their coding questions. But there’s a sea change in the industry, with most developers now using or planning to use AI tools in their development processes. One experienced developer I interviewed said his process has changed more in the past 18 months than it had in the last 18 years.
Stack Overflow’s Policy on AI Generated Content
In the face of this transformation, Stack Overflow has taken a strong stand on the role of AI generated content in the community– there’s no place for it. And they go on to say, “Users who ask questions on Stack Overflow expect to receive an answer authored and vetted by a human.” Whether this is true or not, we know from Stack Overflow’s own research that AI is a tool that most developers value.
AI is a Tool that Most Developers Value
Stack Overflow Developer Survey 2023:
GitHub Copilot Research (2023) affirms and extends these findings:
A Community that Embraces AI
AI is a tool like IDEs or interpreted languages or coding frameworks, all of which have their detractors but none of which are banned from use by Stack Overflow. Instead of pitting humans vs. AI in the battle of who can provide the best answers to coding questions, we should reframe the conversation to ask “what should a human community of developers look like given the huge impact AI is having on software development?”
While there are some obvious answers, like creating tags and collectives for AI technology, there are also some less obvious challenges that such a community could help tackle:
Working Together to Achieve Augmented Intelligence
Grounding
Grounding AI refers to the process of linking abstract knowledge in AI systems to tangible, real-world examples. It’s a set of techniques that can be used to reduce AI hallucinations and add source citing to AI-generated responses. Many AI tools are making rapid progress in grounding their answers through RAG (retrieval-augmented generation) and other means. But a community of human developers could take this a step further– correcting AI content, up/down-voting answers, suggesting follow-ups or refinements, and vetting responses against real-world scenarios.
Helping Novices
This community engagement with AI can help in even more critical ways. While correcting and clarifying answers are important, it is perhaps even more important to help people ask good questions in the first place.
“There are no right answers to wrong questions.” – Ursula K. Le Guin
The Stack Overflow survey shows differences in sentiment towards AI tooling based on developer experience, which starts to hint at a potential split between more and less experienced developers. Research from McKinsey and Ness Digital Engineering indicate that in practice, different developer groups have significantly different outcomes when using AI tools. The McKinsey research shows examples of AI tools reducing the time to complete certain tasks by up to 50% when those tools are used by experienced developers, but adding 7-10% to task completion time when those same tools are used by devs with less than a year of experience.
A widening gap between junior and senior developers doesn’t bode well for the industry where these same junior developers are the engineering leaders of tomorrow. And more so, it’s overly simplistic to bucket developers as “junior” vs. “senior”. We’re all novices and experts depending on the topic and the circumstances– lifelong learning is one of the most appealing aspects of developing software.
Given this, our community can come together to help each other interact with AI on any software topic as if each of us was an expert on that topic. For example:
While some of these will require experts to proactively edit and correct AI responses, most of them can be achieved just by observing how the experts among us get the best out of current AI tooling. This should make it easy for our community to grow and improve rapidly.
Avoiding the Death Spiral
Stack Overflow’s policy on AI generated content talks about the need for quality– for answers to be “factual, relevant, and complete”. On this point, there’s no argument. The research, both qualitative and anecdotal, indicates that accuracy of AI-generated answers is a real issue. And though not explicitly called out in the policy, the risk of AI models degrading over time due to a lack of human-generated training content is real.
To avoid this accuracy death spiral, the answer is to make it easier for humans to refine and edit content for accuracy; to separate the wheat from the chaff. Using human authoring as the only factor in determining good vs. bad content is inefficient. Instead, we should use the full set of signals available to us as the community interacts together with all content (both human and AI generated) to quickly produce the high quality data needed to continually improve answers.
Continually Aligning
On a larger scale than any one specific question or answer, we need to be constantly vigilant when it comes to the use of AI. As software developers we build systems that can have a highly leveraged impact on society. If we don’t ensure that the AI tools we use are aligned with our values, we run the risk of incrementally eroding those values. The software systems we build need to be secure, fair, transparent, useful, and safe and we need to be able to rely on our tools not to thwart those characteristics.
AI will cause many of us to bump up a level of abstraction as we plan and build software. In some ways this is similar to the bump in abstraction much of the industry experienced with the wide adoption of interpreted languages. But in other ways, this new abstraction is dramatically different because there is more chance for us as developers to implement algorithms without sufficiently understanding or vetting them. This can create subtle but insidious biases or behaviors in our software.
As a community, one of the most important things we can do is come together to help each other ensure we’re being mindful as we implement AI-generated suggestions. Specifically, the shape of AI, including its associated high compute costs, has concentrated the foundational technology in the hands of a small number of large companies (some of whom are actually deeply interdependent). Even if these players are not bad actors, they become susceptible to exploitation by bad actors, with potential for far reaching effects. One of the best counterbalances to this over-concentration is an independent community that can participate alongside AI tools to reinforce our preferences and values.
Making Context and Knowledge Portable
Finally, we see challenges arising from the proliferation of AI tools for developers. The situation is unique in that there are a small number of foundational models and APIs powering a dizzying array of AI developer experiences. While the hyper-concentration can result in the Alignment problems noted above, the proliferation of choice leads to problems of developer experience and ease of use.
Today, developers could easily use a dozen disparate AI tools for helping them in their work, from general purpose AI chat interfaces to coding or platform specific experiences. With each new interaction, it’s up to the developer to provide context to these tools. Currently, the best approaches make use of the project codebase as a way to create better context for AI generated answers. But this misses many other useful contextual inputs like the questions I’ve asked in the past, the code I deleted or never used, and the documentation and notes I have outside of my codebase. It also results in IDEs like VSCode getting bogged down by an unending set of AI extensions that can’t interact with each other.
A modern developer community is as much about helping each other as it is about helping ourselves. And in this world of fractured AI tooling experiences, we should think about making our context and our learning portable. As we use AI, we are building up an augmented memory and a personalized knowledge base. Some aspects of these can help others as they follow similar paths, but just as importantly these can be useful to our future selves. As we start, pause, and re-engage on projects its invaluable to be able to retrieve our learnings even if specific AI tools have changed underneath us.
A Modern Software Development Community
It’s not about AI vs. Human generated content. New tooling and new technological breakthroughs almost always result in more opportunity for developers to express themselves and to create. The easier it is to create, the more we build, and the more diverse the community of builders becomes. With the rapid changes we’ve seen in software development it’s time for developer communities that embrace these changes. Stack Overflow arose in the midst of changes 16 years ago when cloud and mobile were revolutionizing our industry and so can no doubt adapt to the impact of AI today. But if the weight of its past causes it to continue on the path of human vs. AI, other communities will arise to embrace human plus AI.
spot on Jake. I use them both chatGPT and stackoverflow in parallel with the exact philosophy. Not only does I use it to cross/check and "ground" chatGPT, but stackoverflow gives me a timeline of responses over the years. So I see how an answer has evolved depending upon libraries, language updates, stylistic changes, etc. The freely available ChatGPT is trained on data that's a couple years old. The latest technologies are changing rapidly. Even if something "just works", it might not be the appropriate way to do it in a production environment.
CMO at Sourcegraph
5 个月This statement is so true Jake Levirne "It also results in IDEs like VSCode getting bogged down by an unending set of AI extensions that can’t interact with each other." This is why I always say the only extension you need is https://cody.dev/ ;)