惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
P
Privacy International News Feed
Security Latest
Security Latest
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Last Watchdog
The Last Watchdog
S
Schneier on Security
Engineering at Meta
Engineering at Meta
Google Online Security Blog
Google Online Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Cyberwarzone
Cyberwarzone
C
Cyber Attacks, Cyber Crime and Cyber Security
G
GRAHAM CLULEY
A
Arctic Wolf
博客园 - 聂微东
I
Intezer
腾讯CDC
罗磊的独立博客
T
Tailwind CSS Blog
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 【当耐特】
P
Palo Alto Networks Blog
Simon Willison's Weblog
Simon Willison's Weblog
W
WeLiveSecurity
N
News and Events Feed by Topic
SecWiki News
SecWiki News
S
Security Affairs
T
Threat Research - Cisco Blogs
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
T
Troy Hunt's Blog
N
News and Events Feed by Topic
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
I
InfoQ
Hacker News: Ask HN
Hacker News: Ask HN
T
The Blog of Author Tim Ferriss
Schneier on Security
Schneier on Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
D
Darknet – Hacking Tools, Hacker News & Cyber Security

GoPenAI - Medium

Group Relative Policy Optimization (GRPO) Your agent fleet can build trustworthy state with their own keys Epistemic Backbone #1: Why AI Systems Need Shared Memory, Not Just Models Transformers Beyond NLP: Fun and Trendy Use Cases Your First Transformer: The Road to Attention Part 4. From Seats to Agents: Early Evidence on the Future of Work in the Agentic AI Era The AI Trust Gap: Why Faster Code Is Creating Less Confidence From Bytes to BPE: A From-Scratch Tour of LLM Tokenization ️ Grok Voice Think Fast 1.0: The First Voice AI That Actually Thinks While Talking .NET 10.0.7 OOB Security Update: The Kind of Bug You Can’t Afford to Ignore Writing Custom Pallas Kernels for vLLM on TPU — A Step-by-Step Guide Contrastive Learning Day 39: Advanced Ensemble Learning Techniques — Stacking, Random Forest, AdaBoost, and Gradient… Localization: Beyond Translation, Into the Territory of Growth Hacking Can We Translate Our Sentiments? Training the first modern architecture encoder for South Slavic languages What Is Data, and Why Does It Matter for AI? A Complete Guide to Prompt Engineering: Best Practices & Tips DeepSeek TileKernels: The Hidden Tech Making AI Models Insanely Fast Can AI Growth Really Become Economic Growth? Evaluating API Test Generation Across Leading AI Tools Pin Clustering in .NET MAUI Maps: Finally Making Maps Usable (With Example) Unsupervised Learning What is an LLM? Tokens, Context Window, and Why They Matter Build a reactive AI agent harness — Part 1. Conversation. From Hallucination to Citation… RAG Made Simple: How AI Finds the Right Answers CLI Coding Agents Tierlist Google Deep Research Max: Build Autonomous AI Research Agents Hermes Agent vs Every AI Assistant: Why Memory Changes Everything I Watched a Startup Burn $1,200 in a Week. The Culprit Was 800 Tokens. Fine-Tuning LLMs Explained: How Companies Teach AI to Think Like Them ️ xAI Just Dropped the Fastest Voice AI Ever Essential Code Patterns in Generative Artificial Intelligence Exploratory Data Analysis: A basic Understanding Day 36: Introduction to Ensemble Learning — Why Multiple Models Perform Better than One Concept to build a Student IQ — Agent Framework Workflow + Microsoft Foundry Agents 20 API Concepts Every Software Engineer Should Know From Human-Feedback Control to Declared No-Meta Agency: A Scientific Exposition GPT-5.5 Is Here — And It’s Not Just Smarter… It Works For You Test Cases in Data Science Projects: A Basic Understanding Q, K, V: The Three Matrices That Quietly Run Every Modern LLM Artificial Intelligence UseCases in Testing A Comprehensive Guide for Beginners into Artificial Intelligence Day 33: DBSCAN — Clustering Beyond Boundaries The Attention Breakthrough — How Language Models Finally Learned to Focus I rebuilt Strava (and Strava Premium) for fun, and now I want your feedback .NET April 2026 Updates: The Kind of Release You Should Never Ignore .NET 11 Preview 3: Small Changes That Quietly Improve Everything ChatGPT Images 2.0 Isn’t an Update — It’s a Revolution Claude Mythos: The AI Model Too Powerful to Release Basic Understanding of Key Parameters: Artificial Intelligence Part-2 Kimi K2.6: The Most Powerful Open-Source LLM Is Here (And It’s Not What You Expect) Elephant in the room — Openrouter’s Elephant-Alpha I Built a RAG System From Scratch in 4 Weeks — Here’s Everything I Learned Graphify: Build a Knowledge Graph From Your Entire Codebase — Without Sending Your Code to Anyone Deep Learning Interview Q&A Part -1 Deep Learning Interview Q&A Part -2 Anthropic Just Launched Claude Routines Microsoft Just Dropped a Cheaper AI Image Model — And This Changes Everything Building a Local-first Knowledge Management System with LLM and Obsidian Basic Understanding of Key Parameters: Artificial Intelligence Part-1 Copy These 7 Prompt Formulas and Never Struggle With AI Again Claude Opus 4.7 vs Mythos — The Benchmark Truth Nobody Explains The ROI on Reading is Broken. I Built an AI Learning OS to Fix It Beyond Scatter: Metrics That Allows to Measure Creativity in LLMs. Banish the RNN: The Road To Attention Part 3. You Typed a Few Words. The AI Painted a World. Here’s Exactly How. Claude Opus 4.7: The Quiet Leap Toward Autonomous AI Workflows Is bitnet.cpp the Game Changer for Running LLMs on Your Laptop? Machine Learning Algorithms : A Comprehensive Guide Building REPI (Real Estate Pain Point Intelligence Platform) — From Scraping 5 Noisy Data Sources… Hermes Agent: The AI That Actually Remembers You (Not Another OpenClaw) MiniMax M2.7 Just Went Open-Weight — Run a Powerful AI Agent on Your Own Machine XML Is Everywhere — You Just Never Noticed It The Missing Infrastructure for GUI Agents: Unpacking the ClawGUI Framework Wayfarer: Building an AI-Powered Travel Intelligence Platform with Agentic Orchestration, Bayesian… Attention from First Principles: DeltaNet Project Glasswing and Claude Mythos Preview: Anthropic’s Bet on AI-Powered Cyber Defense Deep Learning-Based Binary Classification of Forest Fires GenAI Q and A Interview Questions Part -2 How Google Maps Knows There Is Traffic Before You Even Reach There 5 AI Freelance Services Clients Actually Pay For I Accidentally Built a World Where AIs Govern Themselves (And I Have No Idea What’s Happening… Meta’s “Compute Desk” Is the Tell: When AI Stops Being Software and Becomes Resource Strategy The Last Human Stronghold Falls: Inside the GrandCode Multi-Agent System ASP.NET Core 2.3 End of Support: What It Really Means for Developers Andrej Karpathy’s LLM Wiki: The Idea That Could Kill RAG Forever I Built an Open-Source Kubernetes Control Plane for AI Agents. Here’s What It Took. GLM-5.1 Just Changed Coding Forever — The AI That Gets Smarter the Longer It Works Goodbye Llama? Meta Just Dropped Muse Spark — And It Changes Everything Anthropic Accidentally Leaked All of Claude Code’s Source Code Stop Sending Your Data to the Cloud — Build This Instead Today Physical AI Cosmos Reason2 2B World Model inference in Azure Machine Learning LangChain vs LlamaIndex vs LangGraph: The Difference Nobody Explains Clearly Cloud Services Interview Q and A Part- 1 Cloud Services Interview Q and A Part- 2 Gemma-4 — disabling thinking with gemma-4–26b-a4b-it Mixture of Experts Explained: The Secret Architecture Making AI 10x Smarter Without Using 10x More… Diffusion Models Demystified: How AI Paints Masterpieces from Pure Noise (No Math Needed)
46% of Code Is Now AI-Generated. The Other 54% Is the Part That Will Get You Fired.
Mustafa Genc · 2026-04-18 · via GoPenAI - Medium
The data on what AI took from engineers is alarming. What it can’t take is more alarming. Let’s skip the debate. You’ve read the “AI will replace developers” piece and the “AI is just a tool” rebuttal. Both camps have been arguing for two years, and while they argued, something quietly happened: the job changed. Not in theory — in payroll data, in hiring numbers, in the actual day-to-day of engineering teams. The real question is not whether AI replaces engineers. It’s what kind of engineer gets replaced first. The answer is hiding in the 54% of code that AI still can’t write — and more importantly, in why it can’t. If you found this article useful, please clap — and if you’re feeling generous, you can give up to 50 claps 👏 The Numbers You Haven’t Sat With Long Enough Start with the headline stat. According to GitHub’s internal analytics , 46% of code written by GitHub Copilot users is now AI-generated. Java developers hit 61%. This is not a projection — it’s usage data from 20 million active Copilot users. Meanwhile, 73% of engineering teams now use AI coding tools daily, up from 41% in 2025 and 18% in 2024. The Stack Overflow 2025 Developer Survey puts 51% of professional developers using AI tools every day. Now look at what happened on the hiring side. Stanford researchers analyzed ADP payroll records — America’s largest payroll company, covering tens of thousands of firms — and found that employment for software developers aged 22–25 dropped nearly 20% from its peak in late 2022. Young and older developers moved together until 2022. Then they split apart. At the macro level, U.S. entry-level tech job postings dropped 67% between 2023 and 2024 , according to Stanford Digital Economy Lab’s analysis of ADP payroll data. The top 15 tech firms cut entry-level hiring by 25% from 2023 to 2024, per a SignalFire report. Read those numbers again. They are not about senior engineers. They are specifically, surgically about the work that required the least judgment. That is the pattern. AI didn’t take engineering — it took the textbook part of engineering. And if your job was mostly textbook, that is a problem. What AI Actually Took The tasks AI handles well are not random. They share a common property: they have clear inputs, known patterns, and verifiable outputs. Writing boilerplate: functions, CRUD endpoints, data models Translating between formats: JSON to SQL, REST to GraphQL, Python to TypeScript Implementing known algorithms from documentation Writing unit tests for code that already exists Explaining what a function does Autocompleting the next logical line This is the work that junior developers traditionally owned. It’s also the work that computer science programs teach most thoroughly — syntax, standard algorithms, design patterns. AI absorbed that layer because that layer is, essentially, pattern matching over a very large corpus. According to BCG’s research across 1,250 companies , AI tools boost software development productivity by 25%, with expectations of 44% gains at full scale. Stanford’s 2026 AI Index puts the productivity improvement at 26% in software development specifically. That productivity gain doesn’t disappear into thin air. It replaces headcount. One senior engineer with AI tooling now covers the output that previously required two junior engineers handling routine implementation. The math is simple and the hiring data confirms it. The 54% That Remains — and Why It’s Harder Than It Looks Now the more important question: what can’t AI generate reliably? Not “what does AI get wrong” — every tool gets things wrong. The more useful question is: what class of problems does AI structurally fail at? The answer is problems where the correct output cannot be derived from the input alone. Where you need judgment, not pattern matching. Problem framing. AI can write a function that does what you asked. It cannot tell you whether what you asked is the right thing to build. A model will generate a perfectly functional recommendation algorithm without asking whether the recommendation algorithm should exist in this product at all. That question requires understanding users, business context, and consequences — none of which are in the prompt. # You prompt: "Write a function that recommends products based on user purchase history" # AI generates a valid collaborative filtering implementation. It runs. It's correct. def recommend_products(user_id: str, history: list[str], n: int = 5) -> list[str]: user_vector = embed_purchase_history(history) # embed what the user has bought all_products = get_product_embeddings() # fetch from your vector store scores = cosine_similarity(user_vector, all_products) return top_n_products(scores, n) # The code is fine. The problem statement was not. # Your users aren't failing to discover new products - they're failing to find # the specific product they already know they want. It's a search problem, # not a recommendation problem. The right fix was a better search bar. # # AI answered your prompt exactly. # Your prompt described the wrong problem. # The model had no way to flag this - that context was never in the prompt. Output validation. When an AI generates code, the question “is this correct?” is not answered by the fact that the code runs. 25% of Y Combinator’s Winter 2025 startups shipped codebases that were 95%+ AI-generated. Several of those were quietly plagued by security vulnerabilities that no one caught because no one read the code carefully. AI wrote it, AI tested it, AI passed those tests — and the tests were wrong. Catching that requires a human who understands what the code is supposed to do at a level deeper than the prompt. # AI generates a "complete" test suite for a payment processing function. # Every test passes. The AI is confident. You ship. def test_process_payment(): assert process_payment(100, "USD", valid_card) == {"status": "success"} assert process_payment(0, "USD", valid_card) == {"status": "error", "msg": "Invalid amount"} assert process_payment(-50, "USD", valid_card) == {"status": "error", "msg": "Invalid amount"} # Three days after launch, customers report being charged twice after a network glitch. # The scenario the AI never tested: def test_process_payment_retry_safety(): # Scenario: charge succeeds on the payment gateway, # but the network drops before your server receives the confirmation. # Without idempotency handling, a retry charges the card a second time. with simulate_network_failure_after_gateway_charge(): process_payment(100, "USD", valid_card, idempotency_key="tx_abc123") # Retrying with the same key should return the original result - not charge again. result = process_payment(100, "USD", valid_card, idempotency_key="tx_abc123") assert result["charge_count"] == 1 # Would have failed. Bug would have been caught. # The AI tested what was in the prompt. # The production incident lived in what wasn't. Failure mode thinking. AI produces outputs optimized for the happy path. Ask it to write an API handler and it will write one that works when the inputs are valid, the network behaves, and the database is available. What happens under load? What happens when the upstream service times out after 29 seconds? What happens when a user sends a payload that is technically valid JSON but semantically unexpected? These are failure modes that require experience and adversarial thinking — not pattern completion. # You ask AI: "write an async function that fetches user profile from the profile service" # AI delivers clean, readable, working code: async def get_user_profile(user_id: str) -> dict: response = await httpx.get(f"https://profile-service/users/{user_id}") return response.json() # It passes every test in your dev environment. You ship it. # Under production load, profile-service occasionally takes 30+ seconds to respond. # Every waiting coroutine holds an open connection. The connection pool exhausts. # Your entire service stops responding - not because your code is wrong, # but because it was written for a world where upstream services always behave. # The version that accounts for how production actually works: async def get_user_profile(user_id: str) -> dict: try: async with httpx.AsyncClient(timeout=3.0) as client: # fail fast; don't hold connections open indefinitely response = await client.get(f"https://profile-service/users/{user_id}") response.raise_for_status() # surface HTTP errors - don't silently return garbage return response.json() except httpx.TimeoutException: logger.warning("profile-service timeout for user_id=%s", user_id) return get_cached_profile(user_id) # degrade gracefully; don't let one slow service take down everything except httpx.HTTPStatusError as exc: if exc.response.status_code == 404: raise UserNotFoundError(user_id) # distinguish "user doesn't exist" from "service is broken" raise # re-raise unexpected errors for the caller to handle Trade-off reasoning. Should this be a microservice or a module? Should we use a vector database or BM25 + re-ranking? Should we fine-tune or use RAG? These decisions have no correct answer without context — and context is exactly what a model lacks when a developer types a prompt without including their entire architecture, team size, latency requirements, and maintenance capacity. # You ask AI: "write a function to get all orders with their user details" # AI generates code that looks clean, reads well, and works perfectly # against your 10-row local test database: def get_orders_with_users(db: Session) -> list[dict]: orders = db.query(Order).all() # query 1: fetch all orders result = [] for order in orders: user = db.query(User).filter( # queries 2 through N+1: one database round-trip per order User.id == order.user_id ).first() result.append({"order": order, "user": user}) return result # In dev with 10 rows: 11 queries. Fast enough to miss completely. # In production with 50,000 orders: 50,001 queries per request. # Response time climbs from milliseconds to seconds. The endpoint becomes a bottleneck. # The AI's test ran against 3 rows. All assertions passed. It shipped. # The version that requires knowing your actual scale and ORM configuration: def get_orders_with_users(db: Session) -> list[dict]: orders = ( db.query(Order) .join(User, Order.user_id == User.id) # single JOIN: one database round-trip regardless of row count .options(contains_eager(Order.user)) # tell SQLAlchemy to hydrate Order.user from the JOIN result .all() ) return [{"order": o, "user": o.user} for o in orders] # The AI couldn't make this choice. It didn't know your table has 50,000 rows, # that this endpoint runs 10,000 times a day, or that your ORM supports eager loading. # That context lives in your head - not in the prompt. These are all forms of critical thinking. And they have always been the expensive part of engineering. AI made the cheap part free, which made the expensive part the only thing left. Decision Debt: The Framework Nobody Is Talking About Technical debt is visible. You can open the codebase, find the function written three years ago by someone who no longer works there, and see the problem. It’s in the file. It exists somewhere. Decision debt is invisible. It accumulates every time you accept an AI output without understanding why it’s structured the way it is, every time you ship a prompt-generated solution without tracing its failure modes, every time you let the model frame the problem because framing it yourself felt slower. The distinction matters because technical debt is linear. It slows you down proportionally to how much you have. Decision debt is exponential. It compounds silently until a production incident, a security audit, or a scaling problem surfaces everything at once — and by then, nobody remembers why the system was built this way, because “the AI wrote it” is not a reason. AI tools reduce code debt dramatically. You write less, ship faster, maintain less boilerplate. But if you use those tools without critical engagement, you trade code debt for decision debt at a ratio that is not in your favor. The code is shorter. The decisions behind it are murkier. Critical thinking for an AI engineer is, specifically, the practice of not accumulating decision debt. It looks like this: Before writing a prompt: write the problem statement in plain language first. If you can’t, you don’t understand the problem. Before shipping AI-generated code: read every line. Not skim — read. Can you explain what each block does and why? Before trusting AI-generated tests: write one adversarial test case yourself. If the AI’s test suite doesn’t catch what you just wrote, the test suite is incomplete. Before accepting an AI architecture suggestion: ask what happens when the third-party dependency it assumes is unavailable. If you don’t know, you haven’t finished the design. After receiving any AI output (especially for planning mode): ask the model what assumptions it made. Prompt: "What did you assume about X that I didn't explicitly state?" Then verify each assumption against your actual context — system constraints, scale, team size, latency budget, existing stack. The model will tell you; it just won't volunteer it. Is Coding Still Worth Learning? Yes. But the reason has changed completely. The old reason: to write code. AI handles most of that now, faster than you can type. The new reason: to read code well enough to know when AI’s code is wrong. This is not a subtle distinction. An engineer who cannot read and reason about code is an engineer who cannot validate AI output. They can prompt, iterate, and ship — until something breaks in a way they cannot diagnose because they never understood what the system was doing. The ADP/Stanford research is instructive here: the developers who did not lose their jobs in the 22–25 age group were the ones whose work required judgment over implementation — code review, architecture decisions, debugging novel failures. These are fundamentally reading and reasoning tasks. You don’t need to memorize syntax. You do need to understand what a for-loop inside an async function does to the event loop. You need to understand what an N+1 query looks like and why it matters at scale. You need to understand what a memory leak looks like in a long-running process. These are not things AI teaches you by generating them. They are things you learn by writing bad versions of them yourself, watching them fail, and understanding why. Learning to code is now less about producing code and more about building the mental model that lets you evaluate code critically. That mental model is not optional if you want to use AI tools safely. What Should AI Engineers Actually Do? Not “learn to think critically” — that is not actionable. Here is what it looks like in practice: Own the problem statement, always. Write a one-paragraph description of the problem before you write a single prompt. This forces you to confront ambiguity before it gets baked into generated code. If you can’t write the paragraph, the problem isn’t well-defined enough to implement. Read every line of AI-generated code before it merges. Not as a formality — as a genuine attempt to understand. If you hit a line you don’t understand, stop and figure it out. That confusion is decision debt trying to form. Write adversarial tests yourself. AI-generated tests optimize for the happy path because that’s what the prompt described. Write at least three edge cases yourself: empty input, malformed input, and the case most likely to fail under production load. Build failure literacy. Spend time learning what your system looks like when it breaks. Read postmortems. Study incidents. The engineers who are hardest to replace are the ones who can diagnose novel failures quickly — and that skill only comes from having seen failures and understood them. Make the architecture decisions before you prompt. Let AI implement within a structure you defined, not the other way around. If AI is suggesting the architecture, you are accumulating decision debt you will pay back later. Be skeptical of confident AI output. Models produce text with similar confidence whether they are right or wrong. The correct response to a well-written, plausible AI output is not relief — it’s the question: how would I know if this were wrong? If you can’t answer that, keep reading. The Job Is Still There. It Just Changed. The Bureau of Labor Statistics projects software developer employment to grow 15% by 2034 . That projection is not contradicted by the entry-level collapse — it describes a different kind of job. The growth is in engineers who can do what AI cannot: define the right problem, validate the output, reason about failure, and make trade-offs under uncertainty. These engineers are more valuable than they were before AI, because they are now responsible for a larger surface area of decisions. The contraction is in engineers whose value was in producing code volume. AI eliminated the scarcity that created that value. The 46% of code that AI generates is the easy 46%. The remaining 54% is not hard because AI hasn’t gotten there yet. It’s hard because it requires judgment — and judgment is not a feature you can add to a language model. It is built, slowly, by making decisions and living with their consequences. That is the job now. It always was, underneath the syntax. Sources: GitHub Copilot Statistics 2026 — quantumrun.com GitHub Copilot Statistics 2026 — affiliatebooster.com Developer Survey 2026: 73% of Engineering Teams Use AI Coding Tools Daily AI | Stack Overflow Developer Survey 2025 Young Software Developers Losing Jobs to AI, Stanford Study Confirms — FinalRoundAI Junior Developer Extinction: 67% Hiring Collapse Explained — byteiota.com Entry-Level Tech Hiring Falls 25% — hakia.com AI Shifts Expectations for Entry Level Jobs — IEEE Spectrum How AI Is Paying Off in the Tech Function — BCG Inside the AI Index: 12 Takeaways from the 2026 Report — Stanford HAI The state of vibe coding in 2026: Adoption won, now what? — Hashnode The rise — and fall — of the software developer — ADP Research Software Engineering Job Market Outlook for 2026 — FinalRoundAI 46% of Code Is Now AI-Generated. The Other 54% Is the Part That Will Get You Fired. was originally published in GoPenAI on Medium, where people are continuing the conversation by highlighting and responding to this story.