Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
161243 stories
·
33 followers

AI Hot Takes: Should You Read the Code, Is RAG Dead, and Did Skills Kill MCP?

1 Share

Cassidy and GPS dive into a round of AI hot takes to separate the extreme, engagement-bait opinions from the actual nuance. They debate whether developers still need to read AI-generated code, why “jobs won't hire you if you don't use AI” is more complicated than it sounds, and GPS's own hot take against the newest wave of paid coding bootcamps. From there they tackle whether skills have killed MCP, whether RAG is dead, and a borrowed hot take from their boss Martin: if you have to fine-tune a model to your code base, your code is bad. They close out with two open source picks: Pollinations AI, a generative AI platform experimenting with earning credits through code contributions, and Avian Visitors, a beautifully documented build log of a bird-listening e-ink display.

Links mentioned in the episode:

Pollinations AI
Avian Visitors

The GitHub Podcast is produced and edited by editaudio.


Hosted by Simplecast, an AdsWizz company. See pcm.adswizz.com for information about our collection and use of personal data for advertising.





Download audio: https://afp-920613-injected.calisto.simplecastaudio.com/98910087-00ff-4e95-acd0-a3da5b27f57f/episodes/6a67709b-4161-4357-a3ea-9699017b709c/audio/128/default.mp3?aid=rss_feed&awCollectionId=98910087-00ff-4e95-acd0-a3da5b27f57f&awEpisodeId=6a67709b-4161-4357-a3ea-9699017b709c&feed=ioCY0vfY
Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Mozilla and Mistral: Partnering to expand AI competition and preserve user choice

1 Share

The AI race is shifting. Again. Practically overnight, competition has expanded from “which AI model is best?” to a new high-stakes battle over which models people can access, through which products, and whether people have meaningful choice about AI at all.

In response, Mozilla and Mistral today announced a partnership built on a shared idea: a new, open-source AI model alternative to Big Tech-default browser ecosystems. The intent: a model deliberately designed to keep the web open to technological diversity, competition, and choice.

And we’re putting this idea into practice in Firefox. 

Mistral Small 4 is coming to Firefox Smart Window beta (learn more about Firefox Smart Window here), becoming a new AI model for Smart Window users in the US and Canada, while expanding Smart Window beta access and French-language support to Firefox users in France. Across all markets where Smart Window beta is available, Firefox users can still choose from a multitude of other AI models. 

“AI is becoming part of how people experience the web every day. We want to make sure that doesn’t mean people are chained to one company’s self-serving pipeline. With the browser sitting at the heart of the web and online experience, it should be a place where different AI providers can compete and open source has a seat at the table.

This isn’t just a product partnership. A browser shouldn’t be a one-way funnel. It should preserve what made the internet powerful to begin with: the freedom to explore, discover different ideas and tech, and decide for ourselves where to go next,” said Anthony Enzor-DeMeo, CEO of Mozilla Corporation.

Choice and competition are worth protecting

As AI integration becomes increasingly concentrated, we are in jeopardy of a handful of closed-model companies controlling the browser, the search engine, the AI model, and the surrounding services that connect them. Mozilla and Mistral are betting that independent and interoperable models can offer an alternative to global tech monopolies controlling the next digital era. 

“This partnership represents two open source advocates working together to bring Mistral’s scientific innovations to Mozilla’s consumers around the world. Together, we are bringing privacy, control, and choice to AI-powered web browsing,” said Arthur Mensch, Co-founder and CEO of Mistral.

Meaningful choice isn’t confined to personal preference for one AI model over another. Web products need to be able to work with different AI providers, and people deserve the option of switching without being locked into a single company’s ecosystem. When a tech layer as far-reaching and influential as AI is controlled by a small handful of players, it risks creating closed systems and closed doors, making it harder for new ideas and better technologies to grow, reach users, and compete on merits. 

Mozilla and Mistral aim to keep that door open. The combination of an independent browser with a frontier European AI company gives people and institutions greater access to useful, responsible AI, the opposite of locking them into one company’s singular technology ecosystem. 

Selecting Mistral, and expanding to France

Mozilla selected Mistral Small 4 after evaluating its performance for Smart Window Beta, including multilingual performance, an important part of the fit. The companies approached multilingual and multicultural tuning as a core model feature, rather than simply adapting an English-first experience for a new market. 

For Firefox users, Mistral access starts with Smart Window Beta, a browsing experience designed to turn AI into a useful assistant for the things we do online: making sense of complex search trails, finding something valuable you clicked away from, presenting data sources, and generally picking up where day-to-day internet use got left off. 

France is the first new market for Smart Window with official French-language support. Mozilla is planning additional European expansion later this year.

A different kind of AI competition

Our Mistral partnership puts an ambitious new AI model approach into practice: a multilingual, globally competitive European AI company reaching people through an independent browser, leveraging openness to create more room for new technologies to compete and succeed. Mistral can reach Firefox users without owning the browser, and Mozilla can integrate and recommend Mistral without removing user choice.

It is a natural extension of the principles that have shaped Firefox and the open web, and the kind of AI ecosystem we intend to continue building.

The post Mozilla and Mistral: Partnering to expand AI competition and preserve user choice appeared first on The Mozilla Blog.

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Should your SQL Server database use foreign key constraints?

1 Share

Foreign key constraints exist to stop bad data before it happens, yet plenty of production SQL Server databases run without them. Is that a reasonable trade-off or a ticking time bomb? Greg Low looks at the most common reasons teams skip foreign keys, tests them against real-world experience, and explains why the answer differs for transactional systems versus analytic data warehouses.

Foreign keys are used to ensure referential integrity in relational databases. We don’t want to have orders for customers that don’t exist, or have lines on the orders that refer to products that don’t exist. That seems straightforward enough – and a good idea – so why is there an endless discussion in the development community about whether databases should include declared foreign key constraints or not?

Before we get started, it’s worth noting that the answers can be different depending on whether we’re talking about a transactional system or an analytic system; they are not the same. So, I’ll discuss them separately, starting with transactional systems.

You may also be interested in…

Foreign Keys and their States

Why do some people/teams avoid foreign key constraints?

As a mentor or consultant, I visit a wide variety of client sites – many of which have applications that were designed without constraints. When I ask the reason for this, the response is invariably one of the following:

  • “We don’t need them because the app ensures that it’s right”
  • “They don’t work well with our application development”
  • “They are too slow”
  • “What’s a foreign key constraint?”

Most of the sites I work with have sizeable databases, making it even more important to talk about why they’re designing their applications without constraints. Let’s take a closer look at the reasons given.

“We don’t need them because the app ensures that it’s right”

In enterprises, most large databases end up being used by more than one single application, with each of these often made up of many sub-applications or modules. This means you’re depending upon every place that accesses the data applying the exact same rules. (This issue applies to other forms of constraints as well).

Worse still, the databases often end up being accessed by applications from different authors, often with different technology stacks. ETL (extract, transform, load) processes are often used to move data into the databases, or to update the data. And, in real production scenarios, data fixes are often applied directly to the database!

Having the view that “it will be OK because everything goes through a single application, and it never has bugs that affect referential integrity”, is a very narrow view of the world.

When I see this in production systems, I often check the references in the data. What I find is consistent: on any large system that has run for quite a while, I usually find issues.

When presented with these issues, the data team members first look puzzled…before remembering some issue that happened a few weeks ago. “Ah yes, we had that bug last month and thought it was fixed”. And that issue is often with an ETL process – not the application itself!

“They don’t work well with our application development”

In most cases, this boils down to the fact that developers don’t want to work out the order they need to use for updates. Without constraints, they can update any table they want, in any order, which is much easier for them.

The downside to this: the data is periodically in an invalid state. While it will (hopefully) eventually become consistent, this also means that the data has many interim states that are actually invalid states. What happens with concurrent access at that point? Or, a reporting application that finds invoices for customers that don’t actually exist?

It would be helpful if SQL Server supported deferred constraint checking but, as of the time of writing (August 2026), it doesn’t. Having deferred constraint checking would allow you to start a transaction, do whatever you want in whichever order you want, and then commit.

The guarantee you’re providing is that, no matter what you do during the transaction, it’ll all make sense at the end.

I’ve been requesting this to the SQL Server team for decades, to no avail. I still think it’s one of the most important enhancements that could be made to the platform from a development point of view. Developers would love it.

“They are too slow”

I’m often told “we can’t do it because it would be too slow”. I then ask “have you tested it?” and, invariably, they admit that they haven’t. The reality is usually that someone’s brother’s cousin’s friend read it somewhere on the Internet, so they decided it would be a problem!

Whenever I test the performance impacts of foreign key constraints, I find very little impact as long as appropriate indexing is in place. It also helps if sensible options are chosen when bulk importing data. I’m not saying I never see performance issues that a foreign key has added to – but these situations are few are far between.

If I do encounter one of these situations, I disable rather than delete them. I like to see the disabled constraint still be in place so it can be discovered by tools (but not checked). It certainly never applies to all constraints in a database.

“What’s a foreign key constraint?”

Sadly, this is also a common question – but thankfully one I mostly only hear from small teams with small databases/ applications. Some developers just don’t understand the issue – but not most developers.

Move fast. Govern at scale.

Redgate Flyway Enterprise embeds guardrails in the database layer, so every change is policy-checked, deterministic, and traceable.
Try for free

The bottom line for transactional databases

When I carry out detailed checks on a system that has run without constraints for quite a while, I nearly always find data integrity issues.

The customers always say they’re surprised, but quickly realize they shouldn’t have been. These issues are OK if you’re building a toy application, but not OK if you’re building a large financial one.

At the very least, sites that decide not to have constraints should have a process in place that periodically checks data integrity. Most don’t even do this, but it’s important. Finding issues as soon as they occur is better than finding them later down the line. The longer an issue is left, the harder it is to fix.

With constraints, you at least get instant feedback that something’s wrong. If you have a bug in your ETL process that’s messing up your data in some subtle way, for example, you don’t want to find it several weeks later, after yet more processing has occurred on that data.

Do analytic data warehouses need foreign keys too?

If you’ve worked seriously with analytic data warehouses in recent years, you’ve probably noticed that most either skip foreign key constraints entirely, or let you define them without ever enforcing them. I understand this line of thinking but am torn on the situation.

For example, they’ll often say that the source system is responsible, ignoring the fact that many data warehouses have multiple source systems. Remember, part of the reason the data warehouse exists is to centralize the data for reporting. So, in this case, there’s no one system that’s checking the referential integrity.

This also ignores the very real possibility that the ETL processes could have bugs and mess up your data integrity. Given how long many of these processes run, if something’s wrong I’d rather find out as early as possible – not right at the end when there’s little to no time to reload the data.

At least with the “define but don’t enforce” option, the tools can be used to work out how data is related. What I’d rather see here is a way to define logical relationships that the tools can discover. Most of the time, we’re loading semantic models from views layered over the data warehouse tables, so we don’t have any concept of foreign key relationships anyway.

So, another key enhancement I’d like to see SQL Server and other database engines have, is a standardized way to describe logical relationships. I’d use that all the time for views.

Summary: disable, don’t delete, foreign key constraints

For transactional systems, I like to see foreign key constraints in place until it’s proven that a particular constraint can’t be in place for a performance reason. Then, I like to see it disabled rather than removed. A bonus is if it can still be discovered by tools (and can easily be used during testing, even if later disabled in production.)

Finally, the two things I’d like to see the SQL Server team work on are deferred constraint checking and discoverable logical relationships.

What do you think? Do you agree or disagree with any of my points? I’d love to hear your thoughts in the comments below.

Simple Talk is brought to you by Redgate Software

Take control of your databases with the trusted Database DevOps solutions provider. Automate with confidence, scale securely, and unlock growth through AI.
Discover how Redgate can help you

FAQs: Should your SQL Server database use foreign key constraints?

1. What are foreign key constraints?

A foreign key constraint is a rule enforced by the database that ensures a value in one table must match an existing value in another table — for example, an order’s customer ID must correspond to a real customer. This is what’s meant by “referential integrity”: it stops orphaned records, like orders for customers that don’t exist or line items referencing missing products.

2. Do foreign key constraints slow down SQL Server databases?

Rarely, in practice. Performance issues are uncommon when proper indexing and sensible bulk-import settings are used — most claims of “too slow” turn out to be untested assumptions.

3. Should data warehouses use foreign key constraints?

It’s debated. Many warehouses define but don’t enforce them, since multiple source systems and ETL processes make strict enforcement impractical — though skipping them risks masking data quality bugs.

4. What should you do if a foreign key constraint causes a real performance problem?

Disable it rather than delete it, so it remains visible to tools and can still be enabled for testing, even if it stays off in production.

5. Does SQL Server support deferred constraint checking?

No, not as of August 2026. This means constraints can’t be temporarily suspended mid-transaction and re-checked only at commit time.

The post Should your SQL Server database use foreign key constraints? appeared first on Simple Talk.

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Your AI coding agent evaluation is only as good as its sandbox

1 Share

A passing agent evaluation can prove the wrong thing. The answer might be correct while the measurement behind it is invalid. An AI coding agent can generate an answer from internal knowledge and related patterns. But it can also adapt information from the prompt or retrieve evidence from its environment. Each route demonstrates a different capability, yet the final answer rarely reveals which route the agent took.

If your evaluation is meant to determine what a model knows, then the sandbox must prevent the agent from retrieving the knowledge under test. Otherwise, the score represents everything available to the agent during the run. It can look impressive while answering a different question.

Start with the measurement

Before restricting a single tool, define what the evaluation should prove. Are you testing whether an agent can research an unfamiliar API or use the files in a repository? Perhaps you want to know whether the model already understands how a specific product version behaves.

Each question requires a different information boundary. Repository-level coding evaluations should let the agent read the supplied repository, while research tasks may allow web access. Evaluations of internal model knowledge on the other hand, need to withhold the evidence that would answer the question.

Coding agents are built to seek information. When they encounter an unfamiliar API or error, they search documentation and inspect the surrounding environment, including source code and installed tools. That resourcefulness helps developers every day. But in a knowledge evaluation, it becomes a source of contamination.

I ran into this distinction while using Vally to evaluate how much GPT-5.6 Luna knew about different versions of Dev Proxy. I wanted to compare the model’s knowledge with its self-reported knowledge cutoff. Letting the agent research Dev Proxy would make that comparison meaningless.

A correct answer can invalidate the result

The initial eval configuration blocked built-in web tools and direct network access through curl. With current documentation out of reach, the boundary seemed closed. It turned out though, that the host machine still contained everything the agent needed.

Many questions passed, including detailed questions about recent Dev Proxy versions. Looking only at pass rates could have supported a flattering conclusion: the model understood recent Dev Proxy behavior and could extrapolate beyond its stated cutoff.

But the trajectories showed a different path. The agent searched outside its assigned workspace and found a local Dev Proxy installation along with its source checkout. That checkout exposed versioned source and Git history. The agent produced accurate answers, but those answers established what it could discover on that machine. They revealed nothing about what the model knew before the run. And so it became clear, that a valid answer can still produce an invalid measurement. Looking only at the correctness tells you whether the answer matched the expected behavior. But the validity of the whole result depends on how the agent obtained it.

Agents search the whole environment

Disabling web access closes one route. Yet, a coding agent can still learn from the filesystem and installed software. Environment details, local caches, tool output, and attached services also become part of the evaluation input when the agent can access them.

The Dev Proxy trajectory that I examined, proves this. Web access was denied, and an initial command -v devproxy call was blocked. The agent then tried:

which devproxy

which devproxy was allowed, and it revealed the executable and the absolute path to its source checkout. The agent used shell rg against that path, then invoked the standalone rg tool and changed into the repository to inspect the v0.29.2 tag. One blocked find call made no difference because several other routes reached the same evidence.

The local repository contained the exact implementation under test. The agent established that parsed prompts were cached by filename and parameters, then produced a passing diagnosis. It was a good researched answer to a question about Dev Proxy behavior, yet it provided no evidence of unaided model knowledge.

So, why did each restriction reveal another route? Agents adapt by treating a denied tool call as an obstacle, then use the remaining capabilities to continue. A sandbox built from individual deny rules will always lag behind that search unless the rules enforce a common boundary.

Define the sandbox around information

We tend to describe a sandbox through the tools it restricts. In practice, tools are routes to information. What information can the agent obtain through every capability it still has?

So rather than focusing on individual tool restrictions, enforce filesystem access at the workspace boundary so that every command follows the same rule. Remove product installations and unrelated source checkouts from the host. Minimize inherited environment details that reveal paths or installed software, then apply the same boundary to shell commands and attached tools.

The right boundary follows the measurement. Reading source in the supplied workspace is expected when you test repository-level coding. The same access invalidates a knowledge evaluation when the source contains the answer under test. There is no universal list of forbidden tools because the legitimacy of the information depends on the question you’re asking.

Review how the agent reached the result

A grader can determine whether the final answer matches the expected behavior. But the answer alone cannot reveal whether the model generated it internally or retrieved it from the environment. Even a perfectly written rubric cannot repair contaminated inputs after the run.

Before trusting a passing result, inspect the full trajectory, including the agent’s tool calls and the observations returned to it. Check whether it searched outside the workspace or resolved an installed copy of the product. Include attached services in the review because they can expose the same information through another interface.

And failed attempts matter too. They show what the agent considered useful and often reveal the next boundary to secure. A prohibited call proves only that one route closed. By looking at the complete trajectory you can see if another route succeeded. Surprising passes deserve extra scrutiny, especially near a model’s expected knowledge boundary where environmental retrieval can make them look plausible. Treat those passes as hypotheses to investigate before treating them as evidence.

Test the sandbox as part of the eval

The sandbox determines whether the benchmark produces a valid measurement. For your next evaluation:

  1. Define the capability you want to measure and the information the agent may use.
  2. Start each run in a clean workspace containing only the intended fixtures.
  3. Use a neutral workspace path that does not leak words related to the evaluation.
  4. Restrict external knowledge sources when the measurement requires internal knowledge.
  5. Enforce filesystem access at the workspace boundary.
  6. Apply equivalent restrictions across every available tool.
  7. Review surprising passes and the full trajectories behind them.
  8. Add a regression probe for each route the agent discovers, then run the eval again.

In the end, you can trust a passing score only when you can explain how the agent reached it. Close the information boundary, verify it through the trajectory, and keep testing it as the agent finds new routes. Until then, the score might tell you more about the evaluator’s machine than about the model.

The post Your AI coding agent evaluation is only as good as its sandbox appeared first on Microsoft for Developers.

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Visual Studio Code 1.139 (Insiders)

1 Share

Learn what is new in Visual Studio Code 1.139 (Insiders)

Read the full article

Read the whole story
alvinashcraft
2 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

On learning programming in an age of LLMs

1 Share

Open answers to a reader's letter.

A reader recently wrote me a long letter with lots of questions about learning programming in this age of LLMs. After a bit of back-and-forth, I got permission to quote extensively from the letter in order to attempt some answers in public.

None of my answers I consider particularly rigorous; the situation is so uncertain that I can only answer to the best of my abilities, but I don't claim them to hold any kind of immutable truth.

"I'm trying to understand how people who deeply understand software think about learning and competence in the age of AI. I'm approaching it almost as a historian would: asking people directly how they make sense of a technological transition while actually living through it.

"About a year ago I became fascinated by AI-assisted programming. Despite having no formal CS background, with LLMs I managed to build a fairly large TypeScript/JavaScript system involving APIs, PostgreSQL, LLM pipelines, research automation and multi-model workflows. At first it felt almost magical: AI seemed to collapse the distance between having an idea and being able to build it.

"But now I'm trying to turn that system into a real production product, and I'm struggling. I fix one error with AI, then another appears, then another part behaves in a way I don't fully understand. After months of refactoring I had an uncomfortable realization: I may have built a system that is above my own level of understanding. When everything works, that gap is almost invisible. When it doesn't, it becomes very real.

"Sometimes I genuinely don't know what to do next without asking another model. That made me wonder whether I spent a year building a product, or partly building the appearance of one: something sophisticated enough to work, but which I don't yet understand deeply enough to truly own.

"I'm not anti-AI at all. I'm fascinated by these systems and want to work with them professionally. But I'm unsure what the right relationship with them should be."

Indeed, I'm not sure either, but before proceeding, I find it most transparent to reveal my position. I haven't yet decided on AI, but I lean toward disliking it, knowing full well that it may be unstoppable.

I do work and experiment with it, and it often impresses me. At other times, it frustrates me. It's usually when it impresses me the most that I resent it maximally.

When it's bad, it can be frustrating, but then at least I can absorb an ember of warmth in the illusion that what I've spent more than thirty years learning is still relevant. When it's at its best, I sometimes think: Where do I sign up for the Butlerian jihad?

My position on LLMs is only partly based on my own socio-economic status. I'm old enough, and have had enough success already, that all other things being equal, I can survive unemployment. I'm not sure, on the other hand, than any knowledge-based society can.

It may be that LLMs will take programmer jobs before they take other white-collar jobs. After all, programming may be a discipline where verification is easier than, say, insurance claims management. Still, if we reach a point of mass unemployment among knowledge workers, I'm not sure society as we know it will survive.

I usually don't talk much about my background as an economist, but in this context I find it relevant to mention. As an economist, I can't imagine that mass unemployment of 30-40% will not have a significant impact on the economy.

I'm painfully aware of the arguments that this has happened before: There may be job loss, but the advance of technology leads to new jobs we can't even imagine today. It was like that with the introduction of the stocking frame, the steam engine, the internal combustion engine, computers, etc. This is only partly true: Yes, new jobs were created, but often not for those people who lost their jobs. Coal miners didn't just become programmers overnight.

The same kind of argument was used when China was admitted to the World Trade Organization. And indeed, lots of new jobs were created, just not in the Western world.

So, based on lived and historical experience, I'm sceptical of arguments that all will be fine.

But I sincerely hope that I'm wrong. I love to program, and wouldn't mind doing it for another ten years. Perhaps more importantly, I have young adult children. I hope that there's a world for them, too.

"So I'd really like to know how you think about this. Are you glad you learned programming fundamentals before LLMs existed? If you were starting today, would you still seriously study languages, data structures, databases, networking, operating systems, debugging and architecture? Do you think AI can let people become capable of building much faster than they become capable of understanding?"

Am I glad that I learned programming before LLMs? Yes, of course. Those skills served me well for thirty years.

If I was starting today, I'd seriously consider learning carpentry, metalworking, gun-smithing, or something else that requires hand-eye coordination. I know that advances are made in robotics, too, but replacement of manual labour seems to lie farther in the future.

But to address the question: I am, personally, currently learning data structures, language semantics, etc. as part of a university programme. I do that because I'm curious, however, and not because I expect to get much monetary reward out of it.

Do I think that AI enables people to develop faster than they can keep up? This remains to be seen. Software developers have already, for decades, been working on top of abstractions they didn't understand. If you were a web developer, you didn't know much about compiler programming. If you were a compiler programmer, you didn't know much about integrated circuit design. And if your job was to engineer integrated circuits, you wouldn't know much about the levels of abstraction above you.

A good rule of thumb was: Understand the level of abstractions directly below the one you work in, as well as the one above. That would enable you to troubleshoot most problems.

"And how do you personally deal with that? When AI can solve something immediately, how do you decide when to use it and when to work through the problem yourself? If you were in my position, with a substantial AI-built project but weak foundations underneath it, would you step back and systematically learn those foundations, keep building and learn as problems appear, or combine the two?"

That's two radically different questions, because I no longer have a weak foundation in software development. Even if I were dealing with something far from what I usually do, I can ramp up leveraging what I already know. Let's imagine that someone tasked me with maintaining an application written exclusively in RISC-V assembly code. That's the most alien software environment I can imagine for myself. Adapting to such a development environment would be difficult for me, but still not as difficult as it would be for someone new to programming in general. Believe it or not, I have written small exercise programs in RISC-V, as well as an exercise compiler that compiled to RISC-V.

But what if I had virtually no software background?

Well, once upon a time, I was in exactly that situation. When I started my career, for years I balanced a knife's edge of getting things done while learning on the job. Beginning in 1999, I wrote COM components in C++, not understanding much of what I was doing. Somehow, I still made it work, even to a degree that I managed to eliminate any obvious memory leaks.

I was, however, never happy just slapping things together without understanding how they worked. So I did, as suggested by the question, step back to systematically learn fundamentals. This worked well for a career launched in the mid 1990s. Will it work well today?

I'm not so sure: Reaching a level of competency high enough to recognize your past confidence as clearly lying on the too-ignorant-to-realize-it portion of the Dunning-Kruger curve took decades. Do you have that much time today?

Granted, with LLMs, you can learn faster, because you can ask more directed questions. Thirty years ago, I would buy books in the hope that they would contain some helpful material. This still meant slogging through a lot of learning material not immediately relevant to the task at hand.

Still, I doubt that it's possible to significantly speed up human learning. The bottleneck is hardly the teachers nor the materials, but how fast a human brain can absorb new knowledge.

"One last thing I would be especially grateful to hear about is how you learned programming yourself, and how you learn new technical things today. How did you approach learning a new language earlier in your career? Books, projects, reading other people's code, exercises, debugging, something else? And if you had to learn a completely new programming language today, with AI available, how would you do it?"

The short answer to the first question: Slowly, based on much trial and error, occasionally backed by a book.

Apart from a very early false start with COMAL 80, my first programming projects was to (re)calculate bifurcation diagrams and the Lorenz attractor for my master's thesis in economics. Reaching for what I had, I wrote them in QBasic, learning from the samples that shipped with it, as well as occasionally asking a friend.

While I'm glossing over many details, in the 1990s and 2000s, I mostly learned from examples and documentation. While I did buy a book about C++, I don't think I ever finished it, and I picked up various Basic dialects as well as C# exclusively from documentation and example code.

That said, although I never read a book to learn C#, books were instrumental in teaching me both F# and Haskell. I have, over the years, relied heavily on books to educate myself, but as my Goodreads profile reveals, I love books in general.

How do I learn a completely new programming language today? Again, my experience is useless to someone new to programming in 2026: I've now seen so many programming languages that if I run into a new one, I can usually pick it up from perusing existing code and looking up the few things that aren't immediately clear.

But that's presupposing that the language in question is 'normal'. If I had to get back into APL, I'd at least have to find a tutorial.

You may have noticed that I don't much use LLMs for learning. LLMs don't hallucinate; they bullshit, and I'm deeply distrustful of anything they tell me. This is not to say that I don't use LLMs, but I tend to ask them questions that yield verifiable answers. Can I make this Haskell expression more succinct? Any useful answer to such a question is a code suggestion that either works, or doesn't work; is shorter, or isn't. That's easy to verify.

What should I learn next? does, on the other hand, not yield a verifiable answer. I tend to not to ask such questions of LLMs.

In conclusion, you could say that I prefer asking LLMs falsifiable questions.


This blog is totally free, but if you like it, please consider supporting it.
Read the whole story
alvinashcraft
2 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories