Idea

Programmer Productivity Without AI Coding Agents

A non-AI productivity stack for programmers: LSP-driven autocomplete, deterministic code generators, project-local snippets, and refactoring tools, with AI reserved for one-time setup.

Developer ToolsProductivityIDEOpen SourceWorkflow

Thesis

Use AI once to design your local productivity system, then code with AI off. The goal is not to replace programming judgment. The goal is to remove repeated typing, reduce navigation friction, standardize project structure, and make correct actions easier than improvised ones.

For an open-source setup, start with VSCodium, language servers, snippets, formatters, linters, tests, and deterministic code generators. Avoid relying on AI coding agents during normal work if your aim is to strengthen your own programming fluency.

Productivity Flow

flowchart TD
  A[Choose open-source IDE] --> B[VSCodium as default]
  B --> C[Enable language servers]
  C --> D[Autocompletion, go-to-definition, references]
  D --> E[Formatter and linter on save]
  E --> F[Project-local snippets]
  F --> G[Deterministic code generators]
  G --> H[Test runner inside IDE]
  H --> I[Debugger]
  I --> J[Language-aware refactoring]
  J --> K[Commit, review, improve snippets and templates]
  K --> F

1. Start With The Editor Workflow

The best first move is not a code generator and not a large snippet library. The first move is a stable editor workflow:

  • one main open-source IDE
  • language-aware autocomplete
  • formatter and linter on save
  • fast search
  • test runner
  • debugger
  • project-local snippets
  • deterministic generators for repeated structures

This gives you a productive baseline before adding clever automation.

2. Open-Source IDE Choice

Use VSCodium first.

VSCodium gives you the VS Code workflow while using freely licensed builds of the open-source VS Code codebase. It is practical for Python, notebooks, TypeScript, Go, Rust, Markdown, YAML, TOML, and mixed repositories.

Other useful options:

  • Neovim: excellent for keyboard-driven experts, but higher setup cost.
  • Eclipse Theia: open-source IDE platform, useful if you want a vendor-neutral desktop or cloud IDE base.
  • Language-specific editors can still be useful, but keep one primary daily environment.

3. Autocompletion

Autocompletion should come primarily from language servers, not snippets.

Language Server Protocol support gives the IDE structured knowledge of your project: imports, symbols, function signatures, references, hover docs, diagnostics, and code actions.

Recommended non-AI completion stack:

  • Python: Pyright or BasedPyright, plus Ruff for lint and import cleanup.
  • TypeScript: TypeScript language service.
  • Rust: rust-analyzer.
  • Go: gopls.
  • C/C++: clangd.

Snippets are still valuable, but they are for known patterns. LSP completion is for understanding the code you are already writing.

4. Refactoring

Refactoring is different from code generation.

Refactoring changes existing code while preserving behavior. It needs semantic understanding from the IDE or language server.

Useful refactoring actions:

  • rename symbol
  • find references
  • go to definition
  • organize imports
  • extract function
  • move file or module
  • inline variable/function
  • update call sites

For Python and TypeScript, VSCodium plus good language tooling is a strong default. Refactoring quality depends on the language server. Do not expect a generic code generator to refactor safely.

5. Project-Local Snippets

Snippets should be local to the repository whenever possible.

For a Python repo, use snippets for Python, notebooks, APIs, tests, and project-specific patterns. Do not mix TypeScript snippets into that repo. For a TypeScript repo, keep TypeScript and React snippets in that repo.

Rule of thumb:

Repo-specific workflow -> project snippets
Language-wide habit -> user/global snippets
Team convention -> committed project snippets
Personal habit -> global snippets

Good Python snippets:

  • requests.get(..., timeout=30) with raise_for_status()
  • SCB PxWeb GET query
  • SCB PxWeb POST query
  • JSON-stat2 to pandas DataFrame
  • notebook setup cell
  • unittest or pytest skeleton
  • argparse CLI skeleton

AI can help generate this snippet library once. After that, you can work with AI off and still benefit from the local automation.

6. Deterministic Code Generation Without AI

Code generation without AI is useful when the output has a stable contract. It is best for starting structures, schemas, clients, and repeated boilerplate.

Good uses:

  • project scaffolds
  • CLI command skeletons
  • API clients from OpenAPI
  • Pydantic models from JSON Schema or OpenAPI
  • database clients from schemas and SQL
  • React component skeletons
  • test file skeletons
  • protobuf/gRPC generated code

Bad uses:

  • generating unfamiliar business logic
  • replacing careful refactoring
  • copying large templates you do not understand
  • creating code that is not regenerated or maintained consistently

The key distinction:

Code generator -> creates new structured code
Refactoring tool -> safely changes existing code
Snippet -> inserts a known local pattern
LSP -> understands the current codebase
Formatter/linter -> enforces consistency
Tests -> prove behavior
Debugger -> explains runtime state

7. Code Generator Examples By Language

General project templates:

  • Cookiecutter
  • Copier

Python:

  • Cookiecutter
  • Copier
  • datamodel-code-generator for Pydantic models from OpenAPI, JSON Schema, JSON, YAML, CSV, Python dictionaries, or GraphQL schemas
  • OpenAPI Generator for API clients and servers

TypeScript:

  • Plop for project-specific micro-generators
  • Hygen for file and component generators
  • OpenAPI Generator for typed API clients
  • Prisma generate for database clients from Prisma schema
  • GraphQL Code Generator for typed GraphQL operations

Go:

  • sqlc for type-safe code from SQL
  • OpenAPI Generator
  • protobuf and buf
  • go generate

Rust:

  • cargo-generate for project templates
  • OpenAPI Generator
  • protobuf and tonic-build

SQL and databases:

  • sqlc
  • Prisma generate

API clients:

  • OpenAPI Generator

Data models:

  • datamodel-code-generator for Python/Pydantic

8. What AI Should Do

AI coding agents are useful for preparing the productivity system:

  • analyze repeated code in a repo
  • generate initial project-local snippets
  • suggest Makefile or task runner commands
  • draft templates
  • produce documentation
  • compare tool options

Then keep AI off during normal coding if the purpose is to practice and improve as a programmer.

This keeps the automation deterministic. Your editor helps you move faster, but you still read, design, test, and refactor the code yourself.

9. First-Week Setup

For a Python/Jupyter workflow:

  1. Install VSCodium.
  2. Configure Python language support.
  3. Add Pyright or BasedPyright.
  4. Add Ruff and enable format/lint on save.
  5. Add Jupyter support.
  6. Wire test running from the IDE.
  7. Add project-local snippets under .vscode/.
  8. Add Makefile or task commands for repeated workflows.
  9. Add only 10 to 20 snippets at first.
  10. Improve snippets only when repetition is proven.

For a TypeScript repo, repeat the same idea inside that repo with TypeScript snippets, TypeScript language service, formatter, tests, and project-specific generators.

10. Final Checklist

Use this as the standard productivity stack:

  • Open-source IDE: VSCodium
  • Autocompletion: LSP
  • Refactoring: language-aware IDE/LSP features
  • Snippets: project-local and version-controlled
  • Code generation: deterministic tools only
  • Formatting/linting: automatic on save
  • Tests: one-click or command-driven from IDE
  • Debugger: configured and used
  • Search: fast text search and symbol search
  • Feedback loop: improve snippets and templates after real repetition

Sources