PageSourceSearch

https://matthewrocklin.com/ai-beginners/

html matthewrocklin.com collected 2026-10-01 12:35:49 UTC 35,151 bytes, 1,360 lines download raw bytes

1
2<!doctype html>
3<html lang="en" class="no-js">
4  <head>
5    
6      <meta charset="utf-8">
7      <meta name="viewport" content="width=device-width,initial-scale=1">
8      
9        <meta name="description" content="Everyone feels behind on AI, but no one is ahead. That shared beginner status is what makes this moment so fun.">
10      
11      
12        <meta name="author" content="Matthew Rocklin">
13      
14      
15        <link rel="canonical" href="https://matthewrocklin.com/ai-beginners/">
16      
17      
18        <link rel="prev" href="../ai-zealotry/">
19      
20      
21        <link rel="next" href="../think/">
22      
23      
24        
25      
26      
27        <link rel="alternate" type="application/rss+xml" title="RSS feed" href="../feed_rss_created.xml">
28        <link rel="alternate" type="application/rss+xml" title="RSS feed of updated content" href="../feed_rss_updated.xml">
29      
30      <link rel="icon" href="../assets/favicon.ico">
31      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.0">
32    
33    
34      
35        <title>We're All Beginners Again - Matthew Rocklin</title>
36      
37    
38    
39      <link rel="stylesheet" href="../assets/stylesheets/main.618322db.min.css">
40      
41        
42        <link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
43      
44      
45
46
47    
48    
49      
50    
51    
52      
53        
54        
55        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
56        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
57        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
58      
59    
60    
61      <link rel="stylesheet" href="../stylesheets/custom.css">
62    
63    
63<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
63
64    
65      
66  
67
68
69  
70  
71
72<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-ZCP1VCVST7"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-ZCP1VCVST7",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-ZCP1VCVST7",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
72
73  
74    
74<script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
74
75  
76
77    
78    
79  
80<meta property="og:type" content="website" />
81<meta property="og:title" content="We're All Beginners Again - Matthew Rocklin" />
82<meta property="og:description" content="Everyone feels behind on AI, but no one is ahead. That shared beginner status is what makes this moment so fun." />
83<meta property="og:image" content="https://matthewrocklin.com/assets/images/social/ai-beginners.png" />
84<meta property="og:image:type" content="image/png" />
85<meta property="og:image:width" content="1200" />
86<meta property="og:image:height" content="630" />
87<meta property="og:url" content="https://matthewrocklin.com/ai-beginners/" />
88<meta property="twitter:card" content="summary_large_image" />
89<meta property="twitter:title" content="We're All Beginners Again - Matthew Rocklin" />
90<meta property="twitter:description" content="Everyone feels behind on AI, but no one is ahead. That shared beginner status is what makes this moment so fun." />
91<meta property="twitter:image" content="https://matthewrocklin.com/assets/images/social/ai-beginners.png" />
92</head>
93  
94  
95    
96    
97      
98    
99    
100    
101    
102    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="black">
103  
104    
105    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
106    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
107    <label class="md-overlay" for="__drawer"></label>
108    <div data-md-component="skip">
109      
110        
111        <a href="#were-all-beginners-again" class="md-skip">
112          Skip to content
113        </a>
114      
115    </div>
116    <div data-md-component="announce">
117      
118    </div>
119    
120    
121      <!-- Hidden header - keeps search and palette JS infrastructure -->
122<header class="md-header" data-md-component="header" style="position: absolute; height: 0; overflow: visible; visibility: visible;">
123  
124    
125      <form class="md-header__option" data-md-component="palette">
126  
127    
128    
129    
130    <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="black"  aria-label="Switch to dark mode"  type="radio" name="__palette" id="__palette_0">
131    
132      <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
133        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
134      </label>
135    
136  
137    
138    
139    
140    <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="white"  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
141    
142      <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
143        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
144      </label>
145    
146  
147</form>
148    
149  
150  
151    
151<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
151
152  
153  
154    
155    
156      <div class="md-search" data-md-component="search" role="dialog">
157  <label class="md-search__overlay" for="__search"></label>
158  <div class="md-search__inner" role="search">
159    <form class="md-search__form" name="search">
160      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
161      <label class="md-search__icon md-icon" for="__search">
162        
163        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
164        
165        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
166      </label>
167      <nav class="md-search__options" aria-label="Search">
168        
169        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
170          
171          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
172        </button>
173      </nav>
174      
175        <div class="md-search__suggest" data-md-component="search-suggest"></div>
176      
177    </form>
178    <div class="md-search__output">
179      <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
180        <div class="md-search-result" data-md-component="search-result">
181          <div class="md-search-result__meta">
182            Initializing search
183          </div>
184          <ol class="md-search-result__list" role="presentation"></ol>
185        </div>
186      </div>
187    </div>
188  </div>
189</div>
190    
191  
192</header>
193    
194    <div class="md-container" data-md-component="container">
195      
196<!-- Floating hamburger menu - only visible on mobile -->
197<label class="mobile-menu-button" for="__drawer">
198  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
199</label>
200
201      
202        
203          
204        
205      
206      <main class="md-main" data-md-component="main">
207        <div class="md-main__inner md-grid">
208          
209            
210              
211              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
212                <div class="md-sidebar__scrollwrap">
213                  <div class="md-sidebar__inner">
214                    
215
216
217
218<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
219  <!-- Sidebar header with name and controls -->
220  <div class="sidebar-header">
221    <a href=".." class="sidebar-title">
222      Matthew Rocklin
223    </a>
224    <div class="sidebar-controls">
225      <!-- Search -->
226      <label class="md-header__button md-icon sidebar-icon" for="__search" title="Search">
227        
228        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
229      </label>
230      <!-- Theme toggle -->
231      
232        
233          
234            
235              <label class="md-header__button md-icon sidebar-icon" title="Switch to dark mode" for="__palette_1">
236                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
237              </label>
238            
239          
240            
241              <label class="md-header__button md-icon sidebar-icon" title="Switch to light mode" for="__palette_0">
242                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
242<path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
243              </label>
244            
245          
246        
247      
248      <!-- RSS Feed -->
249      <a href="../feed.xml" class="sidebar-icon" title="RSS Feed">
250        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.18 15.64a2.18 2.18 0 0 1 2.18 2.18C8.36 19 7.38 20 6.18 20 5 20 4 19 4 17.82a2.18 2.18 0 0 1 2.18-2.18M4 4.44A15.56 15.56 0 0 1 19.56 20h-2.83A12.73 12.73 0 0 0 4 7.27zm0 5.66a9.9 9.9 0 0 1 9.9 9.9h-2.83A7.07 7.07 0 0 0 4 12.93z"/></svg>
251      </a>
252    </div>
253  </div>
254
255  <ul class="md-nav__list" data-md-scrollfix>
256    
257      
258      
259  
260  
261    
262  
263  
264  
265    
266    
267    
268    
269      
270        
271        
272      
273    
274    
275    <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
276      
277        
278        
279        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
280        
281          
282          <label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="">
283            
284  
285  
286  <span class="md-ellipsis">
287    
288  
289    AI
290  
291
292    
293  </span>
294  
295  
296
297            <span class="md-nav__icon md-icon"></span>
298          </label>
299        
300        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
301          <label class="md-nav__title" for="__nav_1">
302            <span class="md-nav__icon md-icon"></span>
303            
304  
305    AI
306  
307
308          </label>
309          <ul class="md-nav__list" data-md-scrollfix>
310            
311              
312                
313  
314  
315  
316  
317    <li class="md-nav__item">
318      <a href="../introducing-claude-chic/" class="md-nav__link">
319        
320  
321  
322  <span class="md-ellipsis">
323    
324  
325    Claude Chic
326  
327
328    
329  </span>
330  
331  
332
333      </a>
334    </li>
335  
336
337              
338            
339              
340                
341  
342  
343  
344  
345    <li class="md-nav__item">
346      <a href="../ai-zealotry/" class="md-nav__link">
347        
348  
349  
350  <span class="md-ellipsis">
351    
352  
353    AI Zealotry
354  
355
356    
357  </span>
358  
359  
360
361      </a>
362    </li>
363  
364
365              
366            
367              
368                
369  
370  
371    
372  
373  
374  
375    <li class="md-nav__item md-nav__item--active">
376      
377      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
378      
379      
380        
381      
382      
383        <label class="md-nav__link md-nav__link--active" for="__toc">
384          
385  
386  
387  <span class="md-ellipsis">
388    
389  
390    Beginning Again
391  
392
393    
394  </span>
395  
396  
397
398          <span class="md-nav__icon md-icon"></span>
399        </label>
400      
401      <a href="./" class="md-nav__link md-nav__link--active">
402        
403  
404  
405  <span class="md-ellipsis">
406    
407  
408    Beginning Again
409  
410
411    
412  </span>
413  
414  
415
416      </a>
417      
418        
419
420<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
421  
422  
423  
424    
425  
426  
427    <label class="md-nav__title" for="__toc">
428      <span class="md-nav__icon md-icon"></span>
429      Table of contents
430    </label>
431    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
432      
433        <li class="md-nav__item">
434  <a href="#beginning-again" class="md-nav__link">
435    <span class="md-ellipsis">
436      
437        Beginning again
438      
439    </span>
440  </a>
441  
442</li>
443      
444        <li class="md-nav__item">
445  <a href="#programming-feels-fun-again" class="md-nav__link">
446    <span class="md-ellipsis">
447      
448        Programming feels fun again
449      
450    </span>
451  </a>
452  
453</li>
454      
455        <li class="md-nav__item">
456  <a href="#learning-from-python" class="md-nav__link">
457    <span class="md-ellipsis">
458      
459        Learning from Python
460      
461    </span>
462  </a>
463  
464</li>
465      
466    </ul>
467  
468</nav>
469      
470    </li>
471  
472
473              
474            
475          </ul>
476        </nav>
477      
478    </li>
479  
480
481    
482      
483      
484  
485  
486  
487  
488    
489    
490    
491    
492      
493        
494        
495      
496    
497    
498    <li class="md-nav__item md-nav__item--section md-nav__item--nested">
499      
500        
501        
502          
503        
504        <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
505        
506          
507          <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
508            
509  
510  
511  <span class="md-ellipsis">
512    
513  
514    Workplace
515  
516
517    
518  </span>
519  
520  
521
522            <span class="md-nav__icon md-icon"></span>
523          </label>
524        
525        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
526          <label class="md-nav__title" for="__nav_2">
527            <span class="md-nav__icon md-icon"></span>
528            
529  
530    Workplace
531  
532
533          </label>
534          <ul class="md-nav__list" data-md-scrollfix>
535            
536              
537                
538  
539  
540  
541  
542    <li class="md-nav__item">
543      <a href="../think/" class="md-nav__link">
544        
545  
546  
547  <span class="md-ellipsis">
548    
549  
550    Think for Yourself
551  
552
553    
554  </span>
555  
556  
557
558      </a>
559    </li>
560  
561
562              
563            
564              
565                
566  
567  
568  
569  
570    <li class="md-nav__item">
571      <a href="../startup-best-practices/" class="md-nav__link">
572        
573  
574  
575  <span class="md-ellipsis">
576    
577  
578    Startup Advice
579  
580
581    
582  </span>
583  
584  
585
586      </a>
587    </li>
588  
589
590              
591            
592              
593                
594  
595  
596  
597  
598    <li class="md-nav__item">
599      <a href="../failure/" class="md-nav__link">
600        
601  
602  
603  <span class="md-ellipsis">
604    
605  
606    Failure
607  
608
609    
610  </span>
611  
612  
613
614      </a>
615    </li>
616  
617
618              
619            
620              
621                
622  
623  
624  
625  
626    <li class="md-nav__item">
627      <a href="../meetings/" class="md-nav__link">
628        
629  
630  
631  <span class="md-ellipsis">
632    
633  
634    Meetings
635  
636
637    
638  </span>
639  
640  
641
642      </a>
643    </li>
644  
645
646              
647            
648              
649                
650  
651  
652  
653  
654    <li class="md-nav__item">
655      <a href="../engineers-and-sales/" class="md-nav__link">
656        
657  
658  
659  <span class="md-ellipsis">
660    
661  
662    Listen to Sell
663  
664
665    
666  </span>
667  
668  
669
670      </a>
671    </li>
672  
673
674              
675            
676              
677                
678  
679  
680  
681  
682    <li class="md-nav__item">
683      <a href="../slack-github/" class="md-nav__link">
684        
685  
686  
687  <span class="md-ellipsis">
688    
689  
690    Why I Avoid Slack
691  
692
693    
694  </span>
695  
696  
697
698      </a>
699    </li>
700  
701
702              
703            
704              
705                
706  
707  
708  
709  
710    <li class="md-nav__item">
711      <a href="../write-short-blogposts/" class="md-nav__link">
712        
713  
714  
715  <span class="md-ellipsis">
716    
717  
718    Write Short Blogposts
719  
720
721    
722  </span>
723  
724  
725
726      </a>
727    </li>
728  
729
730              
731            
732          </ul>
733        </nav>
734      
735    </li>
736  
737
738    
739      
740      
741  
742  
743  
744  
745    
746    
747    
748    
749      
750        
751        
752      
753    
754    
755    <li class="md-nav__item md-nav__item--section md-nav__item--nested">
756      
757        
758        
759          
760        
761        <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
762        
763          
764          <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
765            
766  
767  
768  <span class="md-ellipsis">
769    
770  
771    Open Source
772  
773
774    
775  </span>
776  
777  
778
779            <span class="md-nav__icon md-icon"></span>
780          </label>
781        
782        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
783          <label class="md-nav__title" for="__nav_3">
784            <span class="md-nav__icon md-icon"></span>
785            
786  
787    Open Source
788  
789
790          </label>
791          <ul class="md-nav__list" data-md-scrollfix>
792            
793              
794                
795  
796  
797  
798  
799    <li class="md-nav__item">
800      <a href="../scipy-mission/" class="md-nav__link">
801        
802  
803  
804  <span class="md-ellipsis">
805    
806  
807    SciPy Mission
808  
809
810    
811  </span>
812  
813  
814
815      </a>
816    </li>
817  
818
819              
820            
821              
822                
823  
824  
825  
826  
827    <li class="md-nav__item">
828      <a href="../stability-bias/" class="md-nav__link">
829        
830  
831  
832  <span class="md-ellipsis">
833    
834  
835    Stability Bias
836  
837
838    
839  </span>
840  
841  
842
843      </a>
844    </li>
845  
846
847              
848            
849              
850                
851  
852  
853  
854  
855    <li class="md-nav__item">
856      <a href="../maintainer/" class="md-nav__link">
857        
858  
859  
860  <span class="md-ellipsis">
861    
862  
863    Maintainers
864  
865
866    
867  </span>
868  
869  
870
871      </a>
872    </li>
873  
874
875              
876            
877              
878                
879  
880  
881  
882  
883    <li class="md-nav__item">
884      <a href="../minimal-bug-reports/" class="md-nav__link">
885        
886  
887  
888  <span class="md-ellipsis">
889    
890  
891    Craft Bug Reports
892  
893
894    
895  </span>
896  
897  
898
899      </a>
900    </li>
901  
902
903              
904            
905              
906                
907  
908  
909  
910  
911    <li class="md-nav__item">
912      <a href="../avoid-indirection/" class="md-nav__link">
913        
914  
915  
916  <span class="md-ellipsis">
917    
918  
919    Avoid Indirection
920  
921
922    
923  </span>
924  
925  
926
927      </a>
928    </li>
929  
930
931              
932            
933              
934                
935  
936  
937  
938  
939    <li class="md-nav__item">
940      <a href="../write-dumb-code/" class="md-nav__link">
941        
942  
943  
944  <span class="md-ellipsis">
945    
946  
947    Write Dumb Code
948  
949
950    
951  </span>
952  
953  
954
955      </a>
956    </li>
957  
958
959              
960            
961          </ul>
962        </nav>
963      
964    </li>
965  
966
967    
968      
969      
970  
971  
972  
973  
974    
975    
976    
977    
978      
979        
980        
981      
982    
983    
984    <li class="md-nav__item md-nav__item--section md-nav__item--nested">
985      
986        
987        
988          
989        
990        <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
991        
992          
993          <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
994            
995  
996  
997  <span class="md-ellipsis">
998    
999  
1000    Personal
1001  
1002
1003    
1004  </span>
1005  
1006  
1007
1008            <span class="md-nav__icon md-icon"></span>
1009          </label>
1010        
1011        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
1012          <label class="md-nav__title" for="__nav_4">
1013            <span class="md-nav__icon md-icon"></span>
1014            
1015  
1016    Personal
1017  
1018
1019          </label>
1020          <ul class="md-nav__list" data-md-scrollfix>
1021            
1022              
1023                
1024  
1025  
1026  
1027  
1028    <li class="md-nav__item">
1029      <a href="../camino/" class="md-nav__link">
1030        
1031  
1032  
1033  <span class="md-ellipsis">
1034    
1035  
1036    I Walked across Spain
1037  
1038
1039    
1040  </span>
1041  
1042  
1043
1044      </a>
1045    </li>
1046  
1047
1048              
1049            
1050          </ul>
1051        </nav>
1052      
1053    </li>
1054  
1055
1056    
1057  </ul>
1058
1059  <!-- Recent Articles - uses same nav markup for consistent styling -->
1060  
1061  <ul class="md-nav__list recent-articles-section" data-md-scrollfix>
1062    <li class="md-nav__item md-nav__item--section">
1063      <span class="md-nav__link">Recent</span>
1064      <ul class="md-nav__list">
1065        
1066        <li class="md-nav__item">
1067          <a href="../frisky-xarray/" class="md-nav__link">Frisky and Xarray Example</a>
1068        </li>
1069        
1070        <li class="md-nav__item">
1071          <a href="../ai-2026-06/" class="md-nav__link">Updated Thoughts on AI</a>
1072        </li>
1073        
1074        <li class="md-nav__item">
1075          <a href="../stepping-back/" class="md-nav__link">Stepping Back</a>
1076        </li>
1077        
1078        <li class="md-nav__item">
1079          <a href="../winner-take-all/" class="md-nav__link">Saying Goodbye to Winner-take-all Software</a>
1080        </li>
1081        
1082        <li class="md-nav__item">
1083          <a href="../claude-chic-week-2/" class="md-nav__link">Claude Chic: Week 2</a>
1084        </li>
1085        
1086        <li class="md-nav__item">
1087          <a href="../articles/" class="md-nav__link more-articles-link">… More articles</a>
1088        </li>
1089      </ul>
1090    </li>
1091  </ul>
1092  
1093</nav>
1094                  </div>
1095                </div>
1096              </div>
1097            
1098            
1099              
1100              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1101                <div class="md-sidebar__scrollwrap">
1102                  <div class="md-sidebar__inner">
1103                    
1104
1105<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1106  
1107  
1108  
1109    
1110  
1111  
1112    <label class="md-nav__title" for="__toc">
1113      <span class="md-nav__icon md-icon"></span>
1114      Table of contents
1115    </label>
1116    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1117      
1118        <li class="md-nav__item">
1119  <a href="#beginning-again" class="md-nav__link">
1120    <span class="md-ellipsis">
1121      
1122        Beginning again
1123      
1124    </span>
1125  </a>
1126  
1127</li>
1128      
1129        <li class="md-nav__item">
1130  <a href="#programming-feels-fun-again" class="md-nav__link">
1131    <span class="md-ellipsis">
1132      
1133        Programming feels fun again
1134      
1135    </span>
1136  </a>
1137  
1138</li>
1139      
1140        <li class="md-nav__item">
1141  <a href="#learning-from-python" class="md-nav__link">
1142    <span class="md-ellipsis">
1143      
1144        Learning from Python
1145      
1146    </span>
1147  </a>
1148  
1149</li>
1150      
1151    </ul>
1152  
1153</nav>
1154                  </div>
1155                </div>
1156              </div>
1157            
1158          
1159          
1160            <div class="md-content" data-md-component="content">
1161              
1162              <article class="md-content__inner md-typeset">
1163                
1164
1165                  
1166
1167
1168
1169<h1 id="were-all-beginners-again">We're all Beginners Again<a class="headerlink" href="#were-all-beginners-again" title="Permanent link">&para;</a></h1>
1170<p>While interviewing early adopters of <a href="/introducing-claude-chic">Claude Chic</a> I heard two common refrains:</p>
1171<ul>
1172<li>"Oh, I'm not very advanced with AI"</li>
1173<li>"Programming feels fun again!"</li>
1174</ul>
1175<p>These feelings were universal.  I thought they'd be good to share out loud.</p>
1176<h2 id="beginning-again">Beginning again<a class="headerlink" href="#beginning-again" title="Permanent link">&para;</a></h2>
1177<p>Everyone was anxious sharing how they worked with AI, afraid of being judged for not being advanced enough.  Here's the thing:</p>
1178<blockquote>
1179<p>No one is very advanced with AI</p>
1180</blockquote>
1181<p>No one I spoke with was using multi-agent swarms or GasTown or whatever.  But everyone <em>was</em> doing something different.  The space is wide-open and no one has the answer yet.  This should make us fearless.</p>
1182<p>We're all beginners again, and that's what makes it fun.  It's like being twenty years old at university, the world full of possibilities.</p>
1183<h2 id="programming-feels-fun-again">Programming feels fun again<a class="headerlink" href="#programming-feels-fun-again" title="Permanent link">&para;</a></h2>
1184<p>Everyone is in good spirits, despite the anxiety.</p>
1185<p>To me this feels like Python did 15 years ago when there was so much to build and so much new ground to cover.  We were in a green field inventing the future against all odds, rather than maintaining legacy software under an increasing weight of success.</p>
1186<p>Today I see people working on personal side-projects, goofing around, playing.</p>
1187<p>I'm reminded of these quotes from director Francis Ford Coppola during the making of his recent film/boondoggle, Megalopolis</p>
1188<blockquote>
1189<p>"You know why I'm doing this?  I have money, I already have fame, I already have Oscars."<br/>
1190"What do I get that I want?  Tell me."</p>
1191<p>"Fun!  I wanna have Fun."</p>
1192</blockquote>
1193<p>and</p>
1194<blockquote>
1195<p>"All the great things in life come from play, never from work, never from toil".</p>
1196<p>"Toil gives you nothing. Play gives you everything."</p>
1197</blockquote>
1198<p>We're having fun again, and that's fantastic.</p>
1199<h2 id="learning-from-python">Learning from Python<a class="headerlink" href="#learning-from-python" title="Permanent link">&para;</a></h2>
1200<p>I had the privilege to experience the growth of the Python data ecosystem from the inside, before it became cool.  The way I feel now reminds me of how we felt then.</p>
1201<p>Not everything is the same though.  I think we could improve our culture of communication.  What I'd like to see more of:</p>
1202<ul>
1203<li>More casual sharing of <em>how</em> we work (not just the tools or products we've built)</li>
1204<li>More questioning and critical thinking about popular directions (are multi-agent swarms really the way of the future?)</li>
1205<li>More chats over beers without an agenda</li>
1206</ul>
1207<p>
1207With COVID and remote work we've gotten too efficient with our communication.  We need more un-conferences and hallway tracks—the unstructured spaces where real ideas emerge.</p>
1208
1209
1210
1211
1212
1213
1214
1215  
1216  
1217
1218
1219
1220  
1221
1222
1223
1224
1225                
1226
1227<script>
1228(function() {
1229  var date = document.createElement('div');
1230  date.className = 'article-date';
1231  date.textContent = 'Written on 2026-01-27';
1232  var h1 = document.querySelector('.md-content__inner h1');
1233  if (h1) h1.after(date);
1234})();
1235</script>
1235
1236
1237<h2>Comments</h2>
1238<script>
1239(function() {
1240  function getGiscusTheme() {
1241    var palette = document.body.getAttribute('data-md-color-scheme');
1242    return palette === 'slate' ? 'dark' : 'light';
1243  }
1244
1245  // Create giscus script with current theme
1246  var script = document.createElement('script');
1247  script.src = 'https://giscus.app/client.js';
1248  script.setAttribute('data-repo', 'mrocklin/mrocklin.github.io');
1249  script.setAttribute('data-repo-id', 'MDEwOlJlcG9zaXRvcnkzNDAzMTEz');
1250  script.setAttribute('data-category', 'Giscus');
1251  script.setAttribute('data-category-id', 'DIC_kwDOADPtac4CTY1R');
1252  script.setAttribute('data-mapping', 'pathname');
1253  script.setAttribute('data-strict', '0');
1254  script.setAttribute('data-reactions-enabled', '1');
1255  script.setAttribute('data-emit-metadata', '0');
1256  script.setAttribute('data-input-position', 'bottom');
1257  script.setAttribute('data-theme', getGiscusTheme());
1258  script.setAttribute('data-lang', 'en');
1259  script.setAttribute('crossorigin', 'anonymous');
1260  script.async = true;
1261  document.currentScript.parentNode.appendChild(script);
1262
1263  // Update giscus when theme changes
1264  var observer = new MutationObserver(function(mutations) {
1265    var iframe = document.querySelector('iframe.giscus-frame');
1266    if (iframe) {
1267      iframe.contentWindow.postMessage(
1268        { giscus: { setConfig: { theme: getGiscusTheme() } } },
1269        'https://giscus.app'
1270      );
1271    }
1272  });
1273  observer.observe(document.body, { attributes: true, attributeFilter: ['data-md-color-scheme'] });
1274})();
1275</script>
1275
1276
1277
1278              </article>
1279            </div>
1280          
1281          
1282<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
1282
1283        </div>
1284        
1285      </main>
1286      
1287        <footer class="md-footer">
1288  
1289  <div class="md-footer-meta md-typeset">
1290    <div class="md-footer-meta__inner md-grid">
1291      <div class="md-copyright">
1292  
1293  
1294    Made with
1295    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
1296      Material for MkDocs
1297    </a>
1298  
1299</div>
1300      
1301        
1302<div class="md-social">
1303  
1304    
1305    
1306    
1307    
1308      
1309      
1310    
1311    <a href="https://github.com/mrocklin" target="_blank" rel="noopener" title="github.com" class="md-social__link">
1312      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
1313    </a>
1314  
1315    
1316    
1317      
1318    
1319    
1320    
1321      
1322      
1323    
1324    <a href="https://fosstodon.org/@mrocklin" target="_blank" rel="noopener me" title="fosstodon.org" class="md-social__link">
1325      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54-.6-4.6-.9-9.3-.9-13.9 85.6 20.9 158.7 9.1 178.7 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6V190.1c0-49.7-64-51.6-64 6.9v62.5H201V197c0-58.5-64-56.6-64-6.9v114.2H90.3c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175"/></svg>
1326    </a>
1327  
1328    
1329    
1330    
1331    
1332    <a href="/feed.xml" target="_blank" rel="noopener" title="" class="md-social__link">
1333      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.18 15.64a2.18 2.18 0 0 1 2.18 2.18C8.36 19 7.38 20 6.18 20 5 20 4 19 4 17.82a2.18 2.18 0 0 1 2.18-2.18M4 4.44A15.56 15.56 0 0 1 19.56 20h-2.83A12.73 12.73 0 0 0 4 7.27zm0 5.66a9.9 9.9 0 0 1 9.9 9.9h-2.83A7.07 7.07 0 0 0 4 12.93z"/></svg>
1334    </a>
1335  
1336</div>
1337      
1338    </div>
1339  </div>
1340</footer>
1341      
1342    </div>
1343    <div class="md-dialog" data-md-component="dialog">
1344      <div class="md-dialog__inner md-typeset"></div>
1345    </div>
1346    
1347    
1348    
1349      
1350      
1351      
1351<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.instant", "navigation.tracking", "navigation.sections", "navigation.expand", "search.suggest", "search.highlight"], "search": "../assets/javascripts/workers/search.7a47a382.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
1351
1352    
1353    
1354      
1354<script src="../assets/javascripts/bundle.e71a0d61.min.js"></script>
1354
1355      
1356        
1356<script src="../javascripts/shortcuts.js"></script>
1356
1357      
1358    
1359  </body>
1360</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.