Skip to content
Frisco, Texas · Class of 2027

Deeptanshu Devatha

I build things, research questions, and teach. My research forecasts cognitive decline from how people speak. I run KidCode, a Python program that has taught 120+ students from print() to NLP. And I build software and machine learning, from a grocery-price app on the App Store to the app and models behind a smart insole.

Deeptanshu presenting at an outdoor picnic table while others sit in the foreground
Teaching a KidCode session.
A KidCode lesson slide titled What Is an If Statement
A KidCode lesson.
Chart of average MMSE scores across visits for control and dementia groups
Research: MMSE trajectories.
The ShopAI grocery search page showing prices across stores
ShopAI.
An X-Step team slide describing how the insole and app work
X-Step.

Writing

The research, India Outreach and ShopAI posts were written as the work happened. The KidCode posts for the 2024 and 2025 classes and for each project look back through the curriculum and the students' programs; the summer 2026 bootcamp posts were written right after each class.

KidCode is the Python program I've taught in Frisco since June 2024. Its posts here follow the program year by year: the first class of each year, every project class from print() to spaCy, and the 2026 bootcamp sessions I wrote up as they happened. The 2024 and 2025 class posts and the project posts look back on each class through the curriculum; the 2026 bootcamp posts were written as the classes happened. Project classes are listed in curriculum order. The KidCode page · The 20 projects

ResearchSeptember 2026

Where the Paper Stands

A short update on where the manuscript is now: submitted to Frontiers in Aging Neuroscience on August 4 and is now under peer review (submitted August 04, 2026), with no decision yet.

Read full post →
EngineeringAugust 2026

Shipping ShopAI: What Nine Grocery Retailers Taught Me About MVP Architecture

ShopAI is now live on the Apple App Store. Here's the architecture that actually shipped — a focused search, compare, and planning pipeline across nine live grocery retailers — next to the five-layer AI system it's designed to grow into, and an honest account of what got cut, why, and what it would take to build the rest.

Read full post →
ResearchAugust 2026

Submitting to Frontiers in Aging Neuroscience

The last few days before submission were less about adding anything and more about stating exactly what the results could support. On August 4, 2026, the manuscript went to Frontiers in Aging Neuroscience.

Read full post →
ResearchAugust 2026

Rerunning the Ablation for the Paper

The question the ablation answers is simple to state: how much of the model's accuracy comes from each kind of feature, and does speech add anything once the clinical history is already there? For the paper, I reran it with a design I could describe exactly, and the answer came out less tidy than it did in January.

Read full post →
ResearchJuly 2026

Checking the Draft Against the Code

Two weeks after finishing the first draft, I stopped editing sentences and checked something more basic: whether the paper described the model I had actually trained. It didn't, in a few places that mattered.

Read full post →
India OutreachJuly 2026

Eight Months, Thirty-Eight Classes

A look back at everything since that first shaky Zoom call in November: what's actually been covered, what's changed about how I teach, and why this is nowhere near finished.

Read full post →
KidCodeJuly 2026

Day 4: The Bug That Became the Best Part of Class

If statements this week, plus a room that felt different from the start: more returning faces, a few new ones, and more hands going up than usual. I forgot to plan an else statement and improvised with the example already on screen. Then a student's roller coaster exercise broke in three different ways at once, and fixing it together turned into the best debugging lesson we've had yet.

Read full post →
ResearchJuly 2026

First Full Draft Done

I finished assembling the first complete draft of the manuscript today — Introduction, Methods, Results, Discussion, and Conclusion, all in one document, for the first time since I started this project fourteen months ago. It's rough. There are sentences I'll rewrite, a couple of figures that need to be redone at higher resolution, and at least one Methods paragraph Joe already flagged as too dense. But it's a real draft of a real paper, built entirely from work I did and understood, and I want to take a minute to look back at how it got here before diving into revisions.

Read full post →
India OutreachJuly 2026

Angles, Averages, and a Review That Ran Long

A mixed review session that was supposed to take forty minutes and took the entire hour and then some, because every topic we touched pulled in a question from something covered months earlier. A good problem to have, and a real lesson about pacing reviews.

Read full post →
KidCodeJuly 2026

Day 3: What Happens When You Slow Down

After day two ran into more material than an hour could hold, I rebuilt the lesson around just four related ideas: booleans, comparison operators, and, and or. The slower pace changed the room: more volunteers, more students explaining things to each other, and a young student who worked out and vs. or on their own.

Read full post →
KidCodeJuly 2026

Day 2: When I Tried to Teach Too Much in One Hour

Booleans, if statements, for loops, and while loops: four big ideas for students who'd only just started learning to code. Attendance held steady from day one, but participation dropped as the pace outran the class. Here's what that taught me about the difference between covering material and actually teaching it.

Read full post →
India OutreachJuly 2026

Guess My Number

A full breakthrough session: everyone builds their own number guessing game from scratch, no template this time, combining nearly a year of scattered lessons into one program each kid can genuinely call their own.

Read full post →
India OutreachJune 2026

How Spread Out, Roughly

Standard deviation, introduced conceptually rather than with the formula, because nobody in this group needs to compute one by hand yet and everybody benefits from understanding what it's actually pointing at.

Read full post →
India OutreachJune 2026

Building a Calculator From Scratch

Past the mini project from the trip, into something a little bigger: a simple calculator program that pulls together nearly everything covered so far. Notes on lesson planning for a group that's outgrown single-concept sessions.

Read full post →
ResearchJune 2026

Wrestling With the Discussion Section

The Discussion section has taken longer to draft than Methods and Results combined, and I think that's because it's the section where I actually have to take a position rather than just report what happened. It's easy to describe a permutation importance table. It's harder to write a paragraph honestly explaining what it means that clinical features account for the overwhelming majority of predictive power, without either overselling the speech features' contribution or undermining the motivation for the entire project.

Read full post →
KidCodeJune 2026

The First Class of Our Online Python Bootcamp

Twelve students joined our first Google Meet coding session. We installed Python, covered data types, variables, and user input, and worked through two exercises together. By the end, everyone had working code. Here's how the first class went.

Read full post →
KidCodeJune 2026

Three Communities, One Meeting, and the Slow Work of Starting Something

I started a cross-communal coding initiative bringing together students from Avondale, The Heights at Westridge, and Ridgeview at Panther Creek. The first meeting had nobody knowing each other and experience levels ranging from zero to two-plus years. Here's what actually happened—and why it felt like the right kind of start.

Read full post →
India OutreachJune 2026

Back on the Other Side of the Screen

First Zoom call since returning from Hyderabad, and it felt stranger than I expected to be back behind a laptop camera with kids I'd spent two weeks sitting across a whiteboard from. A reflection on what changed and what, oddly, didn't.

Read full post →
India OutreachJune 2026

Goodbye for Now

The last in-person session before I fly home. A mini project, a full classroom of kids who feel entirely different to me than they did two weeks ago, and a goodbye I'd been quietly dreading since about day three of actually being here.

Read full post →
India OutreachJune 2026

Testing What Stuck

A low-stakes review day, in person, that turned out to be the best gauge yet of what's actually landed over seven months. Also: the funniest wrong answer of the entire series, courtesy of Naveen.

Read full post →
India OutreachJune 2026

Telugu, English, and the Space Between

The hardest day of the trip so far. A lesson that needed translating almost line by line, a power outage in the middle of it, and a real, unglamorous lesson in adapting on the fly rather than sticking to the plan.

Read full post →
KidCode2026 · Year 3, Classes 36–39 · a look back

Project 20: NLP Capstone

The Year 3 capstone is Project 20, the last numbered project in KidCode, across Days 36 to 39. Students pitch a project from a short list (Story Explorer, KidBot Pro, Privacy Shield Pro, Time Traveler's News Desk) or an approved idea of their own, then build it over four days, with a beta test, an NER audit, and "How It Works" and "Limitations" cards.

Read full post →
KidCode2026 · Year 3, Classes 31–32 · a look back

Project 19: KidBot Brain

KidBot Brain is Project 19, across Days 31 and 32 of Year 3: a rule-based chatbot. Students list intents (greeting, joke, weather), write spaCy Matcher patterns for each, use named entities to pull out the city in "what's the weather in Paris", and add a fallback reply for everything else.

Read full post →
KidCode2026 · Year 3, Classes 26–27 · a look back

Project 18: Privacy Shield

Privacy Shield is Project 18, across Days 26 and 27 of Year 3. Students plan which kinds of entity to hide and what the placeholders look like, then replace entities token by token with token.ent_iob_ and text_with_ws, so that a two-word name becomes one [PERSON], not two.

Read full post →
KidCode2026 · Year 3, Classes 24–25 · a look back

Project 17: Character Tracker

Character Tracker is Project 17, across Days 24 and 25 of Year 3, at the end of the week on named entities: doc.ents, entity labels like PERSON and GPE, and a day spent on why the model is sometimes wrong. Students run a story through spaCy chapter by chapter and count who and where appears.

Read full post →
KidCode2026 · Year 3, Classes 16–17 · a look back

Project 16: Auto Mad Libs

Auto Mad Libs is Project 16, across Days 16 and 17 of Year 3, and it brings back the very first KidCode project. This time spaCy finds the nouns, verbs, adjectives or names in a story, the program asks the player for replacements, and the story is rebuilt with token.text_with_ws so the spacing and punctuation survive.

Read full post →
KidCode2026 · Year 3, Classes 12–13 · a look back

Project 15: Keyword Detective

Keyword Detective is Project 15, across Days 12 and 13 of Year 3. Students tokenize a chapter, drop stop words and punctuation, lemmatize, count with Counter, chart the top keywords, and compare the result with what their Year 2 Book Detective finds on the same text.

Read full post →
KidCode2026 · Year 3, Class 10 · a look back

Project 14: Tokenizer Showdown

Tokenizer Showdown is Project 14, on Day 10 of Year 3, the NLP year. After a week on what a token is, token attributes, stop words and lemmas, students test three ways of splitting text on twenty tricky sentences (contractions, abbreviations, URLs, numbers, punctuation): Python's .split(), their own Year 2 cleaning code, and spaCy.

Read full post →
KidCodeJune 2026 · a look back

Class 1 of Year 3: Welcome Back, and What .split() Gets Wrong

Year 3 began on June 5, 2026. The first class reviews Years 1 and 2 (Python Olympics 2.0) and then returns to the Year 2 lesson that broke on purpose: Bug Safari, where splitting text on spaces and periods fails on sentences with abbreviations like "U.S.A." and contractions like "don't".

Read full post →
India OutreachMay 2026

Cricket Scores as a Statistics Lesson

A full group activity day: splitting into teams, using real cricket scores the kids tracked themselves, and watching mean, median, and mode stop being abstract vocabulary and start being something they argued about.

Read full post →
India OutreachMay 2026

The Quiet One Talks

Working one-on-one with a student who's said maybe fifty words to me total since November. In person, away from the group, something finally opened up, and it wasn't at all what I expected the reason to be.

Read full post →
India OutreachMay 2026

The Whiteboard Has No Undo Button

First real lesson taught in person, and my first genuine encounter with what "limited resources" means in practice: one chalkboard, a handful of chalk pieces, and no way to quietly delete a mistake the way Zoom's screen share always let me.

Read full post →
India OutreachMay 2026

Meeting Everyone, Finally

The day I stopped teaching through a screen. Landing in Hyderabad, arriving at the children's home in Kompally, and meeting, in person, nine kids I'd only ever known as small rectangles on a laptop. Nothing about it went quite how I'd pictured it, and all of it was better.

Read full post →
ResearchMay 2026

Drafting Methods and Results

Spent this stretch actually writing prose for the first time, starting with Methods and Results rather than the Introduction, on Joe's advice — apparently it's common to draft these sections first since they're the most mechanical and the least dependent on getting the framing exactly right, and writing them first tends to clarify what the Introduction and Discussion actually need to set up and explain.

Read full post →
India OutreachMay 2026

One Week Out

The last Zoom session before I fly to Hyderabad. Lists, quickly, and then most of the session spent on logistics, nerves, and a curriculum recap that made five and a half months feel a lot longer than it does week to week.

Read full post →
India OutreachMay 2026

How Likely, Really

Probability, taught through coin flips and dice rolls that turned into an actual experiment when theory and reality didn't quite match up. A good lesson in why expected results and actual results aren't always the same thing.

Read full post →
India OutreachMay 2026

Doing It Ten Times Without Typing It Ten Times

For loops, and the specific moment a program stopped feeling like a list of instructions and started feeling like a tool that could do work on its own. One of the cleanest breakthroughs of the whole series so far.

Read full post →
India OutreachApril 2026

The Most Common Answer

First real statistics session: mean, median, and mode, taught using something more concrete than a textbook data set. A question about which measure is "the right one" led somewhere I didn't expect.

Read full post →
India OutreachApril 2026

The Loop That Wouldn't Stop

While loops, introduced correctly and then immediately broken on purpose, because watching a program get stuck forever taught the lesson faster than any explanation of the word "condition" ever could.

Read full post →
India OutreachApril 2026

Booking the Ticket

A reflection session that turned into genuinely exciting news: I've booked a trip to Hyderabad in May, which means these classes are about to become, briefly, something other than a Zoom call for the first time since we started.

Read full post →
ResearchApril 2026

Starting to Write: Learning the Shape of a Research Paper

Almost a full year after I first started reading about domains, tasks, targets, and data, I sat down this week to start turning all of this into an actual manuscript, and immediately ran into a problem I hadn't anticipated: I don't really know how to write a research paper. I know how to run experiments, keep notes, and argue with myself about whether a result is real. I don't have much practice putting that into the specific, conventionalized shape a paper is supposed to take.

Read full post →
India OutreachApril 2026

Ifs Inside Ifs

Nested conditionals, the first topic this year that genuinely made the whole group slow down at the same time. A session about layers, about drawing boxes inside boxes, and about admitting a topic is hard rather than pretending it isn't.

Read full post →
India OutreachMarch 2026

Measuring a Kite String

Putting trigonometry to actual use, and picking an example rooted in something the kids already do for fun rather than a textbook word problem about ladders leaning against walls.

Read full post →
India OutreachMarch 2026

The Other Half of If

Else statements, which should have been a quick add-on to last time's lesson. Instead it turned into the funniest session in weeks, once Naveen decided to test the limits of what counts as a valid else block.

Read full post →
India OutreachMarch 2026

Triangles That Don't Sit Still

First real trigonometry session, and I underestimated how much of the difficulty isn't the math itself but the sheer number of new words arriving at once: hypotenuse, adjacent, opposite, sine, cosine, tangent, all in one sitting.

Read full post →
India OutreachMarch 2026

Teaching a Program to Choose

If statements, the first real branch point in anything we've built so far. I planned one explanation and ended up using three different versions of it before it actually landed for everyone, which is its own kind of lesson.

Read full post →
ResearchMarch 2026

Locking In the Final Model and a Held-Out Test Set

I set aside a patient-grouped held-out test set this week — a slice of patients that took no part whatsoever in feature selection, hyperparameter tuning, or fold-ensemble training. Everything up to this point has been evaluated purely through cross-validation, which is a reasonable way to make modeling decisions on a small dataset but leaves open the possibility that repeated tuning decisions, made by me, looking at CV scores over and over across months, have quietly overfit to the CV folds themselves. A genuinely untouched test set is the only way to check that.

Read full post →
India OutreachMarch 2026

What Is a Computer Actually Doing

A step back from syntax entirely: a session on basic computer literacy, because I realized a few weeks in that some of the group could write working code without a clear picture of what a file, a folder, or the computer itself was actually doing underneath it.

Read full post →
India OutreachFebruary 2026

True, False, and Everything Between

Booleans are supposed to be the simple topic, just two values. Tonight proved that simple doesn't mean quick, especially once comparison operators entered the mix and every question started with "wait, is that true or false."

Read full post →
India OutreachFebruary 2026

The Line Before the Graph

I wanted to connect algebra to something visual before we went any further, so tonight was about graphing intuition: what a line actually represents, and the moment a student realized a graph is just a picture of an equation, not a separate thing to memorize.

Read full post →
ResearchFebruary 2026

Ensembles, Noise Augmentation, and Rejecting a Long List of Ideas

Most of this stretch was incremental tuning, and in the spirit of documenting the real process rather than just the wins, I want to write down what didn't work as much as what did, because the list of rejected ideas ended up being long.

Read full post →
India OutreachFebruary 2026

Doing Math the Slow Way

Arithmetic operators should be the easiest session of the whole curriculum. It mostly was, until the modulo operator showed up and turned into the most requested topic of the night, for reasons I did not see coming.

Read full post →
India OutreachFebruary 2026

Numbers Aren't All the Same

A whole session eaten by screen-sharing problems before we even got to the actual lesson: integers versus floats, and why Python cares about the difference even when a person wouldn't.

Read full post →
India OutreachJanuary 2026

Greater Than, and Why It Matters

A session on inequalities turned into a session on keeping four different attention spans pointed at the same whiteboard-that-isn't-a-whiteboard. Notes on pacing, side conversations, and a number line that finally made things click.

Read full post →
ResearchJanuary 2026

Ablation Studies: How Much Do Speech Features Really Add?

Ran the ablation study I've been planning since November, comparing four feature configurations under identical patient-grouped 5-fold cross-validation: linguistic (handcrafted) features alone, SBERT embeddings alone, clinical features alone, and combinations of all three. The results settle the question from a few weeks ago, at least as far as this dataset can settle it.

Read full post →
India OutreachJanuary 2026

Strings Have Their Own Rules

Text seemed like the easy topic. It was not the easy topic. Indexing broke everyone's brain a little, myself included when I tried to explain why counting starts at zero without just saying "because it does."

Read full post →
India OutreachJanuary 2026

Two Months In

Back after the break, and instead of jumping straight into new material I spent this session taking stock: how many classes we've actually held, who's stuck around, and what I got wrong in the first stretch that I want to fix in the second.

Read full post →
India OutreachDecember 2025

Keeping Both Sides Equal

Our first real math session, and my first time teaching algebra to someone who has never seen an equals sign used the way I mean it. A session about balance, about why you do the same thing to both sides, and about switching gears entirely for a week.

Read full post →
ResearchDecember 2025

What's Actually Driving the Predictions? Feature Importance Deep Dive

With the entry-MMSE bug fixed and the rest of the clinical feature joins audited and confirmed correct, I ran a proper permutation-importance analysis across all five cross-validation folds. The method: for each fold, take the trained model, measure its validation R², then shuffle one feature column at a time (breaking that feature's relationship to the target while leaving everything else intact) and measure how much R² drops. A bigger drop means the model was relying on that feature more. Repeating the shuffle multiple times per fold and averaging cuts down on noise from any single unlucky shuffle.

Read full post →
India OutreachDecember 2025

Ask Me Anything: input()

I introduced input() and immediately regretted not thinking through what happens when you hand five kids a program that asks them anything they want to type. Mostly it was fine. One answer nearly broke the lesson plan in the best way.

Read full post →
India OutreachDecember 2025

Riddles Before Code

No laptop, no code, just twenty minutes of logic puzzles because I wanted to see how these kids think before I taught them one more rule to follow. It turned into one of the more fun sessions so far, and taught me something about who's actually leading in this class.

Read full post →
ResearchDecember 2025

A Silent Bug and the Biggest Single Improvement

While setting up the ablation study I'd planned last time, I went digging into why the "entry MMSE" feature — which I expected, based on everything I understand about this problem, to be by far the single most predictive feature available — wasn't behaving the way I expected in early feature-importance checks. It turned out to be almost inert, which didn't make sense.

Read full post →
India OutreachNovember 2025

What's Actually Inside a Variable

Variables sound simple until a nine-year-old asks why the box doesn't disappear after you read what's inside it. A session about labels, boxes, and the specific question that made me rethink how I explain assignment.

Read full post →
India OutreachNovember 2025

Installing Python Nine Times

Getting Python running on one shared laptop should have been simple. It was not simple. A walkthrough about installers, PATH variables, and the particular chaos of teaching software setup over a connection that drops every few minutes.

Read full post →
ResearchNovember 2025

Adding the Clinical Picture

With patient-grouped cross-validation now in place as an honest baseline, I finally did the thing I'd been putting off since August: incorporated the clinical metadata that comes bundled with the Pitt Corpus alongside the speech data. Specifically, I added each patient's entry MMSE (their cognitive score at their first recorded visit), Blessed Dementia Scale score (a measure of functional impairment in daily activities), CDR (Clinical Dementia Rating), NYU and Mattis battery scores, and their baseline diagnosis category (dementia, control, or otherwise).

Read full post →
India OutreachNovember 2025

The First Zoom Call

I've wanted to volunteer teach for a while, and it finally became real on a Sunday evening: five kids gathered around one shared laptop at a children's home in Kompally, and a Zoom link that took three tries to actually connect. Here's how it started.

Read full post →
ResearchOctober 2025

The Leakage Problem: Rebuilding Cross-Validation From Scratch

I flagged this concern a couple weeks ago and finally sat down to check it properly, and it turned out to be a real problem, not a false alarm. My cross-validation setup had been splitting the dataset at the level of individual samples (patient-visits), not at the level of patients. Since many patients in this cohort have multiple visits, that means it was entirely possible — and, once I checked, actually happening — for one visit from a given patient to land in the training fold while another visit from that same patient landed in the validation fold.

Read full post →
ResearchOctober 2025

Moving to LightGBM and Meeting Optuna

Switched the modeling backbone from Random Forest to LightGBM, a gradient-boosted decision tree library. The core difference from Random Forest is how the trees are built: Random Forest trains many trees independently on bootstrapped samples and averages them, while gradient boosting trains trees sequentially, where each new tree is fit to correct the errors (residuals) of the ensemble built so far. In principle, this lets the model capture more subtle feature interactions and generally squeezes more performance out of tabular data — at the cost of being more sensitive to hyperparameters and more prone to overfitting if you're not careful.

Read full post →
ResearchSeptember 2025

Building Out the Feature Set: Trajectories, Gaps, and History

With the Random Forest baseline in place, I spent this stretch trying to squeeze more signal out of the longitudinal structure of the data rather than adding entirely new feature families. The instinct behind this: I've been treating each visit somewhat independently, but the whole point of longitudinal data is that a patient's history should inform the prediction, not just their most recent snapshot.

Read full post →
ResearchAugust 2025

Back to Basics: Random Forests Beat the Neural Net

I trained a Random Forest regressor on the same feature set the LSTM had access to — handcrafted discourse features plus SBERT embeddings, flattened per patient rather than fed in as a sequence — and it outperformed the LSTM by a meaningful margin, landing around R² ≈ 0.4 on cross-validation. That's still far from a result I'd call strong, but it's a real improvement over the neural network's ~0.44 validation score once you account for the fact that the LSTM's number came from a single validation split while the Random Forest number is a cross-validated estimate, and the Random Forest got there with a small fraction of the tuning effort.

Read full post →
CompetitionsAug 27–30, 2025

Building ShopSmart: How Our Team Won First Place at the TechLit Hackathon

Over four intense days, our team built ShopSmart—an app that finds the cheapest, fastest, or most eco-friendly multi-store shopping route. We placed first out of all submissions, earning $100 and five .xyz domains. Click to read the full story.

TechLit Hackathon DevPost page showing ShopSmart as a winner
Read full post →
ResearchAugust 2025

First Modeling Attempt: The LSTM That Wasn't Ready

After weeks of feature engineering, I finally trained a model. Since the whole premise of this project involves patients with multiple visits over time, a sequence model felt like the obvious first choice — I built an LSTM that takes a patient's visit history as a sequence of feature vectors (handcrafted coherence features plus SBERT embeddings per visit) and predicts the MMSE score at a future visit.

Read full post →
ResearchAugust 2025

Coreference, Entity Tracking, and a Frustrating Virtual Environment

I lost most of two days this week to environment setup, which is not something I expected to be writing about in a research blog, but it felt worth documenting because it's such a normal part of doing this kind of work. Coreference resolution — figuring out that "she," "the woman," and "her" in a transcript all refer to the same entity — needs a fairly heavy transformer-based model, and getting a working coreference pipeline installed alongside the rest of my existing packages caused enough dependency conflicts that I ended up isolating it into its own virtual environment entirely, separate from the environment I use for everything else. Not elegant, but it works, and I'd rather have a slightly ugly setup than lose another day to it.

Read full post →
ResearchJuly 2025

Teaching a Model to "Read" Meaning: Adding SBERT

Handcrafted lexical-overlap features (how many words two consecutive sentences share) are a reasonable first pass at coherence, but they have an obvious blind spot: two sentences can be about the exact same thing while sharing almost no vocabulary at all ("the woman is drying dishes" vs. "she's wiping plates with a towel"). If I only measure literal word overlap, I'll systematically miss semantic coherence — coherence at the level of meaning rather than surface form.

Read full post →
ResearchJuly 2025

From Transcripts to Tables: First Preprocessing Pass

This week was almost entirely plumbing, and I mean that in the least glamorous sense possible: getting raw transcript files and a metadata spreadsheet into a single clean table I can actually build features on top of. It is not exciting to write about, but it's the part of research nobody tells you takes as long as it does.

Read full post →
ResearchJune 2025

Finding a Dataset: DementiaBank and the Pitt Corpus

Dataset search this week, and I think I found the right one: the DementiaBank Pitt Corpus. It's a collection of transcribed speech samples from participants completing a handful of standardized elicitation tasks — most notably the "Cookie Theft" picture description task, along with fluency, recall, and sentence-repetition tasks — collected from both a dementia group and a healthy control group. Critically for what I want to do, many participants were seen across multiple visits over time, with cognitive assessment scores (including MMSE) recorded at each visit.

Read full post →
ResearchJune 2025

Discourse Coherence 101

This week was pure reading, and it was the first time the project started to feel like it had real technical bones rather than just a motivating story. "Discourse coherence" turns out to be a whole subfield with its own vocabulary, and a lot of it maps surprisingly cleanly onto the kinds of breakdowns that get described anecdotally in dementia case studies.

Read full post →
KidCode2025 · Year 2, Classes 36–39 · a look back

Project 13: Book Detective

Book Detective is the Year 2 capstone, Project 13, across Days 36 to 39. Students plan and build a TextAnalyzer class that loads a book, cleans the text, counts words with Counter, reports statistics, tests itself with assert, and saves a chart. The week before, the lesson called Bug Safari feeds sentences full of abbreviations like "U.S.A." to this kind of code and logs every way it breaks.

Read full post →
KidCode2025 · Year 2, Class 28 · a look back

Project 12: Turtle Art Studio

Turtle Art Studio is Project 12, on Day 28 of Year 2, in the week on modules and libraries. Students use Python's built-in turtle module (turtle objects with methods like forward(), left() and begin_fill()) and write loops and functions that draw spirals, stars and a draw_flower() function.

Read full post →
KidCode2025 · Year 2, Classes 23–24 · a look back

Project 11: Monster Battle Arena

Monster Battle Arena is Project 11, across Days 23 and 24 of Year 2. A Monster parent class holds name, hit points and attack; FireMonster and WaterMonster inherit from it and override how damage works; a turn-based battle loop uses random damage and type advantages; and winners go into a saved Hall of Fame.

Read full post →
KidCode2025 · Year 2, Class 20 · a look back

Project 10: Virtual Pet Care

Virtual Pet Care is Project 10, on Day 20 of Year 2, at the end of the first week of object-oriented programming: class, __init__, self, methods, and __str__. Students design the pet on paper, then code its hunger and happiness meters, a daily menu, and saving to JSON.

Read full post →
KidCode2025 · Year 2, Class 15 · a look back

Project 9: Trivia Quiz 2.0

Trivia Quiz 2.0 is Project 9, on Day 15 of Year 2, and it is an upgrade of a Year 1 project on purpose. The questions move into a JSON file, high scores are saved to disk, input is protected with try/except, and every job gets its own function.

Read full post →
KidCode2025 · Year 2, Class 10 · a look back

Project 8: Message Vault

Message Vault is Project 8, on Day 10 of Year 2. It combines the cipher from Project 7 with the week's file lessons (open(), with, read, write and append modes) into a password-protected diary that survives after the program closes.

Read full post →
KidCode2025 · Year 2, Class 7 · a look back

Project 7: Secret Agent Cipher Lab

Secret Agent Cipher Lab opens Year 2 as Project 7, on Day 7. Students learn that letters are numbers (ord() and chr()), wrap around the alphabet with %, and write encrypt(text, shift) and decrypt(text, shift). Both functions are checked with assert tests.

Read full post →
KidCodeJune 2025 · a look back

Class 1 of Year 2: Welcome Back

Year 2 began on June 5, 2025. Its first class is a review of all of Year 1, run as a relay of short challenges the curriculum calls the Python Olympics, plus setting up a tidy project folder for a year of longer programs.

Read full post →
ResearchMay 2025

Narrowing In: Why Speech, and Why Dementia

I started meeting regularly with Joe Xiao, a PhD student who agreed to mentor me on this project, and that alone has changed the pace of things. Having someone to push back on half-formed ideas in real time is worth more than another week of solo reading. This week's conversations helped me go from "healthcare NLP, broadly" to something much more specific.

Read full post →
ResearchMay 2025

Starting From Zero: Learning How Research Problems Get Made

I've decided to spend this year trying to do real machine learning research, and I want to write about it as it happens rather than only after the fact. I have no formal research experience — until now, "research" for me has meant reading other people's papers, not writing my own. So the first few weeks of this project have mostly been about learning how research problems get made in the first place, not about writing any code.

Read full post →
KidCode2024 · Year 1, Classes 36–39 · a look back

Project 6: Escape the Haunted School

Escape the Haunted School is the Year 1 capstone, Project 6. It runs across Days 36 to 39: planning the map on paper, storing rooms in a dictionary, a game loop with go north-style commands, an inventory, locked doors, and a win condition, followed by a day of peer playtesting.

Read full post →
KidCode2024 · Year 1, Class 30 · a look back

Project 5: Trivia Quiz Show

Trivia Quiz Show is Project 5, on Day 30 of Year 1, at the end of the week on dictionaries. Questions and answers are stored as a list of dictionaries, answers are cleaned up with .lower() and .strip(), and the score prints at the end.

Read full post →
KidCode2024 · Year 1, Class 25 · a look back

Project 4: Wish List Manager

Wish List Manager is Project 4, on Day 25 of Year 1. It follows a week on lists: indexing, slicing, list methods, looping over lists, and turning sentences into word lists. The curriculum asks students to design the menu on paper first and then test it in pairs.

Read full post →
KidCode2024 · Year 1, Class 20 · a look back

Project 3: Guess the Number Deluxe

Guess the Number Deluxe is Project 3, on Day 20 of Year 1, at the end of the week on loops: while, for and range(), counters, break and continue.

Read full post →
KidCode2024 · Year 1, Class 15 · a look back

Project 2: Mystic Oracle

Mystic Oracle is Project 2, on Day 15 of Year 1. It closes a week about decisions (booleans, if/else, elif, and reading error messages) and introduces the first library students ever import: random.

Read full post →
KidCode2024 · Year 1, Class 6 · a look back

Project 1: Mad Libs Machine

Mad Libs Machine is the first complete program in KidCode. It comes on Day 6 of Year 1, after a week of print(), variables, arithmetic and input(), and it is the first time those pieces have to work together to make something another person would actually want to run.

Read full post →
KidCodeJune 2024 · a look back

Class 1: Welcome to Coding

KidCode's first class was on June 5, 2024. It was Day 1 of a 40-class Year 1 curriculum I wrote for students who had never programmed. The first class sets up everything that follows: what a program is, a working Python install, and a first line of code.

Read full post →